Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Processo attivo?

Ok, vediamo se questa e piu semplice :)
Avento l'hIstance di un'app. posso conoscere il percorso dell'exe relativo?
Posso sapere se l'app in un dato istante sta girando o no?
Posso avere la lista di tutte le hWnd relative?
Grazie a tutti.
Ciao

Non so di cosa hai bisogno, ma forse potrebbe esserti utile "OpneClose
ActiveX" che trovi nel sito comune

 Posso avere la lista di tutte le hWnd relative?
Ho proprio paura che dell'hInstance non te ne faccia nulla. Con il
pID potresti arrivare a sapere tutto quello che ti serve.
Ciao.
--
BSD is for UNIX-lovers -- linux is for Windows-haters.

 pID potresti arrivare a sapere tutto quello che ti serve.
Come? Con le CreateToolhelp32Snapshot(), Process32First() e compagnia?
Posso almeno risalire al PID da un hWnd?
Ciao e grazie

 Posso avere la lista di tutte le hWnd relative?
No :-) Le finestre comunque non sono associate ai processi, ma ai 
thread, e non sono una proprietà dei thread, ma piuttosto il contrario
-- 
 < 
http://www.reactos.com/
 >  Open source clone of Windows NT. Current
     Don't stand, REACT!      version 0.0.18. C, C++ and ASM developers
                              and beta testers are welcome!

 Posso almeno risalire al PID da un hWnd?
No, non mi pare sia possibile.


 No, non mi pare sia possibile.
Pensandoci, è possibile in maniera indiretta, il che è molto brutto,
ma credo sia l'unica possibilità. Cioè enumerare tutti i processi e
vedere a quale di questi appartiene l'handle della finestra in
questione.



Insomma :) cosa cavolo serve per ottenere il percorso di un'altro processo?
Quello cioč che ottengo con la GetModuleName() dalla mia app, ma a me
interessa il percorso di un'altra mia app... non č possibile in alcun modo
quindi?
Nemmeno cercando in tutti i processi attivi un'eventuale hWnd che conosco?
(questo mi sembra si possa fare, ma come?)
Ciao

 (questo mi sembra si possa fare, ma come?)
Sì questo, come ho detto nell'altro messaggio, si può fare.
Come? Enumerando tutti i processi (con le ToolHelp sotto Win9.x e
Win2k, con le PDH sotto NT e Win2k), di ogni processo enumeri tutti
i thread (sempre con ToolHelp e PDH), per ogni thread enumeri tutte
le finestre (non figlie) che gli appartengono con la
EnumThreadWindows, di ogni finestra enumeri tutte le figlie con la
EnumChildWindows.


 possibile in alcun modo quindi?
Mi sono incuriosita, e sono andata a dare un'occhiata al sorgente di 
GetModuleFileName(): come sospettavo non ci va una scienza, č solo 
questione di conoscere i trucchi giusti
In breve: in NT te la cavi con un bel lavoraccio di traduzione di 
codice (che trovi in ReactOS -> sito in firma) dal C al VB e con una 
CreateRemoteThread. O ancora meglio usando direttamente la system call 
NtCreateThread, previa allocazione e inizializzazione nel processo 
bersaglio/vittima dello stack, previa copia nel suddetto processo di un 
bel pezzo di eseguibile binario grezzo (cosě non devi nemmeno tradurre 
il codice, pensa che bello), prelevato da una risorsa, a cui far 
puntare l'EIP del nuovo thread... ehm, mi stai ancora seguendo? :-P
Oppure c'č l'approcio "forza bruta" (perchč il mio č relativamente 
"pulito" :-P): la ToolHelp library. Enumeri tutti i moduli e cerchi 
quello che ti interessa. Che perň NT supporta solo dal Windows 2000 in 
su. Anche qui se vuoi posso stare ad annoiarti per le prossime tre ore 
su tutte le syscall necessarie a praticamente riscriverti la Toolhelp 
da zero :-P


questione.
Perche'? GetWindowThreadProcessId non fa quello che chiede?
Ciao.

 quello che chiede?
Sě, decisamente. Non l'avevo proprio vista.


 puntare l'EIP del nuovo thread... ehm, mi stai ancora seguendo? :-P
Ok, ho capito che in questa materia sono ignorante, ma non ho capito una
ceppa :)
Inoltre cosa dovrei farmene di ReactOS? Scartabellare tra tutti i sorgenti?
E cercando cosa?
E la NtCreateThread() da dove spunta? Non certo da MSDN dove non se ne
parla...
Sono molto perplesso :(
Ciao

 MSDN dove non se ne parla...
NTCreateThread è una funzione nativa di NT/2K. La CreateThread del
sottosistema Win32 non fa altro che richiamare la NTCreateThread.



Sě, questa l'avevo vista, ed č un ottimo punto di partenza (non di arrivo
( ).
Quello che mi serve č anche il percorso del processo, cioč quello che mi
ritornerebbe da GetModuleFileName(), che perň non vuole un PID (o sbaglio?).
C'č una strada alternativa o qualcosa che mi sfuggie?
Grazie ancora.
Ciao

 C'è una strada alternativa o qualcosa che mi sfuggie?
OpenProcess.


 se ne parla...
Trovi un pochino (ma proprio poco) di documentazione sulle system call 
e sulla RTL nel DDK (Driver Development Kit). Per il resto c'è ReactOS, 
che è interessante anche solo per vedere che diavolo conterranno mai 
kernel32.dll e simili


 Posso almeno risalire al PID da un hWnd?
Si, con GetWindowThreadProcessId
Ciao
*Roby*