TAB-Taste deaktivieren.

Anfängerfragen zum Programmieren mit PureBasic.
Mr.Vain
Beiträge: 88
Registriert: 29.10.2009 00:14

TAB-Taste deaktivieren.

Beitrag von Mr.Vain »

Hallo,

ich habe ein Programm geschrieben, das an einem PC bedient wird, wo nur eine abgespeckte Tastatur angeschlossen ist (ohne Maus).

STRG ALT ENTF oder ALT+F4 ist hier nicht möglich. Wie schaffe ich es, dass die TAB Taste deaktiviert wird?

Der Zeiger soll immer nur in einem Eingabefeld bleiben.
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: TAB-Taste deaktivieren.

Beitrag von Nino »

Mr.Vain hat geschrieben:ich habe ein Programm geschrieben
[...]
Wie schaffe ich es, dass die TAB Taste deaktiviert wird?
Das sollte mit AddKeyboardShortcut() gehen.

Grüße, Nino
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Re: TAB-Taste deaktivieren.

Beitrag von dysti »

Hier ein Code-Beispiel:

Code: Alles auswählen

Enumeration
  #Tab_Taste
EndEnumeration

;.............

; Tab-Taste umleiten
AddKeyboardShortcut(0, #PB_Shortcut_Tab, #Tab_Taste)

Repeat
     Event = WaitWindowEvent()
     
     Select Event
     
       Case #PB_Event_Gadget
         Select EventGadget()
           Case 1 : Debug "Schalter 1 angeklickt!"
           Case 2 : Debug "Schalter 2 angeklickt!"
         EndSelect
       
       Case #PB_Event_Menu
         Select EventMenu()
           ; Ereignis der Tab-Taste fangen wir ab
           Case 1 : #Tab_Taste : ;wir machen nichts
         EndSelect
     
     EndSelect
   Until Event = #PB_Event_CloseWindow
   
   
   ; oder....
   
   Case #PB_Event_Menu
     ; Ereignis der Tab-Taste fangen wir ab
     If EventMenu()=#Tab_Taste
     ;wir machen nichts
     EndIf
       
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: TAB-Taste deaktivieren.

Beitrag von bobobo »

das geht nur im pb-programm

Alt-Tab wird immer noch als Taskswitcher funktionieren.

Also entweder über die Rechte (insofern der Rechner bzw.OS das kann)
oder die SchraubenzieherLösung (ist ja eh schon ne SpezialTastatur, die
wird dann eben noch etwas spezieller)
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Helle
Beiträge: 566
Registriert: 11.11.2004 16:13
Wohnort: Magdeburg

Re: TAB-Taste deaktivieren.

Beitrag von Helle »

Leg in der Registry in HKLM\SYSTEM\CurrentControlSet\Control\Keyboard Layout einen neuen Binär-Wert namens "ScanCode Map" an und gib als Binär-Wert(e) 00 00 00 00 00 00 00 00 02 00 00 00 00 00 0f 00 00 00 00 00 ein. Neustart und TAB geht nicht mehr. Nach diesem Schema kann (fast) jede Taste deaktiviert oder umgelegt werden.
Gruß
Helle
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: TAB-Taste deaktivieren.

Beitrag von bobobo »

dann aber gleich vollständig (Tab-Taste geht damit nicht)
http://www.microsoft.com/downloads/en/d ... layLang=en
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: TAB-Taste deaktivieren.

Beitrag von RSBasic »

Ich würds ohne Registry nutzen, da sowieso einen extra Neustart erforderlich ist.
Besser wär es mit einem Hook:

Code: Alles auswählen

EnableExplicit

Structure KBDLLHOOKSTRUCT
  vkCode.l
  scanCode.l
  flags.l
  time.l
  dwExtraInfo.l
EndStructure

Procedure.l KeyboardHook(nCode, wParam, *p.KBDLLHOOKSTRUCT)
  If wParam = #WM_KEYDOWN Or wParam = #WM_SYSKEYDOWN Or wParam = #WM_KEYUP Or wParam = #WM_SYSKEYUP
    If *p\vkCode = 9
      ProcedureReturn 1
    EndIf
  EndIf
  ProcedureReturn CallNextHookEx_(0, nCode, wParam, *p)
EndProcedure

If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  StringGadget(1,10,10,200,20,"",0)
  StringGadget(2,10,40,200,20,"",0)
  
  SetWindowsHookEx_(#WH_KEYBOARD_LL,@KeyboardHook(),GetModuleHandle_(0),0)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Das funktioniert auch systemweit.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: TAB-Taste deaktivieren.

Beitrag von Nino »

bobobo hat geschrieben:das geht nur im pb-programm
Ja, so hatte ich die Frage verstanden.
RSBasic hat geschrieben:Das funktioniert auch systemweit.
Was ist eigentlich mit dem beliebten GetAsyncKeyState()? Geht das nicht auch systemweit? Oder lassen sich spezielle Tastenkombinationen damit nicht abfangen?

Grüße, Nino
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: TAB-Taste deaktivieren.

Beitrag von RSBasic »

Nino hat geschrieben:
RSBasic hat geschrieben:Das funktioniert auch systemweit.
Was ist eigentlich mit dem beliebten GetAsyncKeyState()? Geht das nicht auch systemweit? Oder lassen sich spezielle Tastenkombinationen damit nicht abfangen?
Nein, damit kannst du nur überprüfen, ob eine bestimmte Taste gedrückt wurde, aber du kannst damit nichts abfangen bzw. verhindern, dass die Funktion der Taste ausgeführt wird.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: TAB-Taste deaktivieren.

Beitrag von Nino »

RSBasic hat geschrieben:Nein, damit kannst du nur überprüfen, ob eine bestimmte Taste gedrückt wurde, aber du kannst damit nichts abfangen bzw. verhindern, dass die Funktion der Taste ausgeführt wird.
Stimmt ja! :oops: Da hatte ich einen Denkfehler gemacht. Danke!

Grüße, Nino
Antworten