全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3626
推到 Plurk!
推到 Facebook!

請問如何hook多媒體鍵盤的特殊功能鍵?

尚未結案
小蟲蟲
一般會員


發表:38
回覆:55
積分:23
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-15 18:16:58 IP:61.229.xxx.xxx 未訂閱
請教前輩: 我想要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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-15 23:11:46 IP:61.229.xxx.xxx 未訂閱
我找到一篇在文章: 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-16 01:01:12 IP:61.64.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=27489 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=52604 如果是驅動寫法 就算2者 互搶 也很可能造成雙方失效
小蟲蟲
一般會員


發表:38
回覆:55
積分:23
註冊:2002-03-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-18 01:39:23 IP:61.229.xxx.xxx 未訂閱
感謝回覆!我目前測的方式也是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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-02-25 15:01:43 IP:125.225.xxx.xxx 未訂閱
我也要強力推薦這個元件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下載
系統時間:2024-04-27 12:36:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!