找回密码
 加入
搜索
查看: 1712|回复: 3

求录象开机自动运行的办法?

[复制链接]
发表于 2009-3-20 17:14:04 | 显示全部楼层 |阅读模式
程序开机运行是解决了的,RUN:("DVR.EXE")
进入程序后要点击其中一个按钮才能手工录象,象停电跳闸之类的情况..手工不点击,就没有录上象了...
想了用CONTRLCHICK  抓坐标的方法,由于要手工点击“录象”的位置比较特殊,一抓坐标就出现比较广的范围...这样就不能成功了.....想来想去就没办法了....求救!~~~

截图表示!:(点击前后)   其实只要点击一个键就OK了,就是那个全开! 大家给我想想办法啦!

[ 本帖最后由 wyly66666 于 2009-3-20 17:32 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2009-3-23 19:04:08 | 显示全部楼层
对于无法准确获取控件名称 / 类型 / ID 的情况下, 只好采取模拟按键的方式, 有时却也可以奏效.

由于没有程序可以实际操作, 提供个思路, 仅供参考(不见得一定有效)!

$WinTitle = '录像窗口标题文本'
;WinText = '录像窗口可见文本' ;如果有可见文本, 则修改引号内文字并删掉前面的半角分号, 否则留空(两个半角引号: '' )!

WinWait($WinTitle, $WinText)
If Not WinActivate($WinTitle, $WinText) Then WinActivate($WinTitle, $WinText)
$i = ? ;就看程序运行后, 您需要按几下 TAB 键才能把焦点移到 "全开" 按钮上了, 此处 ? 视具体情况修改
Send('{Tab ' & $i &'}')  
Send('{Space}') ;按空格键执行, 相当于按回车键
;Send('{Enter}') ;按空格或按回车随意, 想用哪个就用哪个


[ 本帖最后由 ahkang 于 2009-3-23 19:26 编辑 ]
发表于 2009-3-23 19:25:21 | 显示全部楼层
由于没有程序参考, 下面这个是 "就地取材" 做的, 自己看着修改吧:

$WinTitle = '显示 属性' ;录像窗口标题文本(此处以设置桌面的 "显示 属性" 窗口代
$WinText = '' ;如果录像窗口有可见文本, 则填入引号内, 否则留空(不填)!

Opt('WinTitleMatchMode',4) ;窗口标题匹配模式: 高级匹配
Opt('WinWaitDelay',500) ;窗口等待延时, 500 毫秒
Opt('SendKeyDelay',800) ;发送按钮延时 800 毫秒, 此处我故意改数值大些, 目的是要想看个清楚

Run(@ComSpec&' /C Start Desk.Cpl','',@Sw_Hide) ;运行 Desk.Cpl 文件
WinWait($WinTitle, '') ;暂停脚本, 等待目标窗口出现再继续执行下面代码
If Not WinActivate($WinTitle, '') Then WinActivate($WinTitle, '') ;如果目标窗口没有激活则激活它
$i = 3 ;就看程序运行后, 您需要按几下 TAB 键才能把焦点移到 "全开" 按钮上了, 此处 ? 视具体情况修改
Send('{Tab ' & $i &'}') ;发送 3 个 TAB 键(即模拟按三次 TAB 键)
Send('{Space}') ;按空格键执行, 相当于按回车键
;Send('{Enter}') ;按空格或按回车随意, 想用哪个就用哪个
发表于 2009-3-23 21:02:07 | 显示全部楼层

模拟鼠标自动点击"云台控制"录像系统"全开"按钮

如果上述方案不能解决, 我想下面这个应该可以 (实际操作, 请把程序及其窗口相关信息修改为您所需要的内容):
由于没有录像程序操作, 只能如此这般了...

;==============  如果上述方案均不能奏效, 请试试下边这个  =====================

$WinTitle = '显示 属性' ;录像窗口标题文本(此处以设置桌面的 "显示 属性" 窗口代
$WinText = '' ;如果录像窗口有可见文本, 则填入引号内, 否则留空(不填)!
$Config = @ScriptDir&'\UserInfo.Dat'
Dim $PosX,$PosY

Opt('WinTitleMatchMode',4) ;窗口标题匹配模式: 高级匹配
Opt('WinWaitDelay',500) ;窗口等待延时, 500 毫秒
Opt('SendKeyDelay',800) ;发送按钮延时 800 毫秒, 此处我故意改数值大些, 目的是要想看个清楚

        TrayTip("程序已启动最小化于此, 请决定是否重设坐标值...","建议初次运行请按照提示移动鼠标,记录目标控件坐标值... ",1,4)
        Sleep(5000)
        If WinExists($WinTitle, '') Then ;如果已经存在目标窗口, 则执行下面代码直接激活它
                WinActivate($WinTitle, '') ;如果目标窗口没有激活则激活它
                WinSetState($WinTitle, '',@Sw_ShowMaxiMized) ;如果窗口不铺满屏幕, 则无条件让它满屏, 保证目标控件坐标值不变(多数程序均是以屏幕居中窗口运行的, 貌似此步似乎可以忽略...)
        Else
                Run(@ComSpec&' /C Start Desk.Cpl','',@Sw_Hide) ;如果检测不到目标窗口, 则运行 Desk.Cpl (目标程序)文件
        EndIf
        
If FileExists($Config) = 0 Then ;如果不存在 UserInfo.Dat 配置文件, 则执行下面代码写入一个空坐标值配置文件
        IniWriteSection($Config,'云台控制','','') ;写入配置文件以备以后调用... [此处写入配置字段]
        IniWrite($Config,'云台控制','X','') ;写入 X 坐标, 初始值为空
        IniWrite($Config,'云台控制','Y','') ;写入 Y 坐标, 同上
Else
                WinWait($WinTitle, '') ;暂停脚本, 等待目标窗口出现再继续执行下面代码
                WinSetState($WinTitle, '',@Sw_ShowMaxiMized) ;如果窗口不铺满屏幕, 则无条件让它满屏, 保证目标控件坐标值不变(多数程序均是以屏幕居中窗口运行的, 貌似此步似乎可以忽略...)
                If Not WinActivate($WinTitle, '') Then WinActivate($WinTitle, '') ;如果目标窗口没有激活则激活它

        $AskMsg = MsgBox(36+262144,'检测到先前的一个配置文件, 是否重新设置? 本消息框将在 5 秒后消失...','强烈建议'& _ ;消息提示初次运行是否设置, 如已经设置过了, 请忽略此消息...
                '初次运行必须先设置, 如果已在本机上已经设置且未改分辨率, 请忽略此消息!',5)
                $PosX = IniRead($Config,'云台控制','X','') ;读取配置文件 X 坐标值
                $PosY = IniRead($Config,'云台控制','Y','') ;读取配置文件 Y 坐标值
        If $AskMsg = -1 Or $AskMsg = 7 And $PosX <> '' And $PosY <> '' Then
                AutoClick()
        Else
                MsgBox(262144,'请不要理会此窗口, 5 秒后会自动消失... ','请立即移动鼠标到【全开】按钮的中心, 让程序记录【全开】按钮的坐标值... ',5) ;消息提示用户操作
                Sleep(5000) ;延时 (5000毫秒) 5秒 等待移动鼠标到 "全开" 按钮上...
        
                $Pos = MouseGetPos() ;获取鼠标所在坐标值
                IniWrite($Config,'云台控制','X',$Pos[0]) ;写入 X 坐标
                IniWrite($Config,'云台控制','Y',$Pos[1]) ;写入 Y 坐标
        
                MsgBox(262144, "本消息框 3 秒后消失...","【全开】按钮的坐标值分别是:" & @Cr & @Cr & "        X 坐标是:" & $Pos[0] & @Cr & _ ;消息提示对应坐标值...
                        "        Y 坐标是:" & $Pos[1],3)
        
                $PosX = IniRead($Config,'云台控制','X','') ;读取配置文件 X 坐标值
                $PosY = IniRead($Config,'云台控制','Y','') ;读取配置文件 Y 坐标值
                AutoClick()
        EndIf
EndIf

Func AutoClick()
        If Not WinExists($WinTitle, '') Then
                MsgBox(16+262144,'哎呀, 不好啦~~~ 老大! 目标窗口在哪儿呢? ','真是出人意料之外!' & _ ;如果目标窗口不存在, 则延时 5秒消息提示
                ' 都还没有运行完您就把窗口关了! 这就退出... ',5)
                Exit
        Else
                If Not WinActivate($WinTitle, '') Then WinActivate($WinTitle, '') ;如果目标窗口没有激活则激活它
                WinSetState($WinTitle, '',@Sw_ShowMaxiMized) ;如果窗口不铺满屏幕, 则无条件让它满屏, 保证目标控件坐标值不变(多数程序均是以屏幕居中窗口运行的, 貌似此步似乎可以忽略...)
                WinActivate($WinTitle, '')
                MouseClick('PrimAry',$PosX,$PosY)
        EndIf
EndFunc ;===>自定义模拟鼠标点击函数...

;=============  全部代码就是这些啦! 如果这个也无法奏效, 那就无招喽 =================


[ 本帖最后由 ahkang 于 2009-3-23 21:04 编辑 ]
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-24 02:02 , Processed in 0.082794 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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