• ベストアンサー

マウスポインタを移動させるには

C++でプログラムしています。 MessageBoxのOKのボタンの上にマウスカーソルを移動させるAPI関数を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

> MessageBoxのOKボタンの座標を調べるAPI関数を教えてください。 残念ながら、それは簡単にはできません。 というのは、MessageBoxを実行すると、OKボタンなどをクリックしない限り、プログラム側に制御が戻ってこないからです。 スレッドを使って、プログラムの動作を2系統に分けて、MessagbeBoxで一方の動作が停止しても、他方が動作中の状態にする必要があります。その上で、メッセージのウィンドウを探してその中のOKボタンの位置を調べるといった方法になります。 簡単にしたいのであれば、MessageBoxが表示するウィンドウに似たウィンドウをプログラムから表示させるというものがあります。この場合、ウィンドウを表示しても制御はプログラム側にあるし、自分で表示させたウィンドウだから、OKボタンの位置も簡単にわかります。

7777777v
質問者

お礼

詳しい説明ありがとうございます。 ・・・ 簡単にしたいのであれば、MessageBoxが表示するウィンドウに似たウィンドウをプログラムから表示させるというものがあります。この場合、ウィンドウを表示しても制御はプログラム側 ・・・ 簡単な手段で表示させようと思いシステムで表示させているところに問題があるようです。 MessageBoxだけの表示であれば、Windowsの設定で既定の位置にカーソルがきますが、ブラウザーの上だと無効のようです。 ダイアログボックスを使う必要がありそうです。

その他の回答 (2)

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.3

>Win32です、ついでにMessageBoxのOKボタンの座標を調べるAPI関数を教えてください。 MessageBoxのHWNDを取得して、GetDlgItem()辺りでOKボタンのHWNDが取得できるでしょう。 で、OKボタンのHWNDからGetWindowRect()でスクリーン座標とれるんじゃないですかね。 むしろ、問題はど~やってMessageBox()のHWNDを取得するか…ってところかと思いますが。 # MessageBox()のコール元で取れば楽勝じゃん♪ なんてのはちょっと。 フックかなにか仕込めば取れるかとは思いますが。 # 具体的には調べてない。 マウスドライバなんかで、「デフォルトプッシュボタンの上にカーソルを移動させる」なんて機能があったりしますが…私は使っていないですねぇ。 シングルタスク(というかアプリ1つだけ)で動かしているのなら便利ですが… ブラウザ開いて調べ物しながらコード書いていたり、他のウィンドウでなんか編集していたり…とかしているときにマウスクリック使用とした瞬間にカーソルが移動。 なんかウィンドゥ出たけど内容確認する前にボタン押してしまって… 「さっきのなんだ!?」とか言うことがあったり……。 # ブラウザのリンククリックしようとしていたら裏で動いていたアプリがメッセージボックス表示して…とかね。

7777777v
質問者

お礼

丁寧な回答ありがとうございます。 ・・・ # MessageBox()のコール元で取れば楽勝じゃん♪ なんてのはちょっと。 フックかなにか仕込めば取れるかとは思いますが。 ・・・ 確かに、APIでは対応できないと思います。 ・・・ シングルタスク(というかアプリ1つだけ)で動かしているのなら便利ですが… ブラウザ開いて調べ物しながらコード書いていたり、他のウィンドウでなんか編集していたり…とかしているときにマウスクリック使用とした瞬間にカーソルが移動。 ・・・ 実はホームページをみながらMessageBoxを表示させているため、Windowsの設定で既定の位置にマウスカーソルを移動させる設定にしているのですが、このためにMessageBoxの上にカーソルがこなかったのですね。

回答No.1

プラットフォームがWindowsであれば、SetCursorPosですね。 OKボタンの座標を調べる必要はありますが。

7777777v
質問者

補足

回答ありがとうございます。 Win32です、ついでにMessageBoxのOKボタンの座標を調べるAPI関数を教えてください。

関連するQ&A