以下のコードを実行すると、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;
ButtonClickでTThreadを立ち上げて、無限ループで設定し続ければ?
さらさん、ありがとうございました。
Timerで何とかしようとして、なかなかうまくいかなかったのですが、
スレッドでやると、うまくいきました。
キーボードとマウスはフォーカスウィンドウが権限を持つので、
普通では無理かと思います。
WindowsキーやAlt+Tabを無効にして自分のウィンドウからフォーカスが移動できないようにするのはどうでしょうか?
VirtualPCとかがそういうのやってますよね?
余りスマートでない方法だと、WH_MOUSEでマウス動作を常に監視して、一定範囲を出た場合、SetCursorPosなんてのも有りますが、この場合、一瞬だけ範囲外にカーソルは出ます。
ツイート | ![]() |