找回密码
 加入
搜索
查看: 7384|回复: 15

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

  [复制链接]
发表于 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

感谢版主们的热情和热心。已经解决问题了
 楼主| 发表于 2015-3-12 22:48:11 | 显示全部楼层
这个无解吗?
发表于 2015-3-12 22:59:27 | 显示全部楼层
不是无解,是太简单了别人没兴趣……
先把标题错别字改了,本来是要锁帖的。
 楼主| 发表于 2015-3-12 23:58:42 | 显示全部楼层
...改了,帮助文件里面貌似没有可以指定路径来判断的案例
发表于 2015-3-13 00:20:51 | 显示全部楼层
_WinAPI_GetProcessFileName()
 楼主| 发表于 2015-3-14 14:34:36 | 显示全部楼层
搞不来,想求个案例
发表于 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[0][0]
        $tmp = _WinAPI_GetProcessFileName($aList[$i][1])
        If StringRight($tmp, $len) = '\' & $sExeName Then
                $sAll &= $tmp & '        |' & $aList[$i][1] & @CRLF
                If $tmp = $sKillPath & $sExeName Then $KillPid = $aList[$i][1]
        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
发表于 2015-3-14 16:50:36 | 显示全部楼层
 楼主| 发表于 2015-3-15 15:54:38 | 显示全部楼层
删除的部分搞定了,但是判断部分不行,上面的语句是判断多少个同样的进程
不能根据路径来判断
大大们好人做到底,能出个直接判断的脚本案例么
例如:    D:\QQ\QQ.exe   判断这个路径的这个进程是否存在
 楼主| 发表于 2015-3-16 12:44:08 | 显示全部楼层
afan 发表于 2015-3-14 16:39


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

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

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

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

_WinAPI_AdjustTokenPrivileges($hToken, $se_debug_name,2,1)
_WinAPI_CloseHandle($hToken)
_ArrayDisplay($list)
发表于 2015-3-16 12:47:13 | 显示全部楼层
回复 10# ywc195
这么伸手有点过分了
 楼主| 发表于 2015-3-16 13:27:08 | 显示全部楼层
回复 11# netegg

真心看过资料,自己实在搞不定了才来的。 看发帖的时间,几乎每天都用了几个小时搞这个问题
我也想自己能搞懂
发表于 2015-3-16 13:32:55 | 显示全部楼层
先获取进程列表,找出你的进程名,不管是一个还是多个,数组筛选一下就行了,然后根据pid找出对应的命令行就行了
7# afan不是给你答案了吗
发表于 2015-3-16 14:39:25 | 显示全部楼层
先获取进程列表,找出你的进程名,不管是一个还是多个,数组筛选一下就行了,然后根据pid找出对应的命令行就 ...
netegg 发表于 2015-3-16 13:32



    确实,我那楼完全是按一楼描述定制的,如果替换为实际路径都不会…
发表于 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[0][0]
        If _WinAPI_GetProcessFileName($aList[$i][1]) = $sPath Then MsgBox(0, $sPath, '该进程Pid存在:' & $aList[$i][1])
Next
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-16 16:37 , Processed in 0.130283 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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