我試圖編寫一個小小的「病毒」(只是一個有趣的笑話程序,它隨着光標四處亂動,併發出一些嘟嘟聲)。但是,我想用我的F9鍵來關閉此過程。C++通過熱鍵關閉我的進程
這是我到目前爲止有:
void executeApp()
{
while (true)
{
if (GetAsyncKeyState(VK_F9) & 0x8000)
{
exit(0);
}
Sleep(200);
}
}
我做了運行此功能的線程。但是,當我運行我的整個代碼並按F9時,該過程仍在運行。只有當我按下它2-3次時,纔會出現一個錯誤:「已調用調試錯誤!abort()」。
如果有人知道我可以通過熱鍵殺死我的進程,那將會很好。
下面是該程序的整個代碼:
#include <iostream>
#include <stdio.h>
#include <windows.h>
#include <conio.h>
#include <ctime>
#include <thread>
#include <random>
using namespace std;
//random number gen for while loops in cursor/beep functions.
random_device rd;
mt19937 eng(rd());
uniform_int_distribution<> distr(1, 100);
//variables used for this program.
int random, Dur, X, Y, Freq;
HWND mywindow, Steam, CMD, TaskMngr;
char Notepad[MAX_PATH] = "notepad.exe";
char Website[MAX_PATH] = "http:\\www.google.de";
//functions
void RandomCursor(), Beeper(), OpenStuff(), executeApp();
//threads
thread cursor(RandomCursor);
thread beeps(Beeper);
thread openstuff(OpenStuff);
thread appexecute(executeApp);
int main()
{
srand(time(0));
random = rand() % 3;
system("title 1337app");
cursor.join();
beeps.join();
appexecute.join();
return 0;
}
//void SetUp()
//{
// mywindow = FindWindow(NULL, "1337app");
// cout << "oh whats that? let me see.\n";
// Sleep(1000);
// ShowWindow(mywindow, false);
//}
void Beeper()
{
while (true)
{
if (distr(eng) > 75)
{
Dur = rand() % 206;
Freq = rand() % 2124;
Beep(Dur, Freq);
}
Sleep(1500);
}
}
//void OpenStuff()
//{
// ShellExecute(NULL, "open", Notepad, NULL, NULL, SW_MAXIMIZE);
// ShellExecute(NULL, "open", Website, NULL, NULL, SW_MAXIMIZE);
//}
void RandomCursor()
{
while (true)
{
if (distr(eng) < 50)
{
X = rand() % 302;
Y = rand() % 202;
SetCursorPos(X, Y);
}
Sleep(500);
}
}
void executeApp()
{
while (true)
{
if (GetAsyncKeyState(VK_F9) & 0x8000)
{
exit(0);
}
Sleep(200);
}
}
歡迎堆棧溢出。請花些時間閱讀[The Tour](http://stackoverflow.com/tour),並參閱[幫助中心](http://stackoverflow.com/help/asking)中的資料,瞭解您可以在這裏問。 –
大多數情況下,當你的進程處於睡眠狀態時,你將會按下按鍵。您應該調查處理Windows消息。 –
你應該檢查你的線程的行爲,看看發生了什麼。正如@NeilButterworth所說,線程可能在大多數時間都在睡覺。根據您添加的內容,它可能會執行一些其他任務,並且無法在導致您看到的錯誤時處理您的輸入。或者你可能在創建線程時犯了一個錯誤。 – Javia1492