Newsgroup: it.comp.lang.visual-basic
Titolo: [?] hwnd di windows attive

salve a tutti
Con le seguenti API:
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" _
(ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Declare Function EnumWindows Lib "user32" _
(ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Ricavo , utilizzando l' Operatore AddressOf
l' hwnd di ciascuna window di massimo livello contenuta nello schermo e
successivamenta il caption.
Per alcuni  hwnd è restituita come caption la stringa a lungezza fissa
vuota.
Per restituire un hwnd presumo sia stata individuata una window , ma come si
spiega l'assenza della relativa caption  ?
grazie
giuseppeD

 vuota.
La lunghezza fissa dipende dal fatto che tu gli hai passato una stringa
formattata, immagino con String o Space. GetWindowText infatti non alloca
spazio per la stringa, vuole un puntatore ad uno spazio già allocato (di qui
l'uso del terzo parametro) nel quale scrivere la caption terminata con il
nullchar - poiché in C una stringa è terminata dal char(0) e non dalla
lunghezza della memoria allocata per essa, in vb vedi un buffer tipo "ABC
" ma se tronchi la stringa vb nella posizione del primo char(0) la stringa
diventa "ABC" (conseguentemente "      " diventa "").
--
rumplestiltskin

 diventa "ABC" (conseguentemente "      " diventa "").
Grazie della risposta
(ad oggi ,per mancanza di tempo e perchè non necessario , non ho affrontato
le API.
mi sono limitato a copiare e incollore. Dato di input , il valore di
risposta era corretto, la faccenda finiva lì.
Passando a 
VB.NET
 , oltre ad altre variazioni , sempre argomento API ,
l'operatore AddressOf è ancora supportato ma invece di restituire un integer
a 32 bit (lpEnumFunc della Function EnumWindows):
 EnumWindows AddressOf EnumWindowsCallBack, 0
Public Function EnumWindowsCallBack(ByVal hwnd As Long, ByVal LParam As
Long) As Boolean
    Dim textBuffer As String
    Dim ActualLen As Long
    'Get window caption
    textBuffer = Space(255)
    ActualLen = GetWindowText(hwnd, textBuffer, Len(textBuffer))
    'put window caption into list
    If Trim(textBuffer) <> "" Then
        If Left(textBuffer, 1) <> Chr(0) Then
            TotWindows.Add hwnd & "  ;  " & textBuffer
        End If
    End If
    EnumWindowsCallBack = True
End Function
Declare Function EnumWindows Lib "user32" _
(ByVal lpEnumFunc As Long, ByVal LParam As Long) As Long
restitusce un Delegate.
(in questo momento il pc dove è installato 
VS.NET
 è in riparazione)
(stop e cerco di capire)
Non riesco a capire il punto esatto dove rileva l' hwnd della window.
Chiamata la Function EnumWindowsCallBack , l'argomento hwnd restitusce
l'handle della window.
Da dove lo rileva quel numero ?
giuseppeD

 Da dove lo rileva quel numero ?
Non sono sicuro di capire la domanda: ti chiedi forse dov'è il codice che
trova gli hwnd? Se così, è nella chiamata a EnumWindows. Tu chiami
EnumWindows e la funzione, appena trova una window, chiama la funzione della
quale tu gli hai passato l'indirizzo con AddressOf (in questo consiste una
callback) passandole l'handle della window trovata (e l'eventuale parametro
opzionale che hai passato a EnumWindow). Se tu gli ritorni (oooppss!
restituisci!!!) 0 (false), la funzione API esce dal suo loop e non ti chiama
più (la riga successiva alla chiamata a EnumWindows viene eseguita). Se gli
restituisci 1 (true), la funzione API cerca la prossima window e, se la
trova, chiama di nuovo la tua funzione di callback. E così via, finché ci
sono window. Dopo l'ultima (o se restituisci 0) EnumWindows ritorna al
codice basic e viene eseguita la riga successiva a quella della chiamata.
--
rumplestiltskin