扫描进程,并在找到特定进程时执行某些操作 我希望我的C++程序扫描进程,当某个文件.EXE运行时,我希望我的程序能做一些事情(这里不相关)。你能帮我完成这项任务吗
我在网上找到了一些东西。这样行吗扫描进程,并在找到特定进程时执行某些操作 我希望我的C++程序扫描进程,当某个文件.EXE运行时,我希望我的程序能做一些事情(这里不相关)。你能帮我完成这项任务吗,c++,windows,process,C++,Windows,Process,我在网上找到了一些东西。这样行吗 CreateMutex(NULL, FALSE, NAMEofTHEprocess_exe); if (GetLastError() == ERROR_ALREADY_EXISTS)return 0; 我可以在我的程序中使用它吗?我不知道互斥是什么。下面是Windows中运行进程的基本枚举: #define WINVER 0x0500 #define _WIN32_WINNT 0x0500 #define PSAPI_VERSION 1 #
CreateMutex(NULL, FALSE, NAMEofTHEprocess_exe);
if (GetLastError() == ERROR_ALREADY_EXISTS)return 0;
我可以在我的程序中使用它吗?我不知道互斥是什么。下面是Windows中运行进程的基本枚举:
#define WINVER 0x0500
#define _WIN32_WINNT 0x0500
#define PSAPI_VERSION 1
#include <windows.h>
#include <tchar.h>
#include <psapi.h>
#include <sddl.h>
void ListProcesses()
{
DWORD aProcesses[1024], cbNeeded, cProcesses;
MEMORYSTATUSEX statex;
statex.dwLength = sizeof(statex);
::GlobalMemoryStatusEx(&statex);
::EnumProcesses(aProcesses, sizeof(aProcesses), &cbNeeded);
cProcesses = cbNeeded / sizeof(DWORD);
for (size_t i = 0; i < cProcesses; ++i)
if(aProcesses[i] != 0)
std::cout << "PID: " << aProcesses[i] << ", Name: " << getProcessNameByID(aProcesses[i]) << std::endl;
}
对不起,我对C++完全陌生了。总是使用Java和Eclipse(当需要导入/包含刚刚按下shift+o键的内容时),现在我有一点问题,因为编译器尖叫着说几乎所有这些都还没有声明。你能帮我解决这个问题吗?哦,标准库标题。。。在顶部添加
#include
和#include
,您需要将getProcessNameByHandle
函数放在第一位。已经有了它们。仍然会出现这样的错误:“MemoryStatuex”未在此范围内声明|@shym:奇怪,它是。可能是版本问题,尝试说<代码> >定义WINF0x0500 < /C>,代码>定义WIN32,WINNT 0x0500 < /C> >代码> >定义PSAPIION版本1 <代码>之前,包含“代码> Windows .H./Cuth>”@ SyM:您需要链接到PSAPI.LIB——但也许您应该尝试了解C++中如何执行可执行文件的基础知识。(包括,库)?如果你不了解这个过程,而只是盲目地复制别人提交给你的内容,你会遇到很多这样的小“问题”。嗯……我能记得的最常见的使用案例是在加载防病毒软件时检测病毒。。。
#include <tchar.h>
std::string getProcessNameByHandle(HANDLE hProcess)
{
if (NULL == hProcess)
return "<unknown>";
TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");
HMODULE hMod;
DWORD cbNeeded;
if (::EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded))
::GetModuleBaseName(hProcess, hMod, szProcessName, sizeof(szProcessName)/sizeof(TCHAR));
return std::string(szProcessName);
}
std::string getProcessNameByID(DWORD processID)
{
HANDLE hProcess = ::OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID);
std::string result = getProcessNameByHandle(hProcess);
::CloseHandle(hProcess);
return result;
}