怎么监测按下了某组合键???

penghongjie 2006-05-08 11:50:58
当按下某组合键时,就需要运行我的应用程序。

只要电脑处于开机状态,按下预先设置好的快捷键就激活我的应用程序(VB6写的)。

怎么能够监测到按下了该组合键,并且该监测程序要随系统启动时自动运行。
...全文
252 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
l_john2000 2006-06-08
  • 打赏
  • 举报
回复
收藏,有时间看看
penghongjie 2006-05-13
  • 打赏
  • 举报
回复
改成SERVICES.exe以后照样可以关掉,只是不能关掉系统的SERVICES.exe
Dickson 2006-05-11
  • 打赏
  • 举报
回复
他用的注册全局热键啊~~~
写成服务,写个INF就OK了,或者把你的EXE文件名改成services.exe
penghongjie 2006-05-11
  • 打赏
  • 举报
回复
re:Modest(塞北雪貂)
不好意思,没有来得及试你的代码。看别人写的键盘钩子去了,好像你这里没有用到键盘钩子。下来再试试你的代码,有问题再找你。
另外,怎么写在注册表中或者写成服务?

分我就给你留着。
Dickson 2006-05-11
  • 打赏
  • 举报
回复
改成SERVICES.exe以后,就没法关掉了,和服务一样,呵呵~~只是模仿,嘿嘿
INF写服务的话,你可以在BAIDU搜,好多。
penghongjie 2006-05-11
  • 打赏
  • 举报
回复
re:Dickson

把你的EXE文件名改成services.exe

不是吧,这么简单?INF我也不知道怎么写呢。
迈克揉索芙特 2006-05-08
  • 打赏
  • 举报
回复
//该监测程序要随系统启动时自动运行。

写在注册表中,或者写成服务。
迈克揉索芙特 2006-05-08
  • 打赏
  • 举报
回复
注册热键的函数,放在模块中:
Option Explicit

Declare 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 Long

Public 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 Long

Private Type taLong
ll As Long
End Type

Private Type t2Int
lWord As Integer
hWord As Integer
End Type

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
Shell "Notepad", vbNormalFocus
End If
End If
End If
'如果不是热键信息则调用原来的程序
Wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)

End Function


使用,放在窗体中:
Option Explicit

Private 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
Modifiers = MOD_ALT + MOD_CONTROL 'Alt+Ctrl 键
uVirtKey = vbKeyG 'G键
ret = RegisterHotKey(Me.hwnd, idHotKey, Modifiers, uVirtKey)

End Sub

Private 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

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧