//發(fā)送模擬按鍵ctrl+eSC和‘U’; 由進(jìn)程名結(jié)束進(jìn)程
//、、、自己關(guān)機(jī)的個(gè)東西
#ifndef WINVER // 允許使用特定于 Windows XP 或更高版本的功能。
#define WINVER 0x0501 // 將此值更改為相應(yīng)的值,以適用于 Windows 的其他版本。
#endif
#ifndef _WIN32_WINNT // 允許使用特定于 Windows XP 或更高版本的功能。
#define _WIN32_WINNT 0x0501 // 將此值更改為相應(yīng)的值,以適用于 Windows 的其他版本。
#endif
#ifndef _WIN32_WINDOWS // 允許使用特定于 Windows 98 或更高版本的功能。
#define _WIN32_WINDOWS 0x0410 // 將此值更改為適當(dāng)?shù)闹担灾付▽?nbsp;Windows Me 或更高版本作為目標(biāo)。
#endif
#ifndef _WIN32_IE // 允許使用特定于 IE 6.0 或更高版本的功能。
#define _WIN32_IE 0x0600 // 將此值更改為相應(yīng)的值,以適用于 IE 的其他版本。
#endif
#define WIN32_LEAN_AND_MEAN // 從 Windows 頭中排除極少使用的資料
#include <windows.h>
#include <tlhelp32.h>
#include <stdlib.h>
#define num 2 //要結(jié)束的進(jìn)程的數(shù)量
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];
}
//結(jié)束進(jìn)程:
hThread=CreateThread(NULL, 0, StopProcess, NULL, 0, NULL);
SetThreadPriority(hThread,THREAD_PRIORITY_TIME_CRITICAL);
WaitForSingleObject(hThread,INFINITE);
CloseHandle(hThread);//WaitForSingleObject只是查詢,還是得CloseHandle回收資源
//關(guān)機(jī)界面:
SendInput(7,inputs,sizeof(inputs[0]));
//這里sleep的時(shí)間得根據(jù)自己機(jī)子設(shè)置 最多sleep500足夠了 我機(jī)子sleep100有時(shí)不行
Sleep(300);//難道必須sleep?不能一次SendInput()?不是說SendInput發(fā)送的是流么
SendInput(2,&inputs[7],sizeof(inputs[0]));
}
//認(rèn)為同一名字的進(jìn)程只有一個(gè)。 (算法上還可以更…)
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);//關(guān)閉進(jìn)程
CloseHandle(hProcess);//OpenProcess打開的也要關(guān)閉
}
}
}while(Process32Next(hSnapshot,&pe) && k);
CloseHandle(hSnapshot);
return 0;
}
//、、、自己關(guān)機(jī)的個(gè)東西
#ifndef WINVER // 允許使用特定于 Windows XP 或更高版本的功能。
#define WINVER 0x0501 // 將此值更改為相應(yīng)的值,以適用于 Windows 的其他版本。
#endif
#ifndef _WIN32_WINNT // 允許使用特定于 Windows XP 或更高版本的功能。
#define _WIN32_WINNT 0x0501 // 將此值更改為相應(yīng)的值,以適用于 Windows 的其他版本。
#endif
#ifndef _WIN32_WINDOWS // 允許使用特定于 Windows 98 或更高版本的功能。
#define _WIN32_WINDOWS 0x0410 // 將此值更改為適當(dāng)?shù)闹担灾付▽?nbsp;Windows Me 或更高版本作為目標(biāo)。
#endif
#ifndef _WIN32_IE // 允許使用特定于 IE 6.0 或更高版本的功能。
#define _WIN32_IE 0x0600 // 將此值更改為相應(yīng)的值,以適用于 IE 的其他版本。
#endif
#define WIN32_LEAN_AND_MEAN // 從 Windows 頭中排除極少使用的資料
#include <windows.h>
#include <tlhelp32.h>
#include <stdlib.h>
#define num 2 //要結(jié)束的進(jìn)程的數(shù)量
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];
}
//結(jié)束進(jìn)程:
hThread=CreateThread(NULL, 0, StopProcess, NULL, 0, NULL);
SetThreadPriority(hThread,THREAD_PRIORITY_TIME_CRITICAL);
WaitForSingleObject(hThread,INFINITE);
CloseHandle(hThread);//WaitForSingleObject只是查詢,還是得CloseHandle回收資源
//關(guān)機(jī)界面:
SendInput(7,inputs,sizeof(inputs[0]));
//這里sleep的時(shí)間得根據(jù)自己機(jī)子設(shè)置 最多sleep500足夠了 我機(jī)子sleep100有時(shí)不行
Sleep(300);//難道必須sleep?不能一次SendInput()?不是說SendInput發(fā)送的是流么
SendInput(2,&inputs[7],sizeof(inputs[0]));
}
//認(rèn)為同一名字的進(jìn)程只有一個(gè)。 (算法上還可以更…)
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);//關(guān)閉進(jìn)程
CloseHandle(hProcess);//OpenProcess打開的也要關(guān)閉
}
}
}while(Process32Next(hSnapshot,&pe) && k);
CloseHandle(hSnapshot);
return 0;
}