請問如何hook多媒體鍵盤的特殊功能鍵? |
尚未結案
|
小蟲蟲
一般會員 發表:38 回覆:55 積分:23 註冊:2002-03-13 發送簡訊給我 |
請教前輩:
我想要disable多媒體鍵的特殊功能鍵,我用了Hook,可是不管我的回傳值全是1,還是無法攔捷。
我的程式如下:
const WH_KEYBOARD_LL = 13; LLKHF_EXTENDED = 1 ; LLKHF_INJECTED = 16; LLKHF_ALTDOWN = 32; LLKHF_UP = 128; LLMHF_INJECTED =1; type KBDLLHOOK = record vkCode: Longword; scanCode: Longword; flags: Longword; time: Longword; dwEtraInfo: Longword; end; PKBDLLHOOK = ^KBDLLHOOK; function LowKeyboardHookHandler(iCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; export; var bControlKeyDown: integer; pkhbs: KBDLLHOOK; begin Result := 1; //全設為1,吃掉所有的key pkhbs := PKBDLLHOOK( lParam )^; //if ( code = HC_ACTION ) then //begin Case iCode Of HC_ACTION: begin bControlKeyDown := GetAsyncKeyState(VK_CONTROL) shr ((SizeOf(short) * 8) - 1); if (Result = 0) and (pkhbs.vkCode = VK_ESCAPE) and (bControlKeyDown <> 0) then Result := 1; if (Result = 0) and (pkhbs.vkCode = VK_TAB) and ((pkhbs.flags and $20 ) <> 0 ) then Result := 1; if (Result = 0) and (pkhbs.vkCode = VK_ESCAPE) and ((pkhbs.flags and $20) <> 0) then Result := 1; end; HC_NOREMOVE: begin Result := 0; end; end; if (iCode < 0) or ( Result = 0 ) then Result := CallNextHookEx (hNextHookProc, iCode, wParam, lParam) end;我的鍵盤是hinet送的無線多媒體鍵盤,當程式執行時,會載入這個hook dll。但是我按了鍵盤的ie/mial還是會啟動ie/mail程式! 請前輩指導! 謝謝! |
小蟲蟲
一般會員 發表:38 回覆:55 積分:23 註冊:2002-03-13 發送簡訊給我 |
我找到一篇在文章:
http://www.microsoft.com/whdc/device/input/w2kscan-map.mspx
雖然無法用hook作,但好像可以用Scan Code Mapper 的方式。不過,我的usb無線鍵盤無法使用範例中的設定。我猜可能是PS2/USB鍵盤的scan code不太一樣。(scan code有三個版本:scan code set1/scan code set2/scan code set3,一般而言,是set2,但範例中,是set1)。
還在努力測試中!
|
conundrum
尊榮會員 發表:893 回覆:1272 積分:643 註冊:2004-01-06 發送簡訊給我 |
|
小蟲蟲
一般會員 發表:38 回覆:55 積分:23 註冊:2002-03-13 發送簡訊給我 |
感謝回覆!我目前測的方式也是Hook,但就是Hook不到多媒體按鈕。我在網路上找到一個很棒的偵測keyboard/mouse的程式:http://www.bome.com
我貼貼執行的結果,供大家參考: Key F1, 003B0001
Repeat: 1 Scan Code:59 Extented: False Alt: False PrevDown: False Down: True name: F1
這是我按下F1分析的結果。 Key undefined 0x00AA ,00000001
Repeat: 1 Scan Code: 0 Extended: False Alt: False PrevDown: False Down: True name:
這是我按下Search的結果。
如果是按下Web Browser,則一點訊息都沒有!
|
bugmans
高階會員 發表:95 回覆:322 積分:188 註冊:2003-04-12 發送簡訊給我 |
我也要強力推薦這個元件TWatch
其實在http://delphi.ktop.com.tw/board.php?cid=96&fid=615&tid=15318也有 但少了中文說明這元件也是很少人知道吧,這元件的功能就是擷取全系統的滑鼠和鍵盤訊息 最特別的優點是TWatch可以將特殊的鍵盤按鍵整理出來,只要判斷ki.Extended是true還是false 我的鍵盤這些按鍵都可以抓到,包括右邊圓形的按鍵都可以 Key undefined Extended:True Alt:False PrevDown:False Down:True Name: Key undefined 0x00A6,016A0001 Repeat:1 Scan Code:106 Extended:True Alt:False PrevDown:True Down:True Name: 類似的問題都迎刃而解 http://delphi.ktop.com.tw/board.php?cid=168&fid=921&tid=84837 到http://www.bome.com/delphi/ 按TWatch下載 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |