请大家帮个忙: 怎么才能在窗体隐藏的时候在键盘上按一 个键让它显示

解决方案 »

  1.   

    '窗体中的代码
    Private Sub Form_Load()
    RegisterWindow Me.hwnd
    RegisterHotKey Me.hwnd, &H99CC, 0, vbKeyF12
    End SubPrivate Sub Form_Unload(Cancel As Integer)
    unRegisterWindow Me.hwnd
    End Sub
    '模块中的代码Option Explicit
    Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
    Public Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
    Public Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long) As Long
    Public Const WM_HOTKEY = &H312
    Public Const WM_SHOWWINDOW = &H18
    Public oldproc As LongPublic Function RegisterWindow(hwnd As Long) As Long
    If hwnd <> 0 Then
      oldproc = SetWindowLong(hwnd, -4, AddressOf WinProc)
    End If
    End Function
    Public Function unRegisterWindow(hwnd As Long) As Long
     
    If hwnd <> 0 Then
       SetWindowLong hwnd, -4, oldproc
    End IfEnd Function
    Public Function WinProc(ByVal hwnd As Long, ByVal msg As Long, ByVal lpara As Long, ByVal wpara As Long) As Long
    If msg = WM_HOTKEY Then
    If lpara = &H99CC Then Exit Function
    End IfWinProc = CallWindowProc(oldproc, hwnd, msg, lpara, wpara)End Function
      

  2.   

    修正:Public Function WinProc(ByVal hwnd As Long, ByVal msg As Long, ByVal lpara As Long, ByVal wpara As Long) As Long
    If msg = WM_HOTKEY Then
    If lpara = &H99CC Then form1.show
    End IfWinProc = CallWindowProc(oldproc, hwnd, msg, lpara, wpara)End Function
      

  3.   

    首先谢谢你了   但是我按F12键没有显示form1的窗体啊 
    Private Sub Form_Load()
    RegisterWindow Me.hwnd
    RegisterHotKey Me.hwnd, &H99CC, 0, vbKeyF12
    End SubPrivate Sub Form_Unload(Cancel As Integer)
    unRegisterWindow Me.hwnd
    End Sub
    我试过这段代码 没有问题啊
    我添加了一 个类模块
    Option Explicit
    Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
    Public Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
    Public Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long) As Long
    Public Const WM_HOTKEY = &H312
    Public Const WM_SHOWWINDOW = &H18
    Public oldproc As LongPublic Function RegisterWindow(hwnd As Long) As Long
    If hwnd <> 0 Then
      oldproc = SetWindowLong(hwnd, -4, AddressOf WinProc)
    End If
    End Function
    Public Function unRegisterWindow(hwnd As Long) As Long
     
    If hwnd <> 0 Then
       SetWindowLong hwnd, -4, oldproc
    End IfEnd Function
    Public Function WinProc(ByVal hwnd As Long, ByVal msg As Long, ByVal lpara As Long, ByVal wpara As Long) As Long
    If msg = WM_HOTKEY Then
    If lpara = &H99CC Then form1.show
    End IfWinProc = CallWindowProc(oldproc, hwnd, msg, lpara, wpara)End Function运行后按F12没有显示form1窗体啊
      

  4.   

    首先你的窗体运行的时候就已经在显示了,所以我在LOAD的事件中加上ME.HIDE,但还是看到有发生SHOW的事件,另外,SetWindowLong hwnd 的HWND,是谁的HWND?于是我改为
    form1.hwnd,但还是没看到有什么效果,就这个代码的整体看来,并不是HOOK,像是注册一个热键,但没有看到效果所以说我不明白这个代码有什么用
      

  5.   

    我开始的时候  把 Form1.Visible= False 设置了
    但是还是不显示
      

  6.   

    你要求在任何地方按键,都会显示FORM吗?这样的话要分两种情况
    在WIN2K以上的OS,用HOOK
    在9X,用TIMER时时检测,API:GETKEYSTATE
      

  7.   

    RyuOut(888) ( ) 信誉:98 
    你在2K下试了吗?
      

  8.   

    '修改过程winproc
    Public Function WinProc(ByVal hwnd As Long, ByVal msg As Long, ByVal lpara As Long, ByVal wpara As Long) As Long
    If msg = WM_HOTKEY ThenIf lpara = &H99CC Then Form1.WindowState = 0: Form1.ShowEnd IfWinProc = CallWindowProc(oldproc, hwnd, msg, lpara, wpara)End Function
      

  9.   

    你单纯的用VB做,是很难实现的,你可以使用一个王国荣做的 KEYBHOOK.DLL.用它可以实现你想要的功能.市面上很多VB开发的软件的相关功能都是用该DLL实现的.如果你没有该DLL,给我EMAIL,我发给你.
    [email protected]