Vraag Mijn console-applicatie onzichtbaar maken


Ik ontwikkel een consoletoepassing voor mijn openbare bibliotheek als een schoolproject. De consoletoepassing wordt uitgevoerd zodra de gebruiker zich aanmeldt en wat achtergrondwerk doet.

Het punt is, ik wil niet dat de console-applicatie daadwerkelijk verschijnt. Ik heb het onzichtbaar nodig. Het laatste wat ik nodig heb is klachten omdat sommige mensen in de war raakten dat er een CMD-venster werd geopend en gesloten, daarnaast wilde de bibliotheek het zo onzichtbaar mogelijk maken.

Ik heb geprobeerd de code in deze thread te volgen: http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/ea8b0fd5-a660-46f9-9dcb-d525cc22dcbd

maar tevergeefs, ik kan nog steeds de console-applicatie zien opengaan en sluiten nadat deze al het werk heeft gedaan.

Is er een betere manier om te voorkomen dat de console verschijnt? Bedankt.


19
2017-08-16 21:46


oorsprong


antwoorden:


Het beste ding om te doen is gewoon niet compileren als een console-applicatie! Compileer het als een Windows EXE en er zal geen console verschijnen. Dan kunt u gewoon doen wat u moet doen in de hoofdmethode zonder een gebruikersinterface te tonen.

Maar in elk geval, als je het consolevenster moet verbergen / tonen, zou ik het gebruik van FindWindow voor deze taak vermijden, omdat er een veel betrouwbaardere API voor is: GetConsoleWindow. Dit geeft je de HWND van het consolevenster en je kunt proberen dat door te geven aan ShowWindow.


36
2017-08-16 21:49



Als Josh Einstein heeft voorgesteld dat je kunt gebruiken ShowWindow Api om je raam te verbergen.

Hier is een voorbeeld:

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
    }
}

Ik ben niet zeker van deze code omdat ik deze niet heb getest. Laat het me weten als je een probleem tegenkomt.


15
2017-08-17 09:20



Heeft u het geprobeerd: Projecteigenschappen> Toepassing> Uitgang Type: naar "Windows-toepassing"?


8
2017-08-16 21:49



Het is een beetje ingewikkelder dan een console-applicatie ... maar als je wilt dat er echt iets op de achtergrond draait als iemand inlogt, kun je een Windows Service-applicatie maken.

Maar het vereist een beetje extra werk bij het instellen en installeren van de Windows-service, maar er is een overvloed aan voorbeeldcode op het 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
2017-08-16 21:57



Hallo, ik was bezig met het maken van een Console-toepassing die door de taakplanner wordt gebeld. Ik wilde niet dat de console-app wordt weergegeven, dus heb ik de projecteigenschappen gewijzigd om de uitvoer naar Windows-toepassing te krijgen.

Verander het uitvoertype naar Windows-applicatie Ga naar: Project -> Projecteigenschappen En verander het uitvoertype naar Windows Application


2
2017-11-04 14:40



Ik heb beide methoden geprobeerd 2) Searock en toen 1) Josh --- met de oplossing van Searock verscheen het console app-venster nog steeds, hoewel het een heel kort moment was --- echter met de oplossing van Josh verscheen de console niet en had mijn programma geen problemen - natuurlijk moest ik alle console.writeline-oproepen vervangen door een oproep die de informatie uitlogde naar een logbestand

Opmerking: ik zou net de oplossing van Josh hebben opgemerkt, maar dat kan ik nog niet helemaal :)


0
2018-05-17 03:07