Программа уходит в бесконечный цикл, хотя не должна
Есть вот такой код на с++:
#include <Windows.h>
void m_click(short int times)
{
for (int i = 0; i < times; i++)
{
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
Sleep(25);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
}
}
void main()
{
for (;; Sleep(25))
if (GetAsyncKeyState(VK_LBUTTON))
m_click(2);
}
Как вы понимаете программа должна считывать физическое нажатие на кнопку мыши(именно физическое) и после этого посылать 2 нажатия, но программа входит в бесконечный цикл и начинает бесконечно кликать, предположительно из-за того, что она считывает те же нажатия, что и посылает. Подскажите пожалуйста, как это можно исправить.
P. s. я имею ввиду не основной цикл for() в функции main(), а тот который вызывается из-за функции m_click(), и условия if (GetAsyncKeyState(VK_LBUTTON))
Ответы (2 шт):
Да сделайте простейший вывод
void m_click(short int times)
{
cout << "Start" << endl;
for (int i = 0; i < times; i++)
{
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
Sleep(25);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
}
cout << "Stop" << endl;
}
и убедитесь, что цикл не бесконечен! просто ваш цикл в main перехватывает эти ваши нажатия из цикла...
Если вы поясните, как вы бы хотели, чтоб вела себя программа - можно будет обсуждать пути решения. Сейчас же только можно говорить, что все отрабатывает корректно...
Я решил поставленную задачу. Все решилось путем добавления bool-переменной, которая определяла "мои" нажатия или не "мои".
#include <Windows.h>
void m_click(short int times)
{
for (int i = 0; i < times; i++)
{
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
Sleep(25);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
}
}
bool is_own = true;
void main()
{
for (;; Sleep(25))
if (GetAsyncKeyState(VK_LBUTTON))
if (is_own)
{
m_click(2);
is_own = false;
}
else is_own = true;
}