如何给非激活窗口发模拟按键?解决后再奉献100

aoeiuvcom 2005-09-02 12:40:43
本人现在正在玩快乐西游,想自己动手做个按键精灵之类的

完成了一小部分,就是在游戏窗口激活的情况下,用keybd_event给它虚拟按键

那么能不能在游戏窗口非激活状态下给它模拟按键呢?

通过WindowFromPoint找到窗口句柄,然后
postmessage(hwnd,wm_char,ord('A'),0)
但是,游戏没响应:(

猜测是:
1、接收输入的不是此窗口句柄,那么,会是哪个?
2、消息类型写错
3、发送方式不对

请高手帮忙:
1、怎么获得当前接受输入的句柄或其他什么
2、这类游戏窗口,怎么在非激活情况下模拟按键?

解决了后再奉献100分
...全文
432 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jinjazz 2005-09-02
  • 打赏
  • 举报
回复
大部分单机游戏在非激活状态下是挂起的
zhuojohn 2005-09-02
  • 打赏
  • 举报
回复
试一试Perform()
aoeiuvcom 2005-09-02
  • 打赏
  • 举报
回复
解决了第一个问题:GetGUIThreadInfo

下面,得试试该通过什么方式发什么消息了

可惜,现在试不了,家里的电脑才装了那游戏
nwpulipeng 2005-09-02
  • 打赏
  • 举报
回复
学习中,无权发言
aoeiuvcom 2005-09-02
  • 打赏
  • 举报
回复
搞错,计算器可以接收
aoeiuvcom 2005-09-02
  • 打赏
  • 举报
回复
大家可以试试系统自带的计算器,给它的窗口句柄发键盘消息是不响应的
xixuemao 2005-09-02
  • 打赏
  • 举报
回复
用wm_settext呢?
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
begin
s:= 'kgb';
sendmessage($206e2,WM_SETTEXT,0,LPARAM(PChar(s)));
end;

我给一个notepad发送消息,它也没处于激活状态啊。
aoeiuvcom 2005-09-02
  • 打赏
  • 举报
回复
我有个设想,就是先把窗口激活,找出它接受输入的控件、句柄之类的东西,再给它发消息

问题是,怎么找当前系统接受收入的句柄?
aoeiuvcom 2005-09-02
  • 打赏
  • 举报
回复
快乐西游是个网络游戏,在非激活情况下照样跑着
bluejing0 2005-09-02
  • 打赏
  • 举报
回复
perform??
不懂
perform 我只有这样用过,就是本窗体perform一个message相当于系统向他发送了一个msg
但是现在游戏本身不能改,怎么perform呢?

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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