2011-07-28 16 views
1

私は、キーボードとキーボードを使ってパンとチルトのデバイスを制御して移動するモジュールを作っています。 モジュールはC#.DLLであり、リフレクションを使用して他のモジュール経由で動的にロードされます。 モジュールはフォーム(可視)を持つことはできません。Cで低レベルのキーボードフック

低レベルのkbフックについてはhttp://blogs.msdn.com/b/toub/archive/2006/05/03/589423.aspxで見つかったコードを使用しています。 唯一の問題は、フックが正常に動作するために必要なメッセージループを処理するために、consolアプリケーションを使用してApplication.Run()を呼び出すことです。私はコンソールアプリケーションではなく.dllを持っているので、それを動作させて、押されたキーをキャッチすることはできません。

質問: KBのフックをキャッチするために.dllのメッセージループを処理するために、Application.Run()の呼び出しをどのように置き換えることができますか?

Thx !!!!

答えて

0

あなたの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); 
} 
0

メッセージループの場合、コンソールまたはGUIは必要ありません。非表示のままメッセージを傍受することができます。

関連する問題