Newsgroup: it.comp.lang.visual-basic
Titolo: [?] terminate process

scusate se vi disturebo ancora sempre con lo stesso argomento, ma non sto
capendo davvero niente.
il problema č che l'API TerminateProcess non funziona.
la dichiarazione č la seguente:
Private Declare Function TerminateProcess Lib "kernel32.dll" (ByVal hProcess
As Long, ByVal uExitCode As Long) As Long
non sono riuscito a trovare da nessuna parte una spiegazione di cosa
rappresentino i due argomenti. il primo č un handle del processo? e se sě,
come si ricava? e il secondo? di che si tratta?
ho fatto un paio di prove, e riesce a chidere solo l'applicazione corrente,
quando utilizzo un'altra API, GetCurrentProcess.
in pratica (e questo č il mistero) se scrivo:
retval=TerminateProcess (GetCurrentProcess,0)
funzona benissimo, nel senso che mi chiude l'applicazione corrente.
ora la mia domanda č: ma getcurrentprocess che cosa restituisce? e come
faccio a trovarmi l'omologo di getcurrentprocess, ma per altre applicazioni?
grazie
Mario

 wrote in message 8ltdmf$r85$1...@nslave2.tin.it...



Public Const MAX_PATH As Integer = 260
Public Const TH32CS_SNAPPROCESS = &H2
Public Const PROCESS_TERMINATE = &H1
Public Declare Function TerminateProcess Lib "KERNEL32" (ByVal hProcess As
Long, ByVal uExitCode As Long) As Long
Public Declare Function GetExitCodeProcess Lib "KERNEL32" (ByVal hProcess As
Long, lpExitCode As Long) As Long
Public Declare Function ProcessFirst Lib "KERNEL32" Alias "Process32First"
(ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Public Declare Function ProcessNext Lib "KERNEL32" Alias "Process32Next"
(ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Public Declare Function CloseHandle Lib "KERNEL32" (ByVal hFile As Long) As
Long
Public Declare Function OpenProcess Lib "KERNEL32" (ByVal dwDesiredAccess As
Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function CreateToolhelpSnapshot Lib "KERNEL32" Alias
"CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long)
As Long
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
Dim hSnapShot As Long
Dim uProcess As PROCESSENTRY32
Dim rprocess As Long
Dim tPID As Long
Dim tMID As Long
Dim lexitcode As Long
Dim hProcess As Long
Dim Path, Compare, a, perc, perc2 As String
Public Sub KillProcess(Process As String)
Process = UCase(Process)
hSnapShot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
If hSnapShot <> 0 Then
   uProcess.dwSize = Len(uProcess)
   rprocess = ProcessFirst(hSnapShot, uProcess)
   Do While rprocess
     tPID = uProcess.th32ProcessID
     tMID = uProcess.th32ModuleID
     Path = UCase(Removechr0(uProcess.szExeFile))
     perc = Path
     Compare = CheckPath(perc)
     If Process = Compare Then
        hProcess = OpenProcess(PROCESS_TERMINATE, CLng(False),
CLng(uProcess.th32ProcessID))
        If hProcess <> 0 Then
           If GetExitCodeProcess(hProcess, lexitcode) <> 0 Then
              xanswer = TerminateProcess(hProcess, lexitcode)
           End If
        End If
     End If
     rprocess = ProcessNext(hSnapShot, uProcess)
   Loop
   Call CloseHandle(hSnapShot)
End If
End Sub
Public Function Removechr0(cstring As String)
   While Right(cstring, 1) = Chr$(0)
     cstring = Left(cstring, Len(cstring) - 1)
   Wend
   Removechr0 = cstring
End Function
Public Function CheckPath(ByVal perc As String)
perc2 = perc
a = 1
   While Right(perc, 1) <> "\"
     cstring = Right(perc2, a)
     perc = Left(perc, Len(perc) - 1)
     a = a + 1
   Wend
   CheckPath = cstring
End Function
Inserisci tutto quello che c'č scritto sopra in un modulo. Poi nel form
metti questo:
Private Sub Command1_Click()
KillProcess (Text1.Text)
End Sub
Naturalmente devi inserire un pulsante "Command1" e una textbox "Text1".
Ecco fatto un programmino in grado di uccidere qualsiasi applicazione.
Potrai modificarla a tuo piacimento a seconda dei tuoi scopi. Nella textbox
dovrai inserire il nome dell'eseguibile in esecuzione che vuoi terminare(Es.
"Notepad.exe").
Studiati le funzioni, forse riusciranno a rischiarare i tuoi dubbi.
Ciao...OXI

grazie 1000
Mario

un'ultima cosa
su 
www.vbapi.com
 non sono riuscito a trovare nessuan delle due funzioni
OpenProcess e GetExitCode... non avresti qualceh buon sito sulle API, in cui
magari quasi sicuramente le riesco a trovare?
grazie.

 wrote in message 8lud0l$mo$1...@nslave1.tin.it...

Non so dove trovare descrizioni dettagliate sulle singole funzioni, però
quando ho bisogno di qualcosa, lo cerco su
http://planet-source-code.com
c'è un sacco di codice e tanti esempi.
Ciao

ok grazie