我想检查一个win32 EXE文件是否已经在运行(仅知道文件路径和名称)。
请告诉我如何使用win32 API代码实现它。
非常感谢!
我的意思是只有每个EXE路径才能运行一个实例。
如果只给出EXE的路径,您需要枚举正在运行的进程,直到找到具有匹配路径的进程。可以查看EnumProcesses()
或Process32First()
/Process32Next()
。在MSDN上查看进程枚举以获取更多详细信息和代码示例。
DWORD processes[4096];
DWORD bytesGot;
EnumProcesses(processes, sizeof processes, &bytesGot);
DWORD processesCount = bytesGot / sizeof(DWORD);
WCHAR currName[MAX_PATH];
GetModuleFileNameEx(GetCurrentProcess(), NULL, currName, MAX_PATH);
DWORD currProcessId = GetCurrentProcessId();
for(int x=0;x<=processesCount-1;x++)
{
HANDLE process = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processes[x]);
WCHAR name[MAX_PATH];
GetModuleFileNameEx(process,NULL, name, MAX_PATH);
CloseHandle(process);
if (processes[x]!=currProcessId&& wcscmp(name, currName)==0) return 0;
}
非常感谢Remy Lebeau :) 提供了非常有用的提示。