创建进程API,用于启动应用程序
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
if (CreateProcess(
"C:\\Path\\To\\YourExecutable.exe",
NULL,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi)
) {
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
} else {
printf("CreateProcess failed (%d).\n", GetLastError());
}
关闭进程
DWORD processId = 1234;
HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, processId);
if (hProcess != NULL) {
if (TerminateProcess(hProcess, 0)) {
printf("Process terminated successfully.\n");
} else {
printf("Failed to terminate process (%d).\n", GetLastError());
}
CloseHandle(hProcess);
} else {
printf("Failed to open process (%d).\n", GetLastError());
}
通过进程快照来进行进程关闭
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_PROCESS, 0);
if (hSnapshot == INVALID_HANDLE_VALUE) {
printf("Failed to create process snapshot (%d).\n", GetLastError());
return;
}
PROCESSENTRY32 pe;
pe.dwSize = sizeof(pe);
if (Process32First(hSnapshot, &pe)) {
do {
if (strcmp(pe.szExeFile, processName) == 0) {
HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, pe.th32ProcessID);
if (hProcess != NULL) {
if (TerminateProcess(hProcess, 0)) {
printf("Terminated process: %s (PID: %u)\n", pe.szExeFile, pe.th32ProcessID);
} else {
printf("Failed to terminate process (%d).\n", GetLastError());
}
CloseHandle(hProcess);
} else {
printf("Failed to open process (%d).\n", GetLastError());
}
}
} while (Process32Next(hSnapshot, &pe));
} else {
printf("Failed to get first process (%d).\n", GetLastError());
}
CloseHandle(hSnapshot);
创建线程(windos的进程保护,线程创建的都是在当前进程下)
int number = 42;
HANDLE hThread;
DWORD threadId;
hThread = CreateThread(
NULL,
0,
ThreadFunction,
&number,
0,
&threadId
);
if (hThread != NULL) {
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
} else {
printf("CreateThread failed (%d).\n", GetLastError());
}
根据指定进程,关闭指定线程(通过线程快照遍历线程).
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
if (hSnapshot == INVALID_HANDLE_VALUE) {
printf("Failed to create thread snapshot (%d).\n", GetLastError());
return;
}
THREADENTRY32 te;
te.dwSize = sizeof(te);
if (Thread32First(hSnapshot, &te)) {
do {
if (te.th32OwnerProcessID == processId && te.th32ThreadID == threadId) {
HANDLE hThread = OpenThread(THREAD_TERMINATE, FALSE, te.th32ThreadID);
if (hThread != NULL) {
if (TerminateThread(hThread, 0)) {
printf("Terminated thread: %u in process: %u\n", te.th32ThreadID, processId);
} else {
printf("Failed to terminate thread (%d).\n", GetLastError());
}
CloseHandle(hThread);
} else {
printf("Failed to open thread (%d).\n", GetLastError());
}
break;
}
} while (Thread32Next(hSnapshot, &te));
} else {
printf("Failed to get first thread (%d).\n", GetLastError());
}
CloseHandle(hSnapshot);