Попытка отправить события мыши вверх и вниз в приложение / окно холста для рисования в C ++ - PullRequest
1 голос
/ 29 октября 2011

Я пытаюсь написать простую программу, которая будет перемещать курсор мыши в положение X, Y на экране, отправлять событие нажатия мыши, снова перемещать курсор и отпускать мышь, чтобы нарисовать линию

Я пытался с успехом использовать SendInput и mouse_events, но не то, что мне нужно.

int main(int argc, char *argv[])
{
tagINPUT inp;
tagMOUSEINPUT mi;
DWORD moveFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE);
DWORD downFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN);
DWORD upFlags = (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP);

mi.dwFlags = moveFlags;
mi.dx = 5000;
mi.dy = 2000;
inp.type = INPUT_MOUSE;
inp.mi = mi;

SendInput(1, &inp, sizeof inp);

tagMOUSEINPUT mi2;
tagINPUT inp2;

SetCursorPos(1500, 500);

mi2.dwFlags = downFlags;
inp2.type = INPUT_MOUSE;
inp2.mi = mi2;
SendInput(1, &inp2, sizeof inp2);

SetCursorPos(500,200);
mi2.dwFlags = upFlags;
inp2.type = INPUT_MOUSE;
inp2.mi=mi2;
SendInput(1, &inp2, sizeof inp2);

return 0;
}

Очень простая попытка просто переместиться, щелкнуть, переместиться и отпустить.

В принципе, это нормально работает с обычными пользовательскими элементами управления. Он выделит текст, если, скажем, Chrome - это верхнее окно. Я могу перемещать x / y, чтобы он нажимал кнопки / элементы управления на экране ...

Это также нарисует требуемую линию в MSPaint IF, и только если выбрана функция Eraser. Если я попытаюсь использовать Brushtool, ничего не произойдет. То же самое, если я пытаюсь нарисовать на флэш-окне (http://doodle.no.de);

Я пытался использовать 0x0201 и 0x0202 в качестве моих leftdown и leftup (оба они эквивалентны WM_), и они ведут себя точно так же.

Есть идеи?

1 Ответ

0 голосов
/ 07 сентября 2013

Если вы используете Mouse_event, это довольно легко выполнить эту задачу.Это код, который я придумал, надеюсь, это поможет.

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

 using namespace std;

int main()
{
int pos1, pos2, pos3, pos4;


    cout << "Enter x coordinate: ";    //starting point  
    cin >> pos1;
    cout << "Enter y coordinate: ";
   cin >> pos2;


    cout << "Enter x coordinate: ";    //ending point
    cin >> pos3;
    cout << "Enter y coordinate: ";
    cin >> pos4;

  SetCursorPos(pos1,pos2);
  mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP,0,0,0,0); //clicks on canvas
  Sleep(30);                                      //puts small delay between next click
  mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);  // holds down left mouse button
  Sleep(300);
  SetCursorPos(pos3,pos4);
  mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);  //releases left mouse button


return 0;
}
...