關於hook(紀錄、與重播鍵盤滑鼠操作消息) |
缺席
|
sb055665
一般會員 發表:24 回覆:25 積分:14 註冊:2006-07-12 發送簡訊給我 |
請問各位大大 我在站上尋找到相關分享
紀錄(WH_JOURNALRECORD)、播放(WH_JOURNALPLAYBACK) 我想實現在不同電腦: 1.一台紀錄Mouse Keybard Event 2.利用 Socket傳送紀錄的MessageEvent 到另一台電腦 3.播放MessageEvent 目前已完成,但是發現當中播放的時候,必須要一直稍微移動滑鼠觸發,才有辦法完整播放那些接收到的Message 我想請問的事,有沒有什麼辦法可以讓他一直觸發,不用一直移動滑鼠?? 以下為紀錄的Code <textarea class="cpp" rows="10" cols="60" name="code">LRESULT WINAPI HookProc(int iCode, WPARAM wParam, LPARAM lParam) { recOK=1; int Result=0; if (iCode < 0) Result = CallNextHookEx(hHook,iCode,wParam,lParam); else if (iCode == HC_SYSMODALON) recOK=0; else if (iCode == HC_SYSMODALOFF) recOK=1; else if ((recOK>0) && (iCode == HC_ACTION)) { EventArr[EventLog]=(*(PEVENTMSGMSG)lParam); EventLog ; if (EventLog>=1000) { UnhookWindowsHookEx(hHook); } } return Result; } //------------------------------------------------------ void __fastcall TForm1::Button1Click(TObject *Sender) { EventLog=0; //建立鍵盤滑鼠操作消息紀錄鏈 hHook=SetWindowsHookEx(WH_JOURNALRECORD, (HOOKPROC)HookProc, GetModuleHandle(NULL), 0); Button2->Enabled=TRUE; Button1->Enabled=FALSE; } </textarea> 以下為播放 <textarea class="cpp" rows="10" cols="60" name="code">LRESULT WINAPI PlayProc(int iCode, WPARAM wParam, LPARAM lParam) { int canPlay=1; int Result=0; if (iCode < 0) //必須將消息傳遞到消息鏈的下一個接受單元 Result = CallNextHookEx(hPlay, iCode, wParam, lParam); else if (iCode == HC_SYSMODALON) canPlay=0; else if (iCode == HC_SYSMODALOFF) canPlay=1; else if ((canPlay ==1 )&&(iCode==HC_GETNEXT)) { if (bDelay) { bDelay=FALSE; Result = EventArr[PlayLog].time - EventArr[PlayLog - 1].time; if (Result < 0) Result = 0; } (*(PEVENTMSGMSG)lParam) = EventArr[PlayLog]; } else if ((canPlay == 1)&&(iCode == HC_SKIP)) { bDelay = TRUE; PlayLog ; } if (PlayLog>=evenLog) { UnhookWindowsHookEx(hPlay); } return Result; hPlay=SetWindowsHookEx(WH_JOURNALPLAYBACK, (HOOKPROC)PlayProc, GetModuleHandle(NULL), 0); } //---------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { //hHook=SetWindowsHookEx(WH_JOURNALRECORD, (HOOKPROC)HookProc, GetModuleHandle(NULL), 0); PlayLog=0; hPlay=SetWindowsHookEx(WH_JOURNALPLAYBACK, (HOOKPROC)PlayProc, GetModuleHandle(NULL), 0); } </textarea> 編輯記錄
sb055665 重新編輯於 2007-04-24 10:38:38, 註解 無‧
sb055665 重新編輯於 2007-04-24 10:46:39, 註解 無‧ sb055665 重新編輯於 2007-04-24 10:46:56, 註解 無‧ sb055665 重新編輯於 2007-04-24 10:51:51, 註解 無‧ sb055665 重新編輯於 2007-04-24 10:53:05, 註解 無‧ sb055665 重新編輯於 2007-04-24 10:53:42, 註解 無‧ sb055665 重新編輯於 2007-04-24 10:53:43, 註解 無‧ sb055665 重新編輯於 2007-04-24 10:55:14, 註解 無‧ |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
sb055665
一般會員 發表:24 回覆:25 積分:14 註冊:2006-07-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |