Ребят, может кто то сталкивался с такой проблемой: реализовал и глобальные клавиши (как видите выше код). Загвоздка в том, чтобы теперь пользователь непосредственно смог реализовать и назначить их на свой вкус. т.е. есть у меня контрол специальный, нажимаешь там нужные клавиши и он выдает например такую строку: Control, Shift + W. а код установки:
| Код | public const int MOD_ALT = 0x1; public const int MOD_CONTROL = 0x2; public const int MOD_SHIFT = 0x4; public const int MOD_WIN = 0x8; [DllImport("User32.dll")] public static extern bool RegisterHotKey(IntPtr hWnd, int id, uint fsModifiers, uint vk);
|
Проблема в обращении к функции RegisterHotKey. Например, я преобразовал Control, Shift + W, в "MOD_CONTROL | MOD_SHIFT", т.е как бы все выглядит нормально:
| Код | bool state = RegisterHotKey(this.Handle, atom, "MOD_ALT | MOD_SHIFT", (uint)Keys.W);
|
Но как видите это строка в итоге, а он конечно же будет ругаться. Преобразование в uint тоже ни чего хорошего не дает - ругается (прога просто при запуске выдает сразу же ошибку, а компилятор говорит все ОК) Так вот, вопрос: можно ли как то реализовать это меньшими силами (не писать полностью функцию обработки всяких событий - сейчас пример пирведу):
| Код | public void hotkey() { str = hkControl1.Text; strarray = str.Split(new char(), ','); r = strarray.Length; if (r==1) { strarray = null; strarray = str.Split(new char(), ' '); switch (strarray[0]) { case "Shift": m[0] = 0x4; break; case "Control": m[0] = 0x2; break; case "Alt": m[0] = 0x1; break; } }
|
а использовать какие ни будь встроенные возможности. Например, в php и ActionScript 2.0 (кто не слышал этого - язык Flash) есть функция eval() которая дает это сделать. Есть ли в C# что либо подобное? |