OVH Cloud OVH Cloud

Fenetre premier plan / EnumProcessModules

8 réponses
Avatar
PurL
Bonjour,

Pour vérifier si une application est déjà lancé, j'utilise les fonctions
OpenProcess, EnumProcessModules et GetModuleFileNameExA pour récupérer le
nom de chaque process. Une fois que j'ai identifier le process qui
m'intéresse, je voudrais le mettre en avant plan, mais je ne vosi pas quelle
fonction utilisée...

Pouvez-vous m'aider ?

Merci,

PurL

8 réponses

Avatar
David MAREC
Bonjour,

PurL wrote:

Pour vérifier si une application est déjà lancé, j'utilise les fonctions
OpenProcess, EnumProcessModules et GetModuleFileNameExA pour récupérer le
nom de chaque process. Une fois que j'ai identifier le process qui
m'intéresse, je voudrais le mettre en avant plan, mais je ne vosi pas quelle
fonction utilisée...



Mouarf, dans mes bras.

Pouvez-vous m'aider ?



<news:40b4b9bc$0$7698$

Bienvenue au club.
Avatar
AG
PurL wrote:
Bonjour,

Pour vérifier si une application est déjà lancé, j'utilise les fonctions
OpenProcess, EnumProcessModules et GetModuleFileNameExA pour récupérer le
nom de chaque process. Une fois que j'ai identifier le process qui
m'intéresse, je voudrais le mettre en avant plan, mais je ne vosi pas quelle
fonction utilisée...



peut être SetForGroundWindow()
ou KB97925
Avatar
PurL
> peut être SetForGroundWindow()



Marche pas.
Il lui faut un hWnd pas un hProcess.

ou KB97925



Je vais voir...

PurL
Avatar
AG
PurL wrote:

peut être SetForGroundWindow()




Marche pas.
Il lui faut un hWnd pas un hProcess.



Oui, mais de toute façon il te faudra passer par les hWnd, car tous les
process n'ont pas de fenêtre. Il y a donc forcément une convertion à
faire du hProcess vers le hWnd qui lui correspond.

On ne met pas un process en premier plan, c'est sa fenêtre qu'on met au
premier plan.

Une bonne partie de ce que tu cherches à faire est surement déjà fait
dans Spy++, l'utilitaire fourni avec VC++. Le code source doit être dans
la MSDN.
Avatar
AMcD®
PurL wrote:
Bonjour,

Pour vérifier si une application est déjà lancé, j'utilise les
fonctions OpenProcess, EnumProcessModules et GetModuleFileNameExA
pour récupérer le nom de chaque process. Une fois que j'ai identifier
le process qui m'intéresse, je voudrais le mettre en avant plan, mais
je ne vosi pas quelle fonction utilisée...

Pouvez-vous m'aider ?

Merci,

PurL



Y a pas plus simple ? EnumWindows(). Pour savoir si c'est l'appli que tu
cherches, tu regardes ensuite le nom de sa classe de fenêtre.

--
AMcD®

http://arnold.mcdonald.free.fr/
Avatar
Patrick D.
On Fri, 04 Jun 2004 13:47:57 +0200, David MAREC
wrote:

c'est du Delphi, vous avez le droit de faire les déclarations et
adaptations nécessaires ...


GetWindowText(Application.Handle,MyAppName,SizeOf(MyAppName));
// Now determine the class name for this application
GetClassName(Application.Handle,MyClassName,SizeOf(MyClassName));
// Now count how many others out there are Delphi apps with this title
EnumWindows(@LookAtAllWindows,0);
if NumFound > 1 then
// There is another instance running, bring it to the front!
begin
MyPopup := GetLastActivePopup(LastFound);

// Bring it to the top in the ZOrder
BringWindowToTop(LastFound);
// Is the window iconized?
if IsIconic(MyPopup) then
// Restore it to its original position
ShowWindow(MyPopup,SW_RESTORE)
else
// Bring it to the front
SetForegroundWindow(MyPopup);
end


--
* enlevez '.don't.spam' et '.invalid' de mon adresse eMail si vous voulez
m'écrire *
* Donne un poisson à un homme, il aura à manger pour un jour
* Apprends-lui à pêcher, il aura à manger pour tous les jours de sa vie *
Avatar
David MAREC
Selon Patrick D.,
// Is the window iconized?
if IsIconic(MyPopup) then
// Restore it to its original position
ShowWindow(MyPopup,SW_RESTORE)
else
// Bring it to the front
SetForegroundWindow(MyPopup);



Cela ne suffit pas selon version (XP) et selon les applications.
Mais je crois que je suis tombé sur une application étrange qui refuse
d'obéir à toutes ces injonctions.


--
signature au milieu
Avatar
Christian ASTOR
PurL a écrit:
Une fois que j'ai identifier le process qui
m'intéresse, je voudrais le mettre en avant plan, mais je ne vosi pas quelle
fonction utilisée...



Récupérer d'abord un hWnd correspondant au PID, s'il y en a.
Le Task Manager de NT appelle SwitchToThisWindow() en faisant, en
simplifié (pas sûr pour XP...):

void SwitchToWindow(HWND hWnd)
{
if (IsIconic(hWnd))
ShowWindow(hWnd, SW_RESTORE);
HWND hWndLastActivePopup = GetLastActivePopup(hWnd);
LONG nStyle = GetWindowLong(hWndLastActivePopup, GWL_STYLE);
if (!(nStyle & WS_DISABLED))
{
void (FAR STDAPICALLTYPE * pSTTW)(HWND hWnd, BOOL fAltTab);
HINSTANCE hInst = LoadLibrary("USER32.DLL");
if (hInst)
{
(FARPROC&)pSTTW = GetProcAddress(hInst, "SwitchToThisWindow");
if (pSTTW != NULL)
pSTTW(hWndLastActivePopup, TRUE);
FreeLibrary(hInst);
}
}
}