Ukryj okno konsoli w aplikacji konsoli C #


105

Rzecz w tym, że naprawdę nie chcę, aby okno konsoli się wyświetlało ... ale rozwiązanie powinno działać. Chodzi mi o to, że chcę, aby aplikacja działała w tle, bez otwierania żadnego okna.


2
Czy możesz nam podać trochę więcej informacji na temat tego, co ma robić aplikacja? Wygląda na to, że powinna to być usługa lub aplikacja Windows? Mając niewielką wiedzę na temat jego celu, bylibyśmy w stanie pomóc znacznie więcej i zaproponować najlepszy sposób rozwiązania tego problemu.
Dave

Jego aplikacja keylogger. Użyłem usługi Windows, ale nie mogę uzyskać kluczowych stanów w usłudze Windows
Użytkownik SOF

Odpowiedzi:


188

Zmień typ wyjścia z aplikacji konsoli do aplikacji Windows . Można to zrobić w obszarze Projekt -> Właściwości -> Aplikacja w programie Visual Studio:

tekst alternatywny


4
Okno konsoli miga i wraca. Jak sprawić, by aplikacja działała bez żadnego okna?
Użytkownik SOF

@SOF Użytkownik: Jak uruchomić aplikację? Dwukrotne kliknięcie w Eksploratorze lub w menu Start?
Dirk Vollmar

umieściłem również Console.ReadLine ();
Użytkownik SOF

16
Usuń Console.ReadLine. Nie ma sensu, jeśli nie masz okna konsoli.
Dirk Vollmar

1
@ KarolŻurowski: Pomysł jest taki, że użyjesz tego dla aplikacji, które są również wyposażone w jakąś formę interfejsu użytkownika (np. Ikona na pasku zadań) lub aplikacje, które wykonują określone zadanie, a następnie zamykają się automatycznie po zakończeniu. Jeśli nie masz żadnego, aplikacja będzie działać w tle do czasu wylogowania / zamknięcia lub do momentu jawnego zabicia, np. Przy użyciu Menedżera zadań.
Dirk Vollmar

26

Zmień typ aplikacji na aplikację Windows. Twój kod będzie nadal działał, ale nie będzie miał okna konsoli ani standardowego okna systemu Windows, chyba że je utworzysz.


2
Okno konsoli miga i wraca. Jak sprawić, by aplikacja działała bez żadnego okna?
Użytkownik SOF

Upewnij się, że się nie zakończy. Nie ma nic więcej do powiedzenia bez dodatkowych informacji. Co robi program? Czy uruchamia coś w pętli?
Lasse V. Karlsen

12

Zamiast Console.Readline/keyciebie możesz new ManualResetEvent(false).WaitOne()w końcu użyć . To działa dobrze dla mnie.


3

Może chcesz spróbować utworzyć aplikację usługi Windows . Będzie działać w tle, bez interfejsu użytkownika.


3
Usługa Windows nie może uzyskać zdarzeń naciśnięcia klawisza
użytkownik SOF

1
Usługi są poważnie ograniczone w zależności od aplikacji, ponieważ od systemu Windows Vista są zmuszane do włączenia sesji 0, a zatem nie mogą wykonywać żadnych czynności w innych sesjach, takich jak wyświetlanie wyskakujących komunikatów.
Matt

1
@Matt „nie może wykonać niczego w innych sesjach” nie jest do końca prawdą. Oto projekt kodu dla usługi, który otwiera wiersz polecenia administratora na pulpicie zalogowanego użytkownika. codeproject.com/Articles/35773/…
Qodex

0

Zmień typ wyjścia z aplikacji konsoli do aplikacji Windows ,

I zamiast tego Console.Readline/keymożesz użyć new ManualResetEvent(false).WaitOne()na końcu, aby aplikacja działała.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.