同步操作将从 精易科技/eapi 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include "..\include_eapi_header.h"#ifdef _WIN32#undef UNICODE#include <windows.h>#include<tlhelp32.h>#else#include <unistd.h>#include <sys/wait.h>#endifinline bool kill_process_w(const std::wstring& process_name_or_window_title) {// 用于存储进程 ID 的变量unsigned int process_id = 0;#ifdef _WIN32// 在 Windows 系统上使用 FindWindow 函数查找窗口句柄HWND window_handle = FindWindowW(0, process_name_or_window_title.c_str());if (window_handle) {GetWindowThreadProcessId(window_handle, (LPDWORD)&process_id);}// 如果找到了窗口句柄,就不需要再枚举进程了if (process_id == 0) {// 枚举系统中的所有进程HANDLE snapshot_handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);if (snapshot_handle == INVALID_HANDLE_VALUE) {return false;}PROCESSENTRY32W process_entry;process_entry.dwSize = sizeof(PROCESSENTRY32W);// 遍历每一个进程if (Process32FirstW(snapshot_handle, &process_entry)) {do {// 匹配进程名称if (process_name_or_window_title == std::wstring(process_entry.szExeFile)) {process_id = process_entry.th32ProcessID;break;}} while (Process32NextW(snapshot_handle, &process_entry));}CloseHandle(snapshot_handle);}#else// 在 Linux 系统上使用 ps 命令查找进程 IDstd::wstring command = L"ps -e -o pid,comm | grep " + process_name_or_window_title;std::FILE* process_id_file = _wpopen(command.c_str(), L"r");if (process_id_file) {std::fscanf(process_id_file, "%d", &process_id);_pclose(process_id_file);}#endif// 如果没有找到进程 ID,返回 falseif (process_id == 0) {return false;}// 在 Windows 系统上使用 TerminateProcess 函数终止进程#ifdef _WIN32HANDLE process_handle = OpenProcess(PROCESS_TERMINATE, 0, process_id);bool result = TerminateProcess(process_handle, 0) == TRUE;return result;#elseint kill_result = _wsystem((L"kill " + std::to_wstring(process_id)).c_str());// 如果 kill 命令返回 0,表示成功终止进程return kill_result == 0;#endif}inline bool kill_process_w(const std::string& process_name_or_window_title) {// 用于存储进程 ID 的变量unsigned int process_id = 0;#ifdef _WIN32// 在 Windows 系统上使用 FindWindow 函数查找窗口句柄HWND window_handle = FindWindowA(0, process_name_or_window_title.c_str());if (window_handle) {GetWindowThreadProcessId(window_handle, (LPDWORD)&process_id);}// 如果找到了窗口句柄,就不需要再枚举进程了if (process_id == 0) {// 枚举系统中的所有进程HANDLE snapshot_handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);if (snapshot_handle == INVALID_HANDLE_VALUE) {return false;}PROCESSENTRY32 process_entry;process_entry.dwSize = sizeof(PROCESSENTRY32W);// 遍历每一个进程if (Process32First(snapshot_handle, &process_entry)) {do {// 匹配进程名称if (process_name_or_window_title == std::string(process_entry.szExeFile)) {process_id = process_entry.th32ProcessID;break;}} while (Process32Next(snapshot_handle, &process_entry));}CloseHandle(snapshot_handle);}#else// 在 Linux 系统上使用 ps 命令查找进程 IDstd::string command = "ps -e -o pid,comm | grep " + process_name_or_window_title;std::FILE* process_id_file = _popen(command.c_str(), "r");if (process_id_file) {std::fscanf(process_id_file, "%d", &process_id);_pclose(process_id_file);}#endif// 如果没有找到进程 ID,返回 falseif (process_id == 0) {return false;}// 在 Windows 系统上使用 TerminateProcess 函数终止进程#ifdef _WIN32HANDLE process_handle = OpenProcess(PROCESS_TERMINATE, 0, process_id);bool result = TerminateProcess(process_handle, 0) == TRUE;return result;#elseint kill_result = std::system(("kill " + std::to_string(process_id)).c_str());// 如果 kill 命令返回 0,表示成功终止进程return kill_result == 0;#endif}inline bool kill_process_w(unsigned int process_id) {if (process_id == 0){return 0;}// 在 Windows 系统上使用 TerminateProcess 函数终止进程#ifdef _WIN32HANDLE process_handle = OpenProcess(PROCESS_TERMINATE, 0, process_id);bool result = TerminateProcess(process_handle, 0) == TRUE;return result;#else// 在其他平台上使用 kill 命令终止进程int kill_result = std::system(("kill " + std::to_string(process_id)).c_str());// 如果 kill 命令返回 0,表示成功终止进程return kill_result == 0;#endif}// 调用格式: SDT_BOOL 终止进程, 命令说明: "模拟键盘的输入。"// 参数<1>: 进程标识 _SDT_ALL, 参数说明: "要终止进程的进程ID、进程名称或窗口标题。"EAPI_EXTERN_C void eapi_KillProcess_11_eapi(PMDATA_INF pRetData, INT nArgCount, PMDATA_INF pArgInf){BOOL ret = FALSE;if (pArgInf->m_dtDataType == SDT_BIN){ret = kill_process_w(std::wstring(args_to_wsdata(pArgInf, 0)));}else if (pArgInf->m_dtDataType == SDT_TEXT){ret = kill_process_w(std::string(args_to_sdata(pArgInf, 0)));}else if (pArgInf->m_dtDataType == SDT_INT){ret = kill_process_w(pArgInf[0].m_int);}pRetData->m_int = ret;}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。