Пятница, 29 Ноября 2024, 03:43

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Хуки клавиатуры 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
старожил
Сейчас нет на сайте
Спасибо всем. Посмотрел я, поискал ещё.. нашёл код глобального хука, но при нём у меня комп зависает на несколько секунд.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг