Newsgroup: it.comp.lang.visual-basic
Titolo: hWnd generici

Scusate se la domanda è OT, ma non credo che lo sia.
Siccome ho provato a usare SendMessage per eseguire il click del mouse, ho
passato come primo parametro me.hwnd
In questo modo però viene eseguito il click sul mio progetto.
Se volessi mandare lo stesso messaggio per simulare il click del mouse su
un'icona del desktop o su un punto casuale dello schermo, come faccio a
conoscere l'hWnd del desktop stesso o di una finestra?


Ho risolto. Ho trovato la dichiarazione GetDesktopWindow che mi restituisce
l'handle del desktop. Solo che inviando il messaggio usando questo hWnd non
avviene ciò che penso dovrebbe avvenire.
Vi posto il codice:
Private Const WM_MBUTTONDBLCLK = &H209
Private Const WM_MBUTTONDOWN = &H207
Private Const WM_MOUSEMOVE = &H200
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA"
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As
Any) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single,
Y As Single)
    MsgBox "Mi hai cliccato"
End Sub
Private Sub Timer1_Timer()
    SendMessage GetDesktopWindow, WM_MBUTTONDBLCLK, 0, 0
End Sub
Così facendo io credo che, ridotte tutte le finestre eccetto quella del mio
progetto, una volta inviato quel messaggio la mia finestra dovrebbe perdere
il focus e oscurarsi perchè è come se avessi cliccato sul desktop. In fase
di progettazione ho settato a 1000 l'intervallo del timer, quindi funziona.
Solo che non succede quello che penso. Come mai?

Ancora io...
Ho risolto alcune cose.
Ho visto che per eseguire il doppio click del mouse sul desktop
(WM_MBUTTONDBLCLK) bisogna passare come secondo parametro due word che
indichino rispettivamente la coordinata y e quella x del punto della
finestra in cui si vuole eseguire il doppio click).
Allora mi sono ricavato (nell'evento timer) la posizione del mio cursore
sullo schermo con GetCursorPos.
Le coordinate poi le passo alla funzione SendMessage dopo averle messe in
una variabile di tipo long.
Questo č il codice nuovo:
===============================================
Private Type POINTAPI
    x As Long
    y As Long
End Type
Private Const WM_LBUTTONDBLCLK = &H203
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA"
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As
Any) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As
Long
Private Sub Timer1_Timer()
Dim CurPos As POINTAPI
Dim LongPos
    GetCursorPos CurPos
    'Qui mi sono ricavato la posizione del cursore sullo schermo
    LongPos = (CurPos.y And 65535) * 65536
    'Imposto la word alta con la coordinata y
    LongPos = LongPos + (CurPos.x And 65535)
    'E quella bassa con la coordinata x
    SendMessage GetDesktopWindow, WM_LBUTTONDBLCLK, 0, LongPos
    'Invio il messaggio fornendo l'hWnd del desktop, il doppio click del
tasto sinistro del mouse, nessun altro tasto virtuale premuto (0) e la
variabile con le coordinate y e x.
    Me.Caption = Hex(LongPos) & "  ->  " & CurPos.x & "," & CurPos.y
    'Scrivo sulla barra della mia finestra le mie coordinate rielaborate
(highword per y e lowword per x)
End Sub
===============================================
Perņ ora ogni secondo mi viene aperto il menu di avvio. E' come se facesse
sempre e solo click su start

Grazie a tutti, ho finito. Ho cambiato e invece di usare SendMessage uso
direttamente mouse_event.
Unico problema è che non ricordo più per quale motivo volevo fare questo
programmino.

"Vegeta" ha scritto nel messaggio

ROTFL !
BYe, G.

 Grazie a tutti, ho finito.
Fantastico! :)
Un nuovo Marzullo informatico: si fa le domande e si dà le risposte :)
Ciao

 Un nuovo Marzullo informatico: si fa le domande e si dà le risposte :)
Se aspettavo voi...... :)

 Se aspettavo voi...... :)
Fossero tutti come te il NG non avrebbe senso di esistere :)
Ciao

 Ciao
Beh? Questa risposta non č ritenuta inutile da gran parte della gente?
:)
Scherzo vai avanti cosģ che vai forte!!! :) :) :)