Newsgroup: it.comp.lang.visual-basic
Titolo: terminare processi coll' API di Windows

Visto che qui mi date ascolto ne approfitto ;-))
Ecco la questione:
Voglio scrivere del codice per visualizzare tutti i processi ed
eventualmente terminarli.
Trovarli è stato  semplice:
Private Declare Function CreateToolhelpSnapshot Lib "Kernel32.dll" Alias _
"CreateToolhelp32Snapshot" (ByVal IFIags As Long, ByVal IProcessID As Long)
As Long
Private Declare Function ProcessFirst Lib "Kernel32.dll" Alias _
"Process32First" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As
Long
Private Declare Function ProcessNext Lib "Kernel32.dll" Alias _
"Process32Next" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As
Long
Private Declare Sub CloseHandle Lib "Kernel32.dll" (ByVal hPass As Long)
Const MAX_PATH As Long = 260
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Sub ExitProcess Lib "kernel32" (ByVal uExitCode As Long)
Const TH32CS_SNAPPROCESS As Long = 2&
Private Type PROCESSENTRY32
dwSize As Long
cntUsage As Long
th32ProcessID As Long
th32DefaultHeapID As Long
th32ModuleID As Long
cntThreads As Long
th32ParentProcessID As Long
pcPriClassBase As Long
dwFlags As Long
szExeFile As String * MAX_PATH
End Type
Private Sub Form_load()
Dim hSnapShot As Long
Dim uProcess As PROCESSENTRY32
Dim Esegui As Long
hSnapShot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
If hSnapShot = 0 Then Exit Sub
uProcess.dwSize = Len(uProcess)
Esegui = ProcessFirst(hSnapShot, uProcess)
Do While Esegui
List1.AddItem uProcess.szExeFile
List2.AddItem uProcess.cntThreads
List3.AddItem uProcess.pcPriClassBase
Esegui = ProcessNext(hSnapShot, uProcess)
Loop
 Call CloseHandle(hSnapShot)
End Sub
il vero problema e' che non riesco a trovare il modo di terminare quelli che
voglio.
sull' api-guide ho trovato questo:
Private Declare Sub ExitProcess Lib "kernel32" (ByVal uExitCode As Long)
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess
As Long, lpExitCode As Long) As Long
Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Sub Form_Load()
    'KPD-Team 1999
    'URL: 
http://www.allapi.net/
    'E-Mail: KPD...@Allapi.net
    'end this process
    ExitProcess GetExitCodeProcess(GetCurrentProcess, 0)
End Sub
ma proprio non riesco a capire come fare a trovare il codice di uscita di
una applicazione diversa da quella corrente ( GetCurrentProcess )
idee?
10X

 idee?
altri sapranno essere molto più dettagliati.
Comunque un inizio può essere la GetWindowThreadProcessId() e la pagina
"Process and Thread Functions".
Comunque la stessa Process32Next() che usi per l'enumerazione dei processi
ha tra i suoi parametri la struttura con l'handle del processo trovato
Ciao

 una applicazione diversa da quella corrente ( GetCurrentProcess )
ExitProcess non e' la funzione giusta, il codice d'uscita non
identifica un processo, hai bisogno di una funzione basata sul
Process-ID. Purtroppo l'unica API disponibile non e' in grado di
gestire i collegamenti con le dll e percio' forse ti conviene prima
studiarti questi meccanismi. Tieni presenti che su NT/2000 devi anche
gestire i permessi di sicurezza.
La cosa piu' facile sarebbe inviare messaggi di chiusura alle
finestre, ma un programma fatto male potrebbe non rispondere bene a
questi messaggi e lasciare aperta la finestra. Senza contare quei
processi che non hanno finestra.
Ciao.
-- 
comunicazione personale: scuse accettate.