//發送模擬按鍵ctrl+eSC和‘U’; 由進程名結束進程
//、、、自己關機的個東西
#ifndef WINVER // 允許使用特定于 Windows XP 或更高版本的功能。
#define WINVER 0x0501 // 將此值更改為相應的值,以適用于 Windows 的其他版本。
#endif
#ifndef _WIN32_WINNT // 允許使用特定于 Windows XP 或更高版本的功能。
#define _WIN32_WINNT 0x0501 // 將此值更改為相應的值,以適用于 Windows 的其他版本。
#endif
#ifndef _WIN32_WINDOWS // 允許使用特定于 Windows 98 或更高版本的功能。
#define _WIN32_WINDOWS 0x0410 // 將此值更改為適當的值,以指定將 Windows Me 或更高版本作為目標。
#endif
#ifndef _WIN32_IE // 允許使用特定于 IE 6.0 或更高版本的功能。
#define _WIN32_IE 0x0600 // 將此值更改為相應的值,以適用于 IE 的其他版本。
#endif
#define WIN32_LEAN_AND_MEAN // 從 Windows 頭中排除極少使用的資料
#include <windows.h>
#include <tlhelp32.h>
#include <stdlib.h>
#define num 2 //要結束的進程的數量
LPSTR lpsz[num]={"IEXPLoRE.EXE","k-meleon.exe"};
DWORD WINAPI StopProcess(LPVOID lpParam);
int main(){
HANDLE hThread;
KEYBDINPUT ki[9]={
{VK_SHIFT,MapVirtualKey(VK_SHIFT, 0),KEYEVENTF_KEYUP,0,0},
{VK_MENU,MapVirtualKey(VK_MENU, 0),KEYEVENTF_KEYUP,0,0},
{'U',MapVirtualKey('U', 0),KEYEVENTF_KEYUP,0,0},
{VK_CONTROL,MapVirtualKey(VK_CONTROL, 0),0,0,0},
{VK_ESCAPE,MapVirtualKey(VK_ESCAPE, 0),0,0,0},
{VK_ESCAPE,MapVirtualKey(VK_ESCAPE, 0),KEYEVENTF_KEYUP,0,0},
{VK_CONTROL,MapVirtualKey(VK_CONTROL,0),KEYEVENTF_KEYUP,0,0},
{'U',MapVirtualKey('U', 0),0,0,0},
{'U',MapVirtualKey('U', 0),KEYEVENTF_KEYUP,0,0}
};
INPUT inputs[9];
for(int i=0;i!=9;i++){
inputs[i].type = INPUT_KEYBOARD;
inputs[i].ki = ki[i];
}
//結束進程:
hThread=CreateThread(NULL, 0, StopProcess, NULL, 0, NULL);
SetThreadPriority(hThread,THREAD_PRIORITY_TIME_CRITICAL);
WaitForSingleObject(hThread,INFINITE);
CloseHandle(hThread);//WaitForSingleObject只是查詢,還是得CloseHandle回收資源
//關機界面:
SendInput(7,inputs,sizeof(inputs[0]));
//這里sleep的時間得根據自己機子設置 最多sleep500足夠了 我機子sleep100有時不行
Sleep(300);//難道必須sleep?不能一次SendInput()?不是說SendInput發送的是流么
SendInput(2,&inputs[7],sizeof(inputs[0]));
}
//認為同一名字的進程只有一個。 (算法上還可以更…)
DWORD WINAPI StopProcess(LPVOID lpParam){
HANDLE hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 pe;
int k(num);
HANDLE hProcess;
if(k==0) return 0;
Process32First(hSnapshot,&pe);
do
{
for(int i=0;i!=num;i++)
if(lstrcmpi(pe.szExeFile,lpsz[i])==0)
{
k--;
hProcess=OpenProcess(PROCESS_TERMINATE,FALSE,pe.th32ProcessID);
if (hProcess) {
TerminateProcess(hProcess,0);//關閉進程
CloseHandle(hProcess);//OpenProcess打開的也要關閉
}
}
}while(Process32Next(hSnapshot,&pe) && k);
CloseHandle(hSnapshot);
return 0;
}