Поэтому я написал небольшой инструмент, который отправляет нажатие клавиш на произвольную длительность через произвольные интервалы, чтобы обойти автоматический выход из строя из-за неактивности в некоторых играх.
Я написал это сегодня, но во время тестирования мой компьютер неожиданно дал мне BSOD (KMODE_Exception_Not_Handled). Это первый BSOD, с которым я столкнулся, поэтому я думаю, что это из-за моей программы.
Основной файл C ++:
using namespace std;
class Activator;
int main()
{
Activator *a = new Activator();
cout << "It sends a random amount of arrow keypresses to the RSClient at random intervals." << endl
<< "Because of the randomness of this program it will be fairly safe to use but I take no responsability for your actions, after all it's still macroing/botting!" << endl
<< "Press any key to start KeepRSActive..." << endl;
_getch();
system("cls");
for (size_t i = 10; i > 0; i--)
{
cout << "Please click inside of your RS client" << endl << "The program will start in: " << i << " seconds." << endl;
Sleep(1000);
system("cls");
}
cout << "You will no longer be bothered by automatic logouts!" << endl << "Simply close the console window to stop.";
//Main program loop
while (true)
{
Sleep(33); //30 TPS, Basically a simple repeatable timer.
a->tick();
}
delete a;
return 0;
}
Activator.cpp
Activator::Activator()
{
// Easier to randomise later on
m_KeyList[0] = VK_LEFT;
m_KeyList[1] = VK_RIGHT;
m_KeyList[2] = VK_UP;
m_KeyList[3] = VK_DOWN;
}
Activator::~Activator()
{
}
void Activator::tick()
{
// Random key selected from m_KeyList
setUpNewKeypress(rand() % ARRAYSIZE(m_KeyList) - 1);
// Random amount of time between key presses
Sleep((rand() % 200000) + 20000);
}
void Activator::setUpNewKeypress(WORD key)
{
//Set up the keypress
INPUT input;
// Set up a keyboard event.
input.type = INPUT_KEYBOARD;
input.ki.wScan = 0;
input.ki.time = 0;
input.ki.dwExtraInfo = 0;
// Press the key
input.ki.wVk = key; // virtual-key code for left arrow key
input.ki.dwFlags = 0; // 0 for key press
SendInput(1, &input, sizeof(INPUT));
// Keep the key held down for a random amount of time
Sleep((rand() % 5000) + 500);
// Release the key
input.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release
SendInput(1, &input, sizeof(INPUT));
}
Когда я ищу этот код BSOD, 99% результатов имеют отношение к загрузке или неисправным аппаратным средствам / драйверам, но буквально единственное, что изменилось на моем ПК, — это программа, которую я написал. Может быть, это бесконечный цикл? Я не уверен..
Задача ещё не решена.
Других решений пока нет …