分享

VB入门技巧N例(3)

 zele 2011-01-31
9. 为程序注册热键

  1. 方法一:修改注册表
  2. Private Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As Long, ByVal id _
  3. As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
  4. Private Declare Function UnregisterHotKey Lib "user32" (ByVal hWnd As Long, ByVal id _
  5. As Long) As Long
  6. Private Declare Function PeekMessage Lib "user32" Alias "PeekMessageA" (lpMsg As Msg, _ ByVal hWnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, ByVal _ wRemoveMsg As Long) As Long
  7. Private Declare Function WaitMessage Lib "user32" () As Long
  8. Private Type POINTAPI
  9.     x As Long
  10.     y As Long
  11. End Type
  12. Private Type Msg
  13.     hWnd As Long
  14.     Message As Long
  15.     wParam As Long
  16.     lParam As Long
  17.     time As Long
  18.     pt As POINTAPI
  19. End Type
  20. '  声明常数
  21. Private Const MOD_ALT = &H1
  22. Private Const MOD_CONTROL = &H2
  23. Private Const MOD_SHIFT = &H4
  24. Private Const PM_REMOVE = &H1
  25. Private Const WM_HOTKEY = &H312
  26. Private HotKey_Fg As Boolean
  27. Private Sub Form_Load()
  28.     Dim Message As Msg
  29.     '注册 Ctrl+Y 为热键
  30.     RegisterHotKey Me.hWnd, &HBFFF&, MOD_CONTROL, vbKeyY
  31.     'RegisterHotKey Me.hWnd, &HBFF2&, MOD_CONTROL, vbKeyU
  32.     Me.Show
  33.     Form1.Hide
  34.     '等待处理消息
  35.     HotKey_Fg = False
  36.     Do While Not HotKey_Fg
  37.         '等待消息
  38.         WaitMessage
  39.         '检查是否热键被按下
  40.         If PeekMessage(Message, Me.hWnd, WM_HOTKEY, WM_HOTKEY, PM_REMOVE) Then
  41.             Form1.Show 1
  42.             End If
  43.         '转让控制权,允许操作系统处理其他事件
  44.         DoEvents
  45.     Loop
  46. End Sub
  47. Private Sub Form_Unload(Cancel As Integer)
  48.     HotKey_Fg = True
  49.     '撤销热键的注册
  50.     Call UnregisterHotKey(Me.hWnd, &HBFFF&)
  51. End Sub
复制代码

方法二:SendMessage
  1. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As _ Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  2. Private Const WM_SETHOTKEY = &H32
  3. Private Const HOTKEYF_SHIFT = &H1
  4. Private Const HOTKEYF_ALT = &H4
  5. Private Sub Form_Load()
  6.    Dim l As Long
  7.    Dim wHotkey As Long
  8.    wHotkey = (HOTKEYF_ALT) * (2 ^ 8) + 65  '定义ALT+A为热键
  9.    l = SendMessage(Me.hwnd, WM_SETHOTKEY, wHotkey, 0)
  10. End Sub
复制代码

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多