cashiba 发表于 2018-3-11 21:06:10

同名进程如何区分?[已解决]

本帖最后由 cashiba 于 2018-3-14 23:21 编辑

Local $iPid=ProcessExists("启动记事本.exe")
If $iPid Then
        MsgBox(4096, "", "程序已经在运行!")
        ;ProcessClose($iPID)
        ;Exit
Else
        Local $iPID = Run("notepad.exe", "", @SW_SHOWMAXIMIZED)
        WinWait("", "", 10)
        Sleep(2000)
EndIf
如上代码,编译后保存为"启动记事本.exe"。
想在打开"启动记事本.exe"这个程序时判断有无同名实例在运行
有的话就自己乖乖退出
没有的话自己就开始运行......

http://img.mp.sohu.com/upload/20170625/9393d157b2924f80b105227c2b9e0200_th.png

当然,可以另外写个"判断.exe"如下:
$a = processlist("启动记事本.exe")
if isarray($a) then
for $i =1 to $a
   processclose($a[$i])
next
endif
run("启动记事本.exe")

http://img.mp.sohu.com/upload/20170625/9393d157b2924f80b105227c2b9e0200_th.png

有没有什么方法可以区分同名进程或实例,从而可以分别处理之?

afan 发表于 2018-3-11 21:42:06

干嘛非得用进程名判断……
论坛仅允许一个实例的代码多了去了

hnfeng 发表于 2018-3-12 08:16:15

用这个行不行:

If WinExists($g_sTitle) And $_OnlyOneProcess = 1 Then
        MsgBox(16, "", "不可以重复运行。", 0, $Form1)
.........

tubaba 发表于 2018-3-12 09:18:49

_Singleton

cashiba 发表于 2018-3-14 14:20:52

干嘛非得用进程名判断……
论坛仅允许一个实例的代码多了去了
afan 发表于 2018-3-11 21:42 http://www.autoit3.cn/images/common/back.gif
我怎么搜不到呢,A大能否提供一个关键词.....

cashiba 发表于 2018-3-14 14:24:59

用这个行不行:

If WinExists($g_sTitle) And $_OnlyOneProcess = 1 Then
        MsgBox(16, "", "不可以重复 ...
hnfeng 发表于 2018-3-12 08:16 http://www.autoit3.cn/images/common/back.gif
WinExists跟processExists一样,都是包括刚打开的同名实例在内
现在是想在打开现实例的时候,先关闭以前残留的所有同名旧实例,然后再接着运行现实例....

afan 发表于 2018-3-14 14:26:35

一个实例

cashiba 发表于 2018-3-14 14:27:20

_Singleton
tubaba 发表于 2018-3-12 09:18 http://www.autoit3.cn/images/common/back.gif
第一次看到这个函数,折腾了一会,发现还是达不到目的,还用不好这个函数....

tubaba 发表于 2018-3-14 21:14:24

不知道你所说的实例是指监控程序的本身,还是指被监控的实例

如果是前一种,那_Singleton函数的例子可以满足你的要求

启动时验证自身同名进程是否存在,如存在则退出自己
#include <Misc.au3>
Global $Title = '我是一个实例'
If _Singleton($Title,1) = 0 Then
    MsgBox(0, "警告","测试已经运行")
    Exit
EndIf
MsgBox(0, "OK", "第一次出现的测试运行")
Global $GUI = GUICreate($Title)
GUISetState()
Do
       
Until GUIGetMsg() = -3
如果是后一种
目的:在打开现实例的时候,先关闭以前残留的所有同名旧实例,然后再接着运行现实例....

Do
ProcessClose('notepad.exe')
Until Not ProcessExists('notepad.exe')
Local $iPID = Run("notepad.exe", "", @SW_SHOWMAXIMIZED)

cashiba 发表于 2018-3-14 23:05:06


afan 发表于 2018-3-14 14:26 http://www.autoit3.cn/images/common/back.gif
先前是用一个进程或一个窗口什么的搜不好使,用A大的这个直白的关键词,果然精准很多,搜到下面这个早期的帖子:

超简单的仅允许运行一个实例源码

{:face (88):}

感谢指点!

cashiba 发表于 2018-3-14 23:14:38

不知道你所说的实例是指监控程序的本身,还是指被监控的实例

如果是前一种,那_Singleton函数的例子可以满 ...
tubaba 发表于 2018-3-14 21:14 http://www.autoit3.cn/images/common/back.gif
谢谢兔大侠的详细解答,问题解决了,非常感谢!
页: [1]
查看完整版本: 同名进程如何区分?[已解决]