作者sosokill (随便杀)
看板C_and_CPP
标题[问题] 对目标视窗模拟发送键盘讯息
时间Sat Apr 11 05:33:36 2009
我写了一个小程式,模拟发送一个键盘讯息,再测试的时候是用游戏程式当作目标视窗,
试过了几个游戏,却发现,如果游标是在对话输入栏,则可以正常的接收,
但是却无法启动技能快捷键。
例如:用以下的程式码为例子,
hWnd=::FindWindow(NULL,_T("万王之王3:黛妮雅"));
PostMessageA(hWnd,WM_KEYDOWN,0x31,0);
我发送了按下按键 "1" 的讯息给 "万王之王3:黛妮雅" 这个游戏程式,
如果当时我是正好在输入对话讯息,则可以成功的模拟输入,
但如果是在一般的状态,却没办法触发快捷键1的效果。
原本以为是该游戏有防止这种情况发生的功能,但是我用按键精灵测试,
却可以成功的模拟输入。
不知道有人是否能告知一下问题出在哪边,还是说不应该用Post而要用Send?
另外,我在MSDN网站上有找到有一个SendKeys函式,
该网页也有注明适用於Microsoft Visual Studio 2005,
但我搜寻过VS2005里面的Include档,并没有找到这个函式,这是为什麽呢?
PS:不知道这个有没有违反版规,因为可以算是外挂的雏型,
如果有,请告知一下,我会自动删文,感谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.129.39.100
※ 编辑: sosokill 来自: 140.129.39.100 (04/11 05:36)
1F:推 bugmens:可参考11605篇,文章代码#183zHOD_ ,delphi ktop目前关站 04/11 06:13
4F:→ bugmens:google搜寻KbdClass又是driver的东西,结论:还是花钱好了 04/11 06:19
5F:→ ray2501:keybd_event 04/11 07:20
6F:→ ray2501:或者是使用 SendInput 04/11 07:21
7F:→ ray2501:不要用 Message,用上面二个模拟 04/11 07:24
8F:推 liangjr:keybd_event, mouse_event 04/11 07:44
9F:→ tsaiminghan:可以用vs2005的spy看看你send的讯息和实际上的有什麽 04/11 09:27
10F:→ tsaiminghan:差别 04/11 09:27
11F:→ sosokill:但是使用Keybd_event和SendInput似乎都只能发送至当前的 04/11 14:59
12F:→ sosokill:视窗或全部的视窗,可是我现在是想发送至指定视窗 04/11 14:59
13F:→ sosokill:如果是配合SetForegroundWindow使用,感觉上又不怎好 04/11 15:00
14F:→ sosokill:有没有两全其美的方法啊? 04/11 15:00
15F:推 sunneo:SendMessage不好吗? 可以发送到FindWindow得到的HWND 04/11 22:49
16F:→ tsaiminghan:上面的说法是没用,可能有挡。 04/11 23:54
17F:→ sosokill:回楼上,会跟postmessage一样的问题 04/11 23:54
18F:→ ewn:如果SendMessage或PostMessage会被挡的话,那就inject dll 04/12 00:30