Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1863 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  démarrer une appli externe

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

démarrer une appli externe

n°735169
EuZah
return (void*) this;
Posté le 23-05-2004 à 16:13:44  profilanswer
 

Bonjour à tous,
 
je suis autodidacte en C++ et MFC. Je vous dirais que je pige assez bien les concepts mais j'ai un gros problème de fil directeur si vous voyez ce que je veux dire...
Je fais un appli que s'initialise avec des fichiers ascii (donc éditables avec notepad, je précise que je tourne sous win xp). En cas d'erreur de format j'ai mis une boite de dialogue avec le nom du fichier et la ligne en question mais on voit vite les limites de cette solution en cas de gros fichier.
Comment faire pour lancer notepad avec le fichier en question???
si vous pouviez m'orienter dans la msdn ce serait sympa..
(ont-ils pondu le même genre de chose qu'en vbs??)
 
merci!!

mood
Publicité
Posté le 23-05-2004 à 16:13:44  profilanswer
 

n°735300
EuZah
return (void*) this;
Posté le 23-05-2004 à 19:54:26  profilanswer
 

J'ai déjà vu des logiciels lancer acrobat reader pour ouvrir un fichier pdf (ou word pour un doc..), cela me semble être plus ou moins la même chose, le but final étant de placer le curseur sur la ligne de l'erreur... (avec un nombre de WM_KEYDOWN correspondant à: (umero de la ligne - 1)

n°735312
skelter
Posté le 23-05-2004 à 20:17:23  profilanswer
 

ben ya shellexecute (simple) et createprocess (avancé) en win32, en mfc je sais pas

n°735375
EuZah
return (void*) this;
Posté le 23-05-2004 à 21:26:15  profilanswer
 

Merci pour l'info, effectivement ça marche. Mais à quoi correspond cette HINSTANCE retourné, l'ID du process?? Y aurait-il moyen de récupérer quelquepart le handle de la fenêtre de notepad pour lui envoyer des WM_KEYDOWN (j'imagine, là aussi je découvre..)?

n°736595
EuZah
return (void*) this;
Posté le 24-05-2004 à 19:10:02  profilanswer
 

Bon, vraisemblablement j'ai trouvé ce qu'il me faut: GetForegroundWindow(). Mais il paraît que c'est pas top... Vraiment personne n'a d'autre idée???

n°736608
_darkalt3_
Proctopathe
Posté le 24-05-2004 à 19:20:17  profilanswer
 

je te conseille un super livre, si tu ne l'as pas déjà, c'est pas mal comme référence, pour se donner justement un point de vue un peu global sur la prog windows:
ca s'appelle "C/C++ la bible du programmeur", et c'est chez Eyrolles (gros pavé inside).
Il y a peut-être une seconde édition aujourd'hui, trouvable un peu partout, et spécialement dans les Furet.

n°736640
EuZah
return (void*) this;
Posté le 24-05-2004 à 19:58:19  profilanswer
 

En fait c'est pas trop la prog sous windows qui me pose problème, ce serait plutot Windows lui-même... J'en suis à chercher comment récupérer le handle d'une fenetre d'un autre process, et ca a pas l'air d'etre du gateau..
Actuellement je teste avec ça:
 

Code :
  1. ShellExecute( this->m_hWnd,
  2.  NULL,
  3.  "C:\\WINDOWS\\NOTEPAD.EXE", // je répète, c'est un test..
  4.  pChemin, // chemin du fichier à éditer
  5.  NULL,
  6.  SW_SHOWDEFAULT);


 
Ca renvoie un int dont je n'ai que faire à part pour une éventuelle erreur!
Maintenant, comment récupérer le handle de la nouvelle fenêtre??
GetForegroundWindow() me renvoie pas celui que je veux...
FindWindow() je voudrais bien, en connaissant le nom de la classe de fenetre de Notepad..
Je continue de farfouiller la masse mais j'en tire pas grand chose..


Message édité par EuZah le 24-05-2004 à 20:15:10
n°736684
EuZah
return (void*) this;
Posté le 24-05-2004 à 21:08:50  profilanswer
 

Ca y est!! j'ai trouvé:
suffisait de mettre un sleep!
 

Code :
  1. ShellExecute( this->m_hWnd,
  2.  NULL,
  3.  "C:\\WINDOWS\\NOTEPAD.EXE",
  4.  pChemin,
  5.  NULL,
  6.  SW_SHOWDEFAULT);
  7. Sleep(500);
  8. CWnd *Wnd = GetForegroundWindow();
  9. if(Wnd)
  10. {
  11. for(int i=0; i< 5; i++) // essai de décalage
  12. {
  13.  Wnd->PostMessage(WM_KEYDOWN, VK_DOWN);
  14.  Wnd->PostMessage(WM_KEYUP, VK_DOWN);
  15. }
  16. }


 
bon voilà mais sinon il a pas l'air de prendre en compte les WM_KEYDOWN... Comment ce peut-ce?

n°736690
blackgodde​ss
vive le troll !
Posté le 24-05-2004 à 21:21:41  profilanswer
 

ton truc pour récupérer la handle de la fenêtre me parait pas sur (si l'ordi et lent et beaucoup solicité, notepad aura peut-etre par créé sa fenetre au bout d'une demi-seconde) ...  
regarde avec CreateProcess pour obtenir un lien vers le processus créé, puis avec EnumWindow et GetWindowThreadProcessId pour retrouver celle qu'a créé ton processus
 
sinon, pourquoi ne te crées-tu pas toi-même ta fenêtre qui charge le fichier text dans une boite de texte ?


---------------
-( BlackGoddess )-
n°736710
EuZah
return (void*) this;
Posté le 24-05-2004 à 21:42:33  profilanswer
 

bon j'ai trouvé: remplacer
 
Wnd->PostMessage(WM_KEYDOWN, VK_DOWN);  
Wnd->PostMessage(WM_KEYUP, VK_DOWN);  
 
par:
 
keybd_event(VK_DOWN,0,0,0);
keybd_event(VK_DOWN,0,KEYEVENTF_KEYUP,0);
 
oui Black, j'y est pensé, mais je voulais faire un truc qui marche pour savoir si c'était possible.
-> Ca marche
De toutes façons, Notepad se lancerait juste après le lancement de mon appli, SI une erreur est rencontrée (j'ai pris 500 pour faire un test)
Sinon je sens que ça va encore une fois être la galère à assimiler les fonctions que tu m'indiques, qui admettent des pointeurs de CALLBACK étouétou... pffff... je suis pas rendu...


Message édité par EuZah le 24-05-2004 à 22:00:44

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  démarrer une appli externe

 

Sujets relatifs
Video de démo d'une appli java3dComment faire tourner son appli en tant que service windows?
appel d'une formule mathématique externeLancer l'appli associée à l'extension (Win-Linux)
Appel de modules en C à partir d'une appli Delphiutiliser des fichiers wav dans une appli java.
Création d'une appli pour Palm + base MySQLappli Java pour Palm peut-elle lire un fichier XML ?
appli Java pour Palm peut-elle lire un fichier XML ?Recuperer une page externe
Plus de sujets relatifs à : démarrer une appli externe


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR