1. 程式人生 > 其它 >c++ 熱鍵快速退出QQ(或其它程式)

c++ 熱鍵快速退出QQ(或其它程式)

創作起因(廢話,可以跳過)

因為疫情的緣故,我又不得不上了網課。
網課的內容相比學校課上的內容要簡單的多(畢竟原來教我的是重點班老師,現在卻是平行班老師給我們上課)
邊聽課,我就順便跟鋁硼鈾在QQ上聊天(嘿嘿~~)
可是Ta的手速很糟糕,Ta母親進房間的時候,Ta有時會來不及退出QQ,差點被發現......

為了有效避免以上問題,我就花了一節政治課的時間,寫了下面這個小程式。

主程式

用法:Alt + J 快速關閉QQ主程式

/*
Author: Pevernow<[email protected]
Time: 2022.3.30
License: MIT
轉載或者二創請保留這些註釋 
*/


#include <iostream>
#include <Windows.h>
#include <TlHelp32.h>

using namespace std;

bool KillProcess(DWORD ProcessId) {//通過ID殺死程式
	HANDLE hProcess=OpenProcess(PROCESS_TERMINATE,FALSE,ProcessId);
	if(hProcess==NULL)
		return FALSE;
	if(!TerminateProcess(hProcess,0))
		return FALSE;
	return TRUE;
}

bool KillQQ(){//嘗試尋找QQ.exe並獲取ID然後殺死
	HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	if (hProcessSnap == FALSE ) {
		cout<<"CreateToolhelp32Snapshot error"<<endl;
		return -1;
	}
	PROCESSENTRY32 pe32;
	pe32.dwSize = sizeof(PROCESSENTRY32);

	BOOL bRet = Process32First(hProcessSnap, &pe32);
	while (bRet) {

		if(strcmp(pe32.szExeFile,"QQ.exe")==0){//也可以替換成別的程序名
		    KillProcess(pe32.th32ProcessID);
	    }
		bRet = Process32Next(hProcessSnap, &pe32);
	}
	::CloseHandle(hProcessSnap);
	return 0;
}

int main() {	
    if (0 == RegisterHotKey(NULL, 1, MOD_ALT, 0x4B)) {//註冊熱鍵
        cout << "RegisterHotKey error : " << GetLastError() << endl;
        return 0;
    }
    MSG msg = { 0 };
    while (GetMessage(&msg, NULL, 0, 0)){//輪詢接收訊息,放心,因為是事件觸發,幾乎不會佔用CPU時間

        switch (msg.message) {
        case WM_HOTKEY:
        {
            if (1 == msg.wParam) {
            	KillQQ();
            }

            break;
        }
            
        default:
            break;
        }

    }
	return 0;
}

編譯建議

我用Dev-C++編譯的,靜態連結了stdc++和pthread(我明明沒用pthread,不知道為什麼提示要用這個庫,求大神解答一下)
這樣就能打包出單檔案的可執行程式(大小在3M左右)

同時,為了防止被別人發現,我在Dev-C++的編譯選項-聯結器中勾選了“不產生控制檯視窗”

寫在最後

新人學生博主,求支援~~