比如用sendinput发送一个A键的keydown,keyup动作,正常下是输出'a',但如果用户按住了shift键,那就变成'A'了。
我试了SetKeyboardState,但是这个方法只适用于当前线程

解决方案 »

  1.   

    先判断一下shift状态,然后再看发送什么
    procedure WMKeyDown(var Message: TWMKEY); message WM_KEYDOWN;
    procedure TForm1.WMKeyDown(var Message: TWMKey);
    begin
              //判断按下
         if ((message.KeyData) and ($2a shl 16))=($2a shl 16) then
            showmessage('Left shift pressed')
         else if ((message.KeyData) and ($36 shl 16))=($36 shl 16) then
            showmessage('Right shift pressed');
        inherited;
    end;
      

  2.   

    你如果不是对你的程序发送就得用dll钩子作成全局的判断了