1

Quelle methode utilisez-vous pour lancer un programme (une ligne de commande plutot) et recuperer le hwnd de la fenetre que ca ouvre (pour pouvoir le fermer plus tard) (sachant que findwindow spa top parce que je peux avoir plusieurs fenetres avec le meme nom mais je ne veux fermer que celle que j'ai lancée) ?

2

Bin si tu veux lister les fenetres actives a un instant T via EnumWindows (si le nom de ta fenetre est inconnu).

3

ouais mais je ne peux pas me base sur le nom de la fenetre vu qu'il peut yen avoir plusieurs avec le meme nom et que je ne veux toucher qu'a la fenetre que je viens de lancer

4

EnumWindows(), et tu fais un GetWindowThreadProcessId() pour chaque fenêtre trouvée.
Puisque le ProcessID est retourné par CreateProcess(), tu devrais pouvoir savoir assez facilement quelle fenêtre appartient au processus lancé...

(SAUF si c'est un processus console: La fenêtre console n'appartient pas au processus en question. Pour trouver la fenêtre d'un processus console, c'est beaucoup plus dur, et même pratiquement impossible si ce n'est pas un processus que le programme lance lui-même)
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

5

adId); }j'ai fait ca BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM param) {      DWORD id = GetWindowThreadProcessId(hwnd, NULL);      if (id == (DWORD) param)         {             MessageBox(0, "blabla", "Error", MB_ICONERROR | MB_OK);             ShowWindow(hwnd, SW_HIDE);             return false;         }      return true;  }    void Projet1Frm::WxButton1Click(wxCommandEvent& event) {     STARTUPINFO si;     PROCESS_INFORMATION pi;     ZeroMemory( &si, sizeof(si) );     si.cb = sizeof(si);     ZeroMemory( &pi, sizeof(pi) );     if( !CreateProcess( NULL,         "\"c:\program files\videolan\VLC\vlc.exe\" udp://@224.3.2.1:1234 :demux=dump :demuxdump-file=c:\fichier.mpeg",           NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi ))                    return;      EnumWindows(&EnumWindowsProc, pi.dwThre
et ya pas la messagebox qui s'affiche, ni la fenetre qui se cache, meme chose en remplacant le dwThreadId avec dwProcessId ...

6

Bon je suis repassé a C#.NET ca marche tellement mieux

7

Ton problème c'est que tu énumère les fenetres juste après avoir lancé le processus. Voilà ce qui se passe :

1) tu lances le processus VLC
2) tu énumères les fenetres => tu ne vois pas VLC
3) quelques millisecondes (voire quelques secondes) plus tard, le processus VLC a la main et crée sa fenêtre.

Forcément tu vois pas la fenêtre, ça semble évident.

Essaie d'insérer un WaitForInputIdle(pi.hProcess, INFINITE) avant d'énumérer les fenêtres.

(en plus tu aurais lu la documentation de CreateProcess, c'est écrit dedans roll tongue)

8

ouais il me semblait bien que c'etait un probleme de temps, mais j'avais pas vu cette ligne ^^ thx (mais bon .NET cay mieux tongue)