Newsgroup: it.comp.lang.visual-basic
Titolo: [?][PROCESSI] Lanciare e chiudere un programma

Premetto che mi sono documentato il piu' possibile, ma sono incagliato e mi
serve uno spunto un'idea.
Con 'shell' di Vb lancio notepad (per esempio), usando l'api OpenProcess e
passandogli l'idProcess restituito da 'shell' creo un handle al processo con
i relativi diritti.
Usando l'Api TerminateProcess e passandogli l'handle del processo termino
brutalmente notepad (poi chiudo l'handle del processo per liberare la
risorsa).
Mi e' necessario pero' anche chiedere al programma di chiudersi (come fa'
win all'arresto del sistema) e non troncarlo brutalmente, per permettere il
salvataggio di eventuale modifiche.
Il mio problema e' identificare la 'window' principale del processo e
chiedergli di chiudersi, tendendo conto che potrebbero esserci altre
'window' presenti (ad esempio 'trova') che devono essere ignorate e che il
programma potrebbe essere multithread.
Aiuto! (ehehhe).
Salve
                Dbg

A quanto sembra l'unica maniera per trovare l'handle della 'window'
principale e' usare FindWindow, ma e' necessario conoscere il testo della
'Caption' del form.
Ufffff ma se si usa ad esempio notepad.exe il testo della 'Caption' cambia a
seconda del file aperto .....
Qualcuno ha un'idea?
Salve
                Dbg
Della Bianca Giuseppe ha scritto nel messaggio ...
]zac (zac onanista)[


 seconda del file aperto .....
puoi utilizzare l'API GetWindowThreadProcessID per ricavare il
PID partendo da l'hWnd
poi ti confronti il PID di ogni processo con quello fornito dalla funzione
Shell ed il gioco e' fatto
Ti ho mandato un esempio in email
Bye
--
Fibia "Sakamoto" FBI
URL: 
http://www.geocities.com/fibiafbi
VB Simple: 
http://vbsimple.virtualave.net
E-Mail: 
fibi...@hotmail.com
ICQ UIN 63586057
Membro #25 delle Brigate Takahashi Sez. Sud

Poi provo
Ma se ricordo bene cosi trovi tutte le finestre del processo, se vuoi far
chiudere normalmente un processo non puoi chiudergli sotto il naso le
'window' che usa, ma solo la principale .... ma forse sono da buttare
(settimana da sbarco).
Salve
            Dbg
Fibia FBI ha scritto nel messaggio


(settimana da sbarco).
basta uccidere quella in cima, prima di morire ucciderà tutte le child e 
chiamerà PostQuitMessage a carneficina completata per uccidere il proprio 
thread e riposare in pace. Se è il thread principale, con buona 
probabilità si porterà dietro tutti i compari, e con l'ultimo thread anche 
il programma si chiuderà

il programma si chiuderà
eheheh, le probabilita' non mi piacciono, si trasformano spesso in
imprevisti (e' una citazione, famoso gioco), preferisco passare dal via.
Quello che vorrei fare e' chiudere normalmente e correttamente il programma,
come se fosse stato fatto un chiudi dall'utente.
L'idea di chiudere un programma diciamo a caso non mi piace, e' probabile
che rimangano risorse di sistema impegnate (anche se in teoria il s.o.
dovrebbe ripulire il tutto).
Salve
                Dbg
P.S. uccidere, carneficina, compari, morire, uccidere .... letto troppi
libri gialli o un sano odio per le 'finestre'?

>il programma si chiuderà
In questo caso verrebbero accoppate alcune 'window' del thread 'boss' (er
capo insomma) e poi dopo una strage degli innocenti, finalmente verrebbe
colpita la 'window' giusta.
Non e' difficile immaginare situazioni in cui vengano accoppati i thread
'secondari' e poi il big boss.
Non mi piace proprio, bisogna usare un colpo solo, al cuore, niente
mitragliate.
Se qualcuno ha un'idea.
Salve
                Dbg
P.S. Intanto grazie a Ettore Maronese, FibiaFbi, Juliet, al sito comune, a
redangel.it
, da cui sto' saccheggiando idee a nastro.

Mucias grasias, il suo mails me has risoltos er primos problemas e me has
deschiodados.
Ma come scrittos nel post post (succesivo post), tienemos ancoras problemas,
e anches piuttostos grossos (un mio conoscente direbbe l'affare si
ingrossa).
Salve
            Dbg
Fibia FBI ha scritto nel messaggio


Ho fatto delle prove con il firewall ZoneAlarm (a proposito, e' ottimo,
Se posso dire la mia, ZoneAlarm non ferma quasi niente e funziona
davvero malino.
Un po' meglio, ma non a gratis, e' il Black Ice, che ha degli ottimi
log ed e' relativamente flessibile.
Il migliore e' senz'ombra di dubbio il Conseal, ma a parte il costare
qualcosa in piu' e' indecente da configurare.
Comunque, a mio avviso, mettere dei firewall su Windows e' una perdita
di tempo e basta.
Saluti.
-- 
      Gianni "bugbarbeq" Rondinini, 25, RA, 242, 152
  VBR - Vero Birro Romagnolo®, diffidate dalle imitazioni!
 Opel/ECC Calibrezio EVO-IV --- Kawasaki "Gas Gas" ZZ-R 1100
 ICQ# 36893168 - IRCNet: bugbarbeq, @ on #linux-it & #NetBSD

possibili e probabili chiusure errate del programma.
Confermo (una conferma in beta test), chiudere le 'window' principali a
casaccio o chiudere il/i thread o processo di forza molto molto raramente
da' problemi al s.o. (richiesto riavvio) e alcune volte impedisce l'arresto
corretto del sistema.
Salve
                Dbg

Allora per il momento ho trovato (da verificare) solo due strade, usare
l'API CreateProcess, al posto della funzione shell di Vb, che consente di
sapere qual'e' il thread principale del processo 'lanciato' e quindi di
ridurre il massacro di 'window' innocenti, e l'altra quella di attivare
(diventa il processo attivo) il processo da chiudere, trovare l'handle della
'window' attiva e poi 'farla fuori'.
Sempre in attesa di eventuali vostri aiuti.
Salve
                Dbg
Della Bianca Giuseppe ha scritto nel messaggio ...
