分類:[C#]
2009/10/20(Tue) 19:30:57 編集(投稿者)
はじめましてなんですが、よろしくお願いします。
現在、C# .NETを使って、IEのツールバーを開発しています。
そして、そのツールバーがアクティブ(最前面)ではない時に、とあるイベントを受け取った場合に、
そのイベントを受け取ったIEのウィンドウを最前面に持って来ようとして、SetForegroundWindow()を
使って色々試しているのですが、うまく実現できずに困っています。
その部分のコードは以下のとおりです。
bool result;
fInfo.hwnd = this.MainWindowHandle; // 自分自身のメインウィンドウハンドル
if (switchFlag == true)
{
// ウィンドウを最前面へ
result = ShowWindow(fInfo.hwnd, SW_RESTORE); // タスクバーから引っ張り出す
if (result == false)
{
// エラー処理
…
}
result = SetForegroundWindow(fInfo.hwnd); // 最前面へ引っ張り出す
if (result == false)
{
// エラー処理
…
}
※「SW_RESTORE」と全角が入っていますが、「STORE」という半角文字列が入っていると投稿に
失敗するため、わざと全角で記述しています。
ウィンドウがタスクバーへ最小化されている場合は、タスクバーから引っ張り出された上で最前面に来てくれるのですが、
ウィンドウがタスクバーになく他のウィンドウの後ろに隠れている場合は、ウィンドウが最前面へ来てくれません。
#ShowWindow()で一旦タスクバーへ最小化してサイトShowWindow()で最前面へ引っ張り出すことはできたのですが、
見た目がドタバタしてしまうのでちょっと使いたくありません…。
なお、SetForegroundWindow()の戻り値はtrueであることを確認しているので、
MSDNの情報(http://msdn.microsoft.com/ja-jp/library/cc411039.aspx)によるとフォアグラウンド化には成功しているようですが、
ウィンドウが最前面へ来てくれません…。
ここの記述で気になっているのは、「SetForegroundWindow()を実行するプロセスがフォアグラウンドでなければならない」等々の条件です。
これはもしかすると、自分自身をフォアグラウンド化することはできないと言っているのでしょうか…。
どうやったら自分自身のIEウィンドウをうまく最前面へ持ってこれるか、お分かりの方がいましたら教えていただけないでしょうか。
よろしくお願いします。