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


manbon  2010-02-01 09:41:57  No: 37364  IP: 192.*.*.*

以下のコードを実行すると、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 10:14:36  No: 37365  IP: 192.*.*.*

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

編集 削除
manbon  2010-02-01 16:44:43  No: 37366  IP: 192.*.*.*

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

編集 削除
monaa  2010-02-01 19:06:35  No: 37367  IP: 192.*.*.*

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

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

編集 削除