[C/++] Esempio di utilizzo di SendInput

« Older   Newer »
  Share  
CAT_IMG Posted on 26/6/2012, 13:29     +3   +1   -1

So implementare gli object

Group:
Admin
Posts:
1,215
Reputazione:
+150

Status:


Tutti qui sono abituati a usare il caro e vecchio Send() di AutoIt (che poi sarebbe il SendKeys.Send() del framework .NET), ma come sappiamo i giochi se ne fregano altamente di quella funzione :D

Per ovviare al problema si può usare SendInput(), funzione per cui AutoIt non offre ancora un wrapper :cry:

Comunque ecco un esempio per l'utilizzo in C o C++:


CODICE
#include <stdio.h>
#include <Windows.h>

void spostaMouse(int x, int y);

int _tmain(int argc, _TCHAR* argv[])
{
       int i;

       for (i = 0; i < GetSystemMetrics(SM_CXSCREEN); i++)
       {
               spostaMouse(i, 200);
               Sleep(10);
       }

       return 0;
}

void spostaMouse(int x, int y)
{
       INPUT input;

       memset(&input, 0, sizeof(INPUT));

       input.type = INPUT_MOUSE;
       input.mi.dwFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;

       input.mi.mouseData = 0;

       input.mi.dx = x * (65536 / GetSystemMetrics(SM_CXSCREEN));
       input.mi.dy = y * (65536 / GetSystemMetrics(SM_CYSCREEN));

       SendInput(1, &input, sizeof(INPUT));

       return;
}


Spero che possa servire a qualcuno...

Pastebin

Tra poco aggiungo un esempio per la tastiera.

EDIT: altro esempio per il mouse (da compilare per il sottosistema Windows): http://pastebin.com/BPdeSgJC

Edited by ‡ (dd) - 26/6/2012, 19:57
 
Top
I.Ren
CAT_IMG Posted on 26/6/2012, 15:07     +1   -1




Buono :)
 
Top
»Master
CAT_IMG Posted on 26/6/2012, 20:40     +1   -1




puoi creare una dll con quelle funzioni no? :asd:
poi da quel passo posso creare una UDF per autoit xD
 
Top
CAT_IMG Posted on 26/6/2012, 21:28     +1   -1

So implementare gli object

Group:
Admin
Posts:
1,215
Reputazione:
+150

Status:


Mi metto al lavoro :asd:

Dimmi cosa devono fare le funzioni
 
Top
»Master
CAT_IMG Posted on 27/6/2012, 00:57     +1   -1




CITAZIONE (‡ (dd) @ 26/6/2012, 22:28) 
Mi metto al lavoro :asd:

Dimmi cosa devono fare le funzioni

asd ti faccio il tutorial di cosa dovrai fare per me (com'e' stato l'ultimo) un'altro giorno xdxd
 
Top
Sbarabau
CAT_IMG Posted on 27/6/2012, 09:03     +1   -1




Se serve vi posso dare una mano anch'io... ero diventato bravino le dll xD
 
Top
CAT_IMG Posted on 27/6/2012, 12:17     +1   -1

So implementare gli object

Group:
Admin
Posts:
1,215
Reputazione:
+150

Status:


CITAZIONE (»Master @ 27/6/2012, 01:57) 
CITAZIONE (‡ (dd) @ 26/6/2012, 22:28) 
Mi metto al lavoro :asd:

Dimmi cosa devono fare le funzioni

asd ti faccio il tutorial di cosa dovrai fare per me (com'e' stato l'ultimo) un'altro giorno xdxd

Ok :asd:
 
Top
th1sk
CAT_IMG Posted on 28/6/2012, 10:02     +1   -1




CITAZIONE (‡ (dd) @ 26/6/2012, 14:29) 
input.mi.dx = x * (65536 / GetSystemMetrics(SM_CXSCREEN));
input.mi.dy = y * (65536 / GetSystemMetrics(SM_CYSCREEN));

A che serve la parte sottolineata?
 
Top
CAT_IMG Posted on 28/6/2012, 11:16     +1   -1

So implementare gli object

Group:
Admin
Posts:
1,215
Reputazione:
+150

Status:


CITAZIONE (th1sk @ 28/6/2012, 11:02) 
CITAZIONE (‡ (dd) @ 26/6/2012, 14:29) 
input.mi.dx = x * (65536 / GetSystemMetrics(SM_CXSCREEN));
input.mi.dy = y * (65536 / GetSystemMetrics(SM_CYSCREEN));

A che serve la parte sottolineata?

La funzione SendInput (con tipo INPUT_MOUSE) con flag MOUSEEVENTF_ABSOLUTE accetta come x e y due valori tra 0 e 65536, che poi provvederà a mappare sullo schermo a seconda della risoluzione. Per uno schermoa 1080p ad esemp farà (x non è l'incognita in questo caso ma proprio l'input):

x:1920=incognita:65536
y:1080=incognita:65536

E così troverà le coordinate assolute.

Noi facciamo quel calcolo perché abbiamo già le coordinate assolute, quindi le mappiamo come vuole Windows che poi le rimperà a sua volta tornando ai dati da cui siamo partiti.

E sinceramente allora potevano anche dare un nome più appropriato al flag :asd:
 
Top
th1sk
CAT_IMG Posted on 1/7/2012, 00:31     +1   -1




Ma a che serve fare così? :asd: vabbè :asd:

CITAZIONE (‡ (dd) @ 28/6/2012, 12:16) 
CITAZIONE (th1sk @ 28/6/2012, 11:02) 
A che serve la parte sottolineata?

La funzione SendInput (con tipo INPUT_MOUSE) con flag MOUSEEVENTF_ABSOLUTE accetta come x e y due valori tra 0 e 65536, che poi provvederà a mappare sullo schermo a seconda della risoluzione. Per uno schermoa 1080p ad esemp farà (x non è l'incognita in questo caso ma proprio l'input):

x:1920=incognita:65536
y:1080=incognita:65536

E così troverà le coordinate assolute.

Noi facciamo quel calcolo perché abbiamo già le coordinate assolute, quindi le mappiamo come vuole Windows che poi le rimperà a sua volta tornando ai dati da cui siamo partiti.

E sinceramente allora potevano anche dare un nome più appropriato al flag :asd:

Ha tempo da perdere la Microsoft :asd:
 
Top
9 replies since 26/6/2012, 13:29   187 views
  Share