2012-01-13 82 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代码的工作。
相关问题