2010-12-07 45 views
4

J'ai une application windows C++ natif qui lance deux processus enfants en utilisant le code suivant -Comment lancer l'application de la console à l'aide CreateProcess avec fenêtre principale Minimized

if (!CreateProcess(NULL, // No module name (use command line) 
    cmdLine, // szCmdline, // Command line 
    NULL, // Process handle not inheritable 
    NULL, // Thread handle not inheritable 
    false, // Set handle inheritance to FALSE 
    CREATE_DEFAULT_ERROR_MODE | NORMAL_PRIORITY_CLASS // Process Create Flags 
    NULL, // Use parent's environment block 
    NULL, // workingDir, // Use parent's starting directory 
    &si, // Pointer to STARTUPINFO structure 
    &pi) // Pointer to PROCESS_INFORMATION structure 

avec tous les paramètres dans le bloc STARTUPINFO 0. Cette de code fonctionne bien dans le lancement des processus. Cependant, j'ai besoin de pouvoir lancer les applications de la console Windows C++ avec leurs fenêtres minimisées.

Si j'ajoute CREATE_NO_WINDOW au processus Créer des indicateurs, je peux lancer les processus sans aucune fenêtre. Ce sera inacceptable.

Dans mes recherches, il ne semble pas y avoir un moyen d'obliger une application console à s'ouvrir dans un mode réduit. Est-ce correct?

Oui, je sais que je pourrais minimiser les fenêtres de l'application enfant à partir de leur propre processus, cependant, les autres programmeurs de l'équipe préfèrent ne pas le faire.

Répondre

7

Vous devez spécifier dans la structure STARTUPINFO que vous voulez que votre fenêtre de console pour être d'abord réduite au minimum:

ZeroMemory(&si); 
si.cb = sizeof(STARTUPINFO); 
si.dwFlags = STARTF_USESHOWWINDOW; 
si.wShowWindow = SW_MINIMIZE; 
+0

Cela ne fonctionne que sur les applications Windows natives, console pas des applications en mode. –

+0

@Hans, vraiment? La documentation a un cas particulier pour les "processus GUI", alors quel est le cas général si les applications console ne sont pas supportées? :) –

+0

Vous ne savez pas ce que vous demandez. La valeur est passée à WinMain, argument nCmdShow. Les applications en mode console n'ont pas de WinMain. De nombreuses applications GUI l'ignorent également. –