Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Перехват нажатия кнопки на Windows Mobile / 5 сообщений из 5, страница 1 из 1
08.08.2013, 07:51
    #38359070
Vitell
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перехват нажатия кнопки на Windows Mobile
Уважаемые форумчане!
Пишу приложения для Windows Mobile 6.1. Задача следующая. Есть несколько приложений работающих в полноэкранном режиме. Между ними нужно переключаться. Пробавал программку AltTab, но она не подходит поскольку у меня не простой смартфон, а производственный терминал Моторолла. На нём просто нет HardwareButton, а потому навестить АльТаб не получается...
Думаю есть какая-то хитрость чтобы по нажатию определённой клавиши переключаться между приложениями. Выход вижу в следующем: посадить в фоновом режиме что-то типа клавиатурного шпиона и при нажатии допустим Сtrl делать Process.Start(AltTab) - это переключит между программами. Но вот вопрос... Как на ВинМобайл ловить это всё...
Может кто сталкивался?
...
Рейтинг: 0 / 0
14.08.2013, 04:26
    #38365541
Vitell
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перехват нажатия кнопки на Windows Mobile
Путем исследования 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'а?
...
Рейтинг: 0 / 0
14.08.2013, 09:59
    #38365655
Vitell
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перехват нажатия кнопки на Windows Mobile
Сам спросил - сам ответил)
Проблему решил. Написал глобальные горячие клавиши. По их нажатию вызываю процессы.
Кому интересно могу выложить код
...
Рейтинг: 0 / 0
19.09.2013, 09:27
    #38401024
salientwisper
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перехват нажатия кнопки на Windows Mobile
Vitell,

Доброго времени суток. Не могли бы Вы выложить код или выслать на email(salientwisper@mail.ru).
Уже мозг себе проел пытаясь прикрутить Хук на WinMobile под .Net. В частности необходимо блокировать часть кнопок клавиатуры.
...
Рейтинг: 0 / 0
23.09.2013, 11:32
    #38404473
Vitell
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перехват нажатия кнопки на Windows Mobile
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 на терминалах Моторолла - это зелёная кнопка)
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Перехват нажатия кнопки на Windows Mobile / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]