扫描进程,并在找到特定进程时执行某些操作 我希望我的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;
}