smooth 发表于 2013-11-30 15:25:02

请教如何先运行A窗口,再运行B窗口,等待B窗口出现时即关闭A窗口?

请教如何先运行A窗口,再运行B窗口,等待B窗口出现时即关闭A窗口?
背景:我写的一个脚本,因为要释放文件,所以运行之后起码要10秒才会弹出主界面,这段时间脚本没有任何提示,让人误以为程序没有在执行。于是我想实现,运行脚本之后,先即时弹出一个窗口A,这个窗口没有边框,没有任何按钮,只显示“程序正在执行,请稍后。。。。”,然后等到弹出B窗口时,即时关闭A窗口而保留B窗口。我写了以下代码,但是每当关闭A窗口时,B窗口也被关闭。

$Title_A = "窗口A"
If WinExists($Title_A) Then Exit
Global $Form_A = GUICreate($Title_A)
GUISetState(@SW_SHOW)
$Title_B = "窗口B"
If WinExists($Title_B) Then Exit
Global $Form_B = GUICreate($Title_B, 360, 270)
GUISetState(@SW_SHOW)
While 1
        $msg = GUIGetMsg()
        Switch $msg
                Case -3
                        Exit
        EndSwitch
       
        If WinExists($Form_B) Then
                WinActivate($Form_A )
                WinClose($Form_A )
                GUISwitch($Form_B)
        EndIf
WEnd


请教各位,谢谢!

afan 发表于 2013-11-30 15:49:07

SplashTextOn('', '程序正在执行,请稍候…', 300, 45, -1, -1, 1)
Sleep(3000) ;这里该干嘛干嘛~
SplashOff()
GUICreate('主窗口', 360, 270)
GUISetState()
While GUIGetMsg() <> -3
WEnd

sunkiss 发表于 2013-11-30 15:51:19

afan的方法就很好啊~!

smooth 发表于 2013-11-30 17:18:13

谢谢楼上两位,我换了思路,成功了。既然不能关闭,那就隐藏它。

#include <WindowsConstants.au3>

Global $Form_A = GUICreate("",300, 100, -1, -1,BitOR($DS_MODALFRAME, $WS_POPUPWINDOW))
GUICtrlCreateLabel("程序正在努力加载,请稍后...... ", 40, 40, 200, 80)
GUISetState(@SW_SHOW)
$Title_B = "窗口B"
If WinExists($Title_B) Then Exit
Global $Form_B = GUICreate($Title_B, 360, 270)
GUISetState(@SW_SHOW)
While 1
        $msg = GUIGetMsg()
        Switch $msg
                Case -3
                        Exit
        EndSwitch
       
        If WinExists($Form_B) Then
                GUISetState(@SW_HIDE,$Form_A)
        EndIf
WEnd

872777825 发表于 2013-11-30 22:54:50

其实楼主这个 还可以用 SplashImageOn   来创建一个闪屏   可以加载图片的样式等待后台各种操作
更美观 更个性更专业{:face (301):}
页: [1]
查看完整版本: 请教如何先运行A窗口,再运行B窗口,等待B窗口出现时即关闭A窗口?