При вводе количества секунд начинает грузить процессор.
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
int time,x,y;
bool state = false;
cout << "Time between clicks(in ms): ";
cin >> time;
cout << "Press F12 to activate / deactivate the script.";
POINT mouse;
while(true)
{
if (GetAsyncKeyState(VK_F12))
{
if (state == false)
{
state = true;
Sleep(250);
} else
{
state = false;
Sleep(250);
}
}
if (GetKeyState(VK_LBUTTON) & 0x8000 && (state == true))
{
GetCursorPos(&mouse);
mouse_event(MOUSEEVENTF_LEFTUP,mouse.x,mouse.y ,0,0);
mouse_event(MOUSEEVENTF_LEFTDOWN,mouse.x,mouse.y ,0,0);
Sleep(time);
}
if (GetKeyState(VK_RBUTTON) & 0x8000 && (state == true))
{
GetCursorPos(&mouse);
mouse_event(MOUSEEVENTF_RIGHTUP,mouse.x,mouse.y ,0,0);
mouse_event(MOUSEEVENTF_RIGHTDOWN,mouse.x,mouse.y ,0,0);
Sleep(time);
}
}
}
Что можно сделать в данной ситуации?
Не нужно вызывать GetAsyncKeyState в цикле только с целью глобального отлова нажатий клавиатуры или мыши. При таком способе у вас всегда программа либо слишком сильно нагружает процессор, либо недостаточно быстро реагирует на события. Вместо этого, используйте специально для этого предназначенный механизм, Low-level keyboard (mouse) hook:
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
bool state = false;
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode == HC_ACTION)
{
switch (wParam)
{
case WM_KEYDOWN:
PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT)lParam;
if(p->vkCode == VK_F12) {
state = !state;
}
break;
}
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
LRESULT CALLBACK LowLevelMouseProc( int nCode, WPARAM wParam,LPARAM lParam){
if (nCode == HC_ACTION)
{
switch (wParam)
{
case WM_LBUTTONDOWN:
if(state != false) {
//выполнить необходимые действия при нажатии кнопки мыши...
}
break;
}
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
int main(int argc, char* argv[])
{
printf("Press F12 to activate / deactivate the script.");
HHOOK hook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, 0, 0);
if(hook == NULL) {
printf("Failed to install keyboard hook!\n");
getchar();
return 1;
}
hook = SetWindowsHookEx(WH_MOUSE_LL, LowLevelMouseProc, 0, 0);
if(hook == NULL) {
printf("Failed to install mouse hook!\n");
getchar();
return 1;
}
MSG msg;
while (!GetMessage(&msg, NULL, NULL, NULL)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Подскажите, пожалуйста, как реализовать поставленную задачу"Завод выпускает разные измерительные приборы
Как укоротить сообщения об ошибках и предупреждения компилятора? Особенно при ошибках в шаблонах сначала идёт куча строк, в каком файле инстанциация...
После деплоя сервера при попытке получить JSON по адресу