NUM, CAPS und SCROLL Lock steuern und anzeigen

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
wichtel
Beiträge: 150
Registriert: 09.09.2004 08:35
Wohnort: Hattersheim

NUM, CAPS und SCROLL Lock steuern und anzeigen

Beitrag 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
PB / jaPBe jeweils aktuellste Version, seit 3.62 dabei, XP sp3 de/en & W7 en
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag 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:
Bild
Benutzeravatar
wichtel
Beiträge: 150
Registriert: 09.09.2004 08:35
Wohnort: Hattersheim

Beitrag 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
Zuletzt geändert von wichtel am 10.11.2004 17:19, insgesamt 1-mal geändert.
PB / jaPBe jeweils aktuellste Version, seit 3.62 dabei, XP sp3 de/en & W7 en
netfreak
Beiträge: 91
Registriert: 23.10.2004 18:30
Kontaktdaten:

Beitrag von netfreak »

Cool!

Also bei mir gehts einwandfrei!
mfg
netfreak
Antworten