解决了,用一个数组来记录每次一次窗口状态的变化值。Global $aGetWeb[5] = [1, 1, 1, 1, 1]
Global $iag = 0
while 1
;当目标路径未打开,且任意一个网银窗口出现(激活)时:
If BitAND(WinGetState("浦发银行网银客户端"), 2) And Not WinExists("spdb_ScreenCapture") Then
$bKHWinExi = True ;用来记录网银窗口出现了
$dKHOpenNum = 0 ;当网银窗口出现后,要把打开次数恢复为0,否则再次打开网银,就不会再执行ShellExecute($sPath)了。
ElseIf BitAND(WinGetState("上海浦东发展银行公司网上银行"), 2) And Not WinExists("spdb_ScreenCapture") Then
$bWebWinExi = True ;用来记录网银窗口出现了
$dWebOpenNum = 0 ;当网银窗口出现后,要把打开次数恢复为0,否则再次打开网银,就不会再执行ShellExecute($sPath)了。
EndIf
;网页版网银登录的过程中,窗口的可见状态会由可见变为不可见,然后再变为可见,也就是登录的过程中,会先消失再出现,所以简单的判断窗口从无到有,再到关闭,是不行的,
;必须将它的可见状态的变化存入数组中,即状态值变化过程为:0→2→0→2→0,第1个0表示窗口没有出现,第1个2表示窗口出现,第2个0,就是登录过程中窗口消失掉,第2个2,是窗口
;消失后又出现,第3个0,是用户关闭网页。
Local $iGetWeb = BitAND(WinGetState("上海浦东发展银行公司网上银行"), 2) ;主循环每循环一次,就获取一次网页版网银窗口的状态值。
If $iag = 0 Then
$aGetWeb[$iag] = $iGetWeb ;把$iGetWeb的第一个值填入数组第一个元素。
$iag = $iag + 1 ;主循环第一轮循环过后,把$iag的值变为1
Else
If $iGetWeb <> $aGetWeb[$iag - 1] Then ;第二轮循环时(以及第三、四...轮循环),判断$iGetWeb值与上一个已填入数组的元素对比,不相同就填入$iag这个位置中。
$aGetWeb[$iag] = $iGetWeb
$iag = $iag + 1
EndIf
EndIf
;当打开次数为0(即$OpenCishu = 0,表示目标路径处于未打开状态),且网银窗口出现过(即$bWinexist = True),且网银窗口又被关闭时:
If $dKHOpenNum = 0 And Not WinExists("spdb_ScreenCapture") And Not WinExists("浦发银行网银客户端") And $bKHWinExi = True Then
If _WinAPI_PathIsDirectoryEmpty($sPath) = 0 Then ;如果目录不为空
WinActivate($idTitle) ;由于登录网银后脚本被最小化了,所以退出网银后,需要把处于最小化的脚本窗口激活,显示出来。
ShellExecute($sPath) ;打开指定的路径
Sleep(100)
Send("^a") ;选中文件,方便往微信窗口拖放。
$dKHOpenNum = 1 ;说明打开过目标路径了,就不会重复的执行ShellExecute($sPath)了。
_FileWriteLog($hLogFile, '网银窗口出现后被关闭,弹出软件窗口并打开截图文件保存目录。')
Else ;目录为空,只激活窗口。
WinActivate($idTitle) ;由于登录网银后脚本被最小化了,所以退出网银后,需要把处于最小化的脚本窗口激活,显示出来。
$dKHOpenNum = 1 ;说明打开过目标路径了,就不会重复的执行ShellExecute($sPath)了。
_FileWriteLog($hLogFile, '网银窗口出现后被关闭,由于截图保存目录为空,不打开截图文件保存目录,只弹出软件窗口。')
EndIf
;恢复数组的初始值
For $i = 0 To 4
$aGetWeb[$i] = 1
Next
$iag = 0
ElseIf $dWebOpenNum = 0 And Not WinExists("spdb_ScreenCapture") And $aGetWeb[4] = 0 And $bWebWinExi = True Then
If _WinAPI_PathIsDirectoryEmpty($sPath) = 0 Then ;如果目录不为空
WinActivate($idTitle) ;由于登录网银后脚本被最小化了,所以退出网银后,需要把处于最小化的脚本窗口激活,显示出来。
ShellExecute($sPath) ;打开指定的路径
Sleep(100)
Send("^a") ;选中文件,方便往微信窗口拖放。
$dWebOpenNum = 1 ;说明打开过目标路径了,就不会重复的执行ShellExecute($sPath)了。
_FileWriteLog($hLogFile, '网银窗口出现后被关闭,弹出软件窗口并打开截图文件保存目录。')
Else ;目录为空,只激活窗口。
WinActivate($idTitle) ;由于登录网银后脚本被最小化了,所以退出网银后,需要把处于最小化的脚本窗口激活,显示出来。
$dWebOpenNum = 1 ;说明打开过目标路径了,就不会重复的执行ShellExecute($sPath)了。
_FileWriteLog($hLogFile, '网银窗口出现后被关闭,由于截图保存目录为空,不打开截图文件保存目录,只弹出软件窗口。')
EndIf
;恢复数组的初始值
For $i = 0 To 4
$aGetWeb[$i] = 1
Next
$iag = 0
EndIf
wend
|