Ich rate mal, weil ich mich damit nicht auskenne:
Delphi-Quellcode:
Keybd_event(ACode, $3A, KEYEVENTF_EXTENDEDKEY, 0);
Keybd_event(ACode, $3A, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
Du lässt sie los, aber du drückst sie irgednwie nicht, oder sehe ich das falsch?
Ich denke mit dem 'Keybd_event(ACode, $3A, KEYEVENTF_EXTENDEDKEY, 0);' drückt man die Taste
und mit KEYEVENTF_KEYUP läßt man die Taste los.
Delphi-Quellcode:
procedure TForm1.TurnCapsLock;
begin
SetKeyState(VK_CAPITAL, True);
end;
...
...
procedure TForm1.Button1Click(Sender: TObject);
begin
TurnCapsLock;
end;
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:
Delphi-Quellcode:
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;
Wenn doch (Byte(Ord(Value)) = KeyState[aCode] ist, passiert in dieser Proc nichts mehr.
Wie kann dann die Capslock LED dennoch ausgehen beim zweiten Klick?