分享
 
 
 

VC实例学习:杀死制定进程(以杀死QQ进程为例)

王朝vc·作者佚名  2006-03-30
窄屏简体版  字體: |||超大  

// OicqKiller.cpp : Defines the class behaviors for the application.

//

#include "stdafx.h"

#include "OicqKiller.h"

#include "OicqKillerDlg.h"

#include <tlhelp32.h>

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

//////////////////////////////////////////////////////////////////////////

// 全局变量

CMutex gMutex;

COicqKillerApp theApp;

/////////////////////////////////////////////////////////////////////////////

// COicqKillerApp

BEGIN_MESSAGE_MAP(COicqKillerApp, CWinApp)

//{{AFX_MSG_MAP(COicqKillerApp)

// NOTE - the ClassWizard will add and remove mapping macros here.

// DO NOT EDIT what you see in these blocks of generated code!

//}}AFX_MSG

ON_COMMAND(ID_HELP, CWinApp::OnHelp)

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// COicqKillerApp construction

COicqKillerApp::COicqKillerApp()

{

// 初始化参数

m_hExitApp = CreateEvent(NULL, TRUE, FALSE, NULL);

m_ThreadKillOicq = NULL;

m_pParm = new PARMSTRUCT;

memset(m_pParm, 0, sizeof(PARMSTRUCT));

m_pParm->bAutoRun = FALSE; // 默认情况:不会开机自动运行

m_pParm->bHiden = FALSE; // 默认情况:运行时会显示界面

m_pParm->bKill = FALSE; // 默认情况:不阻止QQ运行

m_pParm->lKeyValue = KY_DEFAULT; // 默认情况:采用的是默认热键Ctrl + *

m_pParm->lWaitSeconds = WS_DEFAULT; // 默认情况:每5秒检测一次

}

/////////////////////////////////////////////////////////////////////////////

// COicqKillerApp initialization

BOOL COicqKillerApp::InitInstance()

{

AfxEnableControlContainer();

// Standard initialization

// If you are not using these features and wish to reduce the size

// of your final executable, you should remove from the following

// the specific initialization routines you do not need.

#ifdef _AFXDLL

Enable3dControls(); // Call this when using MFC in a shared DLL

#else

Enable3dControlsStatic(); // Call this when linking to MFC statically

#endif

// 一、初始化,启动所有功能

//////////////////////////////////////////////////////////////////////////

HKEY hKey = NULL;

long lErrorCode = -1;

// 0.设置开机自动运行

hKey = NULL;

if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SoftWare\\Microsoft\\Windows\\CurrentVersion\\Run", NULL, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)

{

char szPath[MAX_PATH] = {0};

GetModuleFileName(NULL, szPath, MAX_PATH);

CString scValue;

scValue.Format("%s", szPath);

RegSetValueEx(hKey, "OicqKiller.exe", 0, REG_SZ, (BYTE*)szPath, scValue.GetLength() + 1);

RegCloseKey(hKey);

}

else

{

AfxMessageBox("设置开机自动运行出错");

}

// 1.从注册表读取参数

if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SoftWare\\OicqKiller", 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)

{// 成功

DWORD dwType;

DWORD dwBytes = 64;

BYTE szValue[4] = {0};

lErrorCode = RegQueryValueEx(hKey, "bAutoRun", 0, &dwType, szValue, &dwBytes);

m_pParm->bAutoRun = szValue[0] + szValue[1] * 0x100;

RegCloseKey(hKey);

}

else

{

m_pParm->bAutoRun = TRUE; // 默认情况

}

// 1.2 读取Hiden

hKey = NULL;

if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SoftWare\\OicqKiller", 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)

{// 成功

DWORD dwType;

DWORD dwBytes = 64;

BYTE szValue[4] = {0};

lErrorCode = RegQueryValueEx(hKey, "bHiden", 0, &dwType, szValue, &dwBytes);

m_pParm->bHiden = szValue[0] + szValue[1] * 0x100;

RegCloseKey(hKey);

}

else

{

m_pParm->bHiden = TRUE; // 默认情况

}

// 1.3 读取Kill

hKey = NULL;

if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SoftWare\\OicqKiller", 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)

{// 成功

DWORD dwType;

DWORD dwBytes = 64;

BYTE szValue[4] = {0};

lErrorCode = RegQueryValueEx(hKey, "bKill", 0, &dwType, szValue, &dwBytes);

m_pParm->bKill = szValue[0] + szValue[1] * 0x100;

RegCloseKey(hKey);

}

else

{

m_pParm->bKill = TRUE; // 默认情况

}

// 1.4 读取KeyValue

hKey = NULL;

if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SoftWare\\OicqKiller", 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)

{// 成功

DWORD dwType;

DWORD dwBytes = 64;

BYTE szValue[4] = {0};

lErrorCode = RegQueryValueEx(hKey, "lKeyValue", 0, &dwType, szValue, &dwBytes);

m_pParm->lKeyValue = MAKELONG(MAKEWORD(szValue[0], szValue[1]), MAKEWORD(szValue[2], szValue[3]));

RegCloseKey(hKey);

}

else

{

m_pParm->lKeyValue = KY_DEFAULT; // 默认情况

}

// 1.5 读取WaitSeconds

hKey = NULL;

if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SoftWare\\OicqKiller", 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)

{// 成功

DWORD dwType;

DWORD dwBytes = 64;

BYTE szValue[4] = {0};

lErrorCode = RegQueryValueEx(hKey, "lWaitSeconds", 0, &dwType, szValue, &dwBytes);

m_pParm->lWaitSeconds = MAKELONG(MAKEWORD(szValue[0], szValue[1]), MAKEWORD(szValue[2], szValue[3]));

RegCloseKey(hKey);

}

else

{

m_pParm->lWaitSeconds = WS_DEFAULT; // 默认情况

}

//////////////////////////////////////////////////////////////////////////

// 2.开启封杀线程

if (m_ThreadKillOicq == NULL)

{

m_ThreadKillOicq = AfxBeginThread(KillQicqProc, m_pParm);

if (m_ThreadKillOicq == NULL)

{// 2.1 开启线程失败

AfxMessageBox("开启QQ封杀线程失败,请重启软件");

return FALSE;

}

else

{// 2.2 开启线程成功

m_ThreadKillOicq->m_bAutoDelete = FALSE;

}

}

// 3.显示方式

COicqKillerDlg dlg;

dlg.Create(IDD_OICQKILLER_DIALOG, theApp.m_pMainWnd);

if (m_pParm->bHiden)

{// 隐藏

dlg.ShowWindow(SW_HIDE);

}

else

{// 显示

dlg.ShowWindow(SW_SHOW);

}

dlg.RunModalLoop();

return FALSE;

}

// 二、封杀线程体

UINT COicqKillerApp::KillQicqProc(LPVOID lpParm)

{

PPARMSTRUCTpParm = (PPARMSTRUCT)lpParm;

HANDLE hSnapShot = NULL;

while (1)

{

// 0.获取最新运行参数

gMutex.Lock();

LONG lWaitSeconds = pParm->lWaitSeconds;

BOOL bKill = pParm->bKill;

gMutex.Unlock();

if (WaitForSingleObject(theApp.m_hExitApp, lWaitSeconds) == WAIT_OBJECT_0)

{// 1.退出信号激活,退出线程

break;

}

if (!bKill)

{// 不阻止QQ运行

continue;

}

// 2.检查系统中是否有QQ进程

hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

if (hSnapShot == NULL)

{

continue;

}

long nProcess= 0;

PROCESSENTRY32 prosInfo;

prosInfo.dwSize = sizeof(prosInfo);

BOOL bStatus = Process32First(hSnapShot, &prosInfo);

while (bStatus)

{

CString scTmp = prosInfo.szExeFile;

scTmp.MakeUpper();

if ( scTmp == "QQ.EXE")

{// 3.1 找到QQ进程

// 3.1.1 中止QQ进程

DWORD dwProcessID = prosInfo.th32ProcessID;

HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE, FALSE, dwProcessID);

::TerminateProcess(hProcess, 0);

CloseHandle(hProcess);

}

bStatus = Process32Next(hSnapShot, &prosInfo);

++nProcess;

}

}

return 1;

}

// 三、退出程序:释放资源

int COicqKillerApp::ExitInstance()

{

// 1.发出退出信号

if (m_ThreadKillOicq != NULL)

{

SetEvent(m_hExitApp);

}

// 2.关闭句柄

m_ThreadKillOicq = NULL;

CloseHandle(m_hExitApp);

// 3.清空缓存

delete m_pParm;

m_pParm = NULL;

return CWinApp::ExitInstance();

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有