線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2457
推到 Plurk!
推到 Facebook!

如何攔截 Space+A 按鍵的 Message?

答題得分者是:harpist
AJ
一般會員


發表:9
回覆:19
積分:20
註冊:2003-06-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-04-09 10:40:39 IP:220.135.xxx.xxx 未訂閱
小弟使用Hook攔截WH_GETMESSAGE,
但是不知道要如何攔截 Space A 的按鍵組合,
原本想用GetKeyState()但他只能取得Ctrl, Shift, Alt
請問該如何做呢?謝謝。
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-04-09 16:20:21 IP:220.131.xxx.xxx 訂閱
space 跟 a 本來就不是”組合鍵”沒辦法讓你這樣玩。
harpist
資深會員


發表:3
回覆:251
積分:430
註冊:2002-10-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-04-09 23:04:31 IP:59.104.xxx.xxx 未訂閱
<textarea class="cpp" rows="10" cols="60" name="code">//------------------------------- bool Space_Down = false; LRESULT CALLBACK __declspec(dllexport) __stdcall KbdHookProc(int nCode,WPARAM wParam,LPARAM lParam) { bool bHandleKeystroke = false; if((lParam&0xc000ffff)==1) //有鍵按下 { switch(wParam) { case VK_SPACE: Space_Down = true; bHandleKeystroke = true; break; } } if((lParam&0xc0000000)==0xc0000000)// 有鍵放開 { switch(wParam) { case VK_SPACE: Space_Down = false; bHandleKeystroke = true; break; } } if((DWORD)lParam &0x40000000 && (HC_ACTION == nCode)) { switch(wParam) { case 0x41: if(Space_Down) ShowMessage("抓到了^_^b"); bHandleKeystroke = true; break; } } return bHandleKeystroke; } //------------------------------- </textarea>

電腦沒裝Delphi這是用BCB寫的您參考看看

===================引 用 文 章===================
小弟使用Hook攔截WH_GETMESSAGE,
但是不知道要如何攔截 Space A 的按鍵組合,
原本想用GetKeyState()但他只能取得Ctrl, Shift, Alt
請問該如何做呢?謝謝。
------
~§~迷時師渡,悟了自渡~§~
AJ
一般會員


發表:9
回覆:19
積分:20
註冊:2003-06-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-04-11 11:13:30 IP:220.135.xxx.xxx 未訂閱
謝謝harpist提供程式碼 小弟已經測試ok,謝謝~    附上Delphi程式碼:    <textarea class="delphi" rows="10" cols="60" name="code"> function GetMsgProcHandler(code: integer; wp: WPARAM; lp: LPARAM):LResult; stdcall; export; begin result:= 0; if code<0 then begin result:= CallNextHookEx(hMessageHook, code, wp, lp); exit; end; case PMsg(lp)^.message of WM_KEYDOWN: begin //特殊組合功能鍵 if PMsg(lp)^.wParam = VK_SPACE then begin SpaceDown:= true; PMsg(lp)^.message:= WM_NULL; //不將訊息發送給視窗 exit; end; if SpaceDown then begin if PMsg(lp)^.wParam = Ord('A') then begin PostMessage(PMsg(lp)^.hwnd, WM_KEYDOWN, VK_F8, 0); //按下 F8 PostMessage(PMsg(lp)^.hwnd, WM_KEYUP, VK_F8, 0); //放開 F8 end; PMsg(lp)^.message:= WM_NULL; //不將訊息發送給視窗 exit; end; end; WM_KEYUP: begin if PMsg(lp)^.wParam = VK_SPACE then begin SpaceDown:= false; PMsg(lp)^.message:= WM_NULL; //不將訊息發送給視窗 end; end; end; </textarea>
系統時間:2024-03-29 23:34:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!