重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

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

A 回答 (3件)

> MessageBoxのOKボタンの座標を調べるAPI関数を教えてください。



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

簡単にしたいのであれば、MessageBoxが表示するウィンドウに似たウィンドウをプログラムから表示させるというものがあります。この場合、ウィンドウを表示しても制御はプログラム側にあるし、自分で表示させたウィンドウだから、OKボタンの位置も簡単にわかります。
    • good
    • 1
この回答へのお礼

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

お礼日時:2012/02/21 09:38

>Win32です、ついでにMessageBoxのOKボタンの座標を調べるAPI関数を教えてください。



MessageBoxのHWNDを取得して、GetDlgItem()辺りでOKボタンのHWNDが取得できるでしょう。
で、OKボタンのHWNDからGetWindowRect()でスクリーン座標とれるんじゃないですかね。

むしろ、問題はど~やってMessageBox()のHWNDを取得するか…ってところかと思いますが。
# MessageBox()のコール元で取れば楽勝じゃん♪ なんてのはちょっと。
フックかなにか仕込めば取れるかとは思いますが。
# 具体的には調べてない。

マウスドライバなんかで、「デフォルトプッシュボタンの上にカーソルを移動させる」なんて機能があったりしますが…私は使っていないですねぇ。
シングルタスク(というかアプリ1つだけ)で動かしているのなら便利ですが…
ブラウザ開いて調べ物しながらコード書いていたり、他のウィンドウでなんか編集していたり…とかしているときにマウスクリック使用とした瞬間にカーソルが移動。
なんかウィンドゥ出たけど内容確認する前にボタン押してしまって…
「さっきのなんだ!?」とか言うことがあったり……。
# ブラウザのリンククリックしようとしていたら裏で動いていたアプリがメッセージボックス表示して…とかね。
    • good
    • 0
この回答へのお礼

丁寧な回答ありがとうございます。
・・・
# MessageBox()のコール元で取れば楽勝じゃん♪ なんてのはちょっと。
フックかなにか仕込めば取れるかとは思いますが。
・・・
確かに、APIでは対応できないと思います。

・・・
シングルタスク(というかアプリ1つだけ)で動かしているのなら便利ですが…
ブラウザ開いて調べ物しながらコード書いていたり、他のウィンドウでなんか編集していたり…とかしているときにマウスクリック使用とした瞬間にカーソルが移動。
・・・
実はホームページをみながらMessageBoxを表示させているため、Windowsの設定で既定の位置にマウスカーソルを移動させる設定にしているのですが、このためにMessageBoxの上にカーソルがこなかったのですね。

お礼日時:2012/02/21 09:27

プラットフォームがWindowsであれば、SetCursorPosですね。


OKボタンの座標を調べる必要はありますが。

この回答への補足

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

補足日時:2012/02/20 20:42
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!