首页
社区
课程
招聘
用SendMessage后台按键出现的问题(应用游戏中模拟按键)
发表于: 2010-10-25 18:57 15763

用SendMessage后台按键出现的问题(应用游戏中模拟按键)

2010-10-25 18:57
15763
我想做一个在游戏中自动按键的小东西,可是做出来游戏中不能用那个快捷键,就是不能自动打怪,点聊天框时却出现我想按的那个键,给截图
VB6.0写的这是源码
Private Declare Function SendMessage& Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)
Private Declare Function SendMessageBynum& Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long)
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long '
Private Declare Function SetFocusAPI& Lib "user32" Alias "SetFocus" (ByVal hwnd As Long)
Private Declare Function SendMessageByString& Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String)
Private Const WM_CHAR = &H102
Private Sub Command1_Click()
Timer1.Enabled = True
Timer1.Interval = 100
End Sub
Private Sub Command2_Click()
Timer1.Enabled = False
End Sub
Private Sub Timer1_Timer()
Dim hwd As Long
Dim hwd1 As Long
hwd1 = Text1.Text 'txet1 中装着游戏的句柄
SendMessage hwd1, WM_CHAR, 49, 1 '模拟按键
End Sub

这是那个工具有取游戏句柄的和我编译的 桌面.rar

请大家帮忙看看

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (19)
雪    币: 216
活跃值: (171)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你在timer1可以用另一个函数
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal Scan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Private Sub Timer1_Timer()
Call keybd_event(49, 0, 0, 0) '模拟按下"1"键
End Sub
我试过可以的
2010-10-25 20:02
0
雪    币: 160
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不是,怪我没说明白,我要做的是后台运行多开的,不是前台运行的
谢谢whwhwzwz了,前台你说的这个函数我知道
2010-10-25 20:22
0
雪    币: 216
活跃值: (171)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
kb event可以后台运行啊
2010-10-25 20:35
0
雪    币: 160
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
whwhwzwz你和我说说怎么实现 我可以给你加分的
2010-10-25 20:50
0
雪    币: 7122
活跃值: (4065)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
SendMessage hwd1, WM_CHAR, 49, 0
2010-10-25 20:56
0
雪    币: 160
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
chinarenjf 不行的我试了  谢谢你了
2010-10-25 21:02
0
雪    币: 216
活跃值: (171)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
Call keybd_event(49, 0, 0, 0)你试过在游戏里没反映了?
2010-10-25 22:13
0
雪    币: 160
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
当游戏窗口是当前窗口时。就是最上面那个窗口为游戏窗口时keybd_event有效,
我想做的是在游戏最小化时 仍对游戏有效
2010-10-25 22:24
0
雪    币: 216
活跃值: (171)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
模拟按键只能在当前窗口实现,你最小化肯定实现不了的,最小化实现的太难我不会,好像要查找call什么的
2010-10-25 22:29
0
雪    币: 160
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
不是的啦 我在别的游戏里可以模拟  后台多开运行 就是这个游戏不知道怎么了好像给HOOK了  谢谢你了
2010-10-25 22:33
0
雪    币: 688
活跃值: (85)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
用SendMessage发送WM_KEYDOW 这是按下消息,然后再发送WM_KEYUP消息,需要说明的是,窗口不能缩小到最细的模式,不能获取句柄失败,从而导致发送消息失败!
2010-10-26 12:00
0
雪    币: 160
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
最小化是可以的,因为最小化时可以在聊天框中出现1,我是想按1这个键
我模拟别的小游戏都可以的
2010-10-26 12:17
0
雪    币: 897
活跃值: (30)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
你可以试验一下:
1.  使用PostMessage,不要用SendMessage。
2.  发送了按键按下的消息后还要发送一个按键松开的消息。
例如:
   ::PostMessage(mWin[i],WM_KEYDOWN,'2',0);
     ::PostMessage(mWin[i],WM_KEYUP,'2',0);

mWin[i]是句柄,        如果像上面说的用keybd_event一类的api的话则游戏不能最小化,用postmessage则可以实现后台模拟按键。
2010-10-26 12:21
0
雪    币: 934
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
windows核心编程里面有直接的代码
2010-10-26 16:13
0
雪    币: 21
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
.............用按键精灵 会不会更简单一点??!
2010-10-26 17:17
0
雪    币: 45
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
WM_CHAR 改成 WM_KEYDOW
2010-12-9 14:09
0
雪    币: 18
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
18
你怎么解决这问题的 我也有相同状况
2019-7-4 09:32
0
雪    币: 1558
活跃值: (3460)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
直接用大漠插件后台多开,破解版自己百度,自己实现费劲麻烦吃力..
2019-7-4 11:25
0
雪    币: 18
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
20
版主還在嘛  9年前的文章
2019-7-4 19:52
0
游客
登录 | 注册 方可回帖
返回
//