当前位置:编程学习 > VB >>

VB注册全局快捷键的问题~~~~~~~~~~~~~~~~~

在网上找到了用RegisterHotKey、UnregisterHotKey注册快捷键的代码,调试之后能用,但是会出现一个问题。
下面是主要代码:
'-------------------窗体

Private Sub Form_Load()
        nowHwnd = FindWindow(0&, "测试窗体")   
        key_preWinProc = GetWindowLong(Form1.hwnd, GWL_WNDPROC)
        SetWindowLong Form1.hwnd, GWL_WNDPROC, AddressOf keyWndproc
        RegisterHotKey Form1.hwnd, 1, 0&, vbKeyF7   '注册F7
        RegisterHotKey Form1.hwnd, 2, 0&, vbKeyF8   '注册F8
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    Dim ret As Long
    ret = SetWindowLong(Form1.hwnd, GWL_WNDPROC, key_preWinProc)
    UnregisterHotKey Form1.hwnd, 1
    UnregisterHotKey Form1.hwnd, 2
    End
End Sub

'-------------------模块

Public Function keyWndproc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

    If Msg = WM_HOTKEY Then   '响应代码

        If (wParam = 1) Then  '按下F7
            '处理过程略
        End If
        If (wParam = 2) Then  '按下F8
            '处理过程略                  
        End If
    End If
    
    keyWndproc = CallWindowProc(key_preWinProc, hwnd, Msg, wParam, lParam)
End Function

当我打开测试窗体,再启动这段程序,按下F7,F8可以完成处理过程;自己手动关闭测试窗体再次启动窗体快捷键也能用;开
两个测试窗体分别按快捷键同样能用。但是就有一个问题出现了,我的测试窗体上有一个按钮,功能是完成一个处理过程后重新启动窗体,这个时候再按注册的快捷键就不能用了。必须要把测试窗体手动关闭掉在启动才能,就算重新启动这个程序也不行。是不是SetWindowLong 和CallWindowProc这里的问题,测试窗体的句柄好像根本没地方用啊,CallWindowProc的第二个参数hwnd是哪里来的,是不是没把消息送到启动后的窗体去啊 

说的有点啰嗦,经常来CSDN但这是第一次提问,希望达人们帮帮忙,万分感谢。

--------------------编程问答-------------------- 帮顶 --------------------编程问答-------------------- 同上 --------------------编程问答-------------------- 用unload或者set XX=null强制释放窗体试试 --------------------编程问答-------------------- 还是没能解决。用SetWindowsHookEx重新写了代码,出现的还是同样的问题。 --------------------编程问答-------------------- http://www.m5home.com/blog/article.asp?id=245

使用HOOK不太可能也这样

除非你自己的流程里没写对.

如果是我做这个多窗体响应同一键的事情,我会把HOOK事件放在一个公有类里,然后在每个窗体里将窗体内的私有类SET为这个公有类.

这样窗体无论怎么样LOAD,均可正确处理相应的事件. --------------------编程问答--------------------
补充:VB ,  API
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,