cs_palmipede
Messages postés8Date d'inscriptiondimanche 25 mars 2007StatutMembreDernière intervention19 octobre 2010
-
8 avril 2007 à 01:08
cs_palmipede
Messages postés8Date d'inscriptiondimanche 25 mars 2007StatutMembreDernière intervention19 octobre 2010
-
9 avril 2007 à 12:02
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)
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 8 avril 2007 à 10:00
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
#pragma comment(lib,"psapi.lib")
int WINAPI WinMain(HINSTANCE hinst, HINSTANCE prev, LPSTR cmd, int show)
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
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 8 avril 2007 à 09:47
On reprend le tout dans l'ordre:
GetForegroundWindow
GetWindowThreadProcessId
OpenProcess
GetModuleFileName
CloseHandle (pour le hprocess de OpenProcess)
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 8 avril 2007 à 11:57
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
cs_palmipede
Messages postés8Date d'inscriptiondimanche 25 mars 2007StatutMembreDernière intervention19 octobre 2010 9 avril 2007 à 00:26
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...
cs_palmipede
Messages postés8Date d'inscriptiondimanche 25 mars 2007StatutMembreDernière intervention19 octobre 2010 9 avril 2007 à 12:02
A priori ça doit être un problème de droits, vu que même taskManager n'arrive pas à accèder au nom de l'exe, sauf si je demande "Perform Administrative Tasks" par clique droit sur le processus (cette action demande bien sur les pouvoirs d'administrateur)
Je me demande aussi si le fait que cette application ne soit pas installée mais seulement une copie de l'install de quelqu'un d'autre ne joue pas mes droits