Хуки клавиатуры C# или как обрабатывать события в фоне
|
|
romgerman | Дата: Четверг, 15 Августа 2013, 20:18 | Сообщение # 1 |
старожил
Сейчас нет на сайте
| Приветствую всех. Собственно, вопрос в следующем: Как отлавливать нажатия клавиш клавиатуры, когда приложение свёрнуто (неактивно окно приложения тоже).
Я читал форумы по этому поводу, смотрел примеры кода хуков для клавиатуры, но так и не понял, как ими пользоваться.
ВАЖНО: Я нашёл на хабре статью о программе, которая показывает текущую раскладку клавиатуры около курсора. Там было написано про использование хука в программе без импорта DLL. Собственно код той программы.
Объясните глупому человеку, что куда писать и как обрабатывать события с хуками. Заранее спасибо всем, кто ответит по теме и не по теме.
Добавлено (15.08.2013, 20:18) --------------------------------------------- Тема была отредактирована, дабы не создавать over9000 тем, тем более я нашёл ответ на предыдущий вопрос по поводу HTTP Responses.
Сообщение отредактировал romgerman - Четверг, 15 Августа 2013, 20:20 |
|
| |
Pocifik | Дата: Четверг, 15 Августа 2013, 20:56 | Сообщение # 2 |
участник
Сейчас нет на сайте
| Смысл кидать код на C++, когда тебе нужен C#?
В общем импортируешь user32 длл "[DllImport("user32.dll")]", строчкой ниже пишешь структуру метода для регистрации перехвата клавиши и повторяешь процедуру для обратного действия.
Пример кода Код [DllImport("user32.dll")] static extern IntPtr SetWindowsHookEx(int idHook, HookHandlerDelegate lpfn, IntPtr hMod, uint dwThreadId); [DllImport("user32.dll")] static extern bool UnhookWindowsHookEx(IntPtr hhk);
Так же существует "static extern short GetKeyState(int keyCode)" для проверки состояния клавиши.
|
|
| |
romgerman | Дата: Четверг, 15 Августа 2013, 21:29 | Сообщение # 3 |
старожил
Сейчас нет на сайте
| Pocifik, это я понял. Но я не понимаю, как узнать, что нажата именно та клавиша, которая шужна и выполнить действие. Мне нужно определить нажата-ли клавиша print screen. Добавлено (15.08.2013, 21:29) --------------------------------------------- Что-то крутиться в голове, но понять не могу.
|
|
| |
Izaron | Дата: Четверг, 15 Августа 2013, 21:37 | Сообщение # 4 |
Rammstein forever
Сейчас нет на сайте
| На С++ есть такая функция, GetAsyncKeyState(), погугли аналог этой функции (если такой же функции нет в шарпе) либо создай dll с оберткой над этой функцией на С++ и используй ее в С#)
Добавлено (15.08.2013, 21:36) --------------------------------------------- А, Pocific правильно сказал, есть такая функция в user32.dll
Добавлено (15.08.2013, 21:37) --------------------------------------------- Код [DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)] public static extern short GetAsyncKeyState(int vkey); http://msdn.microsoft.com/en-us/library/windows/desktop/ms646293(v=vs.85).aspx
Сообщение отредактировал Izaron - Четверг, 15 Августа 2013, 21:40 |
|
| |
romgerman | Дата: Четверг, 15 Августа 2013, 23:55 | Сообщение # 5 |
старожил
Сейчас нет на сайте
| Спасибо всем. Посмотрел я, поискал ещё.. нашёл код глобального хука, но при нём у меня комп зависает на несколько секунд.
|
|
| |