如何向后台(非活动)的游戏窗口发送键盘按键消息,不是普通窗口!(100分)

  • 主题发起人 主题发起人 webyjh
  • 开始时间 开始时间
W

webyjh

Unregistered / Unconfirmed
GUEST, unregistred user!
如何向后台(非活动)的游戏窗口发送键盘按键消息,不是普通窗口!

下面是我的线程单元的主要过程
procedure TBeginThrd.Execute;
var
Wnd: HWND;
begin
//找到窗口标题为'Element Client'的窗口的句柄
Wnd := FindWindow(nil,'Element Client');
if Wnd <> 0 then
begin
repeat
//重复发送键盘按键2
keybd_event(ord('2'), MapVirtualKey(ord('2'), 0), 0, 0);
keybd_event(ord('2'),MapVirtualKey(ord('2'),0),KEYEVENTF_KEYUP,0);
sleep(5000);
until Terminated;
end
else
Messagebox(handle,'相应程序没有运行!','提示',MB_OK+MB_IconError);
end;

这程序当游戏窗口为当前活动窗口时可以正确发送2键,但是游戏窗口最小化后却无效,但我换成"记事本"程序时却又可以,不得其解,望高手指点一二,小弟感激不尽!

忘记说了,postmessage() sendmessage()也都试过了,都是一样的无效
 
这个似乎要用Hook实现...
 
哦,hook怎么弄?感谢回答
 
这种事情喊麻子来一下子搞定...
最小化之后你得看看它的标题还是不是Element Client???
 
标题没有变化的,还是老样子,刘麻子挺忙的,好像架子也越来越大了,一不小心说了LMZ美眉的坏话
 
我以前用HOOK做过,不行啊~
游戏里面,比如,暗黑破坏神, 打开一个装备窗口,我用什么方法可以得知?

希望达人解决!
 
越来越热闹了,想知道答案的朋友,帮忙顶啊[:D]
 
帮顶!!!
 
顶到有人说出答案!
 
谁能给我满意的答案,我再加70分(只有这么多了)
 
我也来答一下
这个功能应该是用来写游戏辅助的吧,前些时候写过一个征途的辅助,后来发现TMD内存改动太频繁,没心情天天去跟就算了,关于发模拟键到是有点心得。
很不幸,用POSTMESSAGE/SENDMESSAGE不能给游戏发按键,原因大概是游戏应用的DIRECT之类的输入控制,且不响应一般的消息(就是防模拟),所以只能用keybd_event,但这个东东必须是前台才能接收,没办法了,准备发的时候切换吧,完了再切换回来,为了避免闪烁要用到AttachThreadInput,例子网上有,搜索一下就知道了,有没有更好的办法就不知道了,呵呵
 
嗯,就是一个简单的游戏外挂,现在蛮火的叫 <武林外传>,网上的都是收费的,我想自己编个自用的,这样我可以同时玩游戏和学习了,我发现有的外挂确实是可以实现向后台窗口发送按键消息的,不知道原理是什么[:(]
 
我想做一个<魔兽世界>的外挂,大多都做好了,仿按键是用Key_Event的,想换成非激活状态下也能发就好..
还有,我用TSearch找不到魔兽世界的进程...不能动态查找他的内存,这是怎么回事?
回来出来,我再加100分.
cmd9x,期待与你交流.我的EMail是:gy3z#163.com
 
我也是菜鸟,你说的我不太懂啊
 
有高手这样做
//发送F1
sendMessage(hw,WM_KEYDOWN,112,0);

使用发送扫描码的方式可以发送对应的按键F1
如果我要发送1这样的数字键应该如何写?
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部