マウスカーソルの移動制限を勝手に解除されてしまう


manbon  2010-02-01 18:41:57  No: 37364

以下のコードを実行すると、1回目のボタンクリックで
ボタンからマウスカーソルが出なくなり、
2回目のクリックで、元に戻ります。

しかし、マウスカーソルが出ない状態でWindowsキーを押すと、
メニューが出てきた段階でフォーカスが移るのか、
カーソルの移動制限が解除されてしまいます。
これは、なんとかならないでしょうか?

パソコンの電源を無理やり切らない限り、マウスカーソルの
移動制限を解除できないくらいにしたいのですが・・・

procedure TForm1.Button1Click(Sender: TObject);
var
  R: TRect;
const
  bo: Boolean = False;
begin
  if not bo then begin
    GetWindowRect(TWinControl(Sender).Handle, R);
    ClipCursor(@R);
    bo := not bo;
  end else begin
    ClipCursor(nil);
    bo := not bo;
  end;
end;


さら  2010-02-01 19:14:36  No: 37365

ButtonClickでTThreadを立ち上げて、無限ループで設定し続ければ?


manbon  2010-02-02 01:44:43  No: 37366

さらさん、ありがとうございました。
Timerで何とかしようとして、なかなかうまくいかなかったのですが、
スレッドでやると、うまくいきました。


monaa  2010-02-02 04:06:35  No: 37367

キーボードとマウスはフォーカスウィンドウが権限を持つので、
普通では無理かと思います。
WindowsキーやAlt+Tabを無効にして自分のウィンドウからフォーカスが移動できないようにするのはどうでしょうか?
VirtualPCとかがそういうのやってますよね?

余りスマートでない方法だと、WH_MOUSEでマウス動作を常に監視して、一定範囲を出た場合、SetCursorPosなんてのも有りますが、この場合、一瞬だけ範囲外にカーソルは出ます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加