Article View: be.comp.programming
Article #13462Re: Win32API - Path van draaiende EXE's zien in Win2k ?
From: Luc Kumps
Date: Sat, 14 Jul 2001 07:36
Date: Sat, 14 Jul 2001 07:36
130 lines
4780 bytes
4780 bytes
1. Haal de process IDs op met EnumProcesses
2. Open elk proces met flag PROCESS_QUERY_INFORMATION | PROCESS_VM_READ
3. EnumProcessModules
4. Vind de filenaam m.b.v. GetModuleFileNameEx(), waarbij je de handle van
de eerste module doorgeeft
Hieronder vind je de code in C
Luc
#include <windows.h>
#include <stdio.h>
#include <psapi.h>
void main(void) {
DWORD pIds[5000];
DWORD cbNeeded;
if (!EnumProcesses(pIds, sizeof(pIds), &cbNeeded)) {
printf("EnumProcesses returned %d\n", GetLastError());
exit(1);
}
int numProcs;
printf("%d processes returned\n", numProcs=cbNeeded/sizeof(DWORD));
for (int i=0;i<numProcs;i++) {
printf("Process ID %d ---", pIds[i]);
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ , false, pIds[i]);
if (hProcess==NULL) {
printf("OpenProcess returned %d\n", GetLastError());
continue;
}
HMODULE hModules[5000];
if (!EnumProcessModules(hProcess, hModules, sizeof(hModules),
&cbNeeded)) {
printf("EnumProcessModules returned %d\n", GetLastError());
CloseHandle(hProcess);
continue;
}
char fileName[5000];
if (!GetModuleFileNameEx(hProcess, hModules[0], fileName,
sizeof(fileName))) {
printf("GetModuleFileNameEx returned %d\n", GetLastError());
exit(1);
}
printf("%s\n", fileName);
}
}
"BuiZe" <news@buize.cjb.net> wrote in message
news:lzS37.6808$Xy1.1294140@afrodite.telenet-ops.be...
> Met onderstaande code enum ik de EXE-name van alle lopende programma's.
> In Win9x krijg ik dan volledig path + filename te zien, bijvoorbeeld :
> c:\windows\explorer.exe
>
> In Windows 2000 echter krijg ik enkel de EXE-name te zien:
> explorer.exe
>
> Is er *een* manier om toch het path te zien van die EXE's ?
>
> Dank bij voorbaat,
>
> BuiZe
>
>
> '----------------------------------------------
>
> Const MAX_PATH& = 260
>
> 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
>
> Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias
> "CreateToolhelp32Snapshot" (ByVal lFlags As Long, lProcessID As Long) As
> Long
>
> Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As
Long
>
> Declare Function ProcessFirst Lib "kernel32" Alias "Process32First" (ByVal
> hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
>
> Declare Function ProcessNext Lib "kernel32" Alias "Process32Next" (ByVal
> hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
>
> '----------------------------------------------
>
> Sub EnumPrograms()
>
> Dim uProcess As PROCESSENTRY32
> Dim rProcessFound As Long
> Dim hSnapshot As Long
> Dim szExename As String
> Dim i As Integer
>
> Const TH32CS_SNAPPROCESS As Long = 2&
>
> uProcess.dwSize = Len(uProcess)
>
> hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
>
> rProcessFound = ProcessFirst(hSnapshot, uProcess)
>
> Do While rProcessFound
> i = InStr(1, uProcess.szexeFile, Chr(0))
> szExename = LCase$(Left$(uProcess.szexeFile, i - 1))
> List1.AddItem (szExename)
> rProcessFound = ProcessNext(hSnapshot, uProcess)
> Loop
>
> Call CloseHandle(hSnapshot)
>
>
> End Sub
>
> '----------------------------------------------
>
>
Technical Details
Message-ID:
<QDS37.6815$Xy1.1294932@afrodite.telenet-ops.be>Path:
arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!sn-xit-02!supernews.com!news.tele.dk!193.190.198.17!newsfeeds.belnet.be!news.belnet.be!afrodite.telenet-ops.be!not-for-mailReferences:
<lzS37.6808$Xy1.1294140@afrodite.telenet-ops.be>Show Full Headers
Complete Article Headers
X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 107324,25c10eea564a11e5 X-Google-Attributes: gid107324,public X-Google-Thread: fcea4,25c10eea564a11e5 X-Google-Attributes: gidfcea4,public X-Google-ArrivalTime: 2001-07-14 00:38:27 PST Path: arc1-ca.pugleaf.net!archiver1.google.com!newsfeed.google.com!sn-xit-02!supernews.com!news.tele.dk!193.190.198.17!newsfeeds.belnet.be!news.belnet.be!afrodite.telenet-ops.be!not-for-mail From: "Luc Kumps" <NOkumpsSPAM@pandora.be> Newsgroups: be.comp.programming,nl.comp.programmeren References: <lzS37.6808$Xy1.1294140@afrodite.telenet-ops.be> Subject: Re: Win32API - Path van draaiende EXE's zien in Win2k ? Lines: 132 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 5.50.4133.2400 X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4133.2400 Message-ID: <QDS37.6815$Xy1.1294932@afrodite.telenet-ops.be> Date: Sat, 14 Jul 2001 07:36:16 GMT NNTP-Posting-Host: 213.118.65.188 X-Complaints-To: abuse@pandora.be X-Trace: afrodite.telenet-ops.be 995096176 213.118.65.188 (Sat, 14 Jul 2001 09:36:16 MET DST) NNTP-Posting-Date: Sat, 14 Jul 2001 09:36:16 MET DST Organization: Telenet Internet