Auch wenn schon tausend mal beispiele zu diesem thema flogen, ich füge der sammlung eins hinzu
Delphi-Quellcode:
procedure TForm1.GetLockInfo;
begin
cbCaps.Checked := (GetKeyState(VK_CAPITAL) <> 0);
cbNum.Checked := (GetKeyState(VK_NUMLOCK) <> 0);
cbScroll.Checked := (GetKeyState(VK_SCROLL) <> 0);
End;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
GetLockInfo;
{ TMouseButton = (mbLeft, mbRight, mbMiddle); }
cbLeft.Checked := (ssLeft in Shift);
cbRight.Checked := (ssRight in Shift);
cbMiddle.Checked := (ssMiddle in Shift);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
GetLockInfo;
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
Modifier: Int64;
begin
GetLockInfo;
cbShift.Checked := (ssShift in Shift);
cbControl.Checked := (ssCtrl in Shift);
cbAlt.Checked := (ssAlt in Shift);
Modifier := 0;
if cbShift.Checked then
Modifier := Modifier + VK_SHIFT;
if cbControl.Checked then
Modifier := Modifier + VK_CONTROL;
if cbAlt.Checked then
Modifier := Modifier + VK_MENU;
edKey.Text := 'Mod: ' + IntToStr(Modifier) + ' - Key: ' + IntToStr(Key);
end;
procedure TForm1.WMKeyDown(var Msg: TWMKeyDown);
begin
inherited;
cbExtended.Checked := (Msg.KeyData and $1000000 <> 0);
edWMKey.Text := 'Data: ' + IntToHex(Msg.KeyData, 8) + ' - Char: ' +
IntToStr(Msg.CharCode);
(*
case Msg.CharCode of
VK_RETURN: // ENTER pressed
if (Message.KeyData and $1000000 <> 0) then
// Test bit 24 of lParam
ShowMessage('ENTER on numeric keypad')
else
ShowMessage('ENTER on Standard keyboard');
end;
*)
end;
Im Anhang ist das projekt als quelltext und ausführbare datei.