|
Перехват нажатия кнопки на Windows Mobile
|
|||
---|---|---|---|
#18+
Уважаемые форумчане! Пишу приложения для Windows Mobile 6.1. Задача следующая. Есть несколько приложений работающих в полноэкранном режиме. Между ними нужно переключаться. Пробавал программку AltTab, но она не подходит поскольку у меня не простой смартфон, а производственный терминал Моторолла. На нём просто нет HardwareButton, а потому навестить АльТаб не получается... Думаю есть какая-то хитрость чтобы по нажатию определённой клавиши переключаться между приложениями. Выход вижу в следующем: посадить в фоновом режиме что-то типа клавиатурного шпиона и при нажатии допустим Сtrl делать Process.Start(AltTab) - это переключит между программами. Но вот вопрос... Как на ВинМобайл ловить это всё... Может кто сталкивался? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2013, 07:51 |
|
Перехват нажатия кнопки на Windows Mobile
|
|||
---|---|---|---|
#18+
Путем исследования MSDN таки нашел выход из ситуации. Написал код, на WinForm работает 500%. а вот на мобайле пишет ошибку.. Может кто подскажет от чего? привожу код класса на глобальный хук клавиатуры ругается на : // Ставим хук public static void InstallHook() { if (IsHookInstalled) return; hModule = Marshal.GetHINSTANCE(AppDomain.CurrentDomain.GetAssemblies()[0].GetModules()[0]); hookDel = new API.HookProc(HookProcFunction); if (localHook) hHook = API.SetWindowsHookEx(API.HookType.WH_KEYBOARD, hookDel, IntPtr.Zero, AppDomain.GetCurrentThreadId()); else hHook = API.SetWindowsHookEx(API.HookType.WH_KEYBOARD_LL, hookDel, hModule, 0); if (hHook != IntPtr.Zero) hookInstall = true; else throw new SystemException("Не возможно сделать ХУК"); } говорит мол нет метода для AppDomain который GetAssemblies. Хотя на МСДН уверяют что есть. Кто знает может как ещё получить тек.процесс их Thread'а? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2013, 04:26 |
|
Перехват нажатия кнопки на Windows Mobile
|
|||
---|---|---|---|
#18+
Сам спросил - сам ответил) Проблему решил. Написал глобальные горячие клавиши. По их нажатию вызываю процессы. Кому интересно могу выложить код ... |
|||
:
Нравится:
Не нравится:
|
|||
14.08.2013, 09:59 |
|
Перехват нажатия кнопки на Windows Mobile
|
|||
---|---|---|---|
#18+
Vitell, Доброго времени суток. Не могли бы Вы выложить код или выслать на email(salientwisper@mail.ru). Уже мозг себе проел пытаясь прикрутить Хук на WinMobile под .Net. В частности необходимо блокировать часть кнопок клавиатуры. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2013, 09:27 |
|
Перехват нажатия кнопки на Windows Mobile
|
|||
---|---|---|---|
#18+
salientwisper, вот класс который отвечает за перехват. Комменты не писал, т.к. там и писать нечего. public class HotKeys { #region dll imports [DllImport("coredll.dll")] private static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc); [DllImport("coredll.dll")] private static extern bool UnregisterHotKey(IntPtr hWnd, int id); #endregion public enum KeyModifiers { None = 0, Alt = 1, Control = 2, Shift = 4, Windows = 8, Modkeyup = 0x1000 } public delegate void KeyPressedEventHandler(Keys key); public event KeyPressedEventHandler KeyPressed; private readonly HotKeyMessageWindow wnd; public HotKeys() { wnd = new HotKeyMessageWindow(this); } public void Register(Keys Key) { RegisterHotKey(wnd.Hwnd, (int)Key, 0, (int)Key); } public void Register(Keys Key, KeyModifiers Modifier) { RegisterHotKey(wnd.Hwnd, (int)Key, (int)Modifier, (int)Key); } public void UnRegister(Keys Key) { UnregisterHotKey(wnd.Hwnd, (int)Key); } public void OnKeyPressed(Keys key) { if (KeyPressed != null) { KeyPressed(key); } } private class HotKeyMessageWindow : MessageWindow { private const int WM_HOTKEY = 0x312; private readonly HotKeys parent; public HotKeyMessageWindow(HotKeys h) { parent = h; } protected override void WndProc(ref Message msg) { switch (msg.Msg) { case WM_HOTKEY: { int keyNum = msg.WParam.ToInt32(); Keys key = (Keys)keyNum; parent.OnKeyPressed(key); break; } default: { base.WndProc(ref msg); break; } } } } } потом в Program регишь клавиши: hotKeys = new HotKeys(); hotKeys.Register(Keys.F14); hotKeys.KeyPressed += hotKeys_KeyPressed; дальше там же пишешь сам отлов примерно так: private static void hotKeys_KeyPressed(Keys key) { switch (key) { case Keys.F14: { //тут обработку break; } default: break; } } в данном примере работает по нажатии функционаольной клавише F14 на терминалах Моторолла - это зелёная кнопка) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2013, 11:32 |
|
|
start [/forum/topic.php?fid=20&tid=1404001]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
35ms |
get tp. blocked users: |
2ms |
others: | 349ms |
total: | 486ms |
0 / 0 |