Не удается имитировать щелчок мыши через Windows API

#c #windows #winapi

#c #Windows #winapi

Вопрос:

Я возился с позиционированием указателя мыши, с которым у меня вообще не было проблем, но попытка имитировать щелчок левой кнопкой мыши на данный момент вызывает у меня проблемы.

 #include <Windows.h>
int main()
{
    SetCursorPos(100, 450);
    Sleep(3000);
    SetCursorPos(1600, 450);
    int n = 1;
    while (n <= 10); 
    {
        SetCursorPos(1600, 450);
        LeftClick();
        n  ;
    }
}
  

Моя LeftClick() функция заключается в следующем:

 void LeftClick()

//down
INPUT Input = {0};
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_LEFTDOWN;
::SendInput(1, amp;Input, sizeof(INPUT));

//up
::ZeroMemory(amp;Input, sizeof(INPUT));
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
::SendInput(1, amp;Input, sizeof(INPUT));
  

Я осмотрелся, и до сих пор все, что я видел, у меня не работало.
Пожалуйста, дайте мне любую помощь во всем, что связано с моим неаккуратным кодом, а не только с тем, как я пытаюсь имитировать нажатие,

Комментарии:

1. В вашем while цикле есть ошибочное завершение ; , поэтому вы застреваете в бесконечном цикле и вообще никогда не вызываете LeftClick() . Если бы вы вошли в свой код с помощью отладчика, вы бы увидели эту ошибку в действии. После того, как вы это исправите, знайте, что вызов SendInput() с nInputs=1 почти всегда является логической ошибкой. Отправляйте входные данные как вниз, так и вверх в одном вызове SendInput() , а не по отдельности. И, к вашему сведению, вы также можете перемещать мышь с помощью SendInput() . SetCursorPos() выполняется немедленно, но SendInput() задерживается .

2. Спасибо, отлично работал без цикла while, я обязательно начну использовать отладчик и подробнее изучу ваши советы. Спасибо: D