IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Chemin Complet du .exe via PID


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Par défaut Chemin Complet du .exe via PID
    me voilà un peu embêté...
    le code suivant fonctionnne sur Win2k...
    le chemin complet de l'executable s'affiche...
    "c:\temp\test1\test.exe"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    (*	declaration in C PSAPI.DLL
        DWORD GetModuleFileNameEx( HANDLE hProcess,    // handle to the process
                                   HMODULE hModule,    // handle to the module
                                  LPTSTR lpFilename,  // buffer that receives the path
                                  DWORD nSize         // size of the buffer);
    *)
    function GetModuleFileNameEx(hProcess : THandle; hModule : THandle;
                                 lpFileName : pchar;
                                 nSize : DWORD): DWORD; stdcall;
     
    implementation
     
    {$R *.DFM}
     
     
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
        hProcess:DWORD;
        FileNamePath: array[0..512] of Char;
    begin
            hProcess:=OpenProcess( PROCESS_QUERY_INFORMATION OR PROCESS_VM_READ,
                               FALSE,
                               GetCurrentProcessId);
        GetModuleFileNameEx(hProcess,0,FileNamePath,sizeof(FileNamePath));
        RichEdit1.lines.Add(FileNamePath);
        CloseHandle(hprocess);
    end;
     
     
    //*** External Function from PSAPI.DLL ****
    function GetModuleFileNameEx; external 'psapi.dll' index 13;
    lorsque je l'execute sur XP...
    j'ai juste le nom de l'executable... et je perds le path...
    "test.exe"


    La question c'est comment avec XP je peux trouver le chemin complet d'un
    exe via son ProcessID?
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  2. #2
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 101
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 101
    Par défaut
    Essaye donc voir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GetProcessImageFileName(hProcess, FileNamePath, sizeof(FileNamePath));
    C'est sensé retourner
    Pointer to a buffer that receives the full path to the executable file
    Absolument non testé puisque j'ai pas XP et que d'après mon sdk c'est à partir de XP que cette entrée existe dans psapi.dll.
    HTH,
    --
    jp
    PS : plutôt que la déclaration dans ton bout de code, ajoute Psapi dans tes Uses.

  3. #3
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 703
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 703
    Par défaut
    Citation Envoyé par Jipété
    PS : plutôt que la déclaration dans ton bout de code, ajoute Psapi dans tes Uses.
    Je n'ai pas vu cette fonction dans Psapi.pas
    Par contre, cette fonction existe bien dans la DLL au numéro 13, mais je n'arrive pas à la faire fonctionner.
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  4. #4
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 101
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 101
    Par défaut
    @Lung :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Buttons, ComCtrls, Psapi;
     
    type
      TForm1 = class(TForm)
        BitBtn1: TBitBtn;
        RichEdit1: TRichEdit;
        procedure BitBtn1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
        hProcess:DWORD;
        FileNamePath: array[0..512] of Char;
    begin
            hProcess:=OpenProcess( PROCESS_QUERY_INFORMATION OR PROCESS_VM_READ,
                               FALSE,
                               GetCurrentProcessId);
        GetModuleFileNameEx(hProcess,0,FileNamePath,sizeof(FileNamePath));
        RichEdit1.lines.Add(FileNamePath);
        CloseHandle(hprocess);
    end;
    On est bien d'accord : pour le "uses Psapi" je parle de la fonction GetModuleFileName, puisque je suis sous 2k et que l'autre fonction est spécifique à XP.
    --
    jp

  5. #5
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 703
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 703
    Par défaut
    Citation Envoyé par Jipété
    On est bien d'accord : pour le "uses Psapi" je parle de la fonction GetModuleFileName
    Ah, ok.
    Je suis sous XP, et ca fonctionne.

    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  6. #6
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 101
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 101
    Par défaut
    @Lung:
    Je suis sous XP, et ca fonctionne.
    C'est quoi qui fonctionne ?
    Le "uses Psapi" ou la solution que je propose,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GetProcessImageFileName(hProcess, FileNamePath, sizeof(FileNamePath));
    ?
    --
    jp

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant][XSLT] - Chemin complet pour XALAN via JAVA
    Par gonzolero dans le forum XSL/XSLT/XPATH
    Réponses: 22
    Dernier message: 21/09/2007, 09h39
  2. chemin complet ? via <input type=file>
    Par nerillis dans le forum ASP.NET
    Réponses: 9
    Dernier message: 11/05/2007, 12h21
  3. Réponses: 5
    Dernier message: 12/09/2006, 17h25
  4. Réponses: 3
    Dernier message: 27/04/2004, 18h21
  5. Obtenir le chemin complet d'un fichier
    Par pamplemousse_mk2 dans le forum Linux
    Réponses: 3
    Dernier message: 13/08/2003, 23h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo