3131210 发表于 2017-5-26 02:55:06

[已解决]判断程序重复运行出错

本帖最后由 3131210 于 2017-5-27 00:52 编辑

使用下面代码判断程序是否重复运行,如果判断到程序重复运行的话,就显示之前隐藏的程序,我下面写的代码是可以判断到程序重复运行的,但是到显示隐藏的程序这一步就出问题了,完全找不出原因。求大神帮忙看看
重复运行的时候,会直接跳出一个白框,然后过一会就消失。

完整的附件$Exists = "LP快捷辅助" ;判断是否只运行一个程序
If WinExists($Exists) Then
        WinSetState("", "", @SW_SHOWNORMAL)
        Exit
EndIf
AutoItWinSetTitle($Exists) ;修改程序窗口的标题名
$MyForm = GUICreate($Exists, 385, 370)感谢9楼的办法解决了~

h20040606 发表于 2017-5-26 04:26:22

那是因为根部就不要存在

1361739590 发表于 2017-5-26 08:38:49

这个本身就是白框,

kk_lee69 发表于 2017-5-26 09:12:55

回复 1# 3131210


    能否改用 標題判斷

1361739590 发表于 2017-5-26 10:23:07

WinSetState($Exists, "", @SW_SHOW)

3131210 发表于 2017-5-26 12:19:16

回复 4# kk_lee69


    改成判断标题,失败。你可以下载附件跑一次试试

3131210 发表于 2017-5-26 12:19:38

回复 5# 1361739590
试了   不出来

3131210 发表于 2017-5-26 12:48:48

用了类+标题的方式,弹出来之后,会有BUG,点击标签页,不会切换。

1361739590 发表于 2017-5-26 13:36:21

1. 这两个地方用不一样的名字就可以实现了。
AutoItWinSetTitle($Exists_1)
GUICreate($Exists_2, 385, 370)

2.点击标签页,不会切换这个不知道原因,但是可以解。
你用的是GUISetState(@SW_HIDE, $MyForm),
想要显示,还要用GUISetState(@SW_SHOWNORMAL, $MyForm)
用 WinSetState 就不正常,原因不懂。
所以你 Case $GUI_EVENT_MINIMIZE这边可以用 WinSetState 来隐藏。

kk_lee69 发表于 2017-5-26 13:49:44

回复 1# 3131210

誰說不可以的    請看下面範例

#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <StaticConstants.au3>
#include <HotKeyInput.au3>
#include <HotKey_21b.au3>
;Opt('SendCapslockMode', 0)
;Opt('TrayMenuMode', 3)
$Exists = "LP快捷幫助" ;判?是否只?行一?程序
If WinExists($Exists) Then
        WinSetState($Exists, "", @SW_SHOW)
        MsgBox(262144, '警告', '不要重复!')
        Exit
EndIf

AutoItWinSetTitle($Exists) ;修改程序窗口的??名
$MyForm = GUICreate($Exists, 385, 370)
$Save = GUICtrlCreateButton('保存配置', 8, 330, 70, 30)
$Reset = GUICtrlCreateButton('重置配置', 108, 330, 70, 30)

GUISetState()
WinSetState($MyForm,"",@SW_HIDE )
While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit


        EndSwitch
WEnd

chzj589 发表于 2017-5-26 13:54:00

回复 1# 3131210

用这样试试看

#include <Misc.au3>
Global $Exists = 'LP快捷辅助 v2.2_NoUPX.exe'
If _Singleton($Exists, 1) = 0 Then
        MsgBox(262144, '警告', '不要重复运行!')
        WinActivate($Exists)
        Exit
EndIf

1361739590 发表于 2017-5-26 14:17:40

回复 10# kk_lee69


    若同时有多个窗口符合匹配条件, 则使用最近激活的窗口.
他最近激活的和你不一样。

kk_lee69 发表于 2017-5-26 14:19:10

回复 12# 1361739590

他就是為了防止某個程式重複運行......所以標題 是最單純的不會有相同的

1361739590 发表于 2017-5-26 14:27:20

回复 13# kk_lee69


    AutoItWinSetTitle($Exists)   这个不是修改程序的窗口,而是au3自带的那个窗口吧。
所以说如果这两个窗口名一样,则使用最近激活的窗口。

84063016 发表于 2017-5-26 14:44:45

AutoItWinSetTitle($Exists)   这个不是修改程序的窗口,而是au3自带的那个窗口吧。
页: [1] 2
查看完整版本: [已解决]判断程序重复运行出错