begin process at 2012 05 30 06:20:24
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

System

 > 

Récupèrer le chemin absolu de l'exe de la fenêtre au premier plan.


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

Récupèrer le chemin absolu de l'exe de la fenêtre au premier plan.

dimanche 8 avril 2007 à 01:08:23 | Récupèrer le chemin absolu de l'exe de la fenêtre au premier plan.

palmipede

Bonjour,

Dans le cadre d'un petit projet sous Vista, je doit récupèrer le chemin (absolu) qui mène à l'executable associé à la fenêtre au premier plan.

J'utilise Visual C++ 2005 express, et j'ai installé la version 2003 server R2 de PSDK (puis configuré VC++ pour qu'il la trouve)

D'après mes recherches sur msdn et les questions déja posées sur le forum, il faudrais utiliser :
- GetForegroundWindow(...) ou GetFocus() pour récupèrer le handle sur la fenêtre
- GetWindowThreadProcessId(...) pour récupèrer l'id du processus associé
- GetFullProcessImageName(...) pour récupèrer le chemin à partir du handle (n'existe que depuis Vista, selon msdn)

Le problème, est que VC++ ne connais pas "GetFullProcessImageName"
error C3861: 'QueryFullProcessImageName': identifier not found
(cependant les autres ne posent pas problème)

Est-ce lié à ma version de PDSK ?

Merci.
dimanche 8 avril 2007 à 01:26:56 | Re : Récupèrer le chemin absolu de l'exe de la fenêtre au premier plan.

DeAtHCrAsH

GetForegroundWindow te donne le handle de la fenetre au premier plan.
GetModuleFilename te donne le chemin correspondant au handle d'une application.

Shell
dimanche 8 avril 2007 à 09:47:10 | Re : Récupèrer le chemin absolu de l'exe de la fenêtre au premier plan.

BruNews

Administrateur CodeS-SourceS
On reprend le tout dans l'ordre:
GetForegroundWindow
GetWindowThreadProcessId
OpenProcess
GetModuleFileName
CloseHandle (pour le hprocess de OpenProcess)

ciao...
BruNews, MVP VC++
dimanche 8 avril 2007 à 10:00:53 | Re : Récupèrer le chemin absolu de l'exe de la fenêtre au premier plan.

racpp

Administrateur CodeS-SourceS
Réponse acceptée !

Salut,
Je pense qu'il faudra plutôt utiliser GetModuleFileNameEx() car GetModuleFileName() ne fonctionne que pour le processus courant. Voici un exemple de code:

#include <windows.h>
#include <psapi.h>
#pragma comment(lib,"psapi.lib")

int WINAPI WinMain(HINSTANCE hinst, HINSTANCE prev, LPSTR cmd, int show)
{
    char buffer[MAX_PATH];
    DWORD pid=0;
    HWND hwnd=GetForegroundWindow();
    GetWindowThreadProcessId(hwnd,&pid);
    HANDLE hProcess=OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ ,0,pid);
    GetModuleFileNameEx(hProcess,0,buffer,MAX_PATH);
    CloseHandle(hProcess);
    MessageBox(0,buffer,"Chemin complet",0);
    return 0;
}

Je viens de voir que QueryFullProcessImageName() est une nouveauté Vista. D'après MSDN, elle est déclarée dans winbase.h. Si elle y figure, il suffira de commencer le code par:
#define _WIN32_WINNT 0x0600

dimanche 8 avril 2007 à 10:08:55 | Re : Récupèrer le chemin absolu de l'exe de la fenêtre au premier plan.

BruNews

Administrateur CodeS-SourceS
Excellente rectification.

ciao...
BruNews, MVP VC++
dimanche 8 avril 2007 à 10:25:53 | Re : Récupèrer le chemin absolu de l'exe de la fenêtre au premier plan.

palmipede

Merci beaucoup !
Ca faisait une semaine que je me demandais comment faire utiliser cette satanée fonction incluse dans <winbase.h>...

Le moins qu'on puisse dire c'est que vous m'avez bien aidé ^^
dimanche 8 avril 2007 à 11:57:30 | Re : Récupèrer le chemin absolu de l'exe de la fenêtre au premier plan.

vecchio56

Administrateur CodeS-SourceS
Un programme qui ne marche que sous Vista, c'est peut être pas une bonne idée, autant utiliser la méthode de racpp plutot que QueryFullProcessImageName

_____________________________________
Un éditeur de ressources gratuit pour Windows

lundi 9 avril 2007 à 00:26:07 | Re : Récupèrer le chemin absolu de l'exe de la fenêtre au premier plan.

palmipede

Mon programme est destiné à tourner en parallèle avec un gadget dans la sideBar de Vista ^^ (de toute façon j'ai fini par décider d'utiliser GetModuleFileNameEx)

Par contre, il y a une chose que je ne comprend pas, avec certaines applications au premier plan, je récupère effectivement le handle sur la fenêtre, mais je ne peut pas ouvrir le process...

lundi 9 avril 2007 à 00:40:04 | Re : Récupèrer le chemin absolu de l'exe de la fenêtre au premier plan.

BruNews

Administrateur CodeS-SourceS
Par exemple ?

ciao...
BruNews, MVP VC++
lundi 9 avril 2007 à 10:56:20 | Re : Récupèrer le chemin absolu de l'exe de la fenêtre au premier plan.

palmipede

Pour l'instant ça ne me le fais que sous Warcraft3, j'arrive à récupèrer le pid du processus, mais OpenProcess retourne NULL...

1 2

Cette discussion est classée dans : chemin, fenêtre, premier, récupèrer, absolu


Répondre à ce message

Sujets en rapport avec ce message

HELP !! Conversion chemin relatif en absolu et vice versa [ par 2swfan ] salut a tous Pourriez vous me dire si il existe une fonction C (et son nom) permettant de transformer un chemin relatif en chemin absolu ?? et vice Mettre une fenêtre en premier plan [ par jipp ] Hey, encore un novice en MFC.Je souhaitrai connaitre le code qui permette de mettre en premier plan une fenêtre.Concrétement, j'ai un SDI avec des boi Récupèrer chemin complet de l'application en cours [ par user25 ] Salut à tous. Je voudrais savoir comment faire pour récupèrer le chemin complet de l'application en cours si possible en passant par une fonction. C Fenêtre en premier plan sans focus [ par thenaoh ] Bonjour, Je cherche depuis plusieurs jours à afficher une application de mon cru (une appli AIR) en premier plan, mais sans qu'elle prenne le focus a chemin absolu de l'application [ par simonpelloquin ] bonjour, J'ai un problème sur l'ouverture d'un fichier : j'ai un attribut de ma classe m_FileName = "data/test.txt" Dans une méthode, je fais un myFi createfile [ par thegame88 ] Bonjour a tous,Voila j'ai fait un ti prog qui utilise la fonction createfile, mais le premier argument de createfile doit être le chemin du fichier du Winapi avec langage C : Comment afficher un texte dans une fenêtre en rafraichissant le texte par un autre. [ par sanderriere ] Bonjour, Comment faire en sorte d'afficher un texte dans une fenêtre et de pouvoir ensuite faire en sorte de le modifier lorsqu'on le souhaite par un Traduction en FR programme en fenetre devc++ [ par toto6311 ] [code=cpp]#include /* Declare Windows procedure */ LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); /* Faites le nom de la class Récupérer le handle d'une fenêtre par survol [ par sunvi ] Bonjour, je veux récupérer le handle d'un fenêtre par survol, voilà le code que j'ai écrit,enfin, j'ai modifié un code de quelqu'un d'autre pour que ç Scroll [ par galax98 ] Bonjour Excusez moi car cette question est certainement très basique. J'ouvre une fenêtre qui contient une image de hauteur 1000. Ma fenêtre n'a une h


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
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,671 sec (4)

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