2012-01-13 80 views
1

我的筆記本電腦有一個數字鍵盤,但它沒有NumLock鍵,而數字鍵盤實際上只是字母上方一行數字的副本。這通過我按下這些鍵時發送的虛擬鍵碼來確認。在沒有它們的筆記本電腦上創建Alt代碼

我想開發一個小程序來模仿alt代碼,當alt鍵和常規數字被按下時。我使用低級別的鍵盤鉤子(我在另一個程序中有類似的格式),首先檢查是否有任何一個鍵被關閉。如果其中之一,我循環通過VK代碼0x30-0x39(0-9鍵)。如果其中一個按下的那一刻,我通過返回值1丟棄實際的擊鍵,而是發送該鍵的數字鍵盤版本(而現在仍然按下)。

我可以確認掛鉤已到達,並且alt鍵已關閉正在被成功識別。但是,當我檢查0-9的比賽時,只有一對是在之前沒有任何比賽之前打印的,或者每次按下數字時都必須擡起並按下Alt鍵。此外,在釋放按下某個數字之後,可以打印一個數字16次,然後按住另一個數字(這個數字是16x)。

此外,我可以確認SendInput序列的工作原理是通過從鉤子複製零件,將其放入主函數並用0x30替換i。運行時,將在文本文檔上鍵入0。

在文本文檔中按住ALT(向下)+ 6 + 5 + ALT(向上)時,顯示「65」。如果我添加另一個ALT(向下)+6,16個六進製出現。

掛鉤程序:

LRESULT CALLBACK proc (int code, WPARAM wParam, LPARAM event) //hook proc 
{ 
    if (code < HC_ACTION) //don't process if not meant to 
     return CallNextHookEx (0, code, wParam, event); 

    if (GetAsyncKeyState (VK_MENU) & 0x8000) //if either alt is down 
    { 
     for (int i = 0x30; i <= 0x39; ++i) //loop 0-9 
     { 
      if (GetAsyncKeyState (i) & 0x8000) //if index is down 
      { 
       cout << "MATCH\n"; //debug 

       input.ki.wVk = i + 0x30; //set VK code to numpad version of index 
       input.ki.dwFlags = 0; //key is being pressed 
       SendInput (1, &input, sizeof (INPUT)); //send keystroke down 

       input.ki.dwFlags = KEYEVENTF_KEYUP; //key is being released 
       SendInput (1, &input, sizeof (INPUT)); //send keystroke up 

       while (GetAsyncKeyState (i) & 0x8000) //wait for normal key to be released 
        Sleep (10); //don't hog CPU 

       return 1; //discard normal key 
      } //end if match 
     } //end for 
    } //end if alt 

    return CallNextHookEx (0, code, wParam, event); //if any key not handled, pass on 
} //end function 
+0

我看到你已經確認了關鍵代碼,但我仍然要問..你確定你沒有numlock關鍵?通常在筆記本電腦上使用不同的顏色,與其他一些按鍵共享空間,例如插入或暫停等。並通過按住某個「fn」按鈕或其他東西來激活它。 – davogotland 2012-01-13 03:11:24

+0

我已經搜索和搜索。在我通過其他買家的評論購買之前,我首先注意到了這一點。華碩G74SX-XA1如果你有興趣。 – chris 2012-01-13 03:14:30

+0

..哀悼 – davogotland 2012-01-13 03:18:11

回答

0

好了,我終於回來了這一點,經過一番更多的測試,我發現程序發送[ALT] [NUM6] [num5] [ALT]做兩手空空。我覺得這很奇怪,因爲我能夠模擬Mac鍵盤上的音量控制鍵,儘管沒有這些鍵。

既然計算機根本不能發送alt代碼,我宣佈這個有用的工具皇家擰,除非我映射成千上萬的字符。

編輯:

這裏就是你需要做的就是數字鍵盤工作的G74SX-XA1什麼:

  1. 下載的BIOS 203(我不知道是不是202個工程與否,我從201到203)。
  2. 將文件放在FAT32格式的閃存驅動器上。
  3. 重新啓動計算機,然後按F4直接進入EasyFlash,或通過BIOS導航至EasyFlash。隨附的Winflash程序不起作用。
  4. 選擇閃存驅動器上更新的BIOS文件。
  5. 現在,numlock指示燈將始終打開,數字鍵盤將具有數字鍵盤的虛擬鍵碼,而不是字母上方的數字。這自然包括ALT代碼的工作。
相關問題