找回密码  加入

AUTOIT CN

搜索
查看: 491|回复: 10

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

[复制链接]
发表于 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("[CLASS:Notepad]", "", 10)
        Sleep(2000)
EndIf

如上代码,编译后保存为"启动记事本.exe"。
想在打开"启动记事本.exe"这个程序时判断有无同名实例在运行
有的话就自己乖乖退出
没有的话自己就开始运行......



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



有没有什么方法可以区分同名进程或实例,从而可以分别处理之?
发表于 2018-3-11 21:42:06 | 显示全部楼层
干嘛非得用进程名判断……
论坛仅允许一个实例的代码多了去了
发表于 2018-3-12 08:16:15 | 显示全部楼层
用这个行不行:

If WinExists($g_sTitle) And $_OnlyOneProcess = 1 Then
        MsgBox(16, "", "不可以重复运行。", 0, $Form1)
.........
发表于 2018-3-12 09:18:49 | 显示全部楼层
_Singleton
 楼主| 发表于 2018-3-14 14:20:52 | 显示全部楼层
干嘛非得用进程名判断……
论坛仅允许一个实例的代码多了去了
afan 发表于 2018-3-11 21:42

我怎么搜不到呢,A大能否提供一个关键词.....
 楼主| 发表于 2018-3-14 14:24:59 | 显示全部楼层
用这个行不行:

If WinExists($g_sTitle) And $_OnlyOneProcess = 1 Then
        MsgBox(16, "", "不可以重复 ...
hnfeng 发表于 2018-3-12 08:16

WinExists跟processExists一样,都是包括刚打开的同名实例在内
现在是想在打开现实例的时候,先关闭以前残留的所有同名旧实例,然后再接着运行现实例....
发表于 2018-3-14 14:26:35 | 显示全部楼层
  1. 一个实例
复制代码
 楼主| 发表于 2018-3-14 14:27:20 | 显示全部楼层
_Singleton
tubaba 发表于 2018-3-12 09:18

第一次看到这个函数,折腾了一会,发现还是达不到目的,还用不好这个函数....
发表于 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)

评分

1

查看全部评分

 楼主| 发表于 2018-3-14 23:05:06 | 显示全部楼层
afan 发表于 2018-3-14 14:26

先前是用一个进程或一个窗口什么的搜不好使,用A大的这个直白的关键词,果然精准很多,搜到下面这个早期的帖子:

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



感谢指点!
 楼主| 发表于 2018-3-14 23:14:38 | 显示全部楼层
不知道你所说的实例是指监控程序的本身,还是指被监控的实例

如果是前一种,那_Singleton函数的例子可以满 ...
tubaba 发表于 2018-3-14 21:14

谢谢兔大侠的详细解答,问题解决了,非常感谢!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2018-12-14 08:19 , Processed in 0.091094 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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