Seite 1 von 2

TAB-Taste deaktivieren.

Verfasst: 08.10.2010 08:54
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.

Re: TAB-Taste deaktivieren.

Verfasst: 08.10.2010 13:10
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

Re: TAB-Taste deaktivieren.

Verfasst: 08.10.2010 13:31
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
       

Re: TAB-Taste deaktivieren.

Verfasst: 08.10.2010 14:21
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)

Re: TAB-Taste deaktivieren.

Verfasst: 08.10.2010 15:16
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

Re: TAB-Taste deaktivieren.

Verfasst: 08.10.2010 15:21
von bobobo
dann aber gleich vollständig (Tab-Taste geht damit nicht)
http://www.microsoft.com/downloads/en/d ... layLang=en

Re: TAB-Taste deaktivieren.

Verfasst: 08.10.2010 17:21
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.

Re: TAB-Taste deaktivieren.

Verfasst: 08.10.2010 19:15
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

Re: TAB-Taste deaktivieren.

Verfasst: 08.10.2010 19:30
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.

Re: TAB-Taste deaktivieren.

Verfasst: 08.10.2010 19:59
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