Einzelnen Beitrag anzeigen

Codix32

Registriert seit: 23. Apr 2009
137 Beiträge
 
Delphi 2005 Personal
 
#3

AW: Capslock mit SetKeyState und Status prüfen

  Alt 15. Nov 2014, 21:48
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?
  Mit Zitat antworten Zitat