Seite 1 von 1

? Strg + C wie 'abfangen'

Verfasst: 21.09.2016 00:32
von Charly
Hallochen

folgende kleines Testprogramm:

Code: Alles auswählen


If OpenConsole()
    EnableGraphicalConsole(1)
    
 Repeat
    a$ = Input()
    If a$="." 
      Break
    EndIf
    Print (a$)
 ForEver
    
EndIf

wenn ich das Prg nun starte und STRG+C druecke wird es beendet :roll:
wie kann ich das verhindern ?

Re: ? Strg + C wie 'abfangen'

Verfasst: 21.09.2016 08:57
von ts-soft

Code: Alles auswählen

If OpenConsole()
  SetConsoleCtrlHandler_(0, #True)
  
  EnableGraphicalConsole(1)
  
  Repeat
    a$ = Input()
    If a$="."
      Break
    EndIf
    Print (a$)
  ForEver
  
EndIf

Re: ? Strg + C wie 'abfangen'

Verfasst: 21.09.2016 09:54
von RSBasic
Und falls man nicht möchte, dass der Benutzer einfach über den X-Button schließen kann:

Code: Alles auswählen

EnableExplicit

Define a$
Define ConsoleHandle

If OpenLibrary(0, "Kernel32.dll")
  Prototype GetConsoleWindow()
  Define GetConsoleWindow.GetConsoleWindow = GetFunction(0, "GetConsoleWindow")
  CloseLibrary(0)
EndIf

If OpenConsole()
  SetConsoleCtrlHandler_(0, #True)
  
  ConsoleHandle = GetConsoleWindow()
  EnableMenuItem_(GetSystemMenu_(ConsoleHandle, #False), #SC_CLOSE, #MF_DISABLED)
  
  EnableGraphicalConsole(1)
  
  Repeat
    a$ = Input()
    If a$="."
      Break
    EndIf
    Print (a$)
  ForEver
EndIf

Re: ? Strg + C wie 'abfangen'

Verfasst: 21.09.2016 10:18
von ts-soft

Re: ? Strg + C wie 'abfangen'

Verfasst: 21.09.2016 10:25
von Charly
vieeelen dank, aber:

1. wo findet man diese info?, i hab in der Hilfe nicht gefunden ;(

2. wie bekommt mein Prg. mit das Strg+C gedrueckt wurde ? (brauch es fuer Copy & Past (ctrl+c / ctrl+v) )

Re: ? Strg + C wie 'abfangen'

Verfasst: 21.09.2016 10:34
von RSBasic
Charly hat geschrieben:1. wo findet man diese info?, i hab in der Hilfe nicht gefunden ;(
Das sind WinAPIs und werden von Windows bereitgestellt. Diese haben mit PB nichts zu tun. WinAPIs werden am Ende des Funktionsnamens mit einem _ gekennzeichnet.
PB bietet nur ein Bruchteil der Funktionen an. Alle Funktionen findest du auf der Microsoft MSDN-Seite.
Wenn du die MSDN-Seite einer bestimmten Funktion öffnen möchtest, einfach "SendMessage msdn" googlen. (Beispiel)
Charly hat geschrieben:2. wie bekommt mein Prg. mit das Strg+C gedrueckt wurde ? (brauch es fuer Copy & Past (ctrl+c / ctrl+v) )
Du kannst bei SetConsoleCtrlHandler_() im ersten Parameter eine Prozedur angeben:

Code: Alles auswählen

EnableExplicit

Define a$
Define ConsoleHandle

If OpenLibrary(0, "Kernel32.dll")
  Prototype GetConsoleWindow()
  Define GetConsoleWindow.GetConsoleWindow = GetFunction(0, "GetConsoleWindow")
  CloseLibrary(0)
EndIf

Procedure ConsoleCtrlHandler()
  Debug "Hier koennen noch wichtige Einstellungen gespeichert werden..."
  Delay(2000)
  Debug "Fertig, Ende."
EndProcedure

If OpenConsole()
  SetConsoleCtrlHandler_(@ConsoleCtrlHandler(), #True)
 
  ConsoleHandle = GetConsoleWindow()
  EnableMenuItem_(GetSystemMenu_(ConsoleHandle, #False), #SC_CLOSE, #MF_DISABLED)
 
  EnableGraphicalConsole(1)
 
  Repeat
    a$ = Input()
    If a$="."
      Break
    EndIf
    Print (a$)
  ForEver
EndIf

Re: ? Strg + C wie 'abfangen'

Verfasst: 21.09.2016 10:43
von RSBasic
Da du bereits online warst, muss ich leider einen Doppelbeitrag schreiben.

Wenn man innerhalb der Konsole was markieren, kopieren und einfügen möchte, dann bitte über das Programmmenü: Programmicon > Bearbeiten > Markieren > Text markieren und Strg + C drücken
Das ist ein Standardverhalten und das sollten die Konsolenbenutzer kennen.

Re: ? Strg + C wie 'abfangen'

Verfasst: 21.09.2016 10:56
von Charly
moinmoin & danke f. die Antworten,

kurz zur erleuterung, i versuche ein PRG. zu erstellen das ohne Mausbedienung auskommt,
da es im 'schwierigen' umfeld 'bedient' wird und die Maus da stroert.......

markieren soll ueber shift+pfeiltasten laufen, ctrl+c kopiert, ctrl+v fuegt ein
auch erkennt das Prg. welcher Parameter eingegeben wurde....
(dh. wenn i das richtg verstanden habe laeuft alles ueber inkey & rawkey )

das ist so im moment die 'grund idee' , mal sehen wie weit ich als frischling komme..........

(ist ein freeware projekt)