2011-07-28 149 views
1

我正在製作一個模塊,它將通過鍵盤來控制和移動平移和傾斜設備。 該模塊是一個C#.DLL,並通過其他模塊使用反射動態加載。 該模塊不能有任何形式(可見)。C中的低級別鍵盤掛鉤#

我正在使用我在http://blogs.msdn.com/b/toub/archive/2006/05/03/589423.aspx上發現的低級別kb碼的代碼。 唯一的問題是它使用了consol應用程序,並調用Application.Run()來處理消息循環,這是鉤子正常工作所必需的。由於我有一個.dll而不是一個控制檯應用程序,我不能讓它工作,並按下按鍵。

問題: 如何替換Application.Run()的調用來處理.dll中的消息循環以捕獲KB鉤子?

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 - 它可以保持隱藏狀態並截取消息。