Status der CAPS-LOCK Taste prüfen

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
SORUS
Beiträge: 7
Registriert: 20.11.2004 05:56
Wohnort: Winterthur
Kontaktdaten:

Status der CAPS-LOCK Taste prüfen

Beitrag von SORUS »

Sali zäme

Ich kriegs einfach nicht hin! Wie kann ich in PureBasic den Status der CAPS-Lock-Taste prüfen? Ich möchte nur wissen ob CAPS-Lock eingeschaltet ist wenn ich mein Programm starte oder ob die Taste nicht aktiviert ist. Gibt es dazu eine Möglichkeit und kann mir jemand helfen?
(Es geht bei meinem Problem wirklich NUR um die CAPS-LOCK-Taste. Ich frage auch andere Tasten ab, die funktionieren alle ohne Problem.)
Die anderen Tasten habe ich in folgender Form abgefragt:

Code: Alles auswählen

  If GetAsyncKeyState_(#VK_ESCAPE)=-32767 
    Debug "'ESCAPE' wurde gedrückt"
  EndIf
Grüsse aus der Schweiz.
Zuletzt geändert von SORUS am 20.11.2004 11:43, insgesamt 1-mal geändert.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Du solltest das ganze nicht per IF GetAsyncKeyState_(#VK_...) = -32767 machen, da es auch andere Rückgabewerte haben könnte. Mach das über IF GetAsyncKeyState_(#VK_...) <> 0

PS: Codeeinrückung bitte benutzen!
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
real
Beiträge: 468
Registriert: 05.10.2004 14:43

Beitrag von real »

@DarkDragon: Ich glaube das war kein Tipp der zum Erfolg führt (obwohl die Bitte um CODE-Einrückung natürlich der Übersichtlichkeit dient). Soweit ich SORUS verstanden habe will er nicht wissen ob die Caps-Lock-Taste gedrückt ist sondern welchen Zustand Caps-Lock zum Start seines Programms hat.
Robert
Beiträge: 25
Registriert: 14.09.2004 23:24

Beitrag von Robert »

Hallo Sorus,

den Status von den Caps-, Num- und Scroll-Lock-Tasten bekommst du mit:

Code: Alles auswählen

Procedure GetKeyState(VKKey.l)
  Dim keyState.b(256)
  GetKeyboardState_(@keyState(0))
  debug KeyState(VKKEY)
EndProcedure

GetKeyState(#VK_CAPITAL)
Fürs An- und Ausschalten gibts ein Beispiel im Code-Archiv unter Windows_System\Hardware\SetScrollLED.pb oder auch SetLEDKey.pb.
Robert
Benutzeravatar
SORUS
Beiträge: 7
Registriert: 20.11.2004 05:56
Wohnort: Winterthur
Kontaktdaten:

Thx!

Beitrag von SORUS »

Da fällt mir ein Stein vom Herzen. Endlich funktioniert das nun auch!

Wegen der Code einrückung - Sorry...! Werde das nächste Mal darauf achten.

Greetz,
SORUS
real
Beiträge: 468
Registriert: 05.10.2004 14:43

Beitrag von real »

Da war ich wohl zu langsam :(

Trotzdem nochmal die kürzere Variante:

Code: Alles auswählen

If (GetKeyState_(#VK_CAPITAL)=1) 
  MessageRequester("Caps-Lock","...ist aktiv!",#PB_MessageRequester_Ok)
Else
  MessageRequester("Caps-Lock","...ist NICHT aktiv!",#PB_MessageRequester_Ok)
EndIf 
Zuletzt geändert von real am 20.11.2004 11:33, insgesamt 1-mal geändert.
Benutzeravatar
SORUS
Beiträge: 7
Registriert: 20.11.2004 05:56
Wohnort: Winterthur
Kontaktdaten:

Schnelle Antwort

Beitrag von SORUS »

Wenn Ihr hier so schnell so gute Antworten zur Hand habt dann komm ich doch auch gleich noch mit einem zweiten "Problem".
Mit GetAsyncKeyState lässt sich zwar feststellen welche Taste gedrückt wird, aber für die Gross- und Kleinschreibung beziehungsweise die Mehrfach-Belegung der Tasten muss mit IF programmiert werden.

Code: Alles auswählen

  If GetAsyncKeyState_(#VK_A)=-32767
    If GetAsyncKeyState_(#VK_SHIFT)<>0
      UCase(KeyIn.s)
      Debug "'A' was pressed" 
    Else
      LCase(KeyIn.s)
      Debug "'a' was pressed" 
    EndIf 
  EndIf
Funzt zwar problemlos, ist aber ein wenig aufwendig, vor allem wenn man bedenkt wie viele Tasten eine Tastatur hat *g*. Gibt es hier vielleicht einen schnelleren Weg?
Zuletzt geändert von SORUS am 20.11.2004 11:42, insgesamt 1-mal geändert.
Benutzeravatar
SORUS
Beiträge: 7
Registriert: 20.11.2004 05:56
Wohnort: Winterthur
Kontaktdaten:

Was mach ich falsch?

Beitrag von SORUS »

Der Code ist eingerückt... dann drück ich auf Senden und schon fehlt die Einrückung...
real
Beiträge: 468
Registriert: 05.10.2004 14:43

Beitrag von real »

Schreib uns doch einfach, was Du vorhast? :D Willst Du die komplette Tastatur abfragen, oder nur Buchstaben/Zahlen?!

SORUS: "Der Code ist eingerückt... dann drück ich auf Senden und schon fehlt die Einrückung..."
Den Code rückst Du mit [code] ein und hebst die Einrückung mit [/code] wieder auf. (oder Du nutzt den Button über dem Nachrichtentext)
Zuletzt geändert von real am 20.11.2004 11:37, insgesamt 1-mal geändert.
Benutzeravatar
SORUS
Beiträge: 7
Registriert: 20.11.2004 05:56
Wohnort: Winterthur
Kontaktdaten:

lol

Beitrag von SORUS »

Jepp real... die ganze Tastatur. Ein ziemlich grosses Vorhaben, gell? :mrgreen:
Antworten