heroxianf 发表于 2016-11-30 11:15:51

关于打开窗口后续判断该窗口是否存在 Winlist()[已解决]

本帖最后由 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((""))
                IniWrite($aIni_Config, "配置", "ExcelName", $tt)
                IniWrite($aIni_Config, "配置", "ExcelName1", $tt)
        EndIf
EndFunc   ;==>_Open_Excel



wbb870319 发表于 2016-11-30 20:07:24

会有这么的事情发生么。

heroxianf 发表于 2016-11-30 22:47:55

回复 2# wbb870319

如果同时打开基表表格操作,程序打开关联的表格回家检测不到。

heroxianf 发表于 2016-12-1 13:18:13

通过句柄来判断窗口是否存在我这个不成功,大家看看呢

其中WINLIST()里加不加HWND都是失败的

#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 WinList(HWnd($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((""))
                IniWrite($aIni_Config, "配置", "ExcelName", $tt)
                IniWrite($aIni_Config, "配置", "ExcelName1", $tt)
        EndIf
EndFunc   ;==>_Open_Excel

页: [1]
查看完整版本: 关于打开窗口后续判断该窗口是否存在 Winlist()[已解决]