2010-02-01 88 views
0

gMsgHook = SetWindowsHookEx(WH_KEYBOARD_LL,GetMsgHookProc,ghInstDll,0);如何發送,鍵盤消息鏡像到edit1控件

.......

extern "C" HOOK_DLL_API LRESULT CALLBACK GetMsgHookProc(int nCode, WPARAM wParam, LPARAM  lParam) 
{ 
if (nCode < 0){ 
    CallNextHookEx(gMsgHook, nCode, wParam, lParam); 
} 

KBDLLHOOKSTRUCT *dl = (KBDLLHOOKSTRUCT*)wParam; 

if (nCode >= HC_ACTION){ 
    // message mirror to hEdit1 
    // doesnt typing work 
    SendMessage(hEdit1, wParam, wParam, lParam); 
} 

    return CallNextHookEx(gMsgHook, nCode, wParam, lParam); 
} 

回答

0

有在您的代碼段許多錯誤。

首先,傳遞給鉤子的KBDLLHOOKSTRUCT在lParam中,而不是在wParam中。 wParam包含窗口消息。

其次,您將lParam按原樣傳遞給編輯控件。您需要構造適當的lParam(請參閱WM_KEYDOWN,WM_KEYUP等的文檔)。

第三,您將wParam傳遞給hook proc(它是消息)作爲重新生成的鍵盤消息的wParam - 它應該是您從KBDLLHOOKSTRUCT獲得的虛擬鍵代碼。

第四,如果nCode爲< 0,您最終會調用CallNextHookEx兩次。

+0

謝謝Michael 我正在嘗試 – gre 2010-02-01 23:49:47