#pragma once GDCPP_API struct sProcessInfo { std::wstring name; DWORD pid; sProcessInfo(const std::wstring& n=L"", DWORD p = 0) : name(n), pid(p) { } // 复制构造函数 sProcessInfo(const sProcessInfo& other) : name(other.name), pid(other.pid) { } // 赋值运算符 sProcessInfo& operator=(const sProcessInfo& other) { if (this != &other) { name = other.name; pid = other.pid; } return *this; } }; // 查找正在运行的目标进程,返回数量,并将找到的进程写入 outFoundProcs。 // 输入outFoundProcs如果为空,则查找结果以追加方式写入; // 如果outFoundProcs大小与targetProcs相同,则将找到的进程写入对应位置。 // 示例 //std::vector MonitorAppName = { L"GdCamExpert", L"GoodVision" }; //std::vector MonitorAppStatus; //MonitorAppStatus.resize(MonitorAppName.size()); //int runningCount = FindRunningProcesses_BeginWith(MonitorAppName, MonitorAppStatus); // 两个版本: // 1. FindRunningProcesses_BeginWith:查找进程名以目标字符串开头的进程 // 2. FindRunningProcesses_Exact:查找进程名完全匹配目标字符串的进程 // 都不区分大小写。 GDCPP_API int FindRunningProcesses_BeginWith(const std::vector& targetProcs, std::vector& outFoundProcs); GDCPP_API int FindRunningProcesses_Exact(const std::vector& targetProcs, std::vector& outFoundProcs); // 请求关机或重启,EWX_SHUTDOWN、EWX_REBOOT // cmd: EWX_SHUTDOWN, EWX_REBOOT, EWX_POWEROFF 等 // reason: SHTDN_REASON_MAJOR_OPERATINGSYSTEM, SHTDN_REASON_MINOR_OTHER 等 GDCPP_API void DoShutdown(uint32_t cmd = EWX_SHUTDOWN, DWORD reason = SHTDN_REASON_MAJOR_OPERATINGSYSTEM); GDCPP_API BOOL IsProcessRunning(LPCTSTR pszProcName, LPTSTR pFoundName, DWORD dwFoundLen); GDCPP_API bool StartProcessAndGetPid(const fs::path& exePath, DWORD* outPid); GDCPP_API bool StartProcessIndependently(const fs::path& exePath); GDCPP_API bool NotifyProcessToExit(DWORD pid, DWORD timeoutMs = 1000);