返回列表 发帖

[系统综合] 关于ProcessExists检测的求助

$g_szVersion = "notepad.exe"
If ProcessExists($g_szVersion) Then
        MsgBox(0, "", "存在notepad.exe进程")

Else
        MsgBox(0, "", "不存在notepad.exe进程")
EndIf

我想检测当前用户环境中是否有notepad.exe进程,结果如果有其他windows用户运行了notepad.exe,那么会检测到。
请问如何检测当前用户的进程?
谢谢!

当时的需求只需要一个结果,如果需要返回多个结果,自己改善
http://www.autoit3.cn/viewthread.php?tid=51998

TOP

回复 1# anythingok


    善用搜索
http://www.autoit3.cn/viewthread ... C3%BB%A7&page=1

TOP

感谢各位的帮助,由于刚学习,很多代码看不懂,能否帮我修改一下,最简单的语句实现就行。

TOP

#include <LocalSecurityAuthority.au3>
$sProcess = "notepad.exe"
$iProcessId = ProcessExists($sProcess)
$hProcess = _OpenProcess($iProcessId, $READ_CONTROL)

$sUser = _QueryKernelObjectSecurityOwner($hProcess)

If ($sUser = @UserName) Then
        MsgBox(0, "", "存在notepad.exe进程")
Else
        MsgBox(0, "", "不存在notepad.exe进程")

EndIf

我照着改了一下,好象还差那么一点,在@username位置。
请大神帮看一下。谢谢!

TOP

  1. ;Au3版本:        3.3.14.2
  2. #include <WinAPIProc.au3>
  3. $aPidList = ProcessList('notepad.exe')
  4. If Not @error Then
  5.         For $i = 1 To $aPidList[0][0]
  6.                 $sPid = $aPidList[$i][1]
  7.                 $sUser = _GetPidUser($sPid)
  8.                 If Not @error Then MsgBox(0,'Pid: ' &$sPid ,'User: ' & $sUser)
  9.         Next
  10. EndIf


  11. ;//获取指定PID的用户名
  12. Func _GetPidUser($sPid)
  13.         If Not ProcessExists($sPid) Then Return SetError(-1)
  14.         $aRet = _WinAPI_GetProcessUser($sPid)
  15.         If IsArray($aRet) Then
  16.                 Return $aRet[0]
  17.         Else
  18.                 Return SetError(-2)
  19.         EndIf
  20. EndFunc   ;==>_GetPidUser
复制代码
试试这个API的

TOP

TOP

感谢各位的无私帮助,目前还是没做成。

TOP

我想实现检测当前用户是否打开了notepad.exe,如果没打开,就打开notepad.exe,
怎耐这个脚本始终能检测到其它用户运行的notepad.exe,就失效了。

If not ProcessExists("notepad.exe") Then
   
     ShellExecute("C:\\Windows\notepad.exe", "", "" , "",@SW_SHOW)

Else
     MsgBox(0, "例子", "记事本已经在运行.")
EndIf

能否帮我简单改一下,万分感谢!

TOP

求指点,求帮助

TOP

zghwelcome 不是已经上代码了吗?

  1. #include <WinAPIProc.au3>

  2.  

  3. If _ProcessUser('notepad.exe') Then

  4.         MsgBox(0, '', '已在运行')


  5.         ShellExecute('C:\Windows\notepad.exe')


  6.  

  7. Func _ProcessUser($ProcessName, $sUser = @UserName)

  8.         Local $aProcess = ProcessList($ProcessName)

  9.         If @error Then Return SetError(1, 0, 0)

  10.         Local $ii, $aUser

  11.         For $ii = 1 To $aProcess[0][0]

  12.                 $aUser = _WinAPI_GetProcessUser($aProcess[$ii][1])

  13.                 If Not @error And $aUser[0] = $sUser Then Return 1

  14.         Next

  15.         Return 0

  16. EndFunc   ;==>_ProcessUser

复制代码 高亮切换
请勿私信提问,有问题请发帖。

TOP

返回列表