我有时偶尔会用左手设置,今天突然发现下面的程序如果在左手习惯(左右键与正常相反)的情况下会出现下列错误:
procedure TfrmMain.PageControl1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if button=mbright then
  begin
    mouse_event(MOUSEEVENTF_leftDOWN,0,0,0,0);
    application.ProcessMessages ;
    mouse_event(MOUSEEVENTF_leftUP,0,0,0,0);
  end;
end;
---------------------------------------------------------------------
Project ebuy.exe raised exception class EStackOverflow with message 'Stack overflow'. Process stopped. Use Step or Run to continue.在正常设置下就不会,原因可能是形成的无限制的消息循环。
那么,我如何先判断当前系统的鼠标设置是正常还是左手习惯呢?(左右键与正常相反)

解决方案 »

  1.   

    检查HKEY_CURRENT_USER\Control Panel\Mouse下SwapMouseButtons的值是否为1
      

  2.   

    想起以前编过一段程序,用的是
    //这里要区分用户设置是左手习惯还是右手习惯,或者强行设置为左手,后面换过来
        if (GetSystemMetrics(SM_SWAPBUTTON)>0) then
        begin
          Mouse_Event(MOUSEEVENTF_RIGHTDOWN+MOUSEEVENTF_ABSOLUTE,X,Y,0,0);
          Mouse_Event(MOUSEEVENTF_RIGHTUP+MOUSEEVENTF_ABSOLUTE,X,Y,0,0);
        end
        Else begin
          Mouse_Event(MOUSEEVENTF_LEFTDOWN+MOUSEEVENTF_ABSOLUTE,X,Y,0,0);
          Mouse_Event(MOUSEEVENTF_LEFTUP+MOUSEEVENTF_ABSOLUTE,X,Y,0,0);
        end;