(2002-12-18 12:33:55)   不是编程浪子
魔王绑架了公主 
魔王:"你尽管叫破喉咙吧,没有人会来救你的." 
公主:"破喉咙!破喉咙"    没有人:"公主,我来救你了" 
魔王:"说曹懆,曹懆就到"  曹懆:"魔王,你叫我干嘛" 
魔王:"#&!见鬼了"        鬼:"shit.被发现了" 
shit:"胡说!谁被发现了"  谁:"关我屁事" 
魔王:Oh,我的上帝啊!     上帝:“谁叫我?” 
谁:“没有人叫你啊”!   没有人:“是魔王叫你”! 
魔王吐血身亡!(通过服务器中转)

解决方案 »

  1.   

    '定义函数
    Public Function WndProc(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 = idHotKey Then
    Dim lp As taLong, i2 As t2Int
    lp.ll = lParam
    LSet i2 = lp
    If (i2.lWord = Modifiers) And i2.hword = uVirtKey Then
       Call frmTest.Do_Hide
    End If
    End If
    End If
    '将之送往原来的Window Procedure
    WndProc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)
    End Function'在Form_load事件中加入,变量请自己定义
    '例如定义系统热键Ctrl+Q,
    'Modifiers = 1,  uVirtKey = vbKeyQ,    idHotKey = 1
       preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
       ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf WndProc)
       ret = RegisterHotKey(hwnd, idHotKey, Modifiers, uVirtKey)
      

  2.   

    接上Call frmTest.Do_Hide处,
    可以定义该热键的相应处理函数或过程
    API函数定义和说明参见VS里的API View和Msdn
      

  3.   

    TO: cooldai(酷呆)
    晕了………Dim lp As taLong, i2 As t2Int
    lp.ll = lParamtalong,t2int是什么类型???lp.ll是什么东东哈???(怎么都没有见过哈?)如果我的热键为:F12
    那么Modifiers参数应设置什么值哈???
      

  4.   

    sorry.........Private Type taLong
    ll As Long
    End TypePrivate Type t2Int
    lWord As Integer
    hword As Integer
    End Type
      

  5.   

    modifiers=1,2,4,8
    分别对应ALT,CTRL,SHIFT,Windows键,可以任意组合。uVirtKey=vbkeyF12
    好像不组合功能键不可以的哦。
      

  6.   

    cooldai(酷呆) :不会吧,那么有的软件的热键为F12是怎么搞的呢???
      

  7.   

    oh, Sorry组合键Ctrl,Shift,Alt都为0,即modifiers=0
    然后uVirtKey=vbkeyF12。可以设定F12为系统热键。
    但是可能会因为F12已经被注册使用而调用RegisterHotKey失败(昨天我就是这种情况)。如果这样,你只能换F11等功能键了。