Newsgroup: it.comp.lang.visual-basic
Titolo: [?] dall'Id del processo al nome della finestra

quesito interessante.
con le funzioni Process32First e Process32Next ottengo l'Id di tutti i
processi.
ottengo anche i nomi dei file EXE di questi processi.
ma da queste due funzioni,. se io volessi ricavarmi NON il nome del file
EXE, ma il nome della finestra, o meglio il nome che viene visualizzato
quando si preme CTRL+ALT+CANC, come si deve fare?
tanto per intenderci, l'ambiente di sviluppo Visual Basic è un processo, che
come file EXE avrà "c:\programmi\visual studio\VB98\VB6.EXE". bene, avendo
nome e Id di questo processo, come faccio a ricavarmi "Progettazione -
Visual Basic ecc. ecc." ?
thank you.
Mario

yuuhuuuuu... c'è nessuno...??


Ciao Mario,
innanzi tutto ti dirò che certe domande si troverebbero sicuramente più a
loro agio in posti come it.comp.programmare.win32; cmq visto che ormai ci
sono....
te lo ripeto, ma spero per l'ultima volta: le finestre non hanno
assolutamente NIENTE a che fare con i thread e quindi tantomeno con i
processi! Un processo può creare decine di finestre oppure nessuna, ogni
finestra ha il suo handle e verrà gestita dal sistema tramite questo,
*_fregandosene un po'_* del processo che l'ha creata. In effetti i due
meccanismi non sono proprio indipendenti ma si intrecciano quando il sistema
deve gestire i messaggi diretti ad una finestra.
Schematiziamo molto sommariamente:
- l'utente esegue un'azione su di una finestra;
- windows se ne accorge e deve mandare un messaggio alla finestra
interessata (o meglio al codice che la gestisce);
- per identificarla utilizza il suo handle;
- questi messaggi possono essere numerosi e molto ravvicinati e non devono
essere perduti;
- quindi finiscono in una "coda messaggi" in attesa di essere processati.
- le finestre non possono però avere una propria coda messaggi perchè non
sono "il programma", ma solo l'intefaccia prodotta dal codice;
- il codice può essere diviso in più processi ed ogni processo può essere
diviso in più thread;
- ogni thread ha un'unica coda dei messaggi che servirà tutte le finestre
create dal thread stesso;
- poi il meccanismo va avanti tirando in ballo altre cose, ma per oggi direi
che basta così;
Quindi ciò che serve a windows (e che può servire al programmatore) è semmai
recuperare l'id del processo o del thread che gestisce una finestra a
partire dal suo handle e non il contrario, che non avrebbe alcun senso
proprio per il modello di funzionamento sui cui windows è stato costruito.
Spero che queste nozioni ti servano per comprendere meglio la "perversa"
struttura che hai di fronte quando programmi per windows, e che ti possano
far riflettere sulle strade che scegli nella ricerca di una soluzione ai
tuoi problemi.
Windows è un po' permaloso se lo tocchi dentro malamente, ma se ti adatti a
lui e gli vai dietro secondo la sua logica potrai ottenere risultati
insperati.
Ciao.
--
Princi, 
princ...@programmer.net
--------------------------------------------------------------------------
"Tutti sanno che una cosa è impossibile da realizzare,
finché arriva uno sprovveduto che non lo sa e la inventa." A.E.

 innanzi tutto ti dirò che certe domande si troverebbero
sicuramente più a loro agio in posti come
it.comp.programmare.win32; cmq visto che ormai ci sono....
[...]
E glielo diciamo che potrebbe anche comprarsi, fotocopiarsi a
quindicesimi, prendere in prestito (CD-ROM compreso, come
suggeriva pal) dalla biblioteca di quartiere di villaggio o
itinerante, il testo di Appleman?
Vedi referenze bibliografiche sul Sito Comune:
 
http://www.murialdo.it/it_lang_vb
che in questi giorni (o in *quei* giorni?) e`:
 
http://www.murialdo.it:8000/it_lang_vb
--
Ciao.
Maurizio
--------
?SPQR(C)
 X

ok tutto chiaro...
ho dato un'occhiata a enumchildwindows e enumwindows.
mi dice che devo utilizzare due callbak-functions, che sarebbero poi
funzioni il cui codice è scritto dall'utente, ma deve essere sempre lo
stesso... ma io dove lo trovo sto codice? che ci scrivo in quelle
callback-functions???? boh...
mario

sì è vero... ho sentito dire che è stato tradotto in italiano... e che è un
testo BELLISSIMO e UTILISSIMO... e che costa pure 150 patacche o giu di lì.
facciamo così: il 25 c.m. è il mio compleanno, tutto il NG fà una colletta
(5-10 mila a capa...) e mi fate un bel regalo... sarebbe una cosa molto
carina... io lo apprezzerei molto...
::)))))
Mario

 (5-10 mila a capa...)
lo fai piccolo, iclvb... oppure pensi di farci un biz :)
dalle tue parti non ci sono biblioteche ? basta un po' di gentilezza e si
ottiene quasi tutto :)


A'riciao Mario,
cominci ad essere leggermente logorroico. ;-) Avrai anche tu una fidanzata,
dei genitori, amici, parenti... di libri dovresti fartene regalare almeno
tre (uno sul VB, uno sulla Win32 ed uno di narrativa a tua scelta).
Come al solito ti passo le informazioni in inglese, così non perdi
l'esercizio ;-))
The EnumChildProc function is an application-defined callback function that
receives child window handles as a result of a call to the EnumChildWindows
function.
BOOL CALLBACK EnumChildProc(
    HWND hwnd, // handle to child window
    LPARAM lParam  // application-defined value
   );
Parameters
hwnd: Identifies a child window of the parent window specified in
EnumChildWindows.
lParam: Specifies the application-defined value given in EnumChildWindows.
||====> Return Values
To continue enumeration, the callback function must return TRUE; to stop
enumeration, it must return FALSE. <=====||
Remarks
The callback function can carry out any desired task.
An application must register this callback function by passing its address
to EnumChildWindows. EnumChildProc is a placeholder for the
application-defined function name.
In pratica basta che definisci una qualsiasi funzione boolean che accetti
due long come parametri, questa avrà il compito di governare il
funzionamento della EnumChildWindows() restituendo true o false a seconda
che tu abbia trovato la finestra che ti serviva; windows ti passa in
ingresso l'handle della finestra, con questo puoi fare tutto quello che
vuoi.


ah interessante...
una funzione "vuota", insomma, cioè io la definisco soltanto, poi fa tutto
lui...se ho ben capito.
però è un po' contorto il sistema...
Mario

 lo fai piccolo, iclvb... oppure pensi di farci un biz :)
iclvb...?? what's??? mi sfugge...

PS ah ecco!!!! ora ho capito la genialità del sistema...
nella callback-function puoi metterci quello che vuoi... tipo
dichiarare/restituire il nome o l'handle della finestra, ecc.
però... ingegnoso...
Mario

 iclvb...?? what's??? mi sfugge...
ola gringo, como se llama el newsgroup ?

 ola gringo, como se llama el newsgroup ?
ahhhhhhhhhhhhhhhhhhhhhhhhhhhh..............