Newsgroup: it.comp.programmare.win32
Titolo: Intercettare clic su ogni finestra

Nel mio programma ho bisogno di ottenere l'handle di una finestra scelta  
dall'utente, per scegliere la finestra vorrei cambiare il puntatore del  
mouse e permettere all'utente di cliccare quela finestra.
Con un hook del mouse è possibile o ci sono altre strade migliori?
Come posso cambiare temporaneamente il cursore per tutto il sistema?
Grazie
-- 
Marco Barisione
http://hotkeybind.sf.net/
http://marcobari.altervista.org/

 mouse e permettere all'utente di cliccare quela finestra.
Quando vuoi che quest'operazione di ricerca inizi, chiami SetCapture(), poi 
con i punti che vengono passati dal messaggio WM_MOUSEMOVE usi 
WindowFromPoint() per ottenere gli handle... Quando l'operazione è conclusa, 
ReleaseCapture() :)
Spero di esserti stato utile!
-- 
Tharkas - "To be a rock and not to roll"
[
www.hattrick.org
] Pugno dell'Amarezza (50980), IV.47 

 Quando vuoi che quest'operazione di ricerca inizi, chiami SetCapture(),
Non va bene:
| If the mouse cursor is over a window created by another thread, the system 
| will direct mouse input to the specified window only if a mouse button is 
| down.
| This function cannot be used to capture mouse input meant for another 
| process.
-- 
Marco Barisione
http://marcobari.altervista.org/
http://hotkeybind.sf.net/

 | process.
Prova lo stesso, _deve_ andar bene: io tempo fa realizzai una sorta di
Finder Tool tipo quello di Spy++, e lo feci proprio nel modo che ti è
stato descritto.
Una cosa però non riuscii a fare: il Finder Tool di Spy++ evidenzia la
finestra trovata disegnando il bordo con i colori negativi; io non sono
riuscito a trovare una funzione API che faccia una cosa simile :(
Ciao.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Approfitto di questo post per sollevare una domanda analoga..
Come faccio a sapere, per esempio, che un tasto del mouse e' premuto
(tipo WM_LBUTTONDOWN) *senza* doverlo inserire in una funzione tipo la
seguente?
LRESULT CALLBACK WndProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM
lParam){
   switch(){
      case WM_LBUTTONDOWN:
         //...
         break;
      }
   return 0;
   }
Cioe', mi spiego meglio, e' possibile sapere se un bottone del mouse e'
premuto senza dover aspettare l'arrivo di un evento dal mouse stesso che
ne identifica lo stato?
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ne identifica lo stato?
Vedi se i windows hooks fanno il caso tuo.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/Windowing/Hooks/AboutHooks.asp

 seguente?
GetAsyncKeyState() 
-- 
Luc

 GetAsyncKeyState()
Ma questo non serve solo per la tastiera?


 Ma questo non serve solo per la tastiera?
No. Guarda la doc! 
-- 
Luc

 stato descritto.
Ho provato e più o meno va comunque il problema è che, se il tasto non è  
giù, non riesco a modificare il cursore e che la finestra rceve comunque  
il clic. Penso che risolverò simulando la pressione del tasto sinistro con  
SendInput/mouse_event, non è pulitissimo ma sembra funzionare.
Ho anche provato con un Hook globale però il mio programma deve  
comportarsi in modo simile ad xkill per X, cioè uccidere il programma  
associato alla finestra cliccata (ok xkill non fa esattamente questo...).  
Quindi il programma da terminare è probabilmente bloccato, quindi l'Hook  
non funzionerebbe.


Ah porca miseria! hai ragione, non avevo visto il VK_LBUTTON!! scusa..


 non funzionerebbe.
in pratica stai sviluppando un removal tool :) ti giuro che io tempo fa ne
feci uno identico, ed era proprio quello a cui mi riferivo parlandoti del
Finder Tool "Spy++ like" :)
se mi dai un indirizzo e-mail, cammuffandolo opportunamente, ti mando il
progetto MFC; si chiama Terminator e l'ho realizzato senza hooks ne'
SendInput/mouse_event ;) :)
il bello del mio Terminator è che acquisisce i diritti di un debugger,
così nella maggior parte dei casi è in grado di terminare anche processi
di sistema (certi virus a volte riescono a fingere di essere tali).


 SendInput/mouse_event ;) :)
Grazie, l'indirizzo nel from è valido (e spam ne ricevo veramente poco  
visto che è filtrato da 
vene.ws
).
Comunque questa è solo una funzione del mio programma (HotKeyBind,  
indirizzo in firma), praticamente ho diverse "azioni" attivate da delle  
hotkey scelte dall'utente (lanciare programmi, connettersi ad internet,  
modificare il volume, spegnere il computer e simili).
