Home Page
  Programmazione
   I Miei Progetti
   Come fare
     Gestire i processi
     Screen Saver
     File Help
   VB e Libri
   Download



Come lanciare un'applicazione e poi controllare quando ha finito

In ambienti a 32 bit, ogni programma che gira costituisce un processo, ognuno dei quali e' unicamente identificato da un ID, un numero a 32 bit. L'istruzione Shell( ) di Visual Basic rende l'ID corrispondente al processo appena creato nel sistema. Ma questo non basta. Per poter monitorare il processo occorre aprire un handle su di lui: a questo scopo si usa la funzione OpenProcess( ). Essa ritorna un numero, che e' l'handle sul processo. Una volta ottenuto questo handle, si puo' usare l'erede a 32 bit del vecchio GetModuleUsage, cioe' GetExitCodeProcess( ), per verificare se il processo di cui conosciamo l'ID e' ancora in vita. Una volta che l'handle non ci serve piu' , e' bene chiuderlo, liberando risorse, con CloseHandle( ).

Eccone il codice della sezione Dichiarazioni:

Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hprocess As Long, lpExitCode As Long) As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Const STILL_ACTIVE = &H103
Const PROCESS_QUERY_INFORMATION = &H400

E qui la funzione Suspend( ) vera e propria

Function suspend(exe As String, Optional shellparm) As Integer
Dim processid As Long
Dim hprocess As Long
Dim exitcode As Long
Dim parm As Integer

Select Case VarType(shellparm)
 Case vbEmpty, vbNull, vbError
  parm = vbNormalFocus
 Case vbLong, vbInteger, vbSingle, vbDouble
  parm = shellparm
 Case Else
  parm = vbNormalFocus
End Select
processid = Shell(exe, parm)

hprocess = OpenProcess(PROCESS_QUERY_INFORMATION, False, processid)
Do
 Call GetExitCodeProcess(hprocess, exitcode)
 DoEvents
Loop While (exitcode = STILL_ACTIVE)
CloseHandle (hprocess)
End Function

Scarica il progetto di esempio cliccando qui.
Inizio Pagina | Home Page | AF's PORTAL | Contatti
Le diciture (Marchi, Aziende, etc) coperte da Copyright citate in queste pagine sono dei rispettivi proprietari. Il sito www.andreafabbrucci.it
NON responsabile del materiale presente in altri siti accessibili dai propri link che non rispettano le norme attualmente viggenti.