? Strg + C wie 'abfangen'

Anfängerfragen zum Programmieren mit PureBasic.
Charly
Beiträge: 39
Registriert: 20.02.2010 20:10

? Strg + C wie 'abfangen'

Beitrag 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 ?
vlG Charly / PB 5.42 x86
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: ? Strg + C wie 'abfangen'

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ? Strg + C wie 'abfangen'

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: ? Strg + C wie 'abfangen'

Beitrag von ts-soft »

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Charly
Beiträge: 39
Registriert: 20.02.2010 20:10

Re: ? Strg + C wie 'abfangen'

Beitrag 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) )
vlG Charly / PB 5.42 x86
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ? Strg + C wie 'abfangen'

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ? Strg + C wie 'abfangen'

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Charly
Beiträge: 39
Registriert: 20.02.2010 20:10

Re: ? Strg + C wie 'abfangen'

Beitrag 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)
vlG Charly / PB 5.42 x86
Antworten