2025香港澳门资料 今晚香港特马开什么号码?
在C++中,可以使用操作系统的API来获取当前所有进程的完整路径。以下是在Windows和Linux上分别使用不同的API来实现这一目标的示例代码:
在Windows上:
#include <windows.h> #include <iostream> #include <vector> int main() { // 获取当前所有进程的快照 HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hProcessSnap == INVALID_HANDLE_VALUE) { std::cerr << "Failed to create process snapshot." << std::endl; return 1; } PROCESSENTRY32 pe32; pe32.dwSize = sizeof(PROCESSENTRY32); // 获取第一个进程的信息 if (!Process32First(hProcessSnap, &pe32)) { std::cerr << "Failed to get process information." << std::endl; CloseHandle(hProcessSnap); return 1; } std::vector<std::wstring> processPaths; // 遍历所有进程并获取其完整路径 do { HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, pe32.th32ProcessID); if (hProcess != NULL) { wchar_t path[MAX_PATH]; DWORD pathSize = MAX_PATH; // 获取进程的完整路径 if (QueryFullProcessImageName(hProcess, 0, path, &pathSize)) { processPaths.push_back(path); } CloseHandle(hProcess); } } while (Process32Next(hProcessSnap, &pe32)); CloseHandle(hProcessSnap); // 输出所有进程的完整路径 for (const auto& path : processPaths) { std::wcout << path << std::endl; } return 0; }
在Linux上:
#include <dirent.h> #include <iostream> #include <fstream> #include <sstream> #include <string> #include <vector> std::string GetProcessPath(int pid) { std::string path = "/proc/" + std::to_string(pid) + "/exe"; char buffer[PATH_MAX]; ssize_t len = readlink(path.c_str(), buffer, sizeof(buffer) - 1); if (len != -1) { buffer[len] = '\\0'; return std::string(buffer); } return std::string(); } int main() { DIR* procDir = opendir("/proc"); if (procDir == nullptr) { std::cerr << "Failed to open /proc directory." << std::endl; return 1; } std::vector<std::string> processPaths; dirent* entry; while ((entry = readdir(procDir)) != nullptr) { std::string name = entry->d_name; if (name != "." && name != "..") { int pid; std::istringstream(name) >> pid; if (pid != 0) { std::string path = GetProcessPath(pid); if (!path.empty()) { processPaths.push_back(path); } } } } closedir(procDir); // 输出所有进程的完整路径 for (const auto& path : processPaths) { std::cout << path << std::endl; } return 0; }
这些示例代码可以获取当前所有进程的完整路径并将其输出到控制台。请注意,在Windows上,需要链接和库,而在Linux上,需要使用链接选项。
这些代码仅提供了获取进程路径的基本示例。可以根据自己的需求进行修改和扩展。