wake-up-neo.com

Meine Konsolenanwendung unsichtbar machen

Ich entwickle eine Konsolenanwendung für meine öffentliche Bibliothek als Schulprojekt. Die Konsolenanwendung wird ausgeführt, sobald sich der Benutzer anmeldet und Hintergrundarbeiten ausführt.

Die Sache ist, ich möchte nicht, dass die Konsolenanwendung tatsächlich angezeigt wird. Ich brauche es unsichtbar. Das Letzte, was ich brauche, sind Beschwerden, weil einige Leute ausgeflippt sind, dass ein CMD-Fenster geöffnet und geschlossen wird, außerdem möchte die Bibliothek, dass es so unsichtbar wie möglich ist.

Ich habe versucht, den Code in diesem Thread zu befolgen: http://social.msdn.Microsoft.com/Forums/en-US/csharpgeneral/thread/ea8b0fd5-a660-46f9-9dcb-d525cc22dcbd

aber ohne Erfolg kann ich immer noch sehen, wie die Konsolenanwendung geöffnet und geschlossen wird, nachdem sie ihre gesamte Arbeit erledigt hat.

Gibt es eine bessere Möglichkeit, die Anzeige der Konsole zu stoppen? Vielen Dank.

19
Kratz

Am besten kompilieren Sie es einfach nicht als Konsolenanwendung! Kompiliere es als Windows EXE und es wird keine Konsole angezeigt. Dann können Sie in der Main-Methode einfach alles tun, was Sie brauchen, ohne eine Benutzeroberfläche anzuzeigen.

Aber auf jeden Fall, wenn Sie das Konsolenfenster ausblenden/einblenden müssen, würde ich es vermeiden, FindWindow für diese Aufgabe zu verwenden, da es eine viel zuverlässigere API für diese Aufgabe gibt: GetConsoleWindow . Dies gibt Ihnen den HWND des Konsolenfensters und Sie können versuchen, diesen an ShowWindow zu übergeben.

37
Josh

Wie Josh Einstein vorgeschlagen hat, können Sie ShowWindow Api verwenden, um Ihr Fenster zu verbergen.

Hier ist ein Beispiel:

using System.Runtime.InteropServices

class CommandLine
{

    [DllImport("user32.dll")]
    static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

    [DllImport("Kernel32")]
    private static extern IntPtr GetConsoleWindow();

    const int SW_HIDE=0;
    const int SW_SHOW=5;

    static void Main(string[] args)
    {
         IntPtr hwnd;
         hwnd=GetConsoleWindow();
         ShowWindow(hwnd,SW_HIDE);

         //Your logic goes here
    }
}

Ich bin mir bei diesem Code nicht sicher, da ich ihn nicht getestet habe. Lassen Sie mich wissen, wenn Sie auf ein Problem stoßen.

16
Searock

Haben Sie versucht: Projekteigenschaften> Anwendung> Ausgabetyp: auf "Windows-Anwendung"?

9
NinjaCat

Hallo, ich habe eine Konsolenanwendung erstellt, die vom Taskplaner aufgerufen werden soll. Ich wollte nicht, dass die Konsolen-App angezeigt wird, also habe ich die Projekteigenschaften so geändert, dass die Ausgabe in die Windows-Anwendung erfolgt.

Ändern Sie den Ausgabetyp in Windows-Anwendung. Wechseln Sie zu: Projekt -> Projekteigenschaften, und ändern Sie den Ausgabetyp in Windows-Anwendung

2
Nico Leguizamon

Es ist etwas komplizierter als eine Konsolenanwendung. Wenn Sie jedoch möchten, dass etwas wirklich im Hintergrund ausgeführt wird, wenn sich jemand anmeldet, können Sie eine Windows-Dienstanwendung erstellen.

Das Einrichten und Installieren des Windows-Dienstes erfordert zwar ein wenig zusätzlichen Aufwand, es gibt jedoch eine Fülle von Beispielcode im Web:

http://msdn.Microsoft.com/en-us/library/9k985bc9(v=VS.80).aspx

http://msdn.Microsoft.com/en-us/library/sd8zc8ha(v=VS.80).aspx

http://www.c-sharpcorner.com/uploadfile/mahesh/window_service11262005045007am/window_service.aspx

http://www.developer.com/net/net/article.php/2173801/Creating-a-Windows-Service-in-NET.htm

http://www.codeproject.com/KB/dotnet/simplewindowsservice.aspx

2
Lewray

Ich habe beide Methoden ausprobiert 2) Searock und dann 1) Josh - mit Searocks Lösung erschien immer noch das Konsolen-App-Fenster, obwohl für einen kurzen Moment - mit Joshs Lösung weder die Konsole angezeigt wurde, noch hatte mein Programm irgendwelche Probleme - Natürlich musste ich alle console.writeline-Aufrufe durch einen Aufruf ersetzen, bei dem die Informationen in einer Protokolldatei abgemeldet wurden

Hinweis: Ich hätte nur Joshs Lösung kommentiert, aber ich kann das noch nicht ganz tun :)

0
Dennis Jensen