C# Consolenanwendung - Pause verhindern

Ghost_Rider_R

Lieutenant
Registriert
Nov. 2009
Beiträge
752
Hallo zusammen,

wenn man eine Konsolenanwendung in C# schreibt wird diese immer pausiert, wenn die Pause-Taste gedrückt wird. Drückt man anschließend auf die Leertaste geht es wieder weiter.

Lässt sich das irgendwie deaktivieren oder im Programm abfangen, damit eine Anwendung nicht versehentlich pausiert ist?

Danke für die Info.

LG Ghost_Rider
 
Hallo,

ein paar Informationen wären hilfreich. Irgendwelche Abhängigkeiten, Libraries etc, die du verwendest?

Eine normale C#- Konsolenanwendung (.Net Framework) wird nicht durch die Pause-Taste pausiert. Habe ich gearde ausprobiert.
 
.NET Framework 4.7.2, normale Konsolen-App, ich habe eben ein Beispielprojekt angehängt, da kann man es ganz easy nachvollziehen.
Ergänzung ()

...geht das nur über die Hooks? ich finde den Prozess relativ sperrig, wäre schön wenn es da was kürzeres gäbe z.B. über einen Thread der permanent prüft, ob die Anwendung pausiert ist und ggf. dann ein fortsetzten einleitet oder sowas. Weiß da jemand was?
 

Anhänge

  • test.zip
    18,1 KB · Aufrufe: 159
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: SomeDifferent
Interessant, ist mir tatsächlich nicht aufgefallen :)
 
Ghost_Rider_R schrieb:
z.B. über einen Thread der permanent prüft,
Halt das Gegenteil von performant.
Keyhooks sind schon "the way to go". Und die paar Zeilen sind nun nicht grade "sperrig".
 
  • Gefällt mir
Reaktionen: Ghost_Rider_R
...meinte das auch nur da man die komplette andere Klasse mit implementieren muss. Aber ok dann weiß ich da jetzt Bescheid, beim ersten Test funktioiniert es auch. Dachte nur dass es da eventuell ein Attribut oder sowas gibt was man setzten kann und der Drops wäre gelutscht :-) Vielen Dank für eure Hilfe!
 
@Ghost_Rider_R Du kannst es auch in eine externe Klasse schubsen und als Attribut implementieren. 🤔 Der Sinn dahinter ist dann ein anderer.
 
Ich sags mal so, ich habe mir für alle Funktionen die ich häufig verwende (E-Mail senden, Datenbankzugriffe, auch Tastaturhooks :-), etc.) eigene Klassen bzw. Methoden geschrieben, welche ich dann bei neuen Anwendungen via Copy & Paste zusammen schubse, dann geht das immer recht flott, von dem her wäre da eine einfache Lösung schön gewesen aber wenns da nichts einfaches gib, dann ok. Noch was anderes, ich habe jetzt rausgefunden wie ich meine Anwendung versehenltich pausiert habe und zwar war das nicht die Pause Taste (das merkt man ja eigentlich) sondern ich habe beim minimieren wohl irgendwie den angezeigten Text der Console markiert, daraufhin erscheint in der Titelleiste ,,Auswählen" und die Anwendung wird pausiert und das kann schnell mal unabsichtlich passieren... Lässt sich das auch mit einem Hook abfangen nehme ich an? Sieht dann so aus:

1594798291004.png


LG Ghost Rider
Ergänzung ()

ich hab auch schon die Lösung gefunden, anbei der Code für alle um den Edit-Modus zu deaktiveieren:

private const uint ENABLE_QUICK_EDIT = 0x0040;
private const int STD_INPUT_HANDLE = -10;
[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr GetStdHandle(int nStdHandle);
[DllImport("kernel32.dll")]
static extern bool GetConsoleMode(IntPtr hConsoleHandle, out uint lpMode);
[DllImport("kernel32.dll")]
static extern bool SetConsoleMode(IntPtr hConsoleHandle, uint dwMode);

private static bool deaktivierenKonsolenEditModus()
{
IntPtr consoleHandle = GetStdHandle(STD_INPUT_HANDLE);
uint consoleMode;
if (!GetConsoleMode(consoleHandle, out consoleMode))
return false;
consoleMode &= ~ENABLE_QUICK_EDIT;
if (!SetConsoleMode(consoleHandle, consoleMode))
return false;
return true;
}
 
Zuletzt bearbeitet:
Zurück
Oben