#include <Windows.h>
#include<chrono>
#include <tlhelp32.h>
#include <tchar.h>
#include <ShellAPI.h>
#include <iostream>
#include <string>
#include <tchar.h>
bool FindProcess(std::string strProcessName, DWORD& dwPid)
{
std::wstring wstr = StringToWstring(strProcessName);
TCHAR tszProcess[64] = { 0 };
//lstrcpy(tszProcess, wstr.c_str());
lstrcpy(tszProcess, strProcessName.c_str());
//查找进程
STARTUPINFO st;
PROCESS_INFORMATION pi;
PROCESSENTRY32 ps;
HANDLE hSnapshot;
memset(&st, 0, sizeof(STARTUPINFO));
st.cb = sizeof(STARTUPINFO);
memset(&ps, 0, sizeof(PROCESSENTRY32));
ps.dwSize = sizeof(PROCESSENTRY32);
memset(&pi, 0, sizeof(PROCESS_INFORMATION));
// 遍历进程
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot == INVALID_HANDLE_VALUE)
return false;
if (!Process32First(hSnapshot, &ps))
return false;
do {
if (lstrcmp(ps.szExeFile, tszProcess) == 0)
{
//找到制定的程序
dwPid = ps.th32ProcessID;
CloseHandle(hSnapshot);
//printf("找到进程: %s\n", tszProcess);
return true;
//getchar();
//return dwPid;
}
} while (Process32Next(hSnapshot, &ps));
CloseHandle(hSnapshot);
return false;
}
bool KillProcess(DWORD dwPid)
{
printf("Kill进程Pid = %d\n", dwPid);
//关闭进程
HANDLE killHandle = OpenProcess(PROCESS_TERMINATE | PROCESS_QUERY_INFORMATION | // Required by Alpha
PROCESS_CREATE_THREAD | // For CreateRemoteThread
PROCESS_VM_OPERATION | // For VirtualAllocEx/VirtualFreeEx
PROCESS_VM_WRITE, // For WriteProcessMemory);
FALSE, dwPid);
if (killHandle == NULL)
return false;
TerminateProcess(killHandle, 0);
return true;
}
void EnableDebugPriv()
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken);
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, NULL, NULL);
CloseHandle(hToken);
}
int APIENTRY WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
MSG msg;
if (!RegisterHotKey(NULL, 0, MOD_CONTROL | MOD_SHIFT, 'Q')) {//热键 ALT该下参数
return -1;//注册热键失败
}
if (!RegisterHotKey(NULL, 1, MOD_CONTROL | MOD_SHIFT, 'E')) {
return -1;//注册热键失败
}
while (GetMessage(&msg, NULL, 0, 0)) {
if (msg.message == WM_HOTKEY) {
if (msg.wParam == 0)
{
//打开文件
std::string str_exe_name = "notepad.exe";
DWORD dwPid = 0;
EnableDebugPriv();
FindProcess(str_exe_name, dwPid);
KillProcess(dwPid);
Sleep(2000);
if (dwPid != 0)
{
break;
}
}
else {
break;
}
}
}
return 0;
}