Я не могу синтезировать правой кнопкой мыши при использовании SendInput - PullRequest
0 голосов
/ 23 декабря 2018

Я использую WinAPI с C ++, я хочу сделать симуляцию щелчка правой кнопкой мыши с SendInput, но я не уверен, что происходит не так.

Моя тестовая программа должна работать так: когда янажмите среднюю кнопку мыши, она выполнит щелчок правой кнопкой мыши.

#include <iostream>
#include <windows.h>
#include <stdio.h>

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow)     
{
    // Fetch tab key state.

    while (1)   
    {
        SHORT tabKeyState = GetAsyncKeyState(4); // Mouse mid button

        // Test high bit - if set, button was down when GetAsyncKeyState was called.
        if (tabKeyState < 0)
        {
            INPUT    Input[2] = { 0 };
            // left down 
            Input[0].type = INPUT_MOUSE;
            Input[0].mi.dwFlags = MOUSEEVENTF_RIGHTDOWN;
            Input[0].mi.time = 500;

            // left up

            Input[1].type = INPUT_MOUSE;
            Input[1].mi.dwFlags = MOUSEEVENTF_RIGHTUP;
            Input[1].mi.time = 500;

            ::SendInput(2, Input, sizeof(INPUT));
        }
    }
    return 0;
}

Ответы [ 2 ]

0 голосов
/ 23 декабря 2018

Я решаю этот вопрос, используя Sleep, чтобы сделать то, что я хотел сделать, и обнаружил, что sendinput не работал, потому что я выполнял это внутри VS.Этот вопрос можно закрыть сейчас.

0 голосов
/ 23 декабря 2018

В коде для установки свойств для второй записи события вы используете индекс 0 вместо индекса 1.

Input[1].type = INPUT_MOUSE;
Input[0].mi.dwFlags = MOUSEEVENTF_LEFTUP;
Input[0].mi.time = 100;

Используйте индекс 1 вместо 0 в последних двух строках.

Между прочим, легче написать оператор if следующим образом

if (tabKeyState < 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...