//发送模拟按键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(3 00 ); // 难道必须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 ;
}
//、、、自己关机的个东西
#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(3 00 ); // 难道必须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 ;
}
Posted on 2008-09-16 12:09 小鼬 阅读(1705) 评论(2) 编辑 收藏 引用 所属分类: 1.WIN程序设计