Placer une fenetre dans un endroit précis de l'écran

Placer une fenetre dans un endroit précis de l'écran - C++ - Programmation

Marsh Posté le 18-06-2007 à 20:26:43    

Bonjour à tous !
 
Mon problème : Je souhaiterais pouvoir lancer un fichier du style powerpoint ou word, ça pas trop de difficulté avec la méthode "Shellexecute". La où je bloque c'est que je voudrais placer cette fenetre que je viens d'ouvrir dans un partie précise de l'écran.
Pour placer la fenêtre de mon application j'utilise "MoveWindow" mais je ne sais pas comment je peux choisir la position et la dimension du fichier (Word ou autre..) que je viens d'ouvrir.
 
Si vous avez une solution...
 
Merci d'avance.
 
PS: J'utilise Visual C++ 6 sous XP proffesionnel

Reply

Marsh Posté le 18-06-2007 à 20:26:43   

Reply

Marsh Posté le 18-06-2007 à 20:30:44    

Salut,
 
Tu dois pouvoir t'appuyer sur GetWindowRect pour les dimensions non?

Reply

Marsh Posté le 18-06-2007 à 20:40:11    

IrmatDen a écrit :

Salut,
 
Tu dois pouvoir t'appuyer sur GetWindowRect pour les dimensions non?


 
Merci pour ta réponse. j'essaierai ca demain. Mais il faudrait alors que je récupère le handle de la fenêtre que je vien d'ouvrir... et ca non plus je ne vois pas trop comment faire... :pfff:

Reply

Marsh Posté le 18-06-2007 à 23:13:28    

Ce n'est pas du C++
Et ça a déjà été donné maintes fois sur news://fr.comp.os.ms-windows.programmation


Message édité par marctes le 18-06-2007 à 23:14:33
Reply

Marsh Posté le 19-06-2007 à 03:00:29    

Tu peux lancer ton appli avec CreateProcess au lieu de ShellExecute.
Avec le dernier paramètre tu peux récupérer des infos sur le process que tu viens de créer.
 
Ensuite tu peux utiliser EnumWindows pour énumérer toutes les fenêtres. Ca utilise une callback mais rien de bien sorcier en principe.
Ta callback sera appelée pour chaque fenêtre trouvée et tu auras à chaque fois le HWND correspondant.
Avec ce HWND tu peux utiliser GetWindowThreadProcessId, si ce processid est le même que celui que t'as récupéré dans le CreateProcess, bingo ! (enfin en principe)

Message cité 1 fois
Message édité par SquiZZ le 19-06-2007 à 03:06:57
Reply

Marsh Posté le 20-06-2007 à 17:46:26    

SquiZZ a écrit :

Tu peux lancer ton appli avec CreateProcess au lieu de ShellExecute.
Avec le dernier paramètre tu peux récupérer des infos sur le process que tu viens de créer.
 
Ensuite tu peux utiliser EnumWindows pour énumérer toutes les fenêtres. Ca utilise une callback mais rien de bien sorcier en principe.
Ta callback sera appelée pour chaque fenêtre trouvée et tu auras à chaque fois le HWND correspondant.
Avec ce HWND tu peux utiliser GetWindowThreadProcessId, si ce processid est le même que celui que t'as récupéré dans le CreateProcess, bingo ! (enfin en principe)


 
Merci pour ta réponse, elle a l'air pas mal...seulement j'ai un problème avec CreateProcess. Le programme compile traquil mais lorsque je le lance, il me met une erreur :
 "unhandled exception in .exe (NTDLL.DLL):0xC000005 : Access Violation"
 
J'ai cherché la DLL en question et j'ai vu que je n'avais pas les droits de modification mais seulement les droits de "Lecture et exécution" et "Lecture". Seul l'administrateur a le droit de "Modification" sur cette DLL et je ne suis pas l'administrateur de mon PC.. :sweat:    
Est-ce que ceci peut être la cause de mon erreur ??
 
Merci

Reply

Marsh Posté le 20-06-2007 à 18:24:21    

tu peux donner le code pour ton appel à CreateProcess ?

Reply

Marsh Posté le 21-06-2007 à 08:18:24    

SquiZZ a écrit :

tu peux donner le code pour ton appel à CreateProcess ?


 
adressefichier="C:\monfichier.pps";
STARTUPINFO si;  
PROCESS_INFORMATION infoproc;
si.cb=(sizeof)si;
CreateProcess(adressefichier,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&si,&infoproc);
 
J'ai essayé plusieurs de variante, en entrant directement l'adresse dans les paramètres de CeateProcess, en la mettant dans le deuxième paramètre... mai rien n'y fait... :??:  
 

Reply

Marsh Posté le 21-06-2007 à 18:14:29    

Est-ce que c'est une erreur de copier/coller, ou tu n'as vraiment pas échapper le '\' dans le chemin?

Reply

Marsh Posté le 21-06-2007 à 20:37:34    

tarzoun49 a écrit :

Merci pour ta réponse. j'essaierai ca demain. Mais il faudrait alors que je récupère le handle de la fenêtre que je vien d'ouvrir... et ca non plus je ne vois pas trop comment faire... :pfff:


 
Le code complet a été donné x fois sur le news sus-cité (bis)
C'est si difficile de faire copier-coller ?!

Reply

Marsh Posté le 21-06-2007 à 20:37:34   

Reply

Marsh Posté le 21-06-2007 à 22:04:16    

tarzoun49 a écrit :

adressefichier="C:\monfichier.pps";
STARTUPINFO si;  
PROCESS_INFORMATION infoproc;
si.cb=(sizeof)si;
CreateProcess(adressefichier,NULL,NULL,NULL,NULL,NULL,NULL,NULL,&si,&infoproc);
 
J'ai essayé plusieurs de variante, en entrant directement l'adresse dans les paramètres de CeateProcess, en la mettant dans le deuxième paramètre... mai rien n'y fait... :??:


 
Tu dois initialiser le contenu de la structure si avec des 0 :

Code :
  1. STARTUPINFO si = {0};


 
Sinon CreateProcess marche pas comme ShellExecute et tu dois donner un exécutable en paramètre, comme ça :

Code :
  1. CreateProcess(NULL, "c:\\toto\\powerpointe.exe c:\\pouet.pps" ....

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed