Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Как отличить нажат правый или левый SHIFT?

01.01.2007
if ((Word(GetKeyState(VK_LSHIFT)) and $8000) <> 0) then
  begin
  end;
 
if ((Word(GetKeyState(VK_RSHIFT)) and $8000) <> 0) then
  begin
  end;

работает под Win NT/2000, но не работает под Win95.

Автор: CHERRY

Взято с Vingrad.ru https://forum.vingrad.ru


В 95 катит следующее:


RSHIFT = 36h
LSHIFT = 2Ah
asm
  in al, 60h
  cmp al, 36h
  jne @@exit
  mov tt,1
  @@exit:
end;
if tt = 1 then ShowMessage ('Right Shift'); 

Автор: Baa

Взято с Vingrad.ru https://forum.vingrad.ru


procedure TDecEditForm.Memo1KeyPress(Sender: TObject; var Key: Char);
VAR s:String;  RL:Byte;
begin
IF key=CHR(VK_RETURN) Then
  Begin
    //WIN NT/2000
    If (GetVersion() and $80000000)=0 then
      BEGIN
        IF ((Word(GetKeyState(VK_LSHIFT)) and $8000)<>0)  Then
          Begin
          End;
    IF ((Word(GetKeyState(VK_RSHIFT)) and $8000)<>0)  Then
      Begin
      End;
  End
ELSE
  //WIN 9.x
  Begin
    asm
      mov ah,2
      int $16
      mov RL,al
    end;
    if 1 = (RL and 1) then  //  ПРАВЫЙ SHIFT НАЖАТ+ENTER
      Begin
      End;
    if 2 = (RL and 2) then  //  ЛЕВЫЙ SHIFT НАЖАТ+ENTER
      Begin
      End;
  End; 
//WIN 9.x
END;
End;

Автор: CHERRY

Взято с Vingrad.ru https://forum.vingrad.ru