如果上述方案不能解决, 我想下面这个应该可以 (实际操作, 请把程序及其窗口相关信息修改为您所需要的内容):
由于没有录像程序操作, 只能如此这般了...
;============== 如果上述方案均不能奏效, 请试试下边这个 =====================
$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 编辑 ] |