怎样定义系统级的热键,也就是在程序失去焦点时也可以用。而且就要一个键比如F4,F8等。
请大家给个例子,谢谢。
请大家给个例子,谢谢。
解决方案 »
- 关于ADO的问题,向数据库中插入数据时,问题解决马上给分,在线等
- 如何用vb 创建一个WINDOW的帐户,并把他加到ADMINISTRATOR的组中?
- 报表分组。诚求帮忙
- 50分急求!!!如何在生成EXE文件时,把DLL,OCX文件也集成在EXE里面~~谢谢
- 超级问题(完全解决再送200分)
- 分多了就散,没有理由的,来接分吧!
- 请教.rep文件(Visual dBASE报表文件 )怎么样才能打开,100分相送.
- 急呀!读取网页的内容!!
- AppendChunk 不支持此接口
- 如何将winsock接受来的2进制数据汇总到1个2进制数据中啊?
- 在VB中怎样判断数据表是否存在?
- 连接Provider从msdasql 改为 sqloledb 后,保存记录集时出错
Option ExplicitPrivate Sub Form_Load()
Dim ret As Long'记录原来的window程序地址
preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
'用自定义程序代替原来的window程序
ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf Wndproc)idHotKey = 1'此处为定义需要的热键,比如Alt+Ctrl+1
Modifiers = MOD_ALT + MOD_CONTROL 'Alt+Ctrl 键
uVirtKey = vbKey1 '1键
ret = RegisterHotKey(Me.hwnd, idHotKey, Modifiers, uVirtKey)End SubPrivate Sub Form_Unload(Cancel As Integer)
Dim ret As Long
'取消Message的截取,使之送往原来的windows程序
ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, preWinProc)
Call UnregisterHotKey(Me.hwnd, uVirtKey)End Sub'========================模块=====================
Option ExplicitDeclare Function SetWindowLong Lib "User32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function GetWindowLong Lib "User32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
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
Declare Function RegisterHotKey Lib "User32" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Declare Function UnregisterHotKey Lib "User32" (ByVal hwnd As Long, ByVal id As Long) As LongPublic Const WM_HOTKEY = &H312
Public Const MOD_ALT = &H1
Public Const MOD_CONTROL = &H2
Public Const MOD_SHIFT = &H4
Public Const GWL_WNDPROC = (-4)Public preWinProc As Long
Public Modifiers As Long, uVirtKey As Long, idHotKey As LongPrivate Type taLong
ll As Long
End TypePrivate Type t2Int
lWord As Integer
hWord As Integer
End TypePublic 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
Shell "Notepad", vbNormalFocus
'此处为热键的调用部分,可自行修改,以实现任何热键功能
End If
End If
End If
'如果不是热键信息则调用原来的程序
Wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)
End Function
HotKey=(GetAsyncKeyState(vbKeyCode) < 0)
End FunctionPrivate Sub Timer1_Timer()
If HotKey(vbKeyF4) Then
...
End If
End Sub
但是,我想知道,如何定义对个热键????
用idHotKey来定义,在定义的时候应该可以用“+”运算符来连接你的热键。推荐一个示例,其中是用HOOKKEY.DLL实现的,很简单的一个C编写的DLL,示例里面有一个LIST,显示了你所按下的键,当然包括组合键了,按照里面显示的数据来设置热键就可以了,并且可以进行相应处理。示例名字似乎叫“按键拦截程序”具体忘记了,这个示例我这里有,如果需要可以给你发过去。