如何捕捉键盘事件?
请问如果在AutoCAD主界面下按下某键,请问如何用写VBA代码捕捉这个事件?好像需要用到Windows API函数,请问这个函数是什么?先谢谢大家了~~可以使用hotKey。
本帖最后由 作者 于 2005-8-12 22:15:23 编辑 <br /><br /> <P>1、新建一个 模块,加入以下代码:</P><P>Option Explicit<BR>'新建一个模块,粘贴这里代码。<BR>Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" ( _<BR> ByVal hwnd As Long, _<BR> ByVal nIndex As Long, _<BR> ByVal dwNewLong As Long _<BR> ) As Long<BR>Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" ( _<BR> ByVal OldwndProc As Long, _<BR> ByVal hwnd As Long, _<BR> ByVal wMsg As Long, _<BR> ByVal wParam As Long, _<BR> ByVal lParam As Long _<BR> ) As Long<BR>Public Const GWL_WNDPROC = -4<BR>Public OldwndProc As Long<BR>Public Declare Function RegisterHotKey Lib "user32" ( _<BR> ByVal hwnd As Long, _<BR> ByVal HotKeyID As Long, _<BR> ByVal fsModifiers As Long, _<BR> ByVal vKey As Long _<BR> ) As Long<BR>Public Declare Function UnregisterHotKey Lib "user32" ( _<BR> ByVal hwnd As Long, _<BR> ByVal HotKeyID As Long) As Long</P>
<P>Public HKeyID As Long '定义热键,需要注册多个热键可以使用数组</P>
<P>Public Function WindowProc( _<BR> ByVal hwnd As Long, _<BR> ByVal WindowMsg As Long, _<BR> ByVal wParam As Long, _<BR> ByVal lParam As Long) As Long<BR> Select Case WindowMsg<BR> Case WM_HOTKEY<BR> Select Case wParam<BR> Case HKeyID<BR> MsgBox "在这里添加需要执行的代码或者函数"<BR> End Select<BR> End Select</P>
<P>WindowProc = CallWindowProc(OldwndProc, hwnd, WindowMsg, wParam, lParam)</P>
<P>End Function</P>
<P>2、然后在Form_Load中添加代码来注册热键:</P>
<P>Private Sub Form_Load()<BR> Dim ReturnValue As Long<BR> OldwndProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)<BR> '定义HOME键为热键<BR> ReturnValue = RegisterHotKey(hwnd, HKeyID, 0, 36)<BR>End Sub</P>
<P>3、在Form_Unload中添加代码来卸载热键:</P>
<P>Private Sub Form_Unload(Cancel As Integer)<BR> Dim ReturnValue As Long<BR> ReturnValue = UnregisterHotKey(hwnd, HKeyID)<BR>End Sub<BR></P> 送花一朵!! 谢谢<A name=50998><FONT color=#000066><B>冬雪随风</B></FONT></A>~~ <P>to:<A name=50998><FONT color=#000066><B>冬雪随风</B></FONT></A></P>
<P>我看了你的代码,这段代码在VBA中运行的时候没有反应,没有达到所要求的目的,任意按下键盘中的任何一个键,没有提示消息,请问这段代码怎么用?不知道这段代码你运行过没有,我用的是2002版本的。然后,我觉得你在调用SetWindowLong,RegisterHotKey,UnregisterHotKey函数的时候,没有给定输入参数hwnd, HKeyID赋值,当我给hwnd赋值为thisdrawing.hwnd的时候,运行程序,自动关闭了AutoCAD程序,请问这是什么原因?请指导,谢谢~~</P> <P>刚出差回来..以上代码在VB SP6下调试通过。<BR>以上代码是用VB来开发AUTOCAD的。<BR>我看了一下AUTOCAD里面的VBA。好像没有找到FORM的hWnd句柄,也没有LOAD和UNLOAD。<BR>看来大家可以再研究研究。VBA能否实现。</P>
页:
[1]