eyf 发表于 2024-7-9 14:17 正在思考如何从屏幕上提取数字或文字(如图片上或视频上), 可能需要用到大漠插件 |
likeyouli 发表于 2024-7-8 11:09 恭喜!恭喜! 后续的人工操作继续转为按键精灵操作,对你而言似乎问题不大了! |
本帖最后由 likeyouli 于 2024-7-8 11:16 编辑 eyf 发表于 2024-7-7 13:20 用按键精灵,已经解决。弹出对话框用的找图,当弹出对话框的图出现的时候,鼠标自动移动到确定位置点击;暂停播放的时候中间会出现白色三角形圆圈,且三角形外边是黑色,用的找色,判断三角形位置是白色,三角形外边是黑色,然后点击屏幕。 遗憾:只能使当前视频播放完,,当播放完毕后,如何自动关闭当前网页,然后回到主页,点击下一个视频,还没想到如何解决。 |
本帖最后由 eyf 于 2024-7-7 13:37 编辑 likeyouli 发表于 2024-7-5 17:47 再点一下是不是就继续播放呢? 前面说明了,已清楚。 检查屏幕图片匹配,再点击确定,看来是比较合适的方案。不过有时点确定也无效就不好说了。 |
hlstudio 发表于 2024-7-6 15:37 vbs或者VBA自己好像没这功能,在按键精灵里是可以这么写的。 简单一点的方式就是调用 大模插件来实现OCR查询 |
本帖最后由 likeyouli 于 2024-7-6 15:53 编辑 hlstudio 发表于 2024-7-6 15:37 查找 “亲,您已经学了30分钟了,点击确定继续…” 这几个字,就能查到句柄?估计无论是否弹出对话框,这样都查询不到句柄,因为不是顶层窗口,弹出的对话框有没有句柄还存疑呢! |
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 来实现。 看看有无借鉴作用 |
本帖最后由 likeyouli 于 2024-7-6 15:40 编辑 9zhmke 发表于 2024-7-6 15:08 非常感谢,, 可惜我不会vbs,我只会点vba,按您的思路,通过vba调用api函数,或vba调用cmd,通过查看cpu或内存占用大小,判断是否正在播放。如果没有播放,通过api,使鼠标在屏幕特定位置单击。实在不行,再用我写的vba微信自动发送消息,通知我一下,我再远程控制电脑播放。 |
本帖最后由 liuzhaoyzz 于 2024-7-6 15:12 编辑 likeyouli 发表于 2024-7-6 11:59 找色或者找图,可以全屏查找,不一定要在某个位置,可以全屏幕找色找图。 按键精灵里面有大量的例子。 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 |
用VBS写这个东西,必须查询进程的CPU占用率,由于播放时CPU占用会大一些,所以,你可以判断CPU较低的时候就是跳出弹窗的时候。
|
来学习 |
有能力的大佬这么多,无忧太强大了 |
liuzhaoyzz 发表于 2024-7-6 07:23 谢谢超版的指点, 在b站找了按键精灵教程,估计要研究一段时间了 想法:估计每次弹出对话框的位置应该是一样的(如果每次弹出的对话框位置不同,后边的判断将不成立),所以在弹出对话框这个区域内,多取几个点的颜色,过一段时间,在同样的位置再取颜色,如果与之前取的颜色相等,即判定出弹出了对话框,然后鼠标点击确定。 |
本帖最后由 ppll-2030 于 2024-7-6 11:48 编辑 likeyouli 发表于 2024-7-6 09:36 你那个发信息也是快捷键激活了程序窗口并置顶,才操作的。 vbs也只能对真正激活并置顶的对象使用sendkeys,所以一些弹窗,但不置顶的窗口需要act一下才是激活置顶。 按你的这个情况,这个提醒窗口可能不是真正的弹窗置顶提醒,应该是网页子窗口,同时还不对键盘支持。 我是没辙了,建议尝试用其他鼠标脚本工具来操作了。 我常用的MacroRecorder可以检测图片和色块功能,你可以试试。 |
likeyouli 发表于 2024-7-6 10:09 嗯,所以你这个简单的办法,就是用基于浏览器自动化的软件进行使用,此类软件有的是基于浏览器扩展的,有的是软件中包含浏览器框架。 其次估计就是进行窗口OCR,以前曾遇到过此类,什么办法都无用,最终发现OCR点击其实也挺好用的。 |
moonlune 发表于 2024-7-6 09:53 播放的时候:按回车键没用,按空格键可以暂停,再按空格键继续播放; 弹出对话框的时候:按啥键都没用,必须鼠标点击确定。(有时候点击完确定也不能继续播放,必须再按一下空格键才能继续播放。) |
干的漂亮666 |
本帖最后由 likeyouli 于 2024-7-6 09:48 编辑 ppll-2030 发表于 2024-7-5 20:02 肯定是激活状态测试的,这点我还懂。顺便向您展示一下我写的微信自动聊天代码(VBA):laopo替换为自己的微信好友账号,可以是备注名字,不能是汉字。 Sub 微信自动发信息() Set ws = CreateObject("wscript.shell") For N = 1 To 3 ws.SendKeys "^%w", True Application.Wait (Now() + TimeSerial(0, 0, 2)) ws.SendKeys "^f", True Application.Wait (Now() + TimeSerial(0, 0, 3)) ws.SendKeys "laopo", True Application.Wait (Now() + TimeSerial(0, 0, 3)) ws.SendKeys "{enter}", True Application.Wait (Now() + TimeSerial(0, 0, 2)) DoEvents ws.SendKeys "Zidongfasong" & N, True DoEvents Application.Wait (Now() + TimeSerial(0, 0, 3)) ws.SendKeys "^~", True Application.Wait (Now() + TimeSerial(0, 0, 2)) ws.SendKeys "{ESC}", True Application.Wait (Now() + TimeSerial(0, 0, 1)) Next N End Sub |
527104427 发表于 2024-7-5 19:32 谢谢分享,下载试试看 |
likeyouli 发表于 2024-7-5 18:47 你试试在弹出对话框后,你点击对话框的标题栏,使窗口处于激活置顶状态,再按回车有没有没反应? 如果是这种情况,可以加一句ws.appactivate("消息") 激活窗口,再输出确认。 |
holley2008 发表于 2024-7-5 18:51 刚测试了一下,播放的时候:按回车没反应,按空格键暂停,再按空格键继续播放。 |
likeyouli 发表于 2024-7-5 17:47 按回车会暂停播放,再按一次会再次播放吗? |
本帖最后由 likeyouli 于 2024-7-5 19:10 编辑 ppll-2030 发表于 2024-7-5 18:39 弹出对话框后,经我测试,直接按回车没用,按空格或其他键也没用,必须鼠标点击确定才能继续播放,如果点晚了,点击确定后还必须再点一下屏幕或按空格键才能继续播放。 |
szwp 发表于 2024-7-5 18:38 期待着您周一的回复 |
likeyouli 发表于 2024-7-5 17:48 VBS就可以啦。把下面代码保存为vbs文件,打开视频后运行即可。
|
Powered by Discuz! X3.3
© 2001-2017 Comsenz Inc.