L'observateur de processus composant


Un Composant qui affiche tous les processus en cours d'exécution, non seulement sur WinNT mais aussi
sur windows 98/95 !
Un Composant qui affiche tous les processus en cours d'exécution, non seulement sur WinNT, mais
également sur windows 98/95 !
Il a également une méthode publique calld KillSelectedProcess, je suppose que vous
pouvez comprendre ce que c'est...
Il m'a sauvé beaucoup de mal et m'a sauvé beaucoup de besoins à
redémarrer mon système sur mon windows 98 de la machine...

eh bien, voici le code source :
Ce que vous avez à faire est de faire une nouvelle unité, copiez ce texte dans
et de sauvegarder l'unité de la ggProcessViewer.
Ensuite, vous pouvez installer dans votre composant de la palette à l'aide de la
delphi menu principal, Composant/Installer le Composant...
beaucoup de plaisir...
unité de ggProcessViewer
interface

& nbsp & nbsp Windows, SysUtils, Classes, des Contrôles, des Grilles, ExtCtrls, messages,
& nbsp & nbsp tlHelp32, Les boîtes de dialogue
type
//NT Fonctions pour obtenir les informations de processus :
& nbsp & nbsp TEnumProcesses = function(lpidProcess: LPDWORD cb: DWORD
& ! & ! & ! & nbsp var cbNeeded: DWORD): BOOL StdCall //externes cPSAPIDLL
& nbsp & nbsp TGetModuleBaseNameA = function(hProcess: THandle hModule: HMODULE
& ! & ! & ! & nbsp lpBaseName: PAnsiChar ntaille: DWORD): DWORD StdCall //externes cPSAPIDLL
& nbsp & nbsp TGetModuleFileNameExA = function(hProcess: THandle hModule: HMODULE
& ! & ! & ! & nbsp lpFilename: PAnsiChar ntaille: DWORD): DWORD StdCall //externes cPSAPIDLL
& nbsp & nbsp TEnumProcessModules = function (hProcess: THandle lphModule: LPDWORD
& ! & ! & ! & nbsp cb: DWORD var lpcbNeeded: DWORD): BOOL StdCall //externes cPSAPIDLL
& nbsp & nbsp TPByte = ^To
& nbsp & nbsp To = array[0..0] of byte
& nbsp & nbsp ThackWinControl = classe(twincontrol a)
& nbsp & nbsp public
& ! & ! & ! & nbsp Texte de la propriété
& nbsp & nbsp fin
& nbsp & nbsp ThackGraphicControl = class(TGraphicControl)
& nbsp & nbsp public
& ! & ! & ! & nbsp propriété Caption
& nbsp & nbsp fin
& nbsp & nbsp TProcessTimeType = (ptCreationTime, ptExitTime, ptKernelTime,
& ! & ! & ! & nbsp ptUserTime, ptCPUTime)
& nbsp & nbsp TAfterRefreshProcesses = procédure(Sender: TObject) de l'objet
& nbsp & nbsp TBeforeRefreshProcesses = procédure(Sender: TObject) de l'objet

& nbsp & nbsp TggProcessViewer = classe(TStringGrid)
& nbsp & nbsp privé
& ! & ! & ! & nbsp FProcessCount : integer
& ! & ! & ! & nbsp FAutoRefresh : boolean
& ! & ! & ! & nbsp FAfterRefreshProcesses : TAfterRefreshProcesses
& ! & ! & ! & nbsp FBeforeRefreshProcesses : TBeforeRefreshProcesses
& ! & ! & ! & nbsp RefreshTimer : TTimer
& ! & ! & ! & nbsp procédure InitGridForNT
& ! & ! & ! & nbsp procédure Getprocesses
& ! & ! & ! & nbsp procédure GetProcessesOnNT
& ! & ! & ! & nbsp fonction SetProcessCount: integer
& ! & ! & ! & nbsp procédure GetProcessCount(const Value: integer)
& ! & ! & ! & nbsp procédure GetTheProcessTimes(PID: entier)
& ! & ! & ! & nbsp procédure SetAutoRefresh(const Value: boolean)
& ! & ! & ! & nbsp procédure TimerAutoRefresh(Sender: TObject)
& ! & ! & ! & nbsp procédure InitGridForWinXX
& ! & ! & ! & nbsp procédure GetProcessesOnWinXX
& nbsp & nbsp protégé
& ! & ! & ! & nbsp //Adresse des détenteurs des procédures pour NT
& ! & ! & ! & nbsp EnumProcesses : TEnumProcesses
& ! & ! & ! & nbsp GetModuleBaseNameA : TGetModuleBaseNameA
& ! & ! & ! & nbsp GetModuleFileNameExA : TGetModuleFileNameExA
& ! & ! & ! & nbsp EnumProcessModules : TEnumProcessModules
& nbsp & nbsp public
& ! & ! & ! & nbsp constructor Create(AOwner: TComponent) remplacer
& ! & ! & ! & nbsp destructeur de Détruire remplacer
& ! & ! & ! & nbsp procédure d'Actualisation
& ! & ! & ! & nbsp procédure KillSelectedProcess
& nbsp & nbsp publié
& ! & ! & ! & nbsp propriété DoubleBuffered
& ! & ! & ! & nbsp propriété ProcessCount: Entier lire SetProcessCount écrire GetProcessCount
& ! & ! & ! & nbsp propriété actualisation automatique: Boolean lire FAutoRefresh écrire SetAutoRefresh
& ! & ! & ! & nbsp propriété AfterRefreshProcesses: TAfterRefreshProcesses
& ! & ! & ! & ! & ! & nbsp lire FAfterRefreshProcesses écrire FAfterRefreshProcesses
& ! & ! & ! & nbsp propriété BeforeRefreshProcesses: TBeforeRefreshProcesses
& ! & ! & ! & ! & ! & nbsp lire FBeforeRefreshProcesses écrire FBeforeRefreshProcesses
& nbsp & nbsp fin
procédure Register
const
& nbsp & nbsp cPSAPIDLL = 'PSAPI.dll'
& nbsp & nbsp ProcessBasicInformation = 0

application
procédure Register
begin
& nbsp & nbsp RegisterComponents('GuidoG', [TggProcessViewer])
fin
{ TggProcessViewer }
constructeur TggProcessViewer.Create(AOwner: TComponent)
begin
& nbsp & nbsp hérité
& nbsp & nbsp RefreshTimer := TTimer.Create(Self)
& nbsp & nbsp RefreshTimer.OnTimer := TimerAutoRefresh
& nbsp & nbsp FixedCols := 0
& nbsp & nbsp DefaultRowHeight := 15
& nbsp & nbsp ColWidths[0] := 120
& nbsp & nbsp ColWidths[1] := 60
& nbsp & nbsp ColWidths[2] := 50
& nbsp & nbsp ColWidths[3] := 360
& nbsp & nbsp Options := Options - [goVertLine, goHorzLine]
& ! & ! & ! & nbsp [goDrawFocusSelected, goThumbTracking, goColSizing, goRowSizing]
& nbsp & nbsp GetProcesses
& nbsp & nbsp FAutoRefresh := TRUE
fin

procédure TggProcessViewer.InitGridForNT
begin
& nbsp & nbsp ColCount := 7
& nbsp & nbsp RowCount := 2
& nbsp & nbsp Cellules[0, 0] := 'Processus'
& nbsp & nbsp Cellules[1, 0] := 'PID'
& nbsp & nbsp Cellules[2, 0] := 'temps CPU'
& nbsp & nbsp Cellules[3, 0] := 'Noyau temps'
& nbsp & nbsp Cellules[4, 0] := 'temps de l'Utilisateur'
& nbsp & nbsp Cellules[5, 0] := 'Priorité'
& nbsp & nbsp Cellules[6, 0] := 'Localisation'
& nbsp & nbsp Cellules[0, 1] := '
& nbsp & nbsp Cellules[1, 1] := '
& nbsp & nbsp Cellules[2, 1] := '
& nbsp & nbsp Cellules[3, 1] := '
& nbsp & nbsp Cellules[4, 1] := '
& nbsp & nbsp Cellules[5, 1] := '
& nbsp & nbsp Cellules[6, 1] := '
fin

procédure TggProcessViewer.InitGridForWinXX
begin
& nbsp & nbsp ColCount := 4
& nbsp & nbsp RowCount := 2
& nbsp & nbsp Cellules[0, 0] := 'Processus'
& nbsp & nbsp Cellules[1, 0] := 'PID'
& nbsp & nbsp Cellules[2, 0] := 'Priorité'
& nbsp & nbsp Cellules[3, 0] := 'Localisation'
& nbsp & nbsp Cellules[0, 1] := '
& nbsp & nbsp Cellules[1, 1] := '
& nbsp & nbsp Cellules[2, 1] := '
& nbsp & nbsp Cellules[3, 1] := '
fin

procédure TggProcessViewer.GetProcessesOnNT
var
& nbsp & nbsp I : Integer
& nbsp & nbsp pidNeeded : DWORD
& nbsp & nbsp PIDList : array[0..1000] of Integer
& nbsp & nbsp PIDName : array [0..MAX_PATH - 1] of char
& nbsp & nbsp PH : THandle
& nbsp & nbsp hMod : HMODULE
& nbsp & nbsp dwSize2 : DWORD
& nbsp & nbsp J,
& nbsp & nbsp ColBeforeRefresh : integer
& nbsp & nbsp PIDContentsBeforeRefresh : string
begin
& nbsp & nbsp ColBeforeRefresh := Col
& nbsp & nbsp PIDContentsBeforeRefresh := Cells[1, Ligne]
& nbsp & nbsp Effectuer(WM_SETREDRAW, 0, 0)
& nbsp & nbsp essayer
& ! & ! & ! & nbsp InitGridForNT
& ! & ! & ! & nbsp si pas EnumProcesses(@PIDList, 1000, pidNeeded)
& ! & ! & ! & ! & ! & nbsp raise Exception.Create('PSAPI.DLL pas trouvé!!! Êtes-vous sûr que vous '
& ! & ! & ! & ! & ! & ! & ! & ! 'exécutent windows NT/Y2K ?')
& ! & ! & ! & nbsp for i := 0 to (pidNeeded div SizeOf (Integer)- 1)
& ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & bsp & ! & ! & ! & nbsp PH := OpenProcess(PROCESS_QUERY_INFORMATION ou PROCESS_VM_READ,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp FAUX, PIDList[I])
& ! & ! & ! & ! & ! & ! & ! & nbsp si PH <> 0 then
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si GetModuleFileNameExA(PH, 0, PIDName, SizeOf(PIDName)) > 0, alors
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si EnumProcessModules(PH, @hMod, SizeOf(hMod), dwSize2) puis
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp GetModuleFileNameExA(PH, hMod, PIDName, SizeOf(PIDName))
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Cellules[0, nombre de lignes - 1] := ExtractFileName(PIDName)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Cellules[1, nombre de lignes - 1] := IntToStr(PIDList[I])
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp GetTheProcessTimes(PIDList[I])
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp cas GetPriorityClass(PH) de
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp HIGH_PRIORITY_CLASS: les Cellules[5, nombre de lignes - 1] := 'Haut'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp IDLE_PRIORITY_CLASS: les Cellules[5, nombre de lignes - 1] := 'Inactif'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp NORMAL_PRIORITY_CLASS: les Cellules[5, nombre de lignes - 1] := 'Normal'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp REALTIME_PRIORITY_CLASS : les Cellules[5, nombre de lignes - 1] := 'En temps réel'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Cellules[6, Nombre de lignes - 1] := ExtractFilePath(PIDName)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp RowCount := Nombre de lignes 1
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp CloseHandle(PH)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp si RowCount > 2
& nbsp & nbsp & ! & ! & ! & nbsp RowCount := nombre de lignes - 1
& ! & ! & ! & nbsp FProcessCount := nombre de lignes - 1
& ! & ! & ! & nbsp pour J := 1 à nombre de lignes - 1 do
& ! & ! & ! & ! & ! & nbsp si les Cellules[1, J] = PIDContentsBeforeRefresh puis
& ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Col := ColBeforeRefresh
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Ligne := J
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Pause
& ! & ! & ! & ! & ! & ! & ! & nbsp fin
& nbsp & nbsp enfin
& ! & ! & ! & nbsp Effectuer(WM_SETREDRAW, 1, 0)
& ! & ! & ! & nbsp Invalider
& nbsp & nbsp fin
fin



procédure TggProcessViewer.GetTheProcessTimes(PID: entier)
var
& nbsp & nbsp lpLocalFileTime : TFileTime
& nbsp & nbsp lpSystemTime : TSystemTime
& nbsp & nbsp PH : THandle
& nbsp & nbsp hProcess : THandle
& nbsp & nbsp lpCreationTime,
& nbsp & nbsp lpExitTime,
& nbsp & nbsp lpKernelTime,
& nbsp & nbsp lpUserTime : TFileTime
& nbsp & nbsp KernelDay,
& nbsp & nbsp UserDay : integer
& nbsp & nbsp KernelTime,
& nbsp & nbsp UserTime : TDateTime
& nbsp & nbsp Résultat,
& nbsp & nbsp strHours : string
begin
& nbsp & nbsp Result := 'n/a'
& nbsp & nbsp hProcess := PID
& nbsp & nbsp PH := OpenProcess(PROCESS_QUERY_INFORMATION, FAUX, hProcess)
& nbsp & nbsp si PH <> 0 then
& ! & ! & ! & nbsp essayer
& ! & ! & ! & ! & ! & nbsp GetProcessTimes(PH, lpCreationTime, lpExitTime, lpKernelTime, lpUserTime)
& ! & ! & ! & ! & ! & nbsp FileTimeToLocalFileTime(lpCreationTime, lpLocalFileTime)
& ! & ! & ! & ! & ! & nbsp //Obtenir le noyau de l'heure et le format
& ! & ! & ! & ! & ! & nbsp FileTimeToSystemTime(lpKernelTime, lpSystemTime)
& ! & ! & ! & ! & ! & nbsp KernelDay := lpSystemTime.wDay
& ! & ! & ! & ! & ! & nbsp KernelTime := SystemTimeToDateTime(lpSystemTime)
& ! & ! & ! & ! & ! & nbsp Résultat := TimeToStr(KernelTime)
& ! & ! & ! & ! & ! & nbsp strHours := Copy(Résultat, 1, Pos(':', Result) - 1)
& ! & ! & ! & ! & ! & nbsp Supprimer(Résultat, 1, Pos(':', Result) - 1)
& ! & ! & ! & ! & ! & nbsp Cellules[3, nombre de lignes - 1] := IntToStr(((KernelDay - 1) * 24)
& ! & ! & ! & ! & ! & ! & ! & nbsp StrToInt(strHours)) Résultat
& ! & ! & ! & ! & ! & nbsp //Obtenir le temps de l'utilisateur et le format
& ! & ! & ! & ! & ! & nbsp FileTimeToSystemTime(lpUserTime, lpSystemTime)
& ! & ! & ! & ! & ! & nbsp UserDay := lpSystemTime.wDay
& ! & ! & ! & ! & ! & nbsp UserTime := SystemTimeToDateTime(lpSystemTime)
& ! & ! & ! & ! & ! & nbsp Résultat := TimeToStr(UserTime)
& ! & ! & ! & ! & ! & nbsp strHours := Copy(Résultat, 1, Pos(':', Result) - 1)
& ! & ! & ! & ! & ! & nbsp Supprimer(Résultat, 1, Pos(':', Result) - 1)
& ! & ! & ! & ! & ! & nbsp Cellules[4, nombre de lignes - 1] := IntToStr(((UserDay - 1) * 24)
& ! & ! & ! & ! & ! & ! - nbsp & nbsp StrToInt(strHours)) Résultat //TimeToStr(UserTime)
& ! & ! & ! & ! & ! & nbsp //Calculer le temps de calcul et le format
& ! & ! & ! & ! & ! & nbsp Résultat := TimeToStr(UserTime KernelTime)
& ! & ! & ! & ! & ! & nbsp strHours := Copy(Résultat, 1, Pos(':', Result) - 1)
& ! & ! & ! & ! & ! & nbsp Supprimer(Résultat, 1, Pos(':', Result) - 1)
& ! & ! & ! & ! & ! & nbsp Cellules[2, nombre de lignes - 1] := IntToStr(((UserDay - KernelDay) * 24)
& ! & ! & ! & ! & ! & ! & ! & nbsp StrToInt(strHours)) Résultat
& ! & ! & ! & nbsp enfin
& ! & ! & ! & ! & ! & nbsp CloseHandle(PH)
& ! & ! & ! & nbsp fin
fin

procédure TggProcessViewer.KillSelectedProcess
var
& nbsp & nbsp PH : THandle
& nbsp & nbsp lpExitCode : DWord
& nbsp & nbsp hProcess : le Cardinal
begin
& nbsp & nbsp hProcess := StrToInt64(Cellules[1, Ligne])
& nbsp & nbsp PH := OpenProcess(PROCESS_TERMINATE ou PROCESS_QUERY_INFORMATION,
& ! & ! & ! & nbsp FAUX, hProcess)
& nbsp & nbsp si PH <> 0 then
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & nbsp si GetExitCodeProcess(PH, lpExitCode) puis
& ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si MessageBox(Poignée, PChar('voulez-vous vraiment m'essayer'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ' pour tuer ce processus ?'), 'S'il vous plaît Confirmer',
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp MB_YESNO) = mrYES puis
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp TerminateProcess(PH, lpExitCode)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp MessageBox(Poignée, PChar('devrait être mort maintenant...'),
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp PChar ('Check it out...'), MB_OK)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & nbsp else
& ! & ! & ! & ! & ! & ! & ! & nbsp MessageBox(Poignée, PChar ('impossible de récupérer les ExitCode'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ' pour ce processus.' #13 #13
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp SysErrorMessage(GetLastError)),
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp PChar ('quelque Chose s'est mal passé...'), MB_OK)
& ! & ! & ! & ! & ! & nbsp CloseHandle(PH)
& ! & ! & ! & nbsp fin
& nbsp & nbsp else
& ! & ! & ! & nbsp MessageBox(Poignée, PChar('ne Pouvait pas avoir accès à ce processus'.
& ! & ! & ! & ! & ! & ! #13 #13 SysErrorMessage(GetLastError)),
& ! & ! & ! & ! & ! & nbsp PChar ('quelque Chose s'est mal passé...'), MB_OK) Actualiser
fin

procédure TggProcessViewer.Actualiser
begin
& nbsp & nbsp si affecté(FBeforeRefreshProcesses) et non
& ! & ! & ! & nbsp (csLoading dans ComponentState)
& ! & ! & ! & nbsp FBeforeRefreshProcesses(Auto)
& nbsp & nbsp GetProcesses
& nbsp & nbsp si affecté(FAfterRefreshProcesses) et non
& ! & ! & ! & nbsp (csLoading dans ComponentState) puis
& ! & ! & ! & nbsp FAfterRefreshProcesses(Auto)
fin

fonction de TggProcessViewer.SetProcessCount: integer
begin
& nbsp & nbsp Résultat := FProcessCount
fin

procédure TggProcessViewer.GetProcessCount(const Value: integer)
begin
& nbsp & nbsp FProcessCount := nombre de lignes - 1
fin

procédure TggProcessViewer.SetAutoRefresh(const Value: boolean)
begin
& nbsp & nbsp FAutoRefresh := Valeur
& nbsp & nbsp RefreshTimer.Enabled := FAutoRefresh
fin

destructeur TggProcessViewer.Détruire
begin
& nbsp & nbsp FreeAndNil(RefreshTimer)
& nbsp & nbsp hérité
fin

procédure TggProcessViewer.TimerAutoRefresh(Sender: TObject)
begin
& nbsp & nbsp RefreshTimer.OnTimer := NIL
& nbsp & nbsp Actualiser
& nbsp & nbsp RefreshTimer.OnTimer := TimerAutoRefresh
fin

procédure TggProcessViewer.GetProcessesOnWinXX
var
& nbsp & nbsp aHandle : THandle
& nbsp & nbsp FoundOne : bool
& nbsp & nbsp ProcessEntry32 : TProcessEntry32
& nbsp & nbsp ExeFile : string
& nbsp & nbsp J,
& nbsp & nbsp ColBeforeRefresh : integer
& nbsp & nbsp PIDContentsBeforeRefresh : string
& nbsp & nbsp PriorityClass : DWord
begin
& nbsp & nbsp ColBeforeRefresh := Col
& nbsp & nbsp PIDContentsBeforeRefresh := Cells[1, Ligne]
& nbsp & nbsp Effectuer(WM_SETREDRAW, 0, 0)
& nbsp & nbsp essayer
& ! & ! & ! & nbsp InitGridForWinXX
& ! & ! & ! & nbsp aHandle := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0)
& ! & ! & ! & nbsp si aHandle <> 0 then
& ! & ! & ! & ! & ! & nbsp essayer
& ! & ! & ! & ! & ! & ! & ! & nbsp ProcessEntry32.dwSize := SizeOf(TProcessEntry32)
& ! & ! & ! & ! & ! & ! & ! & nbsp FoundOne := process32first une seule(aHandle, ProcessEntry32)
& ! & ! & ! & ! & ! & ! & ! & nbsp tandis que FoundOne ne
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ExeFile := ProcessEntry32.szExeFile
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Cellules[0, nombre de lignes - 1] := ExtractFileName(ExeFile)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Cellules[1, nombre de lignes - 1] := IntToStr(ProcessEntry32.th32ProcessID)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp PriorityClass := GetPriorityClass(ProcessEntry32.th32ProcessID)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si PriorityClass <> 0 then
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp cas PriorityClass de
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp & nbsp & nbsp HIGH_PRIORITY_CLASS: les Cellules[2, nombre de lignes - 1] := 'Haut'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp IDLE_PRIORITY_CLASS: les Cellules[2, nombre de lignes - 1] := 'Inactif'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp NORMAL_PRIORITY_CLASS: les Cellules[2, nombre de lignes - 1] := 'Normal'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp REALTIME_PRIORITY_CLASS : les Cellules[2, Nombre de lignes - 1] := 'en temps réel'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp & nbsp else
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Cellules[2, nombre de lignes - 1] := IntToStr(ProcessEntry32.pcPriClassBase)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Cellules[3, nombre de lignes - 1] := ExtractFilePath(ExeFile)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp RowCount := Nombre de lignes 1
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ProcessEntry32.dwSize := SizeOf(TProcessEntry32)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp FoundOne := Process32Next(aHandle, ProcessEntry32)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & nbsp enfin
& ! & ! & ! & ! & ! & ! & ! & nbsp CloseHandle(ahandle)
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp si RowCount > 2
& ! & ! & ! & ! & ! & nbsp RowCount := nombre de lignes - 1
& ! & ! & ! & nbsp FProcessCount := nombre de lignes - 1
& ! & ! & ! & nbsp pour J := 1 à nombre de lignes - 1 do
& ! & ! & ! & ! & ! & nbsp si les Cellules[1, J] = PIDContentsBeforeRefresh puis
& ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Col := ColBeforeRefresh
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Ligne := J
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Pause
& ! & ! & ! & ! & ! & ! & ! & nbsp fin
& nbsp & nbsp enfin
& ! & ! & ! & nbsp Effectuer(WM_SETREDRAW, 1, 0)
& ! & ! & ! & nbsp Invalider
& nbsp & nbsp fin
fin

procédure TggProcessViewer.Getprocesses
var
& nbsp & nbsp HandlePSAPI_DLL : THandle
begin
& nbsp & nbsp HandlePSAPI_DLL := LoadLibrary(cPSAPIDLL)
& nbsp & nbsp si (HandlePSAPI_DLL <> 0) alors //Où sur NT/2000...
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & nbsp @EnumProcesses := GetProcAddress(HandlePSAPI_DLL, 'EnumProcesses')
& ! & ! & ! & ! & ! & nbsp @GetModuleBaseNameA := GetProcAddress(HandlePSAPI_DLL, 'GetModuleBaseNameA')
& ! & ! & ! & ! & ! & nbsp @GetModuleFileNameExA := GetProcAddress(HandlePSAPI_DLL, 'GetModuleFileNameExA')
& ! & ! & ! & ! & ! & nbsp @EnumProcessModules := GetProcAddress(HandlePSAPI_DLL, 'EnumProcessModules')
& ! & ! & ! & ! & ! & nbsp GetProcessesOnNT
& ! & ! & ! & ! & ! & nbsp FreeLibrary(HandlePSAPI_DLL)
& ! & ! & ! & nbsp fin
& nbsp & nbsp else //Où sur Win95/98/ME
& ! & ! & ! & nbsp GetProcessesOnWinXX
fin

à la fin.









L'observateur de processus composant


L'observateur de processus composant : Plusieurs milliers de conseils pour vous faciliter la vie.


Un Composant qui affiche tous les processus en cours d'execution, non seulement sur WinNT mais aussi
sur windows 98/95 !
Un Composant qui affiche tous les processus en cours d'execution, non seulement sur WinNT, mais
egalement sur windows 98/95 !
Il a egalement une methode publique calld KillSelectedProcess, je suppose que vous
pouvez comprendre ce que c'est...
Il m'a sauve beaucoup de mal et m'a sauve beaucoup de besoins a
redemarrer mon systeme sur mon windows 98 de la machine...

eh bien, voici le code source :
Ce que vous avez a faire est de faire une nouvelle unite, copiez ce texte dans
et de sauvegarder l'unite de la ggProcessViewer.
Ensuite, vous pouvez installer dans votre composant de la palette a l'aide de la
delphi menu principal, Composant/Installer le Composant...
beaucoup de plaisir...
unite de ggProcessViewer
interface

& nbsp & nbsp Windows, SysUtils, Classes, des Controles, des Grilles, ExtCtrls, messages,
& nbsp & nbsp tlHelp32, Les boîtes de dialogue
type
//NT Fonctions pour obtenir les informations de processus :
& nbsp & nbsp TEnumProcesses = function(lpidProcess: LPDWORD cb: DWORD
& ! & ! & ! & nbsp var cbNeeded: DWORD): BOOL StdCall //externes cPSAPIDLL
& nbsp & nbsp TGetModuleBaseNameA = function(hProcess: THandle hModule: HMODULE
& ! & ! & ! & nbsp lpBaseName: PAnsiChar ntaille: DWORD): DWORD StdCall //externes cPSAPIDLL
& nbsp & nbsp TGetModuleFileNameExA = function(hProcess: THandle hModule: HMODULE
& ! & ! & ! & nbsp lpFilename: PAnsiChar ntaille: DWORD): DWORD StdCall //externes cPSAPIDLL
& nbsp & nbsp TEnumProcessModules = function (hProcess: THandle lphModule: LPDWORD
& ! & ! & ! & nbsp cb: DWORD var lpcbNeeded: DWORD): BOOL StdCall //externes cPSAPIDLL
& nbsp & nbsp TPByte = ^To
& nbsp & nbsp To = array[0..0] of byte
& nbsp & nbsp ThackWinControl = classe(twincontrol a)
& nbsp & nbsp public
& ! & ! & ! & nbsp Texte de la propriete
& nbsp & nbsp fin
& nbsp & nbsp ThackGraphicControl = class(TGraphicControl)
& nbsp & nbsp public
& ! & ! & ! & nbsp propriete Caption
& nbsp & nbsp fin
& nbsp & nbsp TProcessTimeType = (ptCreationTime, ptExitTime, ptKernelTime,
& ! & ! & ! & nbsp ptUserTime, ptCPUTime)
& nbsp & nbsp TAfterRefreshProcesses = procedure(Sender: TObject) de l'objet
& nbsp & nbsp TBeforeRefreshProcesses = procedure(Sender: TObject) de l'objet

& nbsp & nbsp TggProcessViewer = classe(TStringGrid)
& nbsp & nbsp prive
& ! & ! & ! & nbsp FProcessCount : integer
& ! & ! & ! & nbsp FAutoRefresh : boolean
& ! & ! & ! & nbsp FAfterRefreshProcesses : TAfterRefreshProcesses
& ! & ! & ! & nbsp FBeforeRefreshProcesses : TBeforeRefreshProcesses
& ! & ! & ! & nbsp RefreshTimer : TTimer
& ! & ! & ! & nbsp procedure InitGridForNT
& ! & ! & ! & nbsp procedure Getprocesses
& ! & ! & ! & nbsp procedure GetProcessesOnNT
& ! & ! & ! & nbsp fonction SetProcessCount: integer
& ! & ! & ! & nbsp procedure GetProcessCount(const Value: integer)
& ! & ! & ! & nbsp procedure GetTheProcessTimes(PID: entier)
& ! & ! & ! & nbsp procedure SetAutoRefresh(const Value: boolean)
& ! & ! & ! & nbsp procedure TimerAutoRefresh(Sender: TObject)
& ! & ! & ! & nbsp procedure InitGridForWinXX
& ! & ! & ! & nbsp procedure GetProcessesOnWinXX
& nbsp & nbsp protege
& ! & ! & ! & nbsp //Adresse des detenteurs des procedures pour NT
& ! & ! & ! & nbsp EnumProcesses : TEnumProcesses
& ! & ! & ! & nbsp GetModuleBaseNameA : TGetModuleBaseNameA
& ! & ! & ! & nbsp GetModuleFileNameExA : TGetModuleFileNameExA
& ! & ! & ! & nbsp EnumProcessModules : TEnumProcessModules
& nbsp & nbsp public
& ! & ! & ! & nbsp constructor Create(AOwner: TComponent) remplacer
& ! & ! & ! & nbsp destructeur de Detruire remplacer
& ! & ! & ! & nbsp procedure d'Actualisation
& ! & ! & ! & nbsp procedure KillSelectedProcess
& nbsp & nbsp publie
& ! & ! & ! & nbsp propriete DoubleBuffered
& ! & ! & ! & nbsp propriete ProcessCount: Entier lire SetProcessCount ecrire GetProcessCount
& ! & ! & ! & nbsp propriete actualisation automatique: Boolean lire FAutoRefresh ecrire SetAutoRefresh
& ! & ! & ! & nbsp propriete AfterRefreshProcesses: TAfterRefreshProcesses
& ! & ! & ! & ! & ! & nbsp lire FAfterRefreshProcesses ecrire FAfterRefreshProcesses
& ! & ! & ! & nbsp propriete BeforeRefreshProcesses: TBeforeRefreshProcesses
& ! & ! & ! & ! & ! & nbsp lire FBeforeRefreshProcesses ecrire FBeforeRefreshProcesses
& nbsp & nbsp fin
procedure Register
const
& nbsp & nbsp cPSAPIDLL = 'PSAPI.dll'
& nbsp & nbsp ProcessBasicInformation = 0

application
procedure Register
begin
& nbsp & nbsp RegisterComponents('GuidoG', [TggProcessViewer])
fin
{ TggProcessViewer }
constructeur TggProcessViewer.Create(AOwner: TComponent)
begin
& nbsp & nbsp herite
& nbsp & nbsp RefreshTimer := TTimer.Create(Self)
& nbsp & nbsp RefreshTimer.OnTimer := TimerAutoRefresh
& nbsp & nbsp FixedCols := 0
& nbsp & nbsp DefaultRowHeight := 15
& nbsp & nbsp ColWidths[0] := 120
& nbsp & nbsp ColWidths[1] := 60
& nbsp & nbsp ColWidths[2] := 50
& nbsp & nbsp ColWidths[3] := 360
& nbsp & nbsp Options := Options - [goVertLine, goHorzLine]
& ! & ! & ! & nbsp [goDrawFocusSelected, goThumbTracking, goColSizing, goRowSizing]
& nbsp & nbsp GetProcesses
& nbsp & nbsp FAutoRefresh := TRUE
fin

procedure TggProcessViewer.InitGridForNT
begin
& nbsp & nbsp ColCount := 7
& nbsp & nbsp RowCount := 2
& nbsp & nbsp Cellules[0, 0] := 'Processus'
& nbsp & nbsp Cellules[1, 0] := 'PID'
& nbsp & nbsp Cellules[2, 0] := 'temps CPU'
& nbsp & nbsp Cellules[3, 0] := 'Noyau temps'
& nbsp & nbsp Cellules[4, 0] := 'temps de l'Utilisateur'
& nbsp & nbsp Cellules[5, 0] := 'Priorite'
& nbsp & nbsp Cellules[6, 0] := 'Localisation'
& nbsp & nbsp Cellules[0, 1] := '
& nbsp & nbsp Cellules[1, 1] := '
& nbsp & nbsp Cellules[2, 1] := '
& nbsp & nbsp Cellules[3, 1] := '
& nbsp & nbsp Cellules[4, 1] := '
& nbsp & nbsp Cellules[5, 1] := '
& nbsp & nbsp Cellules[6, 1] := '
fin

procedure TggProcessViewer.InitGridForWinXX
begin
& nbsp & nbsp ColCount := 4
& nbsp & nbsp RowCount := 2
& nbsp & nbsp Cellules[0, 0] := 'Processus'
& nbsp & nbsp Cellules[1, 0] := 'PID'
& nbsp & nbsp Cellules[2, 0] := 'Priorite'
& nbsp & nbsp Cellules[3, 0] := 'Localisation'
& nbsp & nbsp Cellules[0, 1] := '
& nbsp & nbsp Cellules[1, 1] := '
& nbsp & nbsp Cellules[2, 1] := '
& nbsp & nbsp Cellules[3, 1] := '
fin

procedure TggProcessViewer.GetProcessesOnNT
var
& nbsp & nbsp I : Integer
& nbsp & nbsp pidNeeded : DWORD
& nbsp & nbsp PIDList : array[0..1000] of Integer
& nbsp & nbsp PIDName : array [0..MAX_PATH - 1] of char
& nbsp & nbsp PH : THandle
& nbsp & nbsp hMod : HMODULE
& nbsp & nbsp dwSize2 : DWORD
& nbsp & nbsp J,
& nbsp & nbsp ColBeforeRefresh : integer
& nbsp & nbsp PIDContentsBeforeRefresh : string
begin
& nbsp & nbsp ColBeforeRefresh := Col
& nbsp & nbsp PIDContentsBeforeRefresh := Cells[1, Ligne]
& nbsp & nbsp Effectuer(WM_SETREDRAW, 0, 0)
& nbsp & nbsp essayer
& ! & ! & ! & nbsp InitGridForNT
& ! & ! & ! & nbsp si pas EnumProcesses(@PIDList, 1000, pidNeeded)
& ! & ! & ! & ! & ! & nbsp raise Exception.Create('PSAPI.DLL pas trouve!!! Etes-vous sûr que vous '
& ! & ! & ! & ! & ! & ! & ! & ! 'executent windows NT/Y2K ?')
& ! & ! & ! & nbsp for i := 0 to (pidNeeded div SizeOf (Integer)- 1)
& ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & bsp & ! & ! & ! & nbsp PH := OpenProcess(PROCESS_QUERY_INFORMATION ou PROCESS_VM_READ,
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp FAUX, PIDList[I])
& ! & ! & ! & ! & ! & ! & ! & nbsp si PH <> 0 then
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si GetModuleFileNameExA(PH, 0, PIDName, SizeOf(PIDName)) > 0, alors
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si EnumProcessModules(PH, @hMod, SizeOf(hMod), dwSize2) puis
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp GetModuleFileNameExA(PH, hMod, PIDName, SizeOf(PIDName))
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Cellules[0, nombre de lignes - 1] := ExtractFileName(PIDName)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Cellules[1, nombre de lignes - 1] := IntToStr(PIDList[I])
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp GetTheProcessTimes(PIDList[I])
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp cas GetPriorityClass(PH) de
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp HIGH_PRIORITY_CLASS: les Cellules[5, nombre de lignes - 1] := 'Haut'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp IDLE_PRIORITY_CLASS: les Cellules[5, nombre de lignes - 1] := 'Inactif'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp NORMAL_PRIORITY_CLASS: les Cellules[5, nombre de lignes - 1] := 'Normal'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp REALTIME_PRIORITY_CLASS : les Cellules[5, nombre de lignes - 1] := 'En temps reel'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Cellules[6, Nombre de lignes - 1] := ExtractFilePath(PIDName)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp RowCount := Nombre de lignes 1
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp CloseHandle(PH)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp si RowCount > 2
& nbsp & nbsp & ! & ! & ! & nbsp RowCount := nombre de lignes - 1
& ! & ! & ! & nbsp FProcessCount := nombre de lignes - 1
& ! & ! & ! & nbsp pour J := 1 a nombre de lignes - 1 do
& ! & ! & ! & ! & ! & nbsp si les Cellules[1, J] = PIDContentsBeforeRefresh puis
& ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Col := ColBeforeRefresh
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Ligne := J
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Pause
& ! & ! & ! & ! & ! & ! & ! & nbsp fin
& nbsp & nbsp enfin
& ! & ! & ! & nbsp Effectuer(WM_SETREDRAW, 1, 0)
& ! & ! & ! & nbsp Invalider
& nbsp & nbsp fin
fin



procedure TggProcessViewer.GetTheProcessTimes(PID: entier)
var
& nbsp & nbsp lpLocalFileTime : TFileTime
& nbsp & nbsp lpSystemTime : TSystemTime
& nbsp & nbsp PH : THandle
& nbsp & nbsp hProcess : THandle
& nbsp & nbsp lpCreationTime,
& nbsp & nbsp lpExitTime,
& nbsp & nbsp lpKernelTime,
& nbsp & nbsp lpUserTime : TFileTime
& nbsp & nbsp KernelDay,
& nbsp & nbsp UserDay : integer
& nbsp & nbsp KernelTime,
& nbsp & nbsp UserTime : TDateTime
& nbsp & nbsp Resultat,
& nbsp & nbsp strHours : string
begin
& nbsp & nbsp Result := 'n/a'
& nbsp & nbsp hProcess := PID
& nbsp & nbsp PH := OpenProcess(PROCESS_QUERY_INFORMATION, FAUX, hProcess)
& nbsp & nbsp si PH <> 0 then
& ! & ! & ! & nbsp essayer
& ! & ! & ! & ! & ! & nbsp GetProcessTimes(PH, lpCreationTime, lpExitTime, lpKernelTime, lpUserTime)
& ! & ! & ! & ! & ! & nbsp FileTimeToLocalFileTime(lpCreationTime, lpLocalFileTime)
& ! & ! & ! & ! & ! & nbsp //Obtenir le noyau de l'heure et le format
& ! & ! & ! & ! & ! & nbsp FileTimeToSystemTime(lpKernelTime, lpSystemTime)
& ! & ! & ! & ! & ! & nbsp KernelDay := lpSystemTime.wDay
& ! & ! & ! & ! & ! & nbsp KernelTime := SystemTimeToDateTime(lpSystemTime)
& ! & ! & ! & ! & ! & nbsp Resultat := TimeToStr(KernelTime)
& ! & ! & ! & ! & ! & nbsp strHours := Copy(Resultat, 1, Pos(':', Result) - 1)
& ! & ! & ! & ! & ! & nbsp Supprimer(Resultat, 1, Pos(':', Result) - 1)
& ! & ! & ! & ! & ! & nbsp Cellules[3, nombre de lignes - 1] := IntToStr(((KernelDay - 1) * 24)
& ! & ! & ! & ! & ! & ! & ! & nbsp StrToInt(strHours)) Resultat
& ! & ! & ! & ! & ! & nbsp //Obtenir le temps de l'utilisateur et le format
& ! & ! & ! & ! & ! & nbsp FileTimeToSystemTime(lpUserTime, lpSystemTime)
& ! & ! & ! & ! & ! & nbsp UserDay := lpSystemTime.wDay
& ! & ! & ! & ! & ! & nbsp UserTime := SystemTimeToDateTime(lpSystemTime)
& ! & ! & ! & ! & ! & nbsp Resultat := TimeToStr(UserTime)
& ! & ! & ! & ! & ! & nbsp strHours := Copy(Resultat, 1, Pos(':', Result) - 1)
& ! & ! & ! & ! & ! & nbsp Supprimer(Resultat, 1, Pos(':', Result) - 1)
& ! & ! & ! & ! & ! & nbsp Cellules[4, nombre de lignes - 1] := IntToStr(((UserDay - 1) * 24)
& ! & ! & ! & ! & ! & ! - nbsp & nbsp StrToInt(strHours)) Resultat //TimeToStr(UserTime)
& ! & ! & ! & ! & ! & nbsp //Calculer le temps de calcul et le format
& ! & ! & ! & ! & ! & nbsp Resultat := TimeToStr(UserTime KernelTime)
& ! & ! & ! & ! & ! & nbsp strHours := Copy(Resultat, 1, Pos(':', Result) - 1)
& ! & ! & ! & ! & ! & nbsp Supprimer(Resultat, 1, Pos(':', Result) - 1)
& ! & ! & ! & ! & ! & nbsp Cellules[2, nombre de lignes - 1] := IntToStr(((UserDay - KernelDay) * 24)
& ! & ! & ! & ! & ! & ! & ! & nbsp StrToInt(strHours)) Resultat
& ! & ! & ! & nbsp enfin
& ! & ! & ! & ! & ! & nbsp CloseHandle(PH)
& ! & ! & ! & nbsp fin
fin

procedure TggProcessViewer.KillSelectedProcess
var
& nbsp & nbsp PH : THandle
& nbsp & nbsp lpExitCode : DWord
& nbsp & nbsp hProcess : le Cardinal
begin
& nbsp & nbsp hProcess := StrToInt64(Cellules[1, Ligne])
& nbsp & nbsp PH := OpenProcess(PROCESS_TERMINATE ou PROCESS_QUERY_INFORMATION,
& ! & ! & ! & nbsp FAUX, hProcess)
& nbsp & nbsp si PH <> 0 then
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & nbsp si GetExitCodeProcess(PH, lpExitCode) puis
& ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si MessageBox(Poignee, PChar('voulez-vous vraiment m'essayer'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ' pour tuer ce processus ?'), 'S'il vous plaît Confirmer',
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp MB_YESNO) = mrYES puis
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp TerminateProcess(PH, lpExitCode)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp MessageBox(Poignee, PChar('devrait etre mort maintenant...'),
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp PChar ('Check it out...'), MB_OK)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & nbsp else
& ! & ! & ! & ! & ! & ! & ! & nbsp MessageBox(Poignee, PChar ('impossible de recuperer les ExitCode'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ' pour ce processus.' #13 #13
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp SysErrorMessage(GetLastError)),
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp PChar ('quelque Chose s'est mal passe...'), MB_OK)
& ! & ! & ! & ! & ! & nbsp CloseHandle(PH)
& ! & ! & ! & nbsp fin
& nbsp & nbsp else
& ! & ! & ! & nbsp MessageBox(Poignee, PChar('ne Pouvait pas avoir acces a ce processus'.
& ! & ! & ! & ! & ! & ! #13 #13 SysErrorMessage(GetLastError)),
& ! & ! & ! & ! & ! & nbsp PChar ('quelque Chose s'est mal passe...'), MB_OK) Actualiser
fin

procedure TggProcessViewer.Actualiser
begin
& nbsp & nbsp si affecte(FBeforeRefreshProcesses) et non
& ! & ! & ! & nbsp (csLoading dans ComponentState)
& ! & ! & ! & nbsp FBeforeRefreshProcesses(Auto)
& nbsp & nbsp GetProcesses
& nbsp & nbsp si affecte(FAfterRefreshProcesses) et non
& ! & ! & ! & nbsp (csLoading dans ComponentState) puis
& ! & ! & ! & nbsp FAfterRefreshProcesses(Auto)
fin

fonction de TggProcessViewer.SetProcessCount: integer
begin
& nbsp & nbsp Resultat := FProcessCount
fin

procedure TggProcessViewer.GetProcessCount(const Value: integer)
begin
& nbsp & nbsp FProcessCount := nombre de lignes - 1
fin

procedure TggProcessViewer.SetAutoRefresh(const Value: boolean)
begin
& nbsp & nbsp FAutoRefresh := Valeur
& nbsp & nbsp RefreshTimer.Enabled := FAutoRefresh
fin

destructeur TggProcessViewer.Detruire
begin
& nbsp & nbsp FreeAndNil(RefreshTimer)
& nbsp & nbsp herite
fin

procedure TggProcessViewer.TimerAutoRefresh(Sender: TObject)
begin
& nbsp & nbsp RefreshTimer.OnTimer := NIL
& nbsp & nbsp Actualiser
& nbsp & nbsp RefreshTimer.OnTimer := TimerAutoRefresh
fin

procedure TggProcessViewer.GetProcessesOnWinXX
var
& nbsp & nbsp aHandle : THandle
& nbsp & nbsp FoundOne : bool
& nbsp & nbsp ProcessEntry32 : TProcessEntry32
& nbsp & nbsp ExeFile : string
& nbsp & nbsp J,
& nbsp & nbsp ColBeforeRefresh : integer
& nbsp & nbsp PIDContentsBeforeRefresh : string
& nbsp & nbsp PriorityClass : DWord
begin
& nbsp & nbsp ColBeforeRefresh := Col
& nbsp & nbsp PIDContentsBeforeRefresh := Cells[1, Ligne]
& nbsp & nbsp Effectuer(WM_SETREDRAW, 0, 0)
& nbsp & nbsp essayer
& ! & ! & ! & nbsp InitGridForWinXX
& ! & ! & ! & nbsp aHandle := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0)
& ! & ! & ! & nbsp si aHandle <> 0 then
& ! & ! & ! & ! & ! & nbsp essayer
& ! & ! & ! & ! & ! & ! & ! & nbsp ProcessEntry32.dwSize := SizeOf(TProcessEntry32)
& ! & ! & ! & ! & ! & ! & ! & nbsp FoundOne := process32first une seule(aHandle, ProcessEntry32)
& ! & ! & ! & ! & ! & ! & ! & nbsp tandis que FoundOne ne
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ExeFile := ProcessEntry32.szExeFile
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Cellules[0, nombre de lignes - 1] := ExtractFileName(ExeFile)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Cellules[1, nombre de lignes - 1] := IntToStr(ProcessEntry32.th32ProcessID)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp PriorityClass := GetPriorityClass(ProcessEntry32.th32ProcessID)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp si PriorityClass <> 0 then
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp cas PriorityClass de
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp & nbsp & nbsp HIGH_PRIORITY_CLASS: les Cellules[2, nombre de lignes - 1] := 'Haut'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp IDLE_PRIORITY_CLASS: les Cellules[2, nombre de lignes - 1] := 'Inactif'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp NORMAL_PRIORITY_CLASS: les Cellules[2, nombre de lignes - 1] := 'Normal'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp REALTIME_PRIORITY_CLASS : les Cellules[2, Nombre de lignes - 1] := 'en temps reel'
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp & nbsp else
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Cellules[2, nombre de lignes - 1] := IntToStr(ProcessEntry32.pcPriClassBase)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Cellules[3, nombre de lignes - 1] := ExtractFilePath(ExeFile)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp RowCount := Nombre de lignes 1
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp ProcessEntry32.dwSize := SizeOf(TProcessEntry32)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp FoundOne := Process32Next(aHandle, ProcessEntry32)
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & ! & ! & nbsp enfin
& ! & ! & ! & ! & ! & ! & ! & nbsp CloseHandle(ahandle)
& ! & ! & ! & ! & ! & nbsp fin
& ! & ! & ! & nbsp si RowCount > 2
& ! & ! & ! & ! & ! & nbsp RowCount := nombre de lignes - 1
& ! & ! & ! & nbsp FProcessCount := nombre de lignes - 1
& ! & ! & ! & nbsp pour J := 1 a nombre de lignes - 1 do
& ! & ! & ! & ! & ! & nbsp si les Cellules[1, J] = PIDContentsBeforeRefresh puis
& ! & ! & ! & ! & ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Col := ColBeforeRefresh
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Ligne := J
& ! & ! & ! & ! & ! & ! & ! & ! & ! & nbsp Pause
& ! & ! & ! & ! & ! & ! & ! & nbsp fin
& nbsp & nbsp enfin
& ! & ! & ! & nbsp Effectuer(WM_SETREDRAW, 1, 0)
& ! & ! & ! & nbsp Invalider
& nbsp & nbsp fin
fin

procedure TggProcessViewer.Getprocesses
var
& nbsp & nbsp HandlePSAPI_DLL : THandle
begin
& nbsp & nbsp HandlePSAPI_DLL := LoadLibrary(cPSAPIDLL)
& nbsp & nbsp si (HandlePSAPI_DLL <> 0) alors //Ou sur NT/2000...
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & nbsp @EnumProcesses := GetProcAddress(HandlePSAPI_DLL, 'EnumProcesses')
& ! & ! & ! & ! & ! & nbsp @GetModuleBaseNameA := GetProcAddress(HandlePSAPI_DLL, 'GetModuleBaseNameA')
& ! & ! & ! & ! & ! & nbsp @GetModuleFileNameExA := GetProcAddress(HandlePSAPI_DLL, 'GetModuleFileNameExA')
& ! & ! & ! & ! & ! & nbsp @EnumProcessModules := GetProcAddress(HandlePSAPI_DLL, 'EnumProcessModules')
& ! & ! & ! & ! & ! & nbsp GetProcessesOnNT
& ! & ! & ! & ! & ! & nbsp FreeLibrary(HandlePSAPI_DLL)
& ! & ! & ! & nbsp fin
& nbsp & nbsp else //Ou sur Win95/98/ME
& ! & ! & ! & nbsp GetProcessesOnWinXX
fin

a la fin.


L'observateur de processus composant

L'observateur de processus composant : Plusieurs milliers de conseils pour vous faciliter la vie.
Recommander aux amis
  • gplus
  • pinterest

Messages récents

Commentaire

Laisser un commentaire

évaluation