2010-12-27 16 views
5

Chciałbym programowo przenieść i kliknąć myszą za pomocą interfejsu API Windows w C. Przeszukałem google high i low i nie mogę znaleźć samouczków sendInput dla zwykłego C. Wszystko, co mogę znaleźć, to C#/C++. Mam niewielkie doświadczenie z interfejsem API systemu Windows i chciałbym, aby świetny samouczek obejmował sendInput! Dzięki!za pomocą myszy z sendInput w C

+9

Wersja C++ będzie odpowiednia, nie różni się od wersji Winapi. –

+0

Powinieneś zostawić to jako odpowiedź, abym mógł Cię oznaczyć jako prawidłowy! : p –

+0

możesz po prostu zaakceptować swoją odpowiedź, nie sądzę, że Hans potrzebuje przedstawiciela! –

Odpowiedz

18

Hans Passant miał rację, kod C++ był prawie identyczny. Oto, co otrzymałem:

INPUT input; 
input.type = INPUT_MOUSE; 
input.mi.mouseData = 0; 
input.mi.dx = x * (65536/GetSystemMetrics(SM_CXSCREEN)); //x being coord in pixels 
input.mi.dy = y * (65536/GetSystemMetrics(SM_CYSCREEN)); //y being coord in pixels 
input.mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE; 
SendInput(1, &input, sizeof(input)); 
+2

Jedna bardzo ważna rzecz, na którą należy zwrócić uwagę to, że powinieneś zmusić 65536 do unoszenia się, w przeciwnym razie konwersja rozmiaru ekranu wyłączy się o kilka pikseli. 65536.0f dla lepszej dokładności. –

+0

@ Error454 Czy wiesz, dlaczego dx i dy muszą mieć ten dziwny format absolutnego ruchu? Względny ruch z drugiej strony wymaga, aby dx i dy były czystymi pikselami. – Bitterblue

+1

@ mini-me Po prostu sposób, w jaki msft zdecydował się robić rzeczy. Ich układ współrzędnych wynosi (0,0) dla lewego górnego i (65535,65535) dla prawego dolnego rogu. –

Powiązane problemy