Placer une fenetre dans un endroit précis de l'écran - C++ - Programmation
Marsh Posté le 18-06-2007 à 20:30:44
ReplyMarsh Posté le 18-06-2007 à 20:40:11
IrmatDen a écrit : Salut, |
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...
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
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)
Marsh Posté le 20-06-2007 à 17:46:26
SquiZZ a écrit : Tu peux lancer ton appli avec CreateProcess au lieu de ShellExecute. |
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..
Est-ce que ceci peut être la cause de mon erreur ??
Merci
Marsh Posté le 20-06-2007 à 18:24:21
ReplyMarsh 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...
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?
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... |
Le code complet a été donné x fois sur le news sus-cité (bis)
C'est si difficile de faire copier-coller ?!
Marsh Posté le 21-06-2007 à 22:04:16
tarzoun49 a écrit : adressefichier="C:\monfichier.pps"; |
Tu dois initialiser le contenu de la structure si avec des 0 :
Code :
|
Sinon CreateProcess marche pas comme ShellExecute et tu dois donner un exécutable en paramètre, comme ça :
Code :
|
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