首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

源码 双击ctrl出现窗口,该如何处理

2013-09-10 
源码 双击ctrl出现窗口本帖最后由 asdd7117 于 2013-09-05 19:09:13 编辑第一个代码只能在窗口打开下实现

源码 双击ctrl出现窗口
本帖最后由 asdd7117 于 2013-09-05 19:09:13 编辑 第一个代码只能在窗口打开下实现双击ctrl出现窗口,第二个是全局热键代码,我想功能合并下,在全局热键下按两下ctrl出现窗口。

代马一:

Option Explicit
 
Private Declare Function GetTickCount Lib "kernel32" () As Long
 
Private Const 时间间隔 As Long = 500 '毫秒
 
Private 上次时间 As Long
Private 上次按键 As Integer
 
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
   Dim lKeyTime As Long
   lKeyTime = GetTickCount()
   If (KeyCode = vbKeyControl) Then
      If (vbKeyControl = 上次按键 And lKeyTime - 上次时间 < 时间间隔) Then
         MsgBox "连续按下两次 Ctrl键", vbInformation
      End If
   End If
   上次时间 = lKeyTime
   上次按键 = KeyCode
End Sub
 
Private Sub Form_Load()
   KeyPreview = True
   上次时间 = -1
   上次按键 = -1
End Sub



代码二

主窗体代码如下:
Option Explicit

'程序启动时注册功能热键F12
Private Sub Form_Load()
    Dim Modifiers As Long
    preWinProc = GetWindowLong(Me.hWnd, GWL_WNDPROC)
    SetWindowLong Me.hWnd, GWL_WNDPROC, AddressOf WndProc
    uVirtKey = vbKeyDelete
    RegisterHotKey Me.hWnd, 1, Modifiers, uVirtKey
End Sub

'当程序被关闭时,取消已经注册的热键
Private Sub Form_Unload(Cancel As Integer)
    SetWindowLong Me.hWnd, GWL_WNDPROC, preWinProc
    UnregisterHotKey Me.hWnd, uVirtKey   '取消系统级热键,释放资源
    End                                 '终止程序运行
End Sub
 
添加一个标准模块,代码如下
Option Explicit

'在窗口结构中为指定的窗口设置信息
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 GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex 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 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
'上述五个API函数是注册系统级热键所必需的,具体实现过程如后文所示

  '热键标志常数,用来判断当键盘按键被按下时是否命中了我们设定的热键
Public Const WM_HOTKEY = &H312
Public Const GWL_WNDPROC = (-4)

'定义系统的热键,原中断标示,被隐藏的项目句柄
Public preWinProc As Long, MyhWnd As Long, uVirtKey As Long

'热键拦截过程
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 = 1 Then      '如果是我们的定义的热键...
            HideDone            '执行隐藏鼠标所指项目
        End If
      End If
    '如果不是热键,或者不是我们设置的热键,交还控制权给系统,继续监测热键
    WndProc = CallWindowProc(preWinProc, hWnd, Msg, wParam, lParam)
End Function

'最关键的项目隐藏过程
Public Sub HideDone()
    MsgBox "按下了Delete键"
End Sub


------解决方案--------------------


楼主分享还请求问题?

热点排行