Seite 1 von 1

NUM, CAPS und SCROLL Lock steuern und anzeigen

Verfasst: 10.11.2004 16:23
von wichtel
Hiermit kann man die Num-, Caps- und Scrolllock Tasten setzen und auslesen.

Code: Alles auswählen


#VK_NUMLOCK
#VK_CAPITAL
#VK_SCROLL


Enumeration
  #window
  #keynumlock
  #keycapslock
  #keyscrolllock
EndEnumeration  
  
Procedure MyGetKey(mykey)
  ret=GetKeyState_(mykey)
  ProcedureReturn ret
EndProcedure  

Procedure MySetKey(mykey,mystate)
  If MyGetKey(mykey)<>mystate
    keybd_event_(mykey,0,0,0)
    keybd_event_(mykey,0,#KEYEVENTF_KEYUP,0)
  EndIf
EndProcedure  

OpenWindow(#window,0,0,220,100,#PB_Window_ScreenCentered|#PB_Window_SystemMenu ,"Status Keys")
CreateGadgetList(WindowID(#window))
ButtonGadget(#keynumlock,10,10,60,60,"NUM LOCK",#PB_Button_MultiLine|#PB_Button_Toggle)
ButtonGadget(#keycapslock,80,10,60,60,"CAPS LOCK",#PB_Button_MultiLine|#PB_Button_Toggle)
ButtonGadget(#keyscrolllock,150,10,60,60,"SCROLL LOCK",#PB_Button_MultiLine|#PB_Button_Toggle)

Repeat
  EventID=WaitWindowEvent()
  
  If EventID = #PB_EventGadget
    GadgetID = EventGadgetID()
    If GadgetID = #keynumlock
      MySetKey(#VK_NUMLOCK,GetGadgetState(#keynumlock))
    EndIf
    If GadgetID = #keycapslock
      MySetKey(#VK_CAPITAL,GetGadgetState(#keycapslock))
    EndIf
    If GadgetID = #keyscrolllock
      MySetKey(#VK_SCROLL,GetGadgetState(#keyscrolllock))
    EndIf
  Else
    ret=MyGetKey(#VK_NUMLOCK)
    If ret<>GetGadgetState(#keynumlock)
      SetGadgetState(#keynumlock,ret)
    EndIf  
    ret=MyGetKey(#VK_CAPITAL)
    If ret<>GetGadgetState(#keycapslock)
      SetGadgetState(#keycapslock,ret)
    EndIf  
    ret=MyGetKey(#VK_SCROLL)
    If ret<>GetGadgetState(#keyscrolllock)
      SetGadgetState(#keyscrolllock,ret)
    EndIf  
  EndIf    
Until EventID = #PB_EventCloseWindow

Verfasst: 10.11.2004 16:46
von NicTheQuick
Bei mir wird die Feststelltaste erst durch das normale Shift wieder zurückgesetzt. Das heißt mit der Umschalt-Taste kann ich die Lampe nur anmachen.

Das kann man übrigens in den Tastatur-Optionen bzw. bei den Treibern dafür einstellen. Also universel einsetzbar wäre diese Lösung wohl nicht, aber trotzdem eine interessante Idee einfach die Tasten zu simulieren. :wink:

Verfasst: 10.11.2004 16:55
von wichtel
@NIC
Bei mir tut es....hast du noch win98, da muss man was ändern (weis nur nicht was im Moment)

Habe es vorher hardcore mit port 60h versucht.
(http://os.inf.tu-dresden.de/fiasco/doxy ... ource.html)
Lampen an/aus klappt da auch prima, aber nicht wenn man eine USB Tastatur hat.


EDIT: Sollte aber gehen....
http://msdn.microsoft.com/library/defau ... _event.asp

Verfasst: 10.11.2004 16:55
von netfreak
Cool!

Also bei mir gehts einwandfrei!