ywc195 发表于 2015-3-12 01:04:02

[已解决]如何判断不同路径的同样进程是否运行?再根据需求结束?

本帖最后由 ywc195 于 2015-3-20 17:26 编辑

如何判断不同路劲的同样进程是否存在?
例如:
我要分别检查C:\QQ.exe   和D:\QQ.exe是否在运行

还有分别结束这些进程
例如:
C:\QQ.exe   和D:\QQ.exe都在运行,如何只结束C:\QQ.exe

感谢版主们的热情和热心。已经解决问题了

ywc195 发表于 2015-3-12 22:48:11

这个无解吗?

afan 发表于 2015-3-12 22:59:27

不是无解,是太简单了别人没兴趣……
先把标题错别字改了,本来是要锁帖的。

ywc195 发表于 2015-3-12 23:58:42

...改了,帮助文件里面貌似没有可以指定路径来判断的案例

afan 发表于 2015-3-13 00:20:51

_WinAPI_GetProcessFileName()

ywc195 发表于 2015-3-14 14:34:36

搞不来{:face (319):},想求个案例

afan 发表于 2015-3-14 16:39:12

#include <WinAPIEx.au3>

Local $sExeName = 'QQ.exe'
Local $sKillPath = 'C:\'


Local $aList = ProcessList()
Local $sAll = '', $KillPid, $i, $len = StringLen($sExeName) + 1

For $i = 1 To $aList
        $tmp = _WinAPI_GetProcessFileName($aList[$i])
        If StringRight($tmp, $len) = '\' & $sExeName Then
                $sAll &= $tmp & '        |' & $aList[$i] & @CRLF
                If $tmp = $sKillPath & $sExeName Then $KillPid = $aList[$i]
        EndIf
Next

Local $aList = StringRegExp($sAll, '\V+', 3)
If @error Then
        MsgBox(48, '', $sExeName & ' 未运行')
ElseIf UBound($aList) = 1 Then
        MsgBox(64, '', $sExeName & ' 仅有一个在运行:' & @LF & $sAll)
Else
        If MsgBox(48 + 4, '', $sExeName & ' 有多个在运行:' & @LF & $sAll & @LF & @LF & '是否结束:' & $sKillPath & $sExeName) = 6 Then
                If ProcessClose($KillPid) Then MsgBox(64, '', $sKillPath & $sExeName & ' 已结束')
        EndIf
EndIf

menfan1 发表于 2015-3-14 16:50:36

http://www.autoitx.com/forum.php?mod=viewthread&tid=1703&highlight=%BD%E1%CA%F8%BD%F8%B3%CC

ywc195 发表于 2015-3-15 15:54:38

删除的部分搞定了,但是判断部分不行,上面的语句是判断多少个同样的进程
不能根据路径来判断
大大们好人做到底,能出个直接判断的脚本案例么
例如:    D:\QQ\QQ.exe   判断这个路径的这个进程是否存在

ywc195 发表于 2015-3-16 12:44:08


afan 发表于 2015-3-14 16:39 http://www.autoitx.com/images/common/back.gif

大大的脚本判断语句是判断是否有多个一样的进程,我现在想单独判断指定的进程是否存在。
有朋友写了这段代码但是有问题,可否帮忙修复一下

#include <WinAPIEx.au3>
#include <array.au3>

$list = ProcessList()
ReDim $list
$hToken = _WinAPI_OpenProcessToken(BitOR($Token_adjust_privileges, $Token_query))
_WinAPI_AdjustTokenPrivileges($hToken, $se_debug_name,1,2)

For $i=1 To $list
        $list[$i]=_WinAPI_GetProcessFileName($list[$i])
        If $list[$i]="D:\QQ\QQ.exe" Then
                MsgBox(0,0,"该进程存在)
        EndIf
Next

_WinAPI_AdjustTokenPrivileges($hToken, $se_debug_name,2,1)
_WinAPI_CloseHandle($hToken)
_ArrayDisplay($list)

netegg 发表于 2015-3-16 12:47:13

回复 10# ywc195
这么伸手有点过分了

ywc195 发表于 2015-3-16 13:27:08

回复 11# netegg

真心看过资料,自己实在搞不定了才来的。 看发帖的时间,几乎每天都用了几个小时搞这个问题
我也想自己能搞懂

netegg 发表于 2015-3-16 13:32:55

先获取进程列表,找出你的进程名,不管是一个还是多个,数组筛选一下就行了,然后根据pid找出对应的命令行就行了
7# afan不是给你答案了吗

afan 发表于 2015-3-16 14:39:25

先获取进程列表,找出你的进程名,不管是一个还是多个,数组筛选一下就行了,然后根据pid找出对应的命令行就 ...
netegg 发表于 2015-3-16 13:32 http://www.autoitx.com/images/common/back.gif


    确实,我那楼完全是按一楼描述定制的,如果替换为实际路径都不会…

afan 发表于 2015-3-16 14:44:16

回复 10# ywc195


    如果哪里不会就应该及时提问,闷着搞需要一定的基础… 7楼是完全按一楼的描述帮你定制的,你说判断部分不行?对照一楼的描述,哪里不行?

有时候真心不愿再次回复#include <WinAPIEx.au3>
$sPath = 'D:\QQ\QQ.exe'
Local $aList = ProcessList(), $i
For $i = 1 To $aList
        If _WinAPI_GetProcessFileName($aList[$i]) = $sPath Then MsgBox(0, $sPath, '该进程Pid存在:' & $aList[$i])
Next
页: [1] 2
查看完整版本: [已解决]如何判断不同路径的同样进程是否运行?再根据需求结束?