windows 消息机制求教,触发第三方软件的按钮事件

2019-05-05 11:10:02 +08:00
 daijinming

有这么一个案例求教下大家,可以获得第三方应用的句柄,考虑在其窗口上悬浮一个操作按钮,点击按钮要求触发下面第三方应用的按钮事件,不知道是否可行

3305 次点击
所在节点    程序员
30 条回复
gino86
2019-05-05 14:17:04 +08:00
可以,enumwindows 函数枚举窗口 -> 找到第三方应用的按钮位置-> 发送鼠标点击事件到该按钮
daijinming
2019-05-05 14:24:36 +08:00
@gino86 朋友能加我 QQ 1055540431@qq.com
gino86
2019-05-05 14:26:36 +08:00
@加 QQ 就免了吧,这个网上搜索大把的资料
daijinming
2019-05-05 14:38:27 +08:00
@gino86 我需要个 C#的 Demo,可以发个红包,交个朋友
qq316107934
2019-05-05 14:42:46 +08:00
@daijinming #4 用 SendMessage API 即可,V 站是鼓励开源和互相学习的平台,建议自己去学习下,并不复杂。
gino86
2019-05-05 14:45:10 +08:00
这是模拟鼠标点击的代码,其他的自己百度或者 google 吧,不难的
https://stackoverflow.com/questions/2416748/how-do-you-simulate-mouse-click-in-c
huhangfei
2019-05-05 14:46:13 +08:00
我之前写的一个简单工具,里面有用,希望对你有帮助。~,~
https://github.com/huhangfei/yys_bee
sarlanori
2019-05-05 15:03:04 +08:00
这个不需要悬浮一个操作按钮吧,直接操作第三方应用的按钮不就好了
daijinming
2019-05-05 16:12:49 +08:00
@sarlanori 主要第三方的按钮不明显,又改不了
daijinming
2019-05-05 16:15:20 +08:00
@gino86 第三方的软件是基于 C++开发的,并且不开源,我如何知道对方的按钮事件触发的是什么消息
sarlanori
2019-05-05 16:16:45 +08:00
@daijinming 用 Spy++ 查看 Windows Messages
xuddk727
2019-05-05 16:17:12 +08:00
已知窗口没必要 enumwindows 枚举,可通过 findwindow 查找特定窗口,发送按钮事件可通过 sendmessage 或者 mouseevnet 模拟鼠标
xuddk727
2019-05-05 16:19:38 +08:00
你需要确认下窗体是否是 dui,dui 的没句柄,非 dui 则直接 sendmessage 发送 bm_click 即可,wparam 和 lparam 查 msdn 可得。
xuddk727
2019-05-05 16:23:40 +08:00
daijinming
2019-05-05 16:33:53 +08:00
@xuddk727 感谢,朋友
zjsxwc
2019-05-05 16:36:59 +08:00
迅雷这种根本没有按钮句柄,只能模拟鼠标点击
gino86
2019-05-05 16:41:49 +08:00
如果窗体是 dui,你可以获取窗体的位置,但按钮的位置你无法获取到吧, 包括 wpf 控件,基本上只能获取根窗体,窗体内的内容你是没有办法获取到的,按钮位置只能靠大概猜测
daijinming
2019-05-05 16:47:35 +08:00
@gino86 调用第三方窗体中的按钮点击事件还需要知道按钮位置吗?
hakono
2019-05-05 16:50:03 +08:00
楼主你这是完全不懂 windows 开发啊

用 FindWindowA 找到对应窗口的句柄,然后计算下坐标,直接调用 SendMessage 往对应窗口发对应的鼠标消息就好了。和有没有按钮句柄没有关系
对应窗口的 classname 用 spy++看,需要接收什么消息搞不清楚的话也用 spy++抓一下就好了

这和用 C#还是 C++一点关系都没有,都是调 win32 api 罢了,用 python 都能写的东西

当然这个方法仅限于使用标准 windows 消息机制的程序。如果是游戏这种为了效率,跳过消息机制直接用 DirectInput 获取鼠标点击的话,需要模拟点击了。
gino86
2019-05-05 16:59:52 +08:00
我的意思是,如果是类似 dui 创建的应用,你是没有办法找到窗口句柄的,这些应用有且只有一个窗口,即根窗口(只有这个窗口有句柄),所有内容都在这个根上面画出来,当然按钮也是(因此没有句柄)。也就是说,sendMessage 就没有用了。当然你也没有办法取得按钮的准确位置就是了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/561033

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX