Bei Consolenprogramm schliessen verhindern
-
- Beiträge: 659
- Registriert: 19.10.2014 15:51
- Kontaktdaten:
Bei Consolenprogramm schliessen verhindern
Ich habe ein Consolenprogramm geschrieben, muss aber leider feststellen, dass sich die Console bei strg+c schliesst.
Kann ich das irgendwie verhindern?
(Windows+Linux)
Kann ich das irgendwie verhindern?
(Windows+Linux)
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Linux Mint 21.x
Re: Bei Consolenprogramm schliessen verhindern
Wenn Dein Konsolenprogramm nur Ausgaben macht:
Mein Tipp wäre, eine Art "Shell" mit PB zu erstellen, mit der Du Dein Konsolenprogramm mittels RunProgram() aufrufst und dessen Ausgabe über ReadProgramString() in einem Fenster ausgeben lässt.
Dürfte sowohl für Windows als auch für Linux die einfachste Möglichkeit sein.
Mein Tipp wäre, eine Art "Shell" mit PB zu erstellen, mit der Du Dein Konsolenprogramm mittels RunProgram() aufrufst und dessen Ausgabe über ReadProgramString() in einem Fenster ausgeben lässt.
Dürfte sowohl für Windows als auch für Linux die einfachste Möglichkeit sein.
Hygge
-
- Beiträge: 659
- Registriert: 19.10.2014 15:51
- Kontaktdaten:
Re: Bei Consolenprogramm schliessen verhindern
Alles klar, vielen Dank!
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Linux Mint 21.x
- NicTheQuick
- Ein Admin
- Beiträge: 8675
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- Kontaktdaten:
Re: Bei Consolenprogramm schliessen verhindern
Ich hab mir das grad mal angeschaut und einen C-Code übersetzt. Unter Linux kann man das SIGINT-Signal, das durch STRG+C ausgelöst wird, ganz einfach abfangen:
Mit "exit" kann man das Programm beenden, mit STRG+C geht es nicht.
Man kann auch jedes andere Signal als nur SIGINT=2 abfangen. Die Liste kriegt man im Terminal mit "kill -l" und sieht so aus:
Code: Alles auswählen
Procedure term(signum.l)
PrintN("Got signal " + signum)
EndProcedure
Structure sigaction
*sa_handler
*sa_sigaction
sa_mask.l
sa_flags.l
*sa_restorer
EndStructure
Define action.sigaction
action\sa_handler = @term()
OpenConsole()
sigaction_(2, action, #Null)
Repeat
Print("What do you want? ")
Until Input() = "exit"
CloseConsole()
Man kann auch jedes andere Signal als nur SIGINT=2 abfangen. Die Liste kriegt man im Terminal mit "kill -l" und sieht so aus:
Code: Alles auswählen
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
- tft
- Beiträge: 605
- Registriert: 08.09.2004 20:18
- Computerausstattung: GTX Titan , i9 9900K , 32 GB Ram , 500 GB SSD , 3 ASUS FullHD Monitore and more
- Wohnort: Dachsen
- Kontaktdaten:
Re: Bei Consolenprogramm schliessen verhindern
Hallo,
es ist sicher schon mehr als ein Jahr her. Aber es würde mich interesieren wie der Code funktionieren soll?
den sigaction_(2, action, #Null) ist keine Funktion ... zumindestens nicht bei PB 5.72. Jemand ne Idee
Gruss TFT
es ist sicher schon mehr als ein Jahr her. Aber es würde mich interesieren wie der Code funktionieren soll?
Code: Alles auswählen
Procedure term(signum.l)
PrintN("Got signal " + signum)
EndProcedure
Structure sigaction
*sa_handler
*sa_sigaction
sa_mask.l
sa_flags.l
*sa_restorer
EndStructure
Define action.sigaction
action\sa_handler = @term()
OpenConsole()
sigaction_(2, action, #Null)
Repeat
Print("What do you want? ")
Until Input() = "exit"
CloseConsole()
Gruss TFT
TFT seid 1989 , Turgut Frank Temucin , Dachsen/Berlin/Antalya
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak
Re: Bei Consolenprogramm schliessen verhindern
Funktioniert unter Linux und macOS ...
So nicht unter Windows
So nicht unter Windows
Zuletzt geändert von mk-soft am 19.09.2020 20:03, insgesamt 1-mal geändert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Re: Bei Consolenprogramm schliessen verhindern
Ich weiss nicht warum man bei windows das Signal wieder setzen muss.
Wenn man es nicht macht, führt es beim zweiten zum Ende.
Wenn man es nicht macht, führt es beim zweiten zum Ende.
Code: Alles auswählen
;-TOP
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
Import ""
signal(a, callback)
EndImport
CompilerEndIf
Structure sigaction
*sa_handler
*sa_sigaction
sa_mask.l
sa_flags.l
*sa_restorer
EndStructure
; ----
Procedure term(signum.i)
PrintN("Got signal " + signum)
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
signal(2, @term())
CompilerEndIf
EndProcedure
OpenConsole()
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
signal(2, @term())
CompilerElse
Define action.sigaction
action\sa_handler = @term()
sigaction_(2, action, #Null)
CompilerEndIf
Repeat
Print("What do you want? ")
Until Input() = "exit"
CloseConsole()
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
- tft
- Beiträge: 605
- Registriert: 08.09.2004 20:18
- Computerausstattung: GTX Titan , i9 9900K , 32 GB Ram , 500 GB SSD , 3 ASUS FullHD Monitore and more
- Wohnort: Dachsen
- Kontaktdaten:
Re: Bei Consolenprogramm schliessen verhindern
sorry ... bei mir .... W10 mit PB 5.72 lässt sich der Close Bitton bei der Console nicht umgehen .....
Weiter Ideen ?
Gruss TFT
Weiter Ideen ?
Gruss TFT
TFT seid 1989 , Turgut Frank Temucin , Dachsen/Berlin/Antalya
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak
Aktuelles Projekte : Driving School Evergarden
YouTube : Pure Basic to go
FaceBook : Temuçin SourceMAgic Games
DISCORD : SourceMagic
W10 , i9 9900K ,32 GB Ram , GTX Titan , 3 Monitore FHD
ARDUINO Freak