400分相送,求vb的winio模拟键盘鼠标的代码

晕死,老是扣了我的分,问题不见了,先把问题发出来在说吧。分不是问题,我两个号加起来600多分。其余的分进连接回答不按问题回答的不会给分窗体装载Form1.Visible=... 晕死,老是扣了我的分,问题不见了,先把问题发出来在说吧。
分不是问题,我两个号加起来600多分。其余的分进连接回答
不按问题回答的不会给分
窗体装载Form1.Visible = False '隐藏窗体
键盘方面,截取键盘的就可以只定义这四个
Ctrl+F9,Ctrl+F10,Ctrl+F11,Ctrl+F12
模拟键盘输出则必须全局定义
输出代码写死,不需要定义变量,直接向当前窗口模拟输出ABCD就可以了,我自己来修改。

鼠标方面,
代码写死,指向坐标0.0就是屏幕左上角,给出左键单击和双击,右键的单击代码就可以了
其余的我自己来添加。(最好能多给些注释,我不太懂,谢谢)
都没人真心帮我,还是我自己在百度文库中搜索的〈VC驱动级模拟按键〉解决的问题!
展开
 我来答
度老虎
2012-01-05 · TA获得超过1546个赞
知道大有可为答主
回答量:1661
采纳率:100%
帮助的人:2326万
展开全部
看了一下你的要求,有些不是很了解,你看看是不是你需要的,俺先睡觉去了:

窗体代码:
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
追问
If Msg = WM_HOTKEY Then
Select Case wParam 'wParam 值就是 key_idHotKey
Case 1
Debug.Print "B" '没办法输出B,求解决,谢谢
'能否在这里加代码,让程序回到刚启动窗体的状态,就是什么都没有,等到截取
'这四组功能键执行相应的代码?请你帮帮忙!谢谢
End Select
End If
百度网友1ae4cb55f
2012-01-05 · TA获得超过158个赞
知道小有建树答主
回答量:162
采纳率:0%
帮助的人:98.2万
展开全部
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
此仅为模拟,肯定不能满足你的要求,只希望能给你点提醒。不知道写什么软件,我认为这个东西不应该难到没有人能回答。
追问
谢谢你的回答,知识你的回答不是我想要的。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kai520_258
2012-01-05
知道答主
回答量:20
采纳率:0%
帮助的人:18.2万
展开全部
我没明白你说的什么意思,但我由于兴趣,也当是练习就写了一个vb程序,上面有模拟键盘,和电脑键盘一样可以在任何能输入的页面输入,鼠标可以在箭头下面显示x,y坐标,需要的话可以给你注释,代码贴出来你也看不懂,不如实例好,有兴趣的话留个联系方式吧怎么传给你!
追问
我邮箱97000946@qq.com验证后400分相送,我QQ也是97000946
vb版本是6.0听说还需要三个文件,那三个文件我有。
程序启动时是窗体隐藏而且没有功能的,拦截那四个键是执行相应的功能,如启动或停止已写好的程序代码。
不是鼠标锁定在0,0位置,只是让他指向那个位子,有了这个代码我就可以随意修改后指向我想要的坐标。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
huangwy6312
2012-01-04 · TA获得超过132个赞
知道小有建树答主
回答量:187
采纳率:100%
帮助的人:55.3万
展开全部
没明白你要的意思
是要写一软件盘还是只需要拦截4个组合键?,然后让4个组合键分别输出ABCD?
是要让鼠标锁定在0,0位置吗?
VB什么版本?
追问
vb版本是6.0听说还需要三个文件,那三个文件我有。
程序启动时是窗体隐藏而且没有功能的,拦截那四个键是执行相应的功能,如启动或停止已写好的程序代码。
不是鼠标锁定在0,0位置,只是让他指向那个位子,有了这个代码我就可以随意修改后指向我想要的坐标。
追答
用SetCursorPos就能定位到你要的位置
用钩子就能拦截全局信息,楼上的都写出代码了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xlzzc
2012-01-05 · TA获得超过7301个赞
知道大有可为答主
回答量:4205
采纳率:50%
帮助的人:1433万
展开全部
共同研究。我空间有相关代码。 http://www.internals.com/
更多追问追答
追问
全英文,要知道我英语考试就没级格过,还是算了,谢谢你的分享!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式