无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
12
返回列表 发新帖
楼主: likeyouli
打印 上一主题 下一主题

求助获取窗口句柄的好工具?用了两个spy工具都没获取出来

[复制链接]
31#
发表于 2024-7-6 15:11:30 | 只看该作者
本帖最后由 liuzhaoyzz 于 2024-7-6 15:12 编辑
likeyouli 发表于 2024-7-6 11:59
谢谢超版的指点,
在b站找了按键精灵教程,估计要研究一段时间了
想法:估计每次弹出对话框的位置应该 ...

找色或者找图,可以全屏查找,不一定要在某个位置,可以全屏幕找色找图。
按键精灵里面有大量的例子。

VBSCall FindPic(42,513,321,697,"训养.bmp",1,x4,y4)
VBSCall FindColor(42,513,321,697,"424984",x11,y11)

If x11>=0 and y11>=0
    //移动到确定,单击
    MoveTo x11,y11
    LeftClick 1
end if
回复

使用道具 举报

32#
 楼主| 发表于 2024-7-6 15:34:08 来自手机 | 只看该作者
本帖最后由 likeyouli 于 2024-7-6 15:40 编辑
9zhmke 发表于 2024-7-6 15:08
用VBS写这个东西,必须查询进程的CPU占用率,由于播放时CPU占用会大一些,所以,你可以判断CPU较低的时候就 ...

非常感谢,,
可惜我不会vbs,我只会点vba,按您的思路,通过vba调用api函数,或vba调用cmd,通过查看cpu或内存占用大小,判断是否正在播放。如果没有播放,通过api,使鼠标在屏幕特定位置单击。实在不行,再用我写的vba微信自动发送消息,通知我一下,我再远程控制电脑播放。
回复

使用道具 举报

33#
发表于 2024-7-6 15:37:14 | 只看该作者
Const WM_GETTEXT = &HD
Const BM_CLICK = &HF5

' 定义必要的数据类型和结构
Type POINTAPI
    x As Long
    y As Long
End Type

Function Main()
    Dim hwnd, childHwnd, buttonHwnd, buf, text
    ' 无限循环
    Do
        hwnd = FindWindowByText("亲,您已经学了30分钟了,点击确定继续学习..")
        If hwnd <> 0 Then
            ' 查找按钮窗口并点击
            childHwnd = FindWindowEx(hwnd, 0, "Button", vbNullString)
            While childHwnd <> 0
                buf = Space(256)
                Call SendMessage(childHwnd, WM_GETTEXT, 256, ByVal buf)
                If InStr(buf, "确定") > 0 Then
                    buttonHwnd = childHwnd
                    Exit While
                End If
                childHwnd = FindWindowEx(hwnd, childHwnd, "Button", vbNullString)
            Wend
            
            If buttonHwnd <> 0 Then
                Call SendMessage(buttonHwnd, BM_CLICK, 0, 0)
            End If
        End If
        ' 每隔5秒检查一次对话框
        WScript.Sleep 5000
    Loop
End Function

Function FindWindowByText(windowText)
    Dim hwnd, buf, length
    hwnd = FindWindowEx(0, 0, vbNullString, vbNullString)
    While hwnd <> 0
        buf = Space(256)
        length = GetWindowText(hwnd, buf, Len(buf))
        If InStr(Left(buf, length), windowText) > 0 Then
            FindWindowByText = hwnd
            Exit Function
        End If
        hwnd = FindWindowEx(0, hwnd, vbNullString, vbNullString)
    Wend
    FindWindowByText = 0
End Function

' 声明 Windows API 函数
Private Declare Function FindWindowEx Lib "user32" _
    Alias "FindWindowExA" (ByVal hwndParent As Long, _
    ByVal hwndChildAfter As Long, ByVal lpszClass As String, _
    ByVal lpszWindow As String) As Long

Private Declare Function GetWindowText Lib "user32" _
    Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, _
    ByVal cch As Long) As Long

Private Declare Function SendMessage Lib "user32" _
    Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
    ByVal wParam As Long, ByVal lParam As Any) As Long

' 主函数调用
Main()

=======================
FindWindowByText 函数遍历所有顶层窗口,查找窗口标题中包含指定文本的窗口。
在找到目标窗口后,脚本通过 FindWindowEx 和 SendMessage 使用 WM_GETTEXT 消息来查找包含“确定”按钮的子窗口。
找到按钮后,脚本发送 BM_CLICK 消息来模拟点击按钮。
主循环每隔5秒检查一次目标对话框是否出现,如果出现则自动点击确定按钮。
此脚本需要管理员权限,确保在一个安全且受控的环境中运行此类脚本。将脚本保存为 .vbs 文件并运行。
VBS本身没有直接调用 Windows API 的能力,我们需要通过WMI(Windows Management Instrumentation)和 Win32 API 来实现。

看看有无借鉴作用

点评

vbs或者VBA自己好像没这功能,在按键精灵里是可以这么写的。 简单一点的方式就是调用 大模插件来实现OCR查询  详情 回复 发表于 2024-7-6 22:40
查找 “亲,您已经学了30分钟了,点击确定继续…” 这几个字,就能查到句柄?估计无论是否弹出对话框,这样都查询不到句柄。  详情 回复 发表于 2024-7-6 15:46
回复

使用道具 举报

34#
 楼主| 发表于 2024-7-6 15:46:27 来自手机 | 只看该作者
本帖最后由 likeyouli 于 2024-7-6 15:53 编辑
hlstudio 发表于 2024-7-6 15:37
Const WM_GETTEXT = &HD
Const BM_CLICK = &HF5


查找  “亲,您已经学了30分钟了,点击确定继续…”  这几个字,就能查到句柄?估计无论是否弹出对话框,这样都查询不到句柄,因为不是顶层窗口,弹出的对话框有没有句柄还存疑呢!
回复

使用道具 举报

35#
发表于 2024-7-6 22:40:25 | 只看该作者
hlstudio 发表于 2024-7-6 15:37
Const WM_GETTEXT = &HD
Const BM_CLICK = &HF5

vbs或者VBA自己好像没这功能,在按键精灵里是可以这么写的。
简单一点的方式就是调用 大模插件来实现OCR查询
回复

使用道具 举报

36#
发表于 2024-7-7 13:20:53 | 只看该作者
本帖最后由 eyf 于 2024-7-7 13:37 编辑
likeyouli 发表于 2024-7-5 17:47
万一没出来这个对话框,点一下就会停止播放了 ;所以必须先判断有没有这个对话框,有对话框再点击。

再点一下是不是就继续播放呢?

前面说明了,已清楚。

检查屏幕图片匹配,再点击确定,看来是比较合适的方案。不过有时点确定也无效就不好说了。

点评

用按键精灵,已经解决。弹出对话框用的找图,当弹出对话框的图出现的时候,鼠标自动移动到确定位置点击;暂停播放的时候中间会出现白色三角形圆圈,且三角形外边是黑色,用的找色,判断三角形位置是白色,三角形外边  详情 回复 发表于 2024-7-8 11:09
回复

使用道具 举报

37#
 楼主| 发表于 2024-7-8 11:09:44 | 只看该作者
本帖最后由 likeyouli 于 2024-7-8 11:16 编辑
eyf 发表于 2024-7-7 13:20
再点一下是不是就继续播放呢?

前面说明了,已清楚。

用按键精灵,已经解决。弹出对话框用的找图,当弹出对话框的图出现的时候,鼠标自动移动到确定位置点击;暂停播放的时候中间会出现白色三角形圆圈,且三角形外边是黑色,用的找色,判断三角形位置是白色,三角形外边是黑色,然后点击屏幕。
      遗憾:只能使当前视频播放完,,当播放完毕后,如何自动关闭当前网页,然后回到主页,点击下一个视频,还没想到如何解决。
回复

使用道具 举报

38#
发表于 2024-7-9 14:17:12 | 只看该作者
likeyouli 发表于 2024-7-8 11:09
用按键精灵,已经解决。弹出对话框用的找图,当弹出对话框的图出现的时候,鼠标自动移动到确定位置点击; ...

恭喜!恭喜!
后续的人工操作继续转为按键精灵操作,对你而言似乎问题不大了!

点评

正在思考如何从屏幕上提取数字或文字(如图片上或视频上), 可能需要用到大漠插件  详情 回复 发表于 2024-7-9 17:25
回复

使用道具 举报

39#
 楼主| 发表于 2024-7-9 17:25:01 | 只看该作者
eyf 发表于 2024-7-9 14:17
恭喜!恭喜!
后续的人工操作继续转为按键精灵操作,对你而言似乎问题不大了!

正在思考如何从屏幕上提取数字或文字(如图片上或视频上),
可能需要用到大漠插件
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-12-5 01:01

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表