【发布时间】:2017-11-29 14:56:27
【问题描述】:
我正在尝试编写一个小“病毒”(只是一个有趣的笑话程序,它会弄乱光标并发出一些哔哔声)。但是,我想用我的 F9 键关闭这个过程。
这是我目前所拥有的:
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);
}
}
【问题讨论】:
-
欢迎来到 Stack Overflow。请花时间阅读The Tour 并参考Help Center 中的材料,您可以在这里问什么以及如何问。
-
大多数情况下,当您的进程处于睡眠状态时,您将按下该键。您应该调查处理 Windows 消息。
-
你应该检查你的线程的行为,看看发生了什么。正如@NeilButterworth 所说,线程可能大部分时间都在睡觉。根据您添加的其他内容,它可能正在执行其他任务,并且当时无法处理您的输入,从而导致您看到的错误。或者你可能在创建线程时犯了一个错误。
-
这也将有助于显示其他代码,最好是线程,因为您已经测试了您的函数并表示它有效。这意味着您的问题很可能与线程有关。
-
@Javia1492 我的其他线程(randomCursorMovement、Beeps)没有中断 kill 线程。我认为这与函数“exit(0);”有关。但是我知道的不多,因为我刚开始接触c++。
标签: c++ windows winapi hotkeys kill-process