一个关于 rust 和 windows api 的问题(重新发)

2023-07-20 13:01:17 +08:00
 maotao456

上一个帖子用错成语了,不好意思。重新发

我正在开发一款自动化程序,使用了 tauri + rust + windows api ,但是我在模拟鼠标点击这个消息的时候遇到了困难。

这是我在 stack overflow 的问题: https://stackoverflow.com/questions/76722377/how-to-send-click-message-to-tauri-using-postmessagew

知道 V2EX 上面有很多大哥, 烦请各位给指点迷津,在下不胜感激!

2054 次点击
所在节点    程序员
16 条回复
horizon
2023-07-20 13:45:17 +08:00
问下 chatGPT 吧,我试了下说的挺清楚的。
maotao456
2023-07-20 14:26:57 +08:00
@horizon 你是怎么问的?我也问了,就是问不到才来的。
maotao456
2023-07-20 14:27:17 +08:00
@horizon 有些东西是 gpt 在瞎说的。
crackidz
2023-07-20 14:29:19 +08:00
你这是点击网页的问题吧,不是 Windows API 的问题。API 这么用没什么问题
PTLin
2023-07-20 14:49:00 +08:00
我感觉思路应该是拿到 webview ,使用 webview 的 handle 来触发点击
aiqinxuancai
2023-07-20 15:04:54 +08:00
有以下几点你可以看看
1.tauri 的渲染是否是 D3D ,如果是,那么发消息基本是无效的
2.确认 tauri 是否有多层窗口句柄,这在模拟器上很常见,实际接收消息和会话消息是两个句柄
3.PostMessage 的左键按下时 wParam 值应该为 1 ,抬起时为 0
aiqinxuancai
2023-07-20 15:08:54 +08:00
还有,我看你代码上 get_webview_hwnd 的方法很奇怪,甚至都看不懂,寻找一个窗口句柄,如果可以确定窗口和类名的话,应该用 FindWindow 和 FindWindowEx
aiqinxuancai
2023-07-20 15:12:17 +08:00
#6 纠正低 2 条后面写的接收消息和绘制画面为两个句柄
ysc3839
2023-07-20 15:41:42 +08:00
怀疑是 X-Y Problem ,原始需求是什么?
为什么要模拟点击 Tauri ?看上去你的代码是自己控制自己的程序,那为什么不直接用 Edge WebView2 的接口呢?
LykorisR
2023-07-20 15:55:06 +08:00
都已经 webview 了,为什么还要调用 windows 的 API 去模拟点击 webview 的部分?为什么不直接用 JS 来模拟
maotao456
2023-07-20 16:41:59 +08:00
@LykorisR 我是想写个辅助,因为是别人的页游(整个页面就一个 Canvas),所以用 JS 来搞没什么思路。
maotao456
2023-07-20 16:44:40 +08:00
@aiqinxuancai 无法确认接收消息窗口,Tauri 是两层窗口,外层的窗口我知道 Title ,内层是一个 Webview ,所以我先找到外层的窗口,然后再获取内层的 Webview 的 HWND
maotao456
2023-07-20 16:45:30 +08:00
@ysc3839 我不确定 WebView2 是不是有模拟鼠标点击的接口,我去查一下。
ysc3839
2023-07-20 17:06:01 +08:00
@maotao456 有,就算没有也有 DevTools 接口,应该也可以模拟输入
zado
2023-07-21 01:26:41 +08:00
//可以这样模拟鼠标点击:
SetCursorPos(x,y);//可以用 ClientToScreen 计算出绝对位置
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
//已知缺陷,窗前必须保持在前台,期间不能做其他事了(除非工作在虚拟机中).
maotao456
2023-07-21 11:32:59 +08:00
@zado 这样不行,要能挂后台才靠谱

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

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

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

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

© 2021 V2EX