本帖最后由 heroxianf 于 2016-12-1 17:20 编辑
这是一个检测的小模块, 上次咨询如何判定窗口是否存在, 当时推荐检测EXCEL打开的缓存文件 ~$开头的文件名,结果在使用过程中,会遇到EXCEL已经关闭了,但是这个缓存文件就是不消失,始终报错,现在采用WINLIST来检测窗口标题是否存在,一开始可以,但是使用中遇到一个问题: 当程序打开的EXCEL表格最小化后, 在记录的过程中编辑其他EXCEL表格,然后再记录就会存在窗口标题检测不到的现象,这个时候可以手动最大化程序打开的EXCEL表格又可以正常记录。 求如何更加有效的检查打开的表格是否存在,或者有效的关联程序打开的表格。 附件是测试用例
问题根本想偏了, 用WINLIST获取句柄后,再用WINEXISTS来判断就解决了。
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <excel.au3>
Global Const $aIni_Config = @ScriptDir & '\Config.ini'
Global $lExcel, $lWorkbook
_Open_Excel()
#Region ### START Koda GUI section ### Form=
$Form2 = GUICreate("Form2", 256, 123, 324, 196)
$Input1 = GUICtrlCreateInput("记录测试", 16, 40, 201, 21)
$Button1 = GUICtrlCreateButton("记录", 136, 72, 75, 25)
$Label1 = GUICtrlCreateLabel("记录测试", 16, 16, 52, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
Local $sRead = IniRead($aIni_Config, "配置", "ExcelName", "默认值")
If WinExists($sRead) Then
_Jilu()
Else
Local $zNob = MsgBox(1 + 64, '', '检查到记录表格已经关闭,请重新打开! 是-打开 取消-不操作')
If $zNob = 1 Then
_Open_Excel()
Else
Sleep(100)
EndIf
EndIf
EndSwitch
WEnd
Func _Jilu()
Local $Data = GUICtrlRead($Input1)
Local $List = $lWorkbook.Worksheets(1).UsedRange.Rows.Count ;正常记录
_Excel_RangeWrite($lWorkbook, $lWorkbook.Worksheets(1), $Data, "B" & $List + 1) ;正常记录
EndFunc ;==>_Jilu
Func _Open_Excel()
Local $Excel_File = FileOpenDialog("浏览EXCEL格式", "", "EXCEL2010格式(*.xlsx)|EXCEL2007以下格式(*.xls)", 1)
If @error Then
Sleep(100)
Else
$lExcel = _Excel_Open()
$lWorkbook = _Excel_BookOpen($lExcel, $Excel_File)
Local $Excel_Name1 = StringRegExpReplace($Excel_File, '.+\\|\.[^.]+$', '')
Local $tt = WinList(("[REGEXPTITLE:(?i)(.*" & $Excel_Name1 & ".*|.*Internet Explorer.*)]"))
IniWrite($aIni_Config, "配置", "ExcelName", $tt[1][1])
IniWrite($aIni_Config, "配置", "ExcelName1", $tt[1][0])
EndIf
EndFunc ;==>_Open_Excel
|