他アプリケーションからフォーカスをうばうには

解決


ABC  2008-12-22 19:59:43  No: 32949

ある長くかかる処理があります。
その処理が終了したら、Application.MessageBoxで処理終了のメッセージを
表示します。
その処理を実行している最中、他のアプリケーション(Excel)などを使用します。処理終了後、Excelからフォーカスを奪って、画面にメッセージ表示することは可能でしょうか?


方法  2008-12-22 20:35:59  No: 32950

メッセージダイアログを新規に作成して、OnTop指定してやればできるんじゃない?


ABC  2008-12-24 20:33:13  No: 32951

アドバイスありがとうございます。

メッセージダイアログを新規に作成して、とありますが、
MessageDlg関数のことでしょうか?それともフォームのことでしょうか?

MessageDlg関数の場合、OnTop指定とはどのようにしたらいいのでしょうか?
DelphiのHelpやWeb上で調べたのですが、見つけきれませんでした。

フォームの場合、ShowModalでは他のアプリケーションからフォーカスを奪うことは
できませんでした。こちらもOnTopの指定方法がわかりませんでした。

わからないことばかりですみませんが、よろしくお願い致します。


monaa  2008-12-24 21:56:07  No: 32952

強力な方法ではありませんが、
Application.MessageBoxの直前に
SetForegroundWindow(Handle);を入れてみてはどうでしょう?
この場合強力なトップレベルウィンドウがあるとフォーカスは奪えません。
もちろん強力なメッセージボックスもありますので、これで気に入らない場合は
http://msdn.microsoft.com/ja-jp/library/cc410914.aspx


ABC  2008-12-25 00:11:55  No: 32953

monaaさん、ありがとうございました。

MessageBox関数のメッセージボックスのスタイルに「MB_TOPMOST」を指定し、
メッセージボックスを最前面ウィンドウとして作成することで解決できました!!

本当にありがとうございました!!


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

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






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