//发送模拟按键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;
}