在我的应用程序中我希望实现如下几类快捷键.
1.系统级.只要我的程序运行着,不管处于什么状态,不管焦点是否在我的程序,都响应此快捷级.像QQ的CTRL+ALT+A
[这种容易实现,网上源码一大堆]
2.应用程序级.只有当我的应用程序获得焦点时有效,而不管此时程序中获得焦点的窗口是哪一个,均可响应此按键,像MDI主窗口中菜单设置的快捷键.
[这种不知道如何实现,不能用MDI菜单快捷键来实现,因为菜单编辑器里的快捷键太少,而且当菜单不可见时,快捷键无效]
3.窗体级.只有当相应窗口获得焦点时才响应此快捷键,而不管此时焦点在该窗口的哪一个控件.像窗体菜单中设置的快捷键一样.
[这种子类化窗体应该能实现]主要是第二种,不知道要如何现实.

解决方案 »

  1.   

    MDI子窗口Me.KeyPreview = True
    然后Private Sub Form_KeyPress(KeyAscii As Integer)
    里判断
      

  2.   

    第二点实现不了吧,应用程序级的.
    MDI父窗体没有KeyPreview属性,也没有KeyDown事件.
    而且应用程序级是指在整个应用程序的所有窗口中,可能有MDI窗体,也可能不是MDI窗体.
      

  3.   

    超过1个以上的HOTKEY 我都用GETKEYSTATE,非常精简!
    放一个TIMER 频率20毫秒
    if getkeystate(vbkey??) and ... <-1 then 
    dosomething.....
    pausetime 400'暂停四百毫秒 '为了不让这个事情频繁触发,跟据需要调整
    endif
      

  4.   

    要判断当前窗口可以另外用GETFOREGOUNDWINDOW。。什么的都行
      

  5.   

    这个问题我也想过,getkeystate和全局键盘勾子是否会被杀毒软件拦截?
    如果注册系统热键+GETFOREGOUNDWINDOW再判断hInstance这样是可以,但是如果发现活动窗口不是自己,而是其他程序的消息,这样是否会影响其他程序的运行?