fenhanxue 发表于 2017-5-26 14:54:32

Local $aProcess=ProcessList(@ScriptName);
For $i=1 To $aProcess
    if $aProcess[$i] <> @AutoItPIDthen ;It's not my own!!
                MsgBox(0,'请勿重复运行','程序已经运行中,请勿重复启动')
                Exit
        EndIf
Next

chzj589 发表于 2017-5-26 15:00:17

回复3131210

誰說不可以的    請看下面範例
kk_lee69 发表于 2017-5-26 13:49 http://www.autoitx.com/images/common/back.gif

运行LP快捷辅助 v2.2_NoUPX.exe后,
再次点击LP快捷辅助 v2.2_NoUPX.exe,显示MsgBox(262144, '警告', '不要重复!')
关闭MsgBox(262144, '警告', '不要重复!')。
第三次点击LP快捷辅助 v2.2_NoUPX.exe,出错了!
原打开的LP快捷辅助 v2.2_NoUPX.exe的窗口己经变了

1361739590 发表于 2017-5-26 15:05:58

本帖最后由 1361739590 于 2017-5-26 15:09 编辑

根据我发的第9楼 生成的。

kk_lee69 发表于 2017-5-26 15:21:53

回复 14# 1361739590

這是它原本的

我不知道為何要這樣寫沒意義但是我沒動他因為照理說上面先判斷 如果存在就退出了

所以這行不會跑第二次沒差

1361739590 发表于 2017-5-26 15:31:32

回复 19# kk_lee69


      没太懂你的意思。
WinSetState($Exists, "", @SW_SHOW)    这个是没问题的。
问题是    有两个窗口都叫$Exists ,这个怎么显示呢,不会都显示,只显示最近激活的窗口。
所有他说有白框。

kk_lee69 发表于 2017-5-26 15:51:39

回复 20# 1361739590

不會 你跑過我的範例了嗎原本的 $Exists 這個內容必須要建立 FROM 才會存在

因此第一次 跑以後會有$Exists 這個的內容的窗口存在

第二次跑的時候 因為一開始就先判斷 此時 尚未建立 FROM 因此不會有第二個 $Exists

所以 第二次   會將第一次的 秀出來後自己就退出了

反而是原本的寫法是 抓 CLASS他之所以 會無法秀出隱藏的就是因為他抓到了第二次的程式

AU3 執行的時候沒有建立 FROM 的時候會有個 透明的框CLASS名稱是AUTO IT V3 GUI

1361739590 发表于 2017-5-26 16:19:20

回复 21# kk_lee69


    他主要有AutoItWinSetTitle($Exists)这个。

Alam 发表于 2017-5-26 21:13:20

若是自己的代码,可以有很多种方法实现吧.Local $runState = @ScriptDir & 'tmp.dat'
FileWrite($runState, '')
Sleep(2000)
If Not FileExists($runState) Then Exit MsgBox(0, '', '实例已运行.')
FileDelete($runState)
GUICreate('')
Do
If FileExists($runState) Then
          GUISetState()
          FileDelete($runState)
   EndIf
Until GUIGetMsg()= -3

3131210 发表于 2017-5-27 00:52:11

用9楼的办法,把隐藏的代码改成WinSetState就解决了,感谢盖楼的各位的讨论,都很有用。
页: 1 [2]
查看完整版本: [已解决]判断程序重复运行出错