Newsgroup: it.comp.programmare
Titolo: Aiuto gestione cursore mouse c++

Qualcuno sa suggerirmi come fare per gestire il cursore del mouse in c
o c++, e quindi spostarlo, cliccare una o due volte su un certo campo,
solo via software. Per favore non ditemi dell'int 33 perchè non va per
quello che serve a me. Ho già provato. Magari se conoscete qualche
link o codice da poter studiare meglio.

atta...@yahoo.com
 (james) wrote in
news:858f0294.0502...@posting.google.com
: 

Dipende dal sistema operativo che utilizzi.
Se il sistema ha già un'interfaccia grafica (Windows, MacOS o linux se 
sviluppi per KDE o GTK), non devi preoccuparti di gestire il mouse a 
basso livello, ma il S.O. (o il window manager, o il server X) ti 
passerà le informazioni necessarie.
Se non usi nessun S.O., credo che molto dipenda dall'hardware sia del 
controllore (un PC, suppongo, visto che parli di int33) sia del mouse 
(i driver DOS che supportavano l'int 33 venivano utilizzati dai mouse 
seriali o PS/2, non sò se i mouse USB vengano ancora forniti con quel 
supporto).
-- 
Valter Minute
vmi...@inwind.it
 (the reply address of this message is invalid)

...

Io uso Winwos 98 e xp e non ho capito il punto in cui dici che il s.o.
passserà le informazioni necessarie. Potresti essere più chiaro?

 
Ci provo, però è difficile riassumerlo in un messaggio.
Un tipico programma GUI (con l'interfaccia utente grafica), non è 
"sequenziale" ma, con modalità diverse a seconda del s.o., delle API 
etc., reagisce a degli eventi generati dalle azioni dell'utente 
(movimento e click del mouse, ma non solo).
Nelle applicazioni Windows, in particolare, il main (WinMain) del 
programma contiene un "loop dei messaggi" che preleva i messaggi 
(eventi per altri s.o.) da una coda e li elabora.
Se questa spiegazione iper-rapida non ti ha soddisfatto, pui dare un 
occhiata al testo di petzold o (gratis) al tutorial di Alex Martelli 
(
http://www.aleax.it/TutWin32/tc.htm
).
Esistono librerie (MFC, ATL, QT, BCL) che rendono lo sviluppo della GUI 
più rapido, però tutte si basano sul meccanismo base descritto sopra.


 Qualcuno sa suggerirmi come fare per gestire il cursore del mouse

oopss.. mi sono reso conto di non aver letto bene il messaggio. Pensavo 
che con "gestire" intendessi dire leggere la posizione e i click, non 
anche spostare il mouse.
In quel caso puoi vedere l'API SendInput oppure inviare 
all'applicazione da controllare messaggi WM_MOUSE* utilizzando Send o 
PostMessage.


 PostMessage.
ok ti sei ripreso bene ;-)).... scherzo ovviamente
non č che hai o conosci qualche codice riguardo SendInput da poter
visionare? Sto cercando un pň ma trovo solo chiacchiere. Nella
funzione di SendInput
UINT SendInput(
  UINT cInputs,
  LPINPUT pInputs,
  INT cbSize
);
non capisco come utilizzare LPINPUT pInputs in quanto non so come
utilizzare queste strutture.
typedef struct tagINPUT {
    DWORD   type;
    union
    {
        MOUSEINPUT      mi;
        KEYBDINPUT      ki;
        HARDWAREINPUT   hi;
    };
} INPUT, *PINPUT, FAR* LPINPUT;
 
Members
type 
Specifies the type of the input event. It can be one of the following
values. Value Meaning
INPUT_MOUSE The event is a mouse event. Use the mi structure of the
union.
INPUT_KEYBOARD The event is a keyboard event. Use the ki structure of
the union.
INPUT_HARDWARE Windows 95: The event is from input hardware other than
a keyboard or mouse. Use the hi structure of the union.
mi 
Specifies a mouse event. 
typedef struct tagMOUSEINPUT {
    LONG    dx;
    LONG    dy;
    DWORD   mouseData;
    DWORD   dwFlags;
    DWORD   time;
    DWORD   dwExtraInfo;
} MOUSEINPUT, *PMOUSEINPUT, FAR* LPMOUSEINPUT;
forse tu puoi dirmi qualcosa

Pechè quando metto la riga "INPUT input[4];" il compilatore mi ferma e
dice:
Compiling...
error C2065: 'INPUT' : undeclared identifier
error C2146: syntax error : missing ';' before identifier 'input'
error C2065: 'input' : undeclared identifier
error C2109: subscript requires array or pointer type
Ho seguito alla lettera includendo sia <Windows.h> che <Winuser.h>.
Che succede? Qualcuno mi spiega? Pechè INPUT non viene riconosciuto?

Devo credere che nessuno sappia come linkare questo benedetto INPUT e
SendInput????
Guardatevi questi posts simili al mio che hanno fatto impazzire
qualcun'altro prima di me :-)
http://www.experts-exchange.com/Programming/Programming_Languages/Cplusplus/Q_10632002.html
Mi sa che queste funzioni non siano cosě alla mano.
Ah per la cronaca io uso VisualC++ 6

Ok ho risolto tutto. Per la prima volta dacchè programmo ho dovuto dar
torto a MSDN. Wow. Questa si che è bella. MSDN butta sulla strada
sbagliata con i suoi consigli su questa funzione. In ogni caso adesso
se metto MOUSEEVENTF_ABSOLUTE, a qualsiasi punto sullo schermo
posizioni mi.dx e mi.dy (esempio dx = 100;dy = 500) il cursore va a
posizionarsi sempre al punto (0;0) dello schermo e da lì non si muove.
Sapete a cosa è dovuto?