Mengambil semula Proses Pengendalian mengikut Nama dalam C
Dalam C , anda mungkin menghadapi situasi di mana anda perlu memanipulasi proses berdasarkan namanya. Sebagai contoh, anda mungkin ingin menamatkan proses yang dikenali sebagai "example.exe" tanpa bergantung pada pemegang tetingkap. Soalan ini menyelidiki senario khusus ini dan membentangkan penyelesaian.
Untuk mendapatkan semula pengendalian proses mengikut namanya, kami boleh memanfaatkan fungsi API Windows CreateToolhelp32Snapshot dan Process32Next. Berikut ialah coretan kod yang menunjukkan pendekatan ini:
#include <cstdio> #include <windows.h> #include <tlhelp32.h> int main() { // Create a snapshot of running processes HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); // Iterate over the processes PROCESSENTRY32 entry; entry.dwSize = sizeof(PROCESSENTRY32); if (Process32First(snapshot, &entry) == TRUE) { while (Process32Next(snapshot, &entry) == TRUE) { // Check if this is the process we want if (strcmp(entry.szExeFile, "example.exe") == 0) { // Open a handle to the process HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, entry.th32ProcessID); // Perform desired operations on the process CloseHandle(hProcess); // Close the handle } } } CloseHandle(snapshot); // Close the snapshot handle return 0; }
Penyelesaian ini akan berulang melalui semua proses yang dijalankan dan membandingkan nama boleh lakunya dengan "example.exe". Setelah padanan ditemui, pemegang kepada proses itu diperoleh dan boleh digunakan untuk melaksanakan operasi seperti penamatan (melalui TerminateProcess).
Nota: Jika anda bercadang untuk menggunakan PROCESS_ALL_ACCESS dalam OpenProcess , anda mungkin perlu meningkatkan keistimewaan proses anda dengan mendayakan keistimewaan SE_DEBUG_NAME. Kod untuk melakukan ini ditunjukkan di bawah:
void EnableDebugPriv() { // Enable debug privilege HANDLE hToken; LUID luid; TOKEN_PRIVILEGES tkp; OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken); LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid); tkp.PrivilegeCount = 1; tkp.Privileges[0].Luid = luid; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, false, &tkp, sizeof(tkp), NULL, NULL); CloseHandle(hToken); }
Atas ialah kandungan terperinci Bagaimanakah saya boleh mendapatkan semula Pengendalian Proses mengikut Nama dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!