Tasklist

gfilbb Messages postés 3 Date d'inscription dimanche 9 mai 2004 Statut Membre Dernière intervention 11 mai 2004 - 9 mai 2004 à 14:23
gfilbb Messages postés 3 Date d'inscription dimanche 9 mai 2004 Statut Membre Dernière intervention 11 mai 2004 - 11 mai 2004 à 09:44
Salut à tous !

Est-ce quelqu'un saurait comment récupérer dans un fichier-texte la tasklist des programmes en cours d'exécution, comme celle qui apparaît quand on fait "CTRL+ALT+DEL" ??

Merci d'avance !

4 réponses

cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
9 mai 2004 à 15:48
Salut, j'ai un truc, c pas de moi et je ne sais plus ou je l'ai trouvé mais je m'en sers et merci à celui (ou celle) qui l'a codé en prem.

D'abord, tu te crées un module ou te mets ce qui suit :

Public Declare Function Process32First Lib "kernel32" ( _
ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long

Public Declare Function Process32Next Lib "kernel32" ( _
ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long

Public Declare Function CloseHandle Lib "Kernel32.dll" _
(ByVal Handle As Long) As Long

Public Declare Function OpenProcess Lib "Kernel32.dll" _
(ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, _
ByVal dwProcId As Long) As Long

Public Declare Function EnumProcesses Lib "psapi.dll" _
(ByRef lpidProcess As Long, ByVal cb As Long, _
ByRef cbNeeded As Long) As Long

Public Declare Function GetModuleFileNameExA Lib "psapi.dll" _
(ByVal hProcess As Long, ByVal hModule As Long, _
ByVal ModuleName As String, ByVal nSize As Long) As Long

Public Declare Function EnumProcessModules Lib "psapi.dll" _
(ByVal hProcess As Long, ByRef lphModule As Long, _
ByVal cb As Long, ByRef cbNeeded As Long) As Long

Public Declare Function CreateToolhelp32Snapshot Lib "kernel32" ( _
ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long

Public Declare Function GetVersionExA Lib "kernel32" _
(lpVersionInformation As OSVERSIONINFO) As Integer

Public 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 * 260
End Type

Public Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long


szCSDVersion As String * 128
End Type

Public Const PROCESS_QUERY_INFORMATION = 1024
Public Const PROCESS_VM_READ = 16
Public Const MAX_PATH = 260
Public Const STANDARD_RIGHTS_REQUIRED = &HF0000
Public Const SYNCHRONIZE = &H100000

Public Const PROCESS_ALL_ACCESS = &H1F0FFF
Public Const TH32CS_SNAPPROCESS = &H2&
Public Const hNull = 0

Function StrZToStr(s As String) As String
StrZToStr = Left$(s, Len(s) - 1)
End Function

Public Function getVersion() As Long
Dim osinfo As OSVERSIONINFO
Dim retvalue As Integer
osinfo.dwOSVersionInfoSize = 148
osinfo.szCSDVersion = Space$(128)
retvalue = GetVersionExA(osinfo)
getVersion = osinfo.dwPlatformId
End Function

Ensuite, tu te crées une form avec une listbox (list1) et 2 boutons (cmdEnum et cmdQuit) et tu y mets ça :

Private Sub cmdEnum_Click()
List1.Clear

Select Case getVersion()

Case 1

Dim f As Long
Dim sname As String
Dim hSnap As Long
Dim proc As PROCESSENTRY32
hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
If hSnap = hNull Then Exit Sub
proc.dwSize = Len(proc)

f = Process32First(hSnap, proc)
Do While f
sname = StrZToStr(proc.szExeFile)
List1.AddItem sname
f = Process32Next(hSnap, proc)
Loop

Case 2
Dim cb As Long
Dim cbNeeded As Long
Dim NumElements As Long
Dim ProcessIDs() As Long
Dim cbNeeded2 As Long
Dim NumElements2 As Long
Dim Modules(1 To 200) As Long
Dim lRet As Long
Dim ModuleName As String
Dim nSize As Long
Dim hProcess As Long
Dim i As Long

cb = 8
cbNeeded = 96
Do While cb <= cbNeeded
cb = cb * 2
ReDim ProcessIDs(cb / 4) As Long
lRet = EnumProcesses(ProcessIDs(1), cb, cbNeeded)
Loop
NumElements = cbNeeded / 4

For i = 1 To NumElements

hProcess = OpenProcess(PROCESS_QUERY_INFORMATION _
Or PROCESS_VM_READ, 0, ProcessIDs(i))

If hProcess <> 0 Then

lRet = EnumProcessModules(hProcess, Modules(1), 200, _
cbNeeded2)

If lRet <> 0 Then
ModuleName = Space(MAX_PATH)
nSize = 500
lRet = GetModuleFileNameExA(hProcess, Modules(1), _
ModuleName, nSize)
List1.AddItem Left(ModuleName, lRet)
End If
End If

lRet = CloseHandle(hProcess)
Next

End Select
End Sub

Private Sub cmdQuit_Click()
End
End Sub

Tu exécutes et tu vois le résultat. Je te laisse le soin de rediriger le résultat vers un fichier plutot que vers la listbox.
Ca marche avec W95, W98 et WXP.

Bonne prog

Cordialement

CanisLupus
0
gfilbb Messages postés 3 Date d'inscription dimanche 9 mai 2004 Statut Membre Dernière intervention 11 mai 2004
9 mai 2004 à 17:59
Merci pour le tuyau ! je vais l'essayer à part et ensuite l'inclure dans mon projet !
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
9 mai 2004 à 18:32
Pas de quoi,
Remercie plutot l'illustre inconnu(e) qui l'a pondu avant moi.
Mais, comme c libre de droits tu peux l'adapter comme tu veux.

Cordialement

CanisLupus
0
gfilbb Messages postés 3 Date d'inscription dimanche 9 mai 2004 Statut Membre Dernière intervention 11 mai 2004
11 mai 2004 à 09:44
Merci à CanisLupus !!

le source indiqué me fournit en un clin d'oeil une liste des taches en cours avec en prime leurs path, que je copie dans un fichier et qui sont alors directement utilisables dans mon programme .

Bref, exactement ce que je cherchais :-)
0
Rejoignez-nous