V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
maotao456
V2EX  ›  程序员

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

  •  
  •   maotao456 · 2023-07-20 13:01:17 +08:00 · 2063 次点击
    这是一个创建于 526 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    16 条回复    2023-07-21 11:32:59 +08:00
    horizon
        1
    horizon  
       2023-07-20 13:45:17 +08:00
    问下 chatGPT 吧,我试了下说的挺清楚的。
    maotao456
        2
    maotao456  
    OP
       2023-07-20 14:26:57 +08:00
    @horizon 你是怎么问的?我也问了,就是问不到才来的。
    maotao456
        3
    maotao456  
    OP
       2023-07-20 14:27:17 +08:00
    @horizon 有些东西是 gpt 在瞎说的。
    crackidz
        4
    crackidz  
       2023-07-20 14:29:19 +08:00
    你这是点击网页的问题吧,不是 Windows API 的问题。API 这么用没什么问题
    PTLin
        5
    PTLin  
       2023-07-20 14:49:00 +08:00
    我感觉思路应该是拿到 webview ,使用 webview 的 handle 来触发点击
    aiqinxuancai
        6
    aiqinxuancai  
       2023-07-20 15:04:54 +08:00
    有以下几点你可以看看
    1.tauri 的渲染是否是 D3D ,如果是,那么发消息基本是无效的
    2.确认 tauri 是否有多层窗口句柄,这在模拟器上很常见,实际接收消息和会话消息是两个句柄
    3.PostMessage 的左键按下时 wParam 值应该为 1 ,抬起时为 0
    aiqinxuancai
        7
    aiqinxuancai  
       2023-07-20 15:08:54 +08:00
    还有,我看你代码上 get_webview_hwnd 的方法很奇怪,甚至都看不懂,寻找一个窗口句柄,如果可以确定窗口和类名的话,应该用 FindWindow 和 FindWindowEx
    aiqinxuancai
        8
    aiqinxuancai  
       2023-07-20 15:12:17 +08:00
    #6 纠正低 2 条后面写的接收消息和绘制画面为两个句柄
    ysc3839
        9
    ysc3839  
       2023-07-20 15:41:42 +08:00 via Android
    怀疑是 X-Y Problem ,原始需求是什么?
    为什么要模拟点击 Tauri ?看上去你的代码是自己控制自己的程序,那为什么不直接用 Edge WebView2 的接口呢?
    LykorisR
        10
    LykorisR  
       2023-07-20 15:55:06 +08:00
    都已经 webview 了,为什么还要调用 windows 的 API 去模拟点击 webview 的部分?为什么不直接用 JS 来模拟
    maotao456
        11
    maotao456  
    OP
       2023-07-20 16:41:59 +08:00
    @LykorisR 我是想写个辅助,因为是别人的页游(整个页面就一个 Canvas),所以用 JS 来搞没什么思路。
    maotao456
        12
    maotao456  
    OP
       2023-07-20 16:44:40 +08:00
    @aiqinxuancai 无法确认接收消息窗口,Tauri 是两层窗口,外层的窗口我知道 Title ,内层是一个 Webview ,所以我先找到外层的窗口,然后再获取内层的 Webview 的 HWND
    maotao456
        13
    maotao456  
    OP
       2023-07-20 16:45:30 +08:00
    @ysc3839 我不确定 WebView2 是不是有模拟鼠标点击的接口,我去查一下。
    ysc3839
        14
    ysc3839  
       2023-07-20 17:06:01 +08:00 via Android
    @maotao456 有,就算没有也有 DevTools 接口,应该也可以模拟输入
    zado
        15
    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
        16
    maotao456  
    OP
       2023-07-21 11:32:59 +08:00
    @zado 这样不行,要能挂后台才靠谱
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2544 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 15:21 · PVG 23:21 · LAX 07:21 · JFK 10:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.