瑞星卡卡安全论坛

首页 » 技术交流区 » 系统软件 » 如何在VB中调用API拦截键盘呢??
飞鱼宝宝 - 2006-2-26 21:39:00
注意,是调用API,比如说在程序非激活状态下按入一个指定的键,然后激活程序为当前活动的程序。
先谢谢各位了。
飞鱼宝宝 - 2006-2-28 18:23:00
郁闷哦,有没有哪位大虾帮我出出主意呀??
endurer - 2006-3-1 13:34:00
可以通过RegisterHotKey()为程序定义一个系统范围的热键。

该函数原形如下:

BOOL RegisterHotKey(HWND hWnd, // 接收热键响应的窗口句柄
int id, // 热键的标识
UINT fsModifiers, // 控制键标志
UINT vk // 虚拟键值
);

  其中,热键标识id必须是一个范围在0xC000到0xFFFF之间的全局唯一的值。


也可以参考:

VB中利用ccrpHotKey控件设置热键
http://tech.163.com/05/0610/10/1LSMR0J500091589.html
飞鱼宝宝 - 2006-3-2 23:24:00
大虾,能不能举个例子呀,我不是很明白哦。
『逍遥』 - 2006-3-4 8:10:00
那个好像是不行的,要在程序为当前窗口时才可以
清风阁☆四少 - 2006-3-5 13:28:00
版主C++学的不错啊~~~~~
endurer - 2006-3-6 22:36:00
楼主可以参考:

编程使用系统热键{演示RegisterHotKey()和UnregisterHotKey()}
http://forum.ikaka.com/topic.asp?board=55&artid=7854478



按下某组键(HotKey)便执行某程式
http://www.vbzx.net/ArticleView/vbzx_Article_View_545.asp
飞鱼宝宝 - 2006-3-8 0:25:00
在Form中加入
Private Declare Function GetAsyncKeyState Lib "user32" _
  (ByVal vkey As Long) As Integer

Private Function MyHotKey(vKeyCode) As Boolean
  MyHotKey = GetAsyncKeyState(vKeyCode) < 0
End Function

然后在循环中或Timer的Timer事件中检测:
  If myHotKey(vbkeyA) then .....



我觉得这个方法简单又好用,只要再加入一个API让热键按下后程序出现在最顶层就可以做一个呼出程序的热键了.
endurer - 2006-3-9 22:21:00
与RegisterHotKey()相比,GetAsyncKeyState()的优点在于可以监控鼠标按键,缺点是需要使用定时器,而且无法保证热键的惟一性。
1
查看完整版本: 如何在VB中调用API拦截键盘呢??