bazbaz2020
Messages postés14Date d'inscriptionmardi 31 juillet 2007StatutMembreDernière intervention25 janvier 2009
-
12 janv. 2009 à 03:14
azizx2
Messages postés6Date d'inscriptionsamedi 4 février 2006StatutMembreDernière intervention18 mars 2012
-
18 mars 2012 à 01:58
je veut recuperer un chemain d'un fichier en cour d'execution comme explorer dans les processus :
" c:\windows\explorer.exe "
s.v.p repondez mon au plus vite possible merci
Caribensila
Messages postés2527Date d'inscriptionjeudi 15 janvier 2004StatutMembreDernière intervention16 octobre 201918 12 janv. 2009 à 04:34
- Et faire une petite recherche sur le site?
- Hein?
- Non?
- Pas trop envie?
- Ca ne te dit pas trop ce soir, on dirait...
- Une petite flemme?..
- Pourtant, si ça ne te ferait sans doute pas beaucoup de bien côté cérébral vu la paresse du bazar2020, au moins ça musclerait tes petits doigts atrophiés
...
N'oublie jamais ça :
« Pas de doigt? - Pas de chocolatsur CS
! »
bazbaz2020
Messages postés14Date d'inscriptionmardi 31 juillet 2007StatutMembreDernière intervention25 janvier 2009 12 janv. 2009 à 15:35
je veut recuperer un chemain d'un fichier en cour d'execution comme explorer dans les processus : " c:\windows\explorer.exe " s.v.p repondez mon au plus vite possible merci
[auteur/BAZBAZ2020/1119196.aspx bazbaz2020] : tu peux nous le refaire stp, Cari n'a pas compris je crois
repondez mon au plus vite possible merci : ben tu crois qu'on prend notre temps ? on est à fond là mais vu le verglas difficile de poster plus vite . Va falloir attendre que les admins mettent du sel .
Vous n’avez pas trouvé la réponse que vous recherchez ?
Hé ho ho hé : t'étais bien content que je les prenne les raquettes pour installer le pétard mouillé sur la chèvre.
Oué oué j'entend Cirec avec son klaxon : roule vite quand même le gars . La dernière fois il a explosé le tire-fesse . Je te raconte pas la tête de la grosse Josianne le lendemain quand elle a du se taper la piste du Grand ASM en peau phoque : Avec f0xi on était mdrrrr
Sinon tu as bien recu ton renouvellement de contrat pour CS en ce qui concerne ton job de pisteur ? Moi ils ont pas voulu ; Il parait que je provoque trop d'avalanches : il y en a quand meme je t'assure ils sont jamais content .
Caribensila
Messages postés2527Date d'inscriptionjeudi 15 janvier 2004StatutMembreDernière intervention16 octobre 201918 12 janv. 2009 à 21:57
Ah ouais?.. C'est pour ça que j'avais trouvé la grosse Josianne un peu ramolo ce soir-là... C'était bien la première fois qu'elle n'avait pas dansé à poil sur la table, à la fin du repas de Delphifr !
(je m'en souviens bien car ça m'avait un peu choqué ce soir-là, perso.)
Ouais, ouais! J'ai bien reçu mon contrat. Y'avait même la prime de fin d'année avec. Il ne s'est pas foutu de nous, l'ami Nix! On voit que les affaires marchent bien sur CS. Cirec a pu s'acheter un nouveau chasse-neige et f0xi un écran 19 pieds...
Moi, j'ai tout placé en subprimes, comme d'hab. J'ai eu une petite perte l'année dernière, mais PCPT, sympa, a compensé avec la caisse noire.
Au fait... T'as pas peur de faire des envieux en disant à tous que Nix déménage nos bureaux à Megève l'hiver?
bazbaz2020
Messages postés14Date d'inscriptionmardi 31 juillet 2007StatutMembreDernière intervention25 janvier 2009 12 janv. 2009 à 22:42
merci mais j'ai pas trouver un exemple qui donne le chemin d'un processus .
dans mon application je veut fair une liste des processuse (résolu) mais je veut aussi affichier le chemain de chaque processuse . répondéz moi s.v.p
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 14 janv. 2009 à 15:49
Salut,
Dites les gens, c'est fini de martyriser bazbaz un peu ?
En plus, je ne crois pas qu'il y ait un tel code sur tout delphifr !
Non non, un autre que celui sur cette page.
Voici donc une solution qui utilise une fonction "non documentée". Cette fonction permet de récupérer un pointeur sur un jeu de structures... Non documentées.
En fait, c'est un abus de langage : la fonction et les structures sont documentées (ici). Il y a cependant des remarques dans ce style :
[NtQueryInformationProcess may be altered or unavailable in future versions of Windows. Applications should use the alternate functions listed in this topic.]
Bref, ce code peut fonctionner sur certaines versions de Windows et pas sur d'autres.
J'imagine qu'il devrait fonctionner correctement sur 2000, XP et Vista (Peut être faut exécuter le processus en tant qu'admin). Je l'ai développé sous XP/Delphi 6.
Autre solution : utiliser WMI et sa classe Win32_Process.
Encore autre solution : injection de code et utilisation de GetModuleFilename(0).
Mais quelle que soit la solution, c'est relativement lourd, relativement technique à écrire, et pas des plus portable.
unit Unit1;
function NtQueryInformationProcess(
ProcessHandle: THandle;
ProcessInformationClass: Cardinal;
var ProcessInformation: TProcessBasicInformation;
ProcessInformationLength: Cardinal;
var ReturnLength: Cardinal
): Integer; stdcall; external 'NtDll.dll';
implementation
{$R *.dfm}
function RetrieveProcessExePath(hProcess: THandle): String;
var
processInfo: TProcessBasicInformation; // Informations sur le processus
peb: TPeb; // Process Environment Block
processParams: TRtlUserProcessParameters; // Contient le chemin
lpUnicodePath: array[0..MAX_PATH] of WideChar;
nBuffer: Cardinal;
begin
Result:= '';
if NtQueryInformationProcess(hProcess, ProcessBasicInformation, processInfo,
SizeOf(processInfo), nBuffer) >= 0 then
if ReadProcessMemory(hProcess, processInfo.PebBaseAddress,
@peb, SizeOf(peb), nBuffer) then
if ReadProcessMemory(hProcess, peb.ProcessParameters,
@processParams, SizeOf(processParams), nBuffer) then
with processParams.ImagePathName do
begin
if ReadProcessMemory(hProcess, Buffer,
@lpUnicodePath, Length, nBuffer) then
Result:= lpUnicodePath;
end;
end;
procedure EnableTokenPrivilege(lpPrivilege: String);
var
hToken: THandle; // Handle sur le token
tokenPriv: TTokenPrivileges; // Tableau de privilèges
nBuffer: Cardinal;
begin
// TTokenPrivileges ne propose qu'une entrée
tokenPriv.PrivilegeCount:= 1;
// Récupération du token du processus
if not OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES,
hToken) then RaiseLastOSError;
// Recherche du LUID associé au privilège
if not LookupPrivilegeValue(nil, PChar(lpPrivilege),
tokenPriv.Privileges[0].Luid) then
begin
CloseHandle(hToken);
RaiseLastOSError;
end;
// On va demandé l'activation du privilège
tokenPriv.Privileges[0].Attributes:= SE_PRIVILEGE_ENABLED;
// Activation du privilège
if not AdjustTokenPrivileges(hToken, False, tokenPriv, 0, nil, nBuffer) then
begin
CloseHandle(hToken);
RaiseLastOSError;
end;
CloseHandle(hToken);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
hProcessSnap: THandle; // Handle du snapshot
hProcess: Thandle; // Handle sur le processus à traiter
pe32: PROCESSENTRY32; // Informations sur un processus
lpPath: String; // Chemin de l'exe
begin
Memo1.Clear;
// Activation du privilège de debug pour ce processus
EnableTokenPrivilege(SE_DEBUG_NAME);
// Pris du snapshot
hProcessSnap:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if hProcessSnap = INVALID_HANDLE_VALUE then
begin
ShowMessage('Echec du snapshot');
Exit;
end;
// Affectation de la taille de la structure avant utilisation
pe32.dwSize:= SizeOf(PROCESSENTRY32);
// Récupération des infos sur le premier processus
if not Process32First(hProcessSnap, pe32) then
begin
ShowMessage('Echec de la récupération du premier processus');
CloseHandle(hProcessSnap);
Exit;
end;
// On boucle sur les processus
repeat
// Récupération d'un handle sur le processus
hProcess:= OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
False, pe32.th32ProcessID);
if hProcess <> INVALID_HANDLE_VALUE then
begin
lpPath:= RetrieveProcessExePath(hProcess);
if lpPath = '' then lpPath:= pe32.szExeFile;
Memo1.Lines.Add(lpPath);
CloseHandle(hProcess);
end
else
ShowMessage('Impossible de récupérer un handle sur ' + pe32.szExeFile);
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
hProcessSnap: THandle; // Handle du snapshot
hProcess: Thandle; // Handle sur le processus à traiter
pe32: PROCESSENTRY32; // Informations sur un processus
lpName: Array[0..200] of Char;
begin
Memo1.Clear;
// Pris du snapshot
hProcessSnap:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if hProcessSnap = INVALID_HANDLE_VALUE then
begin
ShowMessage('Echec du snapshot');
Exit;
end;
// Affectation de la taille de la structure avant utilisation
pe32.dwSize:= SizeOf(PROCESSENTRY32);
// Récupération des infos sur le premier processus
if not Process32First(hProcessSnap, pe32) then
begin
ShowMessage('Echec de la récupération du premier processus');
CloseHandle(hProcessSnap);
Exit;
end;
// On boucle sur les processus
repeat
// Récupération d'un handle sur le processus
hProcess:= OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
False, pe32.th32ProcessID);
if hProcess <> INVALID_HANDLE_VALUE then
begin
GetModuleFileNameEx(hProcess, 0, @lpName, 200);
Memo1.Lines.Add(lpName);
CloseHandle(hProcess);
end
else
ShowMessage('Impossible de récupérer un handle sur ' + pe32.szExeFile);
azizx2
Messages postés6Date d'inscriptionsamedi 4 février 2006StatutMembreDernière intervention18 mars 2012 18 mars 2012 à 01:58
bonsoir; je pense avoir la solution
function trouver_ficpr(P: DWORD): string;
var
Handle: THandle;
dll: Cardinal;
GetModuleFileNameEx: function(hProcess: THandle; hModule: HMODULE;
lpFilename: PChar; nSize: DWORD): DWORD; stdcall;
begin
Result := '';
Handle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, P);
if Handle <> 0 then
try
SetLength(Result, MAX_PATH);
begin
dll := LoadLibrary(pchar('PSAPI.dll'));
@GetModuleFileNameEx := GetProcAddress(dll, pchar('GetModuleFileNameExA'));
if GetModuleFileNameEx(Handle, 0, PChar(Result), MAX_PATH) > 0 then
SetLength(Result, StrLen(PChar(Result)))
else
Result := '';
end;
finally
CloseHandle(Handle);
end;
end;
Bien entendu en listant la liste des processus actifs, tu envoi le Id_process de chaque processus trouvé à la fonction proposée si-dessus et tu devrais pouvoir récupérer le chemins en résultat genre (rouver_ficpr(ProcessEntry.th32ProcessID));
j'espère avoir pu aider cordialement.