看了一下你的要求,有些不是很了解,你看看是不是你需要的,俺先睡觉去了:
窗体代码:
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Const MOUSEEVENTF_LEFTDOWN = &H2 '模拟鼠标左键按下
Private Const MOUSEEVENTF_LEFTUP = &H4 '模拟鼠标左键抬起
Private Const MOUSEEVENTF_RIGHTDOWN = &H8 '模拟鼠标右键按下
Private Const MOUSEEVENTF_RIGHTUP = &H10 '模拟鼠标右键抬起
Private Sub Command1_Click()
SetCursorPos 0, 0
' mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 '左键单击
mouse_event MOUSEEVENTF_RIGHTDOWN Or MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0 '右键单击
' mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 '连续两次鼠标左键单击,即一次鼠标双击
' mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
Private Sub Form_Load()
Form1.Visible = False
SetHotkey 1, "Ctrl,120", "Add" '组合键Ctrl+F9,F9的Ascii码为120
SetHotkey 2, "Ctrl,121", "Add" '组合键Ctrl+F10
SetHotkey 3, "Ctrl,122", "Add" '组合键Ctrl+F11
SetHotkey 4, "Ctrl,123", "Add" '组合键Ctrl+F12
End Sub
Private Sub Form_Unload(Cancel As Integer) '退出程序时务必删除热键
SetHotkey 1, "", "Del"
SetHotkey 2, "", "Del"
SetHotkey 3, "", "Del"
SetHotkey 4, "", "Del"
End Sub
模块代码:
Option Explicit
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private 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
Private Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long, ByVal fskey_Modifiers As Long, ByVal vk As Long) As Long
Private Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long) As Long
Const WM_HOTKEY = &H312
Const MOD_ALT = &H1
Const MOD_CONTROL = &H2
Const MOD_SHIFT = &H4
Const GWL_WNDPROC = (-4) '窗口函数的地址
Dim key_preWinProc As Long '用来保存窗口信息
Dim key_Modifiers As Long, key_uVirtKey As Long, key_idHotKey As Long
Dim key_IsWinAddress As Boolean '是否取得窗口信息的判断
Function keyWndproc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_HOTKEY Then
Select Case wParam 'wParam 值就是 key_idHotKey
Case 1 '激活 4 个热键后,4 个热键所对应的操作,只要修改此处就可以了
Debug.Print "A"
Case 2
Debug.Print "B"
Case 3
Debug.Print "C"
Case 4
Debug.Print "D"
End Select
End If
'将消息传送给指定的窗口
keyWndproc = CallWindowProc(key_preWinProc, hwnd, Msg, wParam, lParam)
End Function
Function SetHotkey(ByVal KeyId As Long, ByVal KeyAss0 As String, ByVal Action As String)
Dim KeyAss1 As Long
Dim KeyAss2 As String
Dim i As Long
i = InStr(1, KeyAss0, ",")
If i = 0 Then
KeyAss1 = Val(KeyAss0)
KeyAss2 = ""
Else
KeyAss1 = Right(KeyAss0, Len(KeyAss0) - i)
KeyAss2 = Left(KeyAss0, i - 1)
End If
key_idHotKey = 0
key_Modifiers = 0
key_uVirtKey = 0
If key_IsWinAddress = False Then '判断是否需要取得窗口信息,如果重复取得,再最后恢复窗口时,将会造成程序死掉
'记录原来的window程序地址
key_preWinProc = GetWindowLong(Form1.hwnd, GWL_WNDPROC)
'用自定义程序代替原来的window程序
SetWindowLong Form1.hwnd, GWL_WNDPROC, AddressOf keyWndproc
End If
key_idHotKey = KeyId
Select Case Action
Case "Add"
If KeyAss2 = "Ctrl" Then key_Modifiers = MOD_CONTROL
If KeyAss2 = "Alt" Then key_Modifiers = MOD_ALT
If KeyAss2 = "Shift" Then key_Modifiers = MOD_SHIFT
If KeyAss2 = "Ctrl+Alt" Then key_Modifiers = MOD_CONTROL + MOD_ALT
If KeyAss2 = "Ctrl+Shift" Then key_Modifiers = MOD_CONTROL + MOD_SHIFT
If KeyAss2 = "Ctrl+Alt+Shift" Then key_Modifiers = MOD_CONTROL + MOD_ALT + MOD_SHIFT
If KeyAss2 = "Shift+Alt" Then key_Modifiers = MOD_SHIFT + MOD_ALT
key_uVirtKey = Val(KeyAss1)
RegisterHotKey Form1.hwnd, key_idHotKey, key_Modifiers, key_uVirtKey '向窗口注册系统热键
key_IsWinAddress = True '不需要再取得窗口信息
Case "Del"
SetWindowLong Form1.hwnd, GWL_WNDPROC, key_preWinProc '恢复窗口信息
UnregisterHotKey Form1.hwnd, key_uVirtKey '取消系统热键
key_IsWinAddress = False '可以再次取得窗口信息
End Select
End Function
Public outkey As String
Private Sub Form_DblClick()
Print "双击"
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If Shift = vbCtrlMask Then
Select Case KeyCode
Case vbKeyF9: outkey = "A"
Case vbKeyF10: outkey = "B"
Case vbKeyF11: outkey = "C"
Case vbKeyF12: outkey = "D"
End Select
End If
If Shift = vbCtrlMask And 112 <= KeyCode Then
Print outkey
End If
End Sub
Private Sub Form_Load()
'Form1.Visible = False
Call Form_MouseMove(0, 0, 0, 0)
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbLeftButton Then
Print "单击了左键"
End If
If Button = vbRightButton Then
Print "单击了右键"
End If
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim a As Integer
End Sub
此仅为模拟,肯定不能满足你的要求,只希望能给你点提醒。不知道写什么软件,我认为这个东西不应该难到没有人能回答。
我没明白你说的什么意思,但我由于兴趣,也当是练习就写了一个vb程序,上面有模拟键盘,和电脑键盘一样可以在任何能输入的页面输入,鼠标可以在箭头下面显示x,y坐标,需要的话可以给你注释,代码贴出来你也看不懂,不如实例好,有兴趣的话留个联系方式吧怎么传给你!
没明白你要的意思
是要写一软件盘还是只需要拦截4个组合键?,然后让4个组合键分别输出ABCD?
是要让鼠标锁定在0,0位置吗?
VB什么版本?
共同研究。我空间有相关代码。 http://www.internals.com/