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

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

[复制链接]
发表于 2016-11-30 11:15:51 | 显示全部楼层 |阅读模式
本帖最后由 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



本帖子中包含更多资源

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

×
发表于 2016-11-30 20:07:24 | 显示全部楼层
会有这么的事情发生么。
 楼主| 发表于 2016-11-30 22:47:55 | 显示全部楼层
回复 2# wbb870319

如果同时打开基表表格操作,程序打开关联的表格回家检测不到。
 楼主| 发表于 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(("[REGEXPTITLE:(?i)(.*" & $Excel_Name1 & ".*|.*Internet Explorer.*)]"))
                IniWrite($aIni_Config, "配置", "ExcelName", $tt[1][1])
                IniWrite($aIni_Config, "配置", "ExcelName1", $tt[1][0])
        EndIf
EndFunc   ;==>_Open_Excel

您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-23 16:50 , Processed in 0.082677 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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