找回密码
 加入
搜索
查看: 6691|回复: 23

[系统综合] [已解决]判断程序重复运行出错

 火.. [复制链接]
发表于 2017-5-26 02:55:06 | 显示全部楼层 |阅读模式
本帖最后由 3131210 于 2017-5-27 00:52 编辑

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

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

本帖子中包含更多资源

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

×
发表于 2017-5-26 04:26:22 | 显示全部楼层
那是因为根部就不要存在
发表于 2017-5-26 08:38:49 | 显示全部楼层
[CLASS:AutoIt v3 GUI]  这个本身就是白框,
发表于 2017-5-26 09:12:55 | 显示全部楼层
回复 1# 3131210


    能否改用 標題判斷
发表于 2017-5-26 10:23:07 | 显示全部楼层
WinSetState($Exists, "", @SW_SHOW)
 楼主| 发表于 2017-5-26 12:19:16 | 显示全部楼层
回复 4# kk_lee69


    改成判断标题,失败。你可以下载附件跑一次试试
 楼主| 发表于 2017-5-26 12:19:38 | 显示全部楼层
回复 5# 1361739590
试了   不出来
 楼主| 发表于 2017-5-26 12:48:48 | 显示全部楼层
用了类+标题的方式,弹出来之后,会有BUG,点击标签页,不会切换。
发表于 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 来隐藏。
发表于 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
发表于 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

发表于 2017-5-26 14:17:40 | 显示全部楼层
回复 10# kk_lee69


    若同时有多个窗口符合匹配条件, 则使用最近激活的窗口.
他最近激活的和你不一样。
发表于 2017-5-26 14:19:10 | 显示全部楼层
回复 12# 1361739590

他就是為了防止某個程式  重複運行......所以標題 是最單純的  不會有相同的
发表于 2017-5-26 14:27:20 | 显示全部楼层
回复 13# kk_lee69


    AutoItWinSetTitle($Exists)   这个不是修改程序的窗口,而是au3自带的那个窗口吧。
所以说  如果这两个窗口名一样,则使用最近激活的窗口。
发表于 2017-5-26 14:44:45 | 显示全部楼层
AutoItWinSetTitle($Exists)   这个不是修改程序的窗口,而是au3自带的那个窗口吧。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-22 11:13 , Processed in 0.084597 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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