![]() |
Capslock mit SetKeyState und Status prüfen
Wenn ich mit SetKeyState die Taste Capslock simuliere kann ich mit folgender Funktion nicht prüfen, ob Capslock an oder aus ist, warum?
Delphi-Quellcode:
Capslock_anoderaus funktioniert, wenn ich die Taste wirklich drücke, wenn ich sie mit SetKeystate an oder aus mache, funktioniert die Capslock_anoderaus nicht.
procedure TForm1.SetKeyState(const ACode: Integer; Value: Boolean);
var KeyState: TKeyboardState; begin // ZeroMemory(Pointer(@KeyState), SizeOf(KeyState)); GetKeyboardState(KeyState); if (Byte(Ord(Value)) <> KeyState[ACode]) then begin Keybd_event(ACode, $3A, KEYEVENTF_EXTENDEDKEY, 0); Keybd_event(ACode, $3A, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0); KeyState[ACode] := Ord(Value); SetKeyboardState(KeyState); end; end; ... ... function TForm1.Capslock_anoderaus:boolean; var KeyboardState: TKeyboardState; begin GetKeyboardState(KeyboardState); if KeyboardState[VK_CAPITAL] = 1 then Result:=True else Result:=False; end; ... ... procedure TForm1.Button2Click(Sender: TObject); begin if Capslock_anoderaus = true then Label1.caption:='LED des Capslock an der Tastatur an' else Label1.caption:='LED des Capslock an der Tastatur aus'; end; |
AW: Capslock mit SetKeyState und Status prüfen
Ich rate mal, weil ich mich damit nicht auskenne:
Delphi-Quellcode:
Du lässt sie los, aber du drückst sie irgednwie nicht, oder sehe ich das falsch?
Keybd_event(ACode, $3A, KEYEVENTF_EXTENDEDKEY, 0);
Keybd_event(ACode, $3A, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0); |
AW: Capslock mit SetKeyState und Status prüfen
Zitat:
und mit KEYEVENTF_KEYUP läßt man die Taste los.
Delphi-Quellcode:
Also drücke ich den Button, geht die Capslock LED an, drücke ich den Button ein zweites Mal, geht die LED wieder aus und das verstehe ich auch nicht:
procedure TForm1.TurnCapsLock;
begin SetKeyState(VK_CAPITAL, True); end; ... ... procedure TForm1.Button1Click(Sender: TObject); begin TurnCapsLock; end;
Delphi-Quellcode:
Wenn doch (Byte(Ord(Value)) = KeyState[aCode] ist, passiert in dieser Proc nichts mehr.
procedure TForm1.SetKeyState(const ACode: Integer; Value: Boolean);
var KeyState: TKeyboardState; begin // ZeroMemory(Pointer(@KeyState), SizeOf(KeyState)); GetKeyboardState(KeyState); if (Byte(Ord(Value)) <> KeyState[ACode]) then begin Keybd_event(ACode, $3A, KEYEVENTF_EXTENDEDKEY, 0); Keybd_event(ACode, $3A, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0); KeyState[ACode] := Ord(Value); SetKeyboardState(KeyState); end; end; Wie kann dann die Capslock LED dennoch ausgehen beim zweiten Klick? |
AW: Capslock mit SetKeyState und Status prüfen
Ich bin davon ausgegangen, dass es zu KEYEVENTF_KEYUP auch ein KEYEVENTF_KEYDOWN gibt zum Drücken.
|
AW: Capslock mit SetKeyState und Status prüfen
|
AW: Capslock mit SetKeyState und Status prüfen
Zitat:
Geht nicht. Aber: Keybd_event(ACode, $bA, 0, 0); geht und führt zum gleichen Ergebnis. |
AW: Capslock mit SetKeyState und Status prüfen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz