begin process at 2010 03 16 16:36:06
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

API

 > 

Comment retrouver le path en ayant que le nom du fichier


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Comment retrouver le path en ayant que le nom du fichier

mardi 8 juillet 2003 à 15:38:46 | Comment retrouver le path en ayant que le nom du fichier

Xentor609

salut!
Je cherche à retrouver le path en ayant que le nom du ficher qui est mémoire, cad en execution !
Avec les process, je n'obtiens que le nom du fichier (par exemple, winlogon.exe).
J'ai déjà essayé avec GetModuleFileName, mais il faut le HMODULE correspondant. J'ai donc utilisé GetModuleHandle mais il faut le chemin d'accès au complet !

Quelqu'un pourrait m'aider?

D'avance merci pour vos réponses !

Xentor609
mardi 8 juillet 2003 à 15:56:52 | Re : Comment retrouver le path en ayant que le nom du fichier

BruNews

Administrateur CodeS-SourceS
le nom du ficher en memoire qui tourne, tu l'as eu comment ?
C'est au moment ou tu recup cela qu'il faut aussi soit le HMODULE, soit le processid ou un truc qui l'identifie de maniere unique.
BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

> salut!
> Je cherche à retrouver le path en ayant que le nom du ficher qui est mémoire, cad en execution !
> Avec les process, je n'obtiens que le nom du fichier (par exemple, winlogon.exe).
> J'ai déjà essayé avec GetModuleFileName, mais il faut le HMODULE correspondant. J'ai donc utilisé GetModuleHandle mais il faut le chemin d'accès au complet !
>
> Quelqu'un pourrait m'aider?
>
> D'avance merci pour vos réponses !
>
> Xentor609
mardi 8 juillet 2003 à 16:31:50 | Re : Comment retrouver le path en ayant que le nom du fichier

Xentor609

voila, comment je recupere le filename de l'exe en memoire


...
PROCESSENTRY32 pe32 = {0};
...
pe32.szExeFile //ici
...


Le prob, comme je l'ai dit c'est qu'il ne me donne que le nom de l'exe et pas le chemin d'acces complet.
Comment faire?

-------------------------------
Réponse au message :
-------------------------------

> le nom du ficher en memoire qui tourne, tu l'as eu comment ?
> C'est au moment ou tu recup cela qu'il faut aussi soit le HMODULE, soit le processid ou un truc qui l'identifie de maniere unique.
> BruNews, ciao...
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > salut!
> > Je cherche à retrouver le path en ayant que le nom du ficher qui est mémoire, cad en execution !
> > Avec les process, je n'obtiens que le nom du fichier (par exemple, winlogon.exe).
> > J'ai déjà essayé avec GetModuleFileName, mais il faut le HMODULE correspondant. J'ai donc utilisé GetModuleHandle mais il faut le chemin d'accès au complet !
> >
> > Quelqu'un pourrait m'aider?
> >
> > D'avance merci pour vos réponses !
> >
> > Xentor609
>
mardi 8 juillet 2003 à 16:40:21 | Re : Comment retrouver le path en ayant que le nom du fichier

BruNews

Administrateur CodeS-SourceS
fais un essai avec le membre th32ParentProcessID pour GetModuleFilename.
BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

> voila, comment je recupere le filename de l'exe en memoire
>
>

> ...
> PROCESSENTRY32 pe32 = {0};
> ...
> pe32.szExeFile //ici
> ...
>

>
> Le prob, comme je l'ai dit c'est qu'il ne me donne que le nom de l'exe et pas le chemin d'acces complet.
> Comment faire?
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > le nom du ficher en memoire qui tourne, tu l'as eu comment ?
> > C'est au moment ou tu recup cela qu'il faut aussi soit le HMODULE, soit le processid ou un truc qui l'identifie de maniere unique.
> > BruNews, ciao...
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > salut!
> > > Je cherche à retrouver le path en ayant que le nom du ficher qui est mémoire, cad en execution !
> > > Avec les process, je n'obtiens que le nom du fichier (par exemple, winlogon.exe).
> > > J'ai déjà essayé avec GetModuleFileName, mais il faut le HMODULE correspondant. J'ai donc utilisé GetModuleHandle mais il faut le chemin d'accès au complet !
> > >
> > > Quelqu'un pourrait m'aider?
> > >
> > > D'avance merci pour vos réponses !
> > >
> > > Xentor609
> >
>
mardi 8 juillet 2003 à 18:56:49 | Re : Comment retrouver le path en ayant que le nom du fichier

Xentor609

j'ai essayé mais ca ne donne rien


HMODULE hModule=(HMODULE)pe32.th32ParentProcessID;
szPath[256]="";
GetModuleFileName(hModule,szPath,sizeof(szPath));

szPath est vide !

Où est le problème ?

-------------------------------
Réponse au message :
-------------------------------

> fais un essai avec le membre th32ParentProcessID pour GetModuleFilename.
> BruNews, ciao...
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > voila, comment je recupere le filename de l'exe en memoire
> >
> >

> > ...
> > PROCESSENTRY32 pe32 = {0};
> > ...
> > pe32.szExeFile //ici
> > ...
> >

> >
> > Le prob, comme je l'ai dit c'est qu'il ne me donne que le nom de l'exe et pas le chemin d'acces complet.
> > Comment faire?
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > le nom du ficher en memoire qui tourne, tu l'as eu comment ?
> > > C'est au moment ou tu recup cela qu'il faut aussi soit le HMODULE, soit le processid ou un truc qui l'identifie de maniere unique.
> > > BruNews, ciao...
> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > salut!
> > > > Je cherche à retrouver le path en ayant que le nom du ficher qui est mémoire, cad en execution !
> > > > Avec les process, je n'obtiens que le nom du fichier (par exemple, winlogon.exe).
> > > > J'ai déjà essayé avec GetModuleFileName, mais il faut le HMODULE correspondant. J'ai donc utilisé GetModuleHandle mais il faut le chemin d'accès au complet !
> > > >
> > > > Quelqu'un pourrait m'aider?
> > > >
> > > > D'avance merci pour vos réponses !
> > > >
> > > > Xentor609
> > >
> >
>
mardi 8 juillet 2003 à 19:12:58 | Re : Comment retrouver le path en ayant que le nom du fichier

BruNews

Administrateur CodeS-SourceS
VOILA le MSDN:
#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>

BOOL GetProcessList ()
{
HANDLE hProcessSnap = NULL;
BOOL bRet = FALSE;
PROCESSENTRY32 pe32 = {0};

// Take a snapshot of all processes in the system.

hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

if (hProcessSnap == INVALID_HANDLE_VALUE)
return (FALSE);

// Fill in the size of the structure before using it.

pe32.dwSize = sizeof(PROCESSENTRY32);

// Walk the snapshot of the processes, and for each process,
// display information.

if (Process32First(hProcessSnap, &pe32))
{
DWORD dwPriorityClass;
BOOL bGotModule = FALSE;
MODULEENTRY32 me32 = {0};

do
{
bGotModule = GetProcessModule(pe32.th32ProcessID,
pe32.th32ModuleID, &me32, sizeof(MODULEENTRY32));

if (bGotModule)
{
HANDLE hProcess;

// Get the actual priority class.
hProcess = OpenProcess (PROCESS_ALL_ACCESS,
FALSE, pe32.th32ProcessID);
dwPriorityClass = GetPriorityClass (hProcess);
CloseHandle (hProcess);

// Print the process's information.
printf( "\nPriority Class Base\t%d\n",
pe32.pcPriClassBase);
printf( "PID\t\t\t%d\n", pe32.th32ProcessID);
printf( "Thread Count\t\t%d\n", pe32.cntThreads);
printf( "Module Name\t\t%s\n", me32.szModule);
printf( "Full Path\t\t%s\n\n", me32.szExePath);
}
}
while (Process32Next(hProcessSnap, &pe32));
bRet = TRUE;
}
else
bRet = FALSE; // could not walk the list of processes

// Do not forget to clean up the snapshot object.

CloseHandle (hProcessSnap);
return (bRet);
}

BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

> j'ai essayé mais ca ne donne rien
>
>

> HMODULE hModule=(HMODULE)pe32.th32ParentProcessID;
> szPath[256]="";
> GetModuleFileName(hModule,szPath,sizeof(szPath));
>

> szPath est vide !
>
> Où est le problème ?
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > fais un essai avec le membre th32ParentProcessID pour GetModuleFilename.
> > BruNews, ciao...
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > voila, comment je recupere le filename de l'exe en memoire
> > >
> > >

> > > ...
> > > PROCESSENTRY32 pe32 = {0};
> > > ...
> > > pe32.szExeFile //ici
> > > ...
> > >

> > >
> > > Le prob, comme je l'ai dit c'est qu'il ne me donne que le nom de l'exe et pas le chemin d'acces complet.
> > > Comment faire?
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > le nom du ficher en memoire qui tourne, tu l'as eu comment ?
> > > > C'est au moment ou tu recup cela qu'il faut aussi soit le HMODULE, soit le processid ou un truc qui l'identifie de maniere unique.
> > > > BruNews, ciao...
> > > >
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > > salut!
> > > > > Je cherche à retrouver le path en ayant que le nom du ficher qui est mémoire, cad en execution !
> > > > > Avec les process, je n'obtiens que le nom du fichier (par exemple, winlogon.exe).
> > > > > J'ai déjà essayé avec GetModuleFileName, mais il faut le HMODULE correspondant. J'ai donc utilisé GetModuleHandle mais il faut le chemin d'accès au complet !
> > > > >
> > > > > Quelqu'un pourrait m'aider?
> > > > >
> > > > > D'avance merci pour vos réponses !
> > > > >
> > > > > Xentor609
> > > >
> > >
> >
>
mardi 8 juillet 2003 à 19:34:39 | Re : Comment retrouver le path en ayant que le nom du fichier

Xentor609

J'ai déjà pris ce code dans MSDN, et il ne marche pas.


#include <windows.h>
#include <tlhelp32.h>
#include <stdio.h>

BOOL GetProcessModule (DWORD dwPID, DWORD dwModuleID,
LPMODULEENTRY32 lpMe32, DWORD cbMe32)
{
BOOL bRet = FALSE;
BOOL bFound = FALSE;
HANDLE hModuleSnap = NULL;
MODULEENTRY32 me32 = {0};

// Take a snapshot of all modules in the specified process.

hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID);
if (hModuleSnap == (HANDLE)-1)
return (FALSE);

// Fill the size of the structure before using it.

me32.dwSize = sizeof(MODULEENTRY32);

// Walk the module list of the process, and find the module of
// interest. Then copy the information to the buffer pointed
// to by lpMe32 so that it can be returned to the caller.

if (Module32First(hModuleSnap, &me32))
{
do
{
if (me32.th32ModuleID == dwModuleID)
{
CopyMemory (lpMe32, &me32, cbMe32);
bFound = TRUE;
}
}
while (!bFound && Module32Next(hModuleSnap, &me32));

bRet = bFound; // if this sets bRet to FALSE, dwModuleID
// no longer exists in specified process
}
else
bRet = FALSE; // could not walk module list

// Do not forget to clean up the snapshot object.

CloseHandle (hModuleSnap);

return (bRet);
}

BOOL GetProcessList ()
{
HANDLE hProcessSnap = NULL;
BOOL bRet = FALSE;
PROCESSENTRY32 pe32 = {0};

// Take a snapshot of all processes in the system.

hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

if (hProcessSnap == (HANDLE)-1)
return (FALSE);

// Fill in the size of the structure before using it.

pe32.dwSize = sizeof(PROCESSENTRY32);

// Walk the snapshot of the processes, and for each process,
// display information.

if (Process32First(hProcessSnap, &pe32))
{
DWORD dwPriorityClass;
BOOL bGotModule = FALSE;
MODULEENTRY32 me32 = {0};

do
{
bGotModule = GetProcessModule(pe32.th32ProcessID,
pe32.th32ModuleID, &me32, sizeof(MODULEENTRY32));

if (bGotModule)
{
HANDLE hProcess;

// Get the actual priority class.
hProcess = OpenProcess (PROCESS_ALL_ACCESS,
FALSE, pe32.th32ProcessID);
dwPriorityClass = GetPriorityClass (hProcess);
CloseHandle (hProcess);

// Print the process's information.
printf( "\nPriority Class Base\t%d\n",
pe32.pcPriClassBase);
printf( "PID\t\t\t%d\n", pe32.th32ProcessID);
printf( "Thread Count\t\t%d\n", pe32.cntThreads);
printf( "Module Name\t\t%s\n", me32.szModule);
printf( "Full Path\t\t%s\n\n", me32.szExePath);
}
}
while (Process32Next(hProcessSnap, &pe32));
bRet = TRUE;
}
else
bRet = FALSE; // could not walk the list of processes

// Do not forget to clean up the snapshot object.

CloseHandle (hProcessSnap);
return (bRet);
}

void main(void)
{
GetProcessList();
}


Je l'ai debuggé, et dans GetProcessList, bGotModule vaut tout le temps 0, donc il ne m'affiche rien !
Dans GetProcessModule, hModuleSnap vaut 0x000007dc la première fois mais, plus bas, à cette condition "if (me32.th32ModuleID == dwModuleID)" il bloque, donc bFound=false et bien entendu, la fonction GetProcessModule retourne false. Quant aux autres fois, hModuleSnap vaut tout le temps 0xffffffff, ce qui implique que cette condition "if (hModuleSnap == (HANDLE)-1)" est vérifiée et que la fonction GetProcessModule revoie encore et toujours false.

Pourquoi le code de MSDN ne marche-t-il pas?
Est-ce que la version du Windows peut être un facteur de ce problème?
Je travaille sous Windows XP.

Merci de bien vouloir m'éclaicir!

Xentor609

-------------------------------
Réponse au message :
-------------------------------

> VOILA le MSDN:
> #include <windows.h>
> #include <tlhelp32.h>
> #include <stdio.h>
>
> BOOL GetProcessList ()
> {
> HANDLE hProcessSnap = NULL;
> BOOL bRet = FALSE;
> PROCESSENTRY32 pe32 = {0};
>
> // Take a snapshot of all processes in the system.
>
> hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
>
> if (hProcessSnap == INVALID_HANDLE_VALUE)
> return (FALSE);
>
> // Fill in the size of the structure before using it.
>
> pe32.dwSize = sizeof(PROCESSENTRY32);
>
> // Walk the snapshot of the processes, and for each process,
> // display information.
>
> if (Process32First(hProcessSnap, &pe32))
> {
> DWORD dwPriorityClass;
> BOOL bGotModule = FALSE;
> MODULEENTRY32 me32 = {0};
>
> do
> {
> bGotModule = GetProcessModule(pe32.th32ProcessID,
> pe32.th32ModuleID, &me32, sizeof(MODULEENTRY32));
>
> if (bGotModule)
> {
> HANDLE hProcess;
>
> // Get the actual priority class.
> hProcess = OpenProcess (PROCESS_ALL_ACCESS,
> FALSE, pe32.th32ProcessID);
> dwPriorityClass = GetPriorityClass (hProcess);
> CloseHandle (hProcess);
>
> // Print the process's information.
> printf( "\nPriority Class Base\t%d\n",
> pe32.pcPriClassBase);
> printf( "PID\t\t\t%d\n", pe32.th32ProcessID);
> printf( "Thread Count\t\t%d\n", pe32.cntThreads);
> printf( "Module Name\t\t%s\n", me32.szModule);
> printf( "Full Path\t\t%s\n\n", me32.szExePath);
> }
> }
> while (Process32Next(hProcessSnap, &pe32));
> bRet = TRUE;
> }
> else
> bRet = FALSE; // could not walk the list of processes
>
> // Do not forget to clean up the snapshot object.
>
> CloseHandle (hProcessSnap);
> return (bRet);
> }
>
> BruNews, ciao...
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > j'ai essayé mais ca ne donne rien
> >
> >

> > HMODULE hModule=(HMODULE)pe32.th32ParentProcessID;
> > szPath[256]="";
> > GetModuleFileName(hModule,szPath,sizeof(szPath));
> >

> > szPath est vide !
> >
> > Où est le problème ?
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > fais un essai avec le membre th32ParentProcessID pour GetModuleFilename.
> > > BruNews, ciao...
> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > voila, comment je recupere le filename de l'exe en memoire
> > > >
> > > >

> > > > ...
> > > > PROCESSENTRY32 pe32 = {0};
> > > > ...
> > > > pe32.szExeFile //ici
> > > > ...
> > > >

> > > >
> > > > Le prob, comme je l'ai dit c'est qu'il ne me donne que le nom de l'exe et pas le chemin d'acces complet.
> > > > Comment faire?
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > > le nom du ficher en memoire qui tourne, tu l'as eu comment ?
> > > > > C'est au moment ou tu recup cela qu'il faut aussi soit le HMODULE, soit le processid ou un truc qui l'identifie de maniere unique.
> > > > > BruNews, ciao...
> > > > >
> > > > >
> > > > > -------------------------------
> > > > > Réponse au message :
> > > > > -------------------------------
> > > > >
> > > > > > salut!
> > > > > > Je cherche à retrouver le path en ayant que le nom du ficher qui est mémoire, cad en execution !
> > > > > > Avec les process, je n'obtiens que le nom du fichier (par exemple, winlogon.exe).
> > > > > > J'ai déjà essayé avec GetModuleFileName, mais il faut le HMODULE correspondant. J'ai donc utilisé GetModuleHandle mais il faut le chemin d'accès au complet !
> > > > > >
> > > > > > Quelqu'un pourrait m'aider?
> > > > > >
> > > > > > D'avance merci pour vos réponses !
> > > > > >
> > > > > > Xentor609
> > > > >
> > > >
> > >
> >
>
mardi 8 juillet 2003 à 19:39:54 | Re : Comment retrouver le path en ayant que le nom du fichier

BruNews

Administrateur CodeS-SourceS
m'enerve ce truc, je teste, je te dis ensuite.
BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

> J'ai déjà pris ce code dans MSDN, et il ne marche pas.
>
>

> #include <windows.h>
> #include <tlhelp32.h>
> #include <stdio.h>
>
> BOOL GetProcessModule (DWORD dwPID, DWORD dwModuleID,
> LPMODULEENTRY32 lpMe32, DWORD cbMe32)
> {
> BOOL bRet = FALSE;
> BOOL bFound = FALSE;
> HANDLE hModuleSnap = NULL;
> MODULEENTRY32 me32 = {0};
>
> // Take a snapshot of all modules in the specified process.
>
> hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID);
> if (hModuleSnap == (HANDLE)-1)
> return (FALSE);
>
> // Fill the size of the structure before using it.
>
> me32.dwSize = sizeof(MODULEENTRY32);
>
> // Walk the module list of the process, and find the module of
> // interest. Then copy the information to the buffer pointed
> // to by lpMe32 so that it can be returned to the caller.
>
> if (Module32First(hModuleSnap, &me32))
> {
> do
> {
> if (me32.th32ModuleID == dwModuleID)
> {
> CopyMemory (lpMe32, &me32, cbMe32);
> bFound = TRUE;
> }
> }
> while (!bFound && Module32Next(hModuleSnap, &me32));
>
> bRet = bFound; // if this sets bRet to FALSE, dwModuleID
> // no longer exists in specified process
> }
> else
> bRet = FALSE; // could not walk module list
>
> // Do not forget to clean up the snapshot object.
>
> CloseHandle (hModuleSnap);
>
> return (bRet);
> }
>
> BOOL GetProcessList ()
> {
> HANDLE hProcessSnap = NULL;
> BOOL bRet = FALSE;
> PROCESSENTRY32 pe32 = {0};
>
> // Take a snapshot of all processes in the system.
>
> hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
>
> if (hProcessSnap == (HANDLE)-1)
> return (FALSE);
>
> // Fill in the size of the structure before using it.
>
> pe32.dwSize = sizeof(PROCESSENTRY32);
>
> // Walk the snapshot of the processes, and for each process,
> // display information.
>
> if (Process32First(hProcessSnap, &pe32))
> {
> DWORD dwPriorityClass;
> BOOL bGotModule = FALSE;
> MODULEENTRY32 me32 = {0};
>
> do
> {
> bGotModule = GetProcessModule(pe32.th32ProcessID,
> pe32.th32ModuleID, &me32, sizeof(MODULEENTRY32));
>
> if (bGotModule)
> {
> HANDLE hProcess;
>
> // Get the actual priority class.
> hProcess = OpenProcess (PROCESS_ALL_ACCESS,
> FALSE, pe32.th32ProcessID);
> dwPriorityClass = GetPriorityClass (hProcess);
> CloseHandle (hProcess);
>
> // Print the process's information.
> printf( "\nPriority Class Base\t%d\n",
> pe32.pcPriClassBase);
> printf( "PID\t\t\t%d\n", pe32.th32ProcessID);
> printf( "Thread Count\t\t%d\n", pe32.cntThreads);
> printf( "Module Name\t\t%s\n", me32.szModule);
> printf( "Full Path\t\t%s\n\n", me32.szExePath);
> }
> }
> while (Process32Next(hProcessSnap, &pe32));
> bRet = TRUE;
> }
> else
> bRet = FALSE; // could not walk the list of processes
>
> // Do not forget to clean up the snapshot object.
>
> CloseHandle (hProcessSnap);
> return (bRet);
> }
>
> void main(void)
> {
> GetProcessList();
> }
>

>
> Je l'ai debuggé, et dans GetProcessList, bGotModule vaut tout le temps 0, donc il ne m'affiche rien !
> Dans GetProcessModule, hModuleSnap vaut 0x000007dc la première fois mais, plus bas, à cette condition "if (me32.th32ModuleID == dwModuleID)" il bloque, donc bFound=false et bien entendu, la fonction GetProcessModule retourne false. Quant aux autres fois, hModuleSnap vaut tout le temps 0xffffffff, ce qui implique que cette condition "if (hModuleSnap == (HANDLE)-1)" est vérifiée et que la fonction GetProcessModule revoie encore et toujours false.
>
> Pourquoi le code de MSDN ne marche-t-il pas?
> Est-ce que la version du Windows peut être un facteur de ce problème?
> Je travaille sous Windows XP.
>
> Merci de bien vouloir m'éclaicir!
>
> Xentor609
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > VOILA le MSDN:
> > #include <windows.h>
> > #include <tlhelp32.h>
> > #include <stdio.h>
> >
> > BOOL GetProcessList ()
> > {
> > HANDLE hProcessSnap = NULL;
> > BOOL bRet = FALSE;
> > PROCESSENTRY32 pe32 = {0};
> >
> > // Take a snapshot of all processes in the system.
> >
> > hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
> >
> > if (hProcessSnap == INVALID_HANDLE_VALUE)
> > return (FALSE);
> >
> > // Fill in the size of the structure before using it.
> >
> > pe32.dwSize = sizeof(PROCESSENTRY32);
> >
> > // Walk the snapshot of the processes, and for each process,
> > // display information.
> >
> > if (Process32First(hProcessSnap, &pe32))
> > {
> > DWORD dwPriorityClass;
> > BOOL bGotModule = FALSE;
> > MODULEENTRY32 me32 = {0};
> >
> > do
> > {
> > bGotModule = GetProcessModule(pe32.th32ProcessID,
> > pe32.th32ModuleID, &me32, sizeof(MODULEENTRY32));
> >
> > if (bGotModule)
> > {
> > HANDLE hProcess;
> >
> > // Get the actual priority class.
> > hProcess = OpenProcess (PROCESS_ALL_ACCESS,
> > FALSE, pe32.th32ProcessID);
> > dwPriorityClass = GetPriorityClass (hProcess);
> > CloseHandle (hProcess);
> >
> > // Print the process's information.
> > printf( "\nPriority Class Base\t%d\n",
> > pe32.pcPriClassBase);
> > printf( "PID\t\t\t%d\n", pe32.th32ProcessID);
> > printf( "Thread Count\t\t%d\n", pe32.cntThreads);
> > printf( "Module Name\t\t%s\n", me32.szModule);
> > printf( "Full Path\t\t%s\n\n", me32.szExePath);
> > }
> > }
> > while (Process32Next(hProcessSnap, &pe32));
> > bRet = TRUE;
> > }
> > else
> > bRet = FALSE; // could not walk the list of processes
> >
> > // Do not forget to clean up the snapshot object.
> >
> > CloseHandle (hProcessSnap);
> > return (bRet);
> > }
> >
> > BruNews, ciao...
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > j'ai essayé mais ca ne donne rien
> > >
> > >

> > > HMODULE hModule=(HMODULE)pe32.th32ParentProcessID;
> > > szPath[256]="";
> > > GetModuleFileName(hModule,szPath,sizeof(szPath));
> > >

> > > szPath est vide !
> > >
> > > Où est le problème ?
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > fais un essai avec le membre th32ParentProcessID pour GetModuleFilename.
> > > > BruNews, ciao...
> > > >
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > > voila, comment je recupere le filename de l'exe en memoire
> > > > >
> > > > >

> > > > > ...
> > > > > PROCESSENTRY32 pe32 = {0};
> > > > > ...
> > > > > pe32.szExeFile //ici
> > > > > ...
> > > > >

> > > > >
> > > > > Le prob, comme je l'ai dit c'est qu'il ne me donne que le nom de l'exe et pas le chemin d'acces complet.
> > > > > Comment faire?
> > > > >
> > > > > -------------------------------
> > > > > Réponse au message :
> > > > > -------------------------------
> > > > >
> > > > > > le nom du ficher en memoire qui tourne, tu l'as eu comment ?
> > > > > > C'est au moment ou tu recup cela qu'il faut aussi soit le HMODULE, soit le processid ou un truc qui l'identifie de maniere unique.
> > > > > > BruNews, ciao...
> > > > > >
> > > > > >
> > > > > > -------------------------------
> > > > > > Réponse au message :
> > > > > > -------------------------------
> > > > > >
> > > > > > > salut!
> > > > > > > Je cherche à retrouver le path en ayant que le nom du ficher qui est mémoire, cad en execution !
> > > > > > > Avec les process, je n'obtiens que le nom du fichier (par exemple, winlogon.exe).
> > > > > > > J'ai déjà essayé avec GetModuleFileName, mais il faut le HMODULE correspondant. J'ai donc utilisé GetModuleHandle mais il faut le chemin d'accès au complet !
> > > > > > >
> > > > > > > Quelqu'un pourrait m'aider?
> > > > > > >
> > > > > > > D'avance merci pour vos réponses !
> > > > > > >
> > > > > > > Xentor609
> > > > > >
> > > > >
> > > >
> > >
> >
>
mardi 8 juillet 2003 à 19:46:07 | Re : Comment retrouver le path en ayant que le nom du fichier

BruNews

Administrateur CodeS-SourceS
Bon c'est fait, je te le mail.
BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

> J'ai déjà pris ce code dans MSDN, et il ne marche pas.
>
>

> #include <windows.h>
> #include <tlhelp32.h>
> #include <stdio.h>
>
> BOOL GetProcessModule (DWORD dwPID, DWORD dwModuleID,
> LPMODULEENTRY32 lpMe32, DWORD cbMe32)
> {
> BOOL bRet = FALSE;
> BOOL bFound = FALSE;
> HANDLE hModuleSnap = NULL;
> MODULEENTRY32 me32 = {0};
>
> // Take a snapshot of all modules in the specified process.
>
> hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID);
> if (hModuleSnap == (HANDLE)-1)
> return (FALSE);
>
> // Fill the size of the structure before using it.
>
> me32.dwSize = sizeof(MODULEENTRY32);
>
> // Walk the module list of the process, and find the module of
> // interest. Then copy the information to the buffer pointed
> // to by lpMe32 so that it can be returned to the caller.
>
> if (Module32First(hModuleSnap, &me32))
> {
> do
> {
> if (me32.th32ModuleID == dwModuleID)
> {
> CopyMemory (lpMe32, &me32, cbMe32);
> bFound = TRUE;
> }
> }
> while (!bFound && Module32Next(hModuleSnap, &me32));
>
> bRet = bFound; // if this sets bRet to FALSE, dwModuleID
> // no longer exists in specified process
> }
> else
> bRet = FALSE; // could not walk module list
>
> // Do not forget to clean up the snapshot object.
>
> CloseHandle (hModuleSnap);
>
> return (bRet);
> }
>
> BOOL GetProcessList ()
> {
> HANDLE hProcessSnap = NULL;
> BOOL bRet = FALSE;
> PROCESSENTRY32 pe32 = {0};
>
> // Take a snapshot of all processes in the system.
>
> hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
>
> if (hProcessSnap == (HANDLE)-1)
> return (FALSE);
>
> // Fill in the size of the structure before using it.
>
> pe32.dwSize = sizeof(PROCESSENTRY32);
>
> // Walk the snapshot of the processes, and for each process,
> // display information.
>
> if (Process32First(hProcessSnap, &pe32))
> {
> DWORD dwPriorityClass;
> BOOL bGotModule = FALSE;
> MODULEENTRY32 me32 = {0};
>
> do
> {
> bGotModule = GetProcessModule(pe32.th32ProcessID,
> pe32.th32ModuleID, &me32, sizeof(MODULEENTRY32));
>
> if (bGotModule)
> {
> HANDLE hProcess;
>
> // Get the actual priority class.
> hProcess = OpenProcess (PROCESS_ALL_ACCESS,
> FALSE, pe32.th32ProcessID);
> dwPriorityClass = GetPriorityClass (hProcess);
> CloseHandle (hProcess);
>
> // Print the process's information.
> printf( "\nPriority Class Base\t%d\n",
> pe32.pcPriClassBase);
> printf( "PID\t\t\t%d\n", pe32.th32ProcessID);
> printf( "Thread Count\t\t%d\n", pe32.cntThreads);
> printf( "Module Name\t\t%s\n", me32.szModule);
> printf( "Full Path\t\t%s\n\n", me32.szExePath);
> }
> }
> while (Process32Next(hProcessSnap, &pe32));
> bRet = TRUE;
> }
> else
> bRet = FALSE; // could not walk the list of processes
>
> // Do not forget to clean up the snapshot object.
>
> CloseHandle (hProcessSnap);
> return (bRet);
> }
>
> void main(void)
> {
> GetProcessList();
> }
>

>
> Je l'ai debuggé, et dans GetProcessList, bGotModule vaut tout le temps 0, donc il ne m'affiche rien !
> Dans GetProcessModule, hModuleSnap vaut 0x000007dc la première fois mais, plus bas, à cette condition "if (me32.th32ModuleID == dwModuleID)" il bloque, donc bFound=false et bien entendu, la fonction GetProcessModule retourne false. Quant aux autres fois, hModuleSnap vaut tout le temps 0xffffffff, ce qui implique que cette condition "if (hModuleSnap == (HANDLE)-1)" est vérifiée et que la fonction GetProcessModule revoie encore et toujours false.
>
> Pourquoi le code de MSDN ne marche-t-il pas?
> Est-ce que la version du Windows peut être un facteur de ce problème?
> Je travaille sous Windows XP.
>
> Merci de bien vouloir m'éclaicir!
>
> Xentor609
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > VOILA le MSDN:
> > #include <windows.h>
> > #include <tlhelp32.h>
> > #include <stdio.h>
> >
> > BOOL GetProcessList ()
> > {
> > HANDLE hProcessSnap = NULL;
> > BOOL bRet = FALSE;
> > PROCESSENTRY32 pe32 = {0};
> >
> > // Take a snapshot of all processes in the system.
> >
> > hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
> >
> > if (hProcessSnap == INVALID_HANDLE_VALUE)
> > return (FALSE);
> >
> > // Fill in the size of the structure before using it.
> >
> > pe32.dwSize = sizeof(PROCESSENTRY32);
> >
> > // Walk the snapshot of the processes, and for each process,
> > // display information.
> >
> > if (Process32First(hProcessSnap, &pe32))
> > {
> > DWORD dwPriorityClass;
> > BOOL bGotModule = FALSE;
> > MODULEENTRY32 me32 = {0};
> >
> > do
> > {
> > bGotModule = GetProcessModule(pe32.th32ProcessID,
> > pe32.th32ModuleID, &me32, sizeof(MODULEENTRY32));
> >
> > if (bGotModule)
> > {
> > HANDLE hProcess;
> >
> > // Get the actual priority class.
> > hProcess = OpenProcess (PROCESS_ALL_ACCESS,
> > FALSE, pe32.th32ProcessID);
> > dwPriorityClass = GetPriorityClass (hProcess);
> > CloseHandle (hProcess);
> >
> > // Print the process's information.
> > printf( "\nPriority Class Base\t%d\n",
> > pe32.pcPriClassBase);
> > printf( "PID\t\t\t%d\n", pe32.th32ProcessID);
> > printf( "Thread Count\t\t%d\n", pe32.cntThreads);
> > printf( "Module Name\t\t%s\n", me32.szModule);
> > printf( "Full Path\t\t%s\n\n", me32.szExePath);
> > }
> > }
> > while (Process32Next(hProcessSnap, &pe32));
> > bRet = TRUE;
> > }
> > else
> > bRet = FALSE; // could not walk the list of processes
> >
> > // Do not forget to clean up the snapshot object.
> >
> > CloseHandle (hProcessSnap);
> > return (bRet);
> > }
> >
> > BruNews, ciao...
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > j'ai essayé mais ca ne donne rien
> > >
> > >

> > > HMODULE hModule=(HMODULE)pe32.th32ParentProcessID;
> > > szPath[256]="";
> > > GetModuleFileName(hModule,szPath,sizeof(szPath));
> > >

> > > szPath est vide !
> > >
> > > Où est le problème ?
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > fais un essai avec le membre th32ParentProcessID pour GetModuleFilename.
> > > > BruNews, ciao...
> > > >
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > > voila, comment je recupere le filename de l'exe en memoire
> > > > >
> > > > >

> > > > > ...
> > > > > PROCESSENTRY32 pe32 = {0};
> > > > > ...
> > > > > pe32.szExeFile //ici
> > > > > ...
> > > > >

> > > > >
> > > > > Le prob, comme je l'ai dit c'est qu'il ne me donne que le nom de l'exe et pas le chemin d'acces complet.
> > > > > Comment faire?
> > > > >
> > > > > -------------------------------
> > > > > Réponse au message :
> > > > > -------------------------------
> > > > >
> > > > > > le nom du ficher en memoire qui tourne, tu l'as eu comment ?
> > > > > > C'est au moment ou tu recup cela qu'il faut aussi soit le HMODULE, soit le processid ou un truc qui l'identifie de maniere unique.
> > > > > > BruNews, ciao...
> > > > > >
> > > > > >
> > > > > > -------------------------------
> > > > > > Réponse au message :
> > > > > > -------------------------------
> > > > > >
> > > > > > > salut!
> > > > > > > Je cherche à retrouver le path en ayant que le nom du ficher qui est mémoire, cad en execution !
> > > > > > > Avec les process, je n'obtiens que le nom du fichier (par exemple, winlogon.exe).
> > > > > > > J'ai déjà essayé avec GetModuleFileName, mais il faut le HMODULE correspondant. J'ai donc utilisé GetModuleHandle mais il faut le chemin d'accès au complet !
> > > > > > >
> > > > > > > Quelqu'un pourrait m'aider?
> > > > > > >
> > > > > > > D'avance merci pour vos réponses !
> > > > > > >
> > > > > > > Xentor609
> > > > > >
> > > > >
> > > >
> > >
> >
>
mardi 8 juillet 2003 à 19:55:28 | Re : Comment retrouver le path en ayant que le nom du fichier

BruNews

Administrateur CodeS-SourceS
Il est sur ton mail.
BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

> salut!
> Je cherche à retrouver le path en ayant que le nom du ficher qui est mémoire, cad en execution !
> Avec les process, je n'obtiens que le nom du fichier (par exemple, winlogon.exe).
> J'ai déjà essayé avec GetModuleFileName, mais il faut le HMODULE correspondant. J'ai donc utilisé GetModuleHandle mais il faut le chemin d'accès au complet !
>
> Quelqu'un pourrait m'aider?
>
> D'avance merci pour vos réponses !
>
> Xentor609

1 2

Cette discussion est classée dans : fichier, path, retrouver


Répondre à ce message

Sujets en rapport avec ce message

Récupération du chemin d'un fichier dans le 'path' [ par BettaSplendens ] Bonjour,j'ai 2 choses... d'un côté le chemin avec laquelle est lancée mon application, qui comporte "bien entendu" plusieurs répertoires.. désignons i Fichier ini... retrouver toutes les clef d'une session [ par JackosKing ] Bon voilà j'ai fait une recherche sur msdn et sur le frm pour le fichier ini, et il faut donc que j'utilise la fonction:GetPrivateProfileString, avec recherche du path de l'os [ par Cameleon69 ] Salut a tousJe cherche comment récupérer le path où se trouve l'os.Ayant un programme qui doit trouner sur plusieurs OS différents, je ne suis pas cer Besoin d'aide [ par hydrosk8 ] voila je dois faire un programme en C++ ki permet de creer sequentiellement un fichier "mesure" comportant pour chaque mesure: le nom de la mesure; la Broken pipe et sockets [ par nono1307 ] J'ai un petit problème :( Je dois faire un serveur HTTP en C avec les sockets. Ce serveur doit gérer l'envoie des images. Or, c'est à ce niveau qu' Matez ça! :) [ par MaDC ] J'ai un soucis avec mon appli MFC.Je voudrais ouvrir un document avec ça :void CCommandeRobotView::OnFileOpen() { CFileDialog fenetreDlg( true, NU API Win32, problème de variable [ par bouba ] Salut a tous, j'ai un blem de variable dans mon programme. Voici mon code source.LPSTR Path="";LRESULT CALLBACK WndProc( HWND hWnd, UINT uMsg, WPARAM Verifier que le programme executé est au bon endrois [ par XKaliBur ] Voila le bout de code suivant : /* Verification du bon fichier */    char copy[500];    char current_long_path[500];    char current_short_p [MFC]Afficher correctement le contenu d'un fichier [ par BIG_BOSS_001 ] Bonjour à tous, J'ai un problème minime mais génant. Voici mon code : void CMFCDlg::OnBnClickedOpen() {     // TODO : ajoutez ici le code de votre g


Nos sponsors


Appels d'offres

Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,936 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales