Frage

Ich bin mit Createprocess () mit Start-up-Flags auf STARTF_USESHOWWINDOW und SW_HIDE eine Anwendung im Hintergrund mit dem Fenster versteckt zu starten. Ich tue dies, um eine geplante Wartungsaufgaben ausgeführt werden, und ich will nicht mit Fenstern belästigt werden.

In den meisten Fällen sind die Fenster versteckt, aber es gibt Fälle, in denen das Fenster des Programms direkt aus vor Ihnen erscheinen (zum Beispiel Google Chrome - ich begann Tests mit verschiedenen Anwendungen, um zu sehen, ob dies ein einmal Zeit Problem war, aber nee .. )..

Dies geschieht weniger in Windows XP, aber es passiert eine Menge auf Vista.

Gibt es ein Flag, das ich fehle? Gibt es einen anderen Weg, um einen Prozess mit dem Fenster versteckt zu schaffen?

Danke!

mein Beispielcode:

char *ProgramName  
STARTUPINFO StartupInfoF;
PROCESS_INFORMATION ProcessInfoF;

memset(&StartupInfoF, 0, sizeof(StartupInfoF));
memset(&ProcessInfoF, 0, sizeof(ProcessInfoF));

StartupInfoF.cb = sizeof(StartupInfoF);
StartupInfoF.wShowWindow = SW_HIDE;
StartupInfoF.dwFlags = STARTF_USESHOWWINDOW;    

if (CreateProcess(ProgramName,
                  "",                 
                  0,
                  0,
                  FALSE,
                  DETACHED_PROCESS,
                  0,
                  0,                              
                  &StartupInfoF,
                  &ProcessInfoF) == FALSE)
{
  // error
}
else
{
  // OK
}
War es hilfreich?

Lösung

Sie können den Prozess auf einem anderen Desktop starten, das lpDesktop Mitglied der Struktur zu Createprocess übergeben STARTUP verwenden. Auf diese Weise wird der Prozess alle seine Fenster gezeigt, aber auf einem anderen Desktop, so dass Sie (oder Ihre Benutzer) nicht damit belästigt werden.

Ich habe nie gearbeitet mit mehreren Desktops, so kann ich nicht sagen, was die Nebenwirkungen wären, aber ich denke, es ist machbar. Beginnen Sie, indem Sie in Create und vorwärts bewegen.

Andere Tipps

Ich erinnere mich nicht die Antwort auf Ihre Frage, aber ich möchte vorschlagen, dass vielleicht sollten Sie nicht aus dem Fenster halten total versteckt? Wenn Sie das Fenster aus dem Weg wollen, minimiert es genügt; versteckt sie vollständig nur entfernt die Fähigkeit, sich auf dem geplanten Wartungsaufgaben zu überprüfen.

Einige Programme könnten ignorieren / Überschreibung SW_HIDE Flagge. Sie könnten versuchen, Fenster zu verstecken, nachdem Kind-Prozess gestartet.

Eine andere Möglichkeit ist, zu versuchen CreateProcessAsUser zu verwenden Prozesse in Sitzung 0 ausgeführt werden, die Desktop (ab Vista-Version) isoliert wurde.

Ich würde vorschlagen, dass es sich um eine Dienstleistung zu machen. Für eine Sache, die es ermöglicht geplanten maintanence zu laufen, auch wenn niemand angemeldet ist. Zum anderen ist es ziemlich einfach Dienste bis zu setzen, so dass sie keinen Zugriff auf den Desktop.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top