怎么知道某个exe文件已经在运行了

来源:百度知道 编辑:UC知道 时间:2024/09/21 23:09:29
用哪个api函数 可以解决 我是准备在 pb里面调用api 来解决其已经执行了 就不能再被启动了
能够给个例子之类的 pb vb 或者 delphi 或者别的什么的
已经解决 谢谢大家热心帮助

FUNCTION ULONG CreateMutexA(ULONG lpMutexAttributes , INT bInitialOwner , REF STRING lpName) LIBRARY 'kernel32.dll'
FUNCTION ULONG GetLastError() LIBRARY 'kernel32.dll'

ULONG Ll_Mutex = 0 //应用句柄
ulong Ll_Err = 0
string Ls_Mutex_Name //应用名称

IF handle(GetApplication(),FALSE)<>0 then
Ls_Mutex_Name = THIS.AppName + CHAR(0);
Ll_Mutex = CreateMutexA(0 , 0 , Ls_Mutex_Name);
Ll_Err = GetLastError();
if Ll_Err = 183 THEN
//程序已经运行
MESSAGEBOX("系统提示!" , "程序已经运行了!不能多次运行!");
HALT CLOSE
END IF

End if

是要防止一个应用的多个实例吗? 如果是地话, 你在用互斥量, 程序开始时判断是否存在指定的互斥量, 如果存在, 则退出, 否则创建它, 之后正常运行.

API: CreateMutex

任务 管理器 查看

Private Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long