Крючок для клавиатуры низкого уровня в C # - PullRequest
1 голос
/ 28 июля 2011

Я делаю модуль, который будет управлять и перемещать устройство панорамирования и наклона через КЛАВИАТУРУ.Модуль является C # .DLL и загружается динамически через другой модуль, используя отражение.Модуль НЕ МОЖЕТ иметь какую-либо форму (видимую).

Я использую код, который я нашел на http://blogs.msdn.com/b/toub/archive/2006/05/03/589423.aspx для крюка низкого уровня kb.Единственная проблема заключается в том, что он использует приложение consol и вызывает Application.Run (), чтобы позаботиться о цикле сообщений, который необходим для правильной работы ловушек.Поскольку у меня есть .dll, а не консольное приложение, я не могу заставить его работать и ловить нажатые клавиши.

Вопрос: как я могу заменить вызов для Application.Run (), чтобы принятьЗабота о цикле сообщений в .dll, чтобы поймать ловушки KB?

Thx !!!!

Ответы [ 2 ]

0 голосов
/ 28 июля 2011

Для цикла сообщений нет необходимости иметь консоль или графический интерфейс - он может оставаться скрытым и перехватывать сообщения.

0 голосов
/ 28 июля 2011

Ваша DLL должна использовать цикл сообщений из программы, загружающей ее.Однако, если это невозможно, вы можете заставить свою DLL запустить новый поток и вызвать Application.Run () из этого потока и использовать свой собственный цикл обработки сообщений.

public static void InjectionPoint()
{
    Thread thread = new Thread(new ThreadStart(DLLMessageLoop));
    thread.IsBackground = true;
    thread.Start();
}

public static void DLLMessageLoop()
{
    _hookID = SetHook(_proc);
    Application.Run();
    UnhookWindowsHookEx(_hookID);
}
...