C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: IEのツールバーから自分自身を最前面に持ってくる方法


(過去ログ 73 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■42732 / inTopicNo.1)  IEのツールバーから自分自身を最前面に持ってくる方法
  
□投稿者/ げた (5回)-(2009/10/20(Tue) 19:11:39)

分類:[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ウィンドウをうまく最前面へ持ってこれるか、お分かりの方がいましたら教えていただけないでしょうか。
よろしくお願いします。

引用返信 編集キー/
■42741 / inTopicNo.2)  Re[1]: IEのツールバーから自分自身を最前面に持ってくる方法
□投稿者/ やじゅ (1392回)-(2009/10/20(Tue) 21:02:22)
やじゅ さんの Web サイト
No42732 (げた さん) に返信
> そのイベントを受け取ったIEのウィンドウを最前面に持って来ようとして、SetForegroundWindow()を
> 使って色々試しているのですが、うまく実現できずに困っています。

参考になるかな?
http://d.hatena.ne.jp/gsf_zero1/20071211/p1

引用返信 編集キー/
■42821 / inTopicNo.3)  Re[2]: IEのツールバーから自分自身を最前面に持ってくる方法
□投稿者/ げた (6回)-(2009/10/21(Wed) 17:35:17)
No42741 (やじゅ さん) に返信
> ■No42732 (げた さん) に返信
>>そのイベントを受け取ったIEのウィンドウを最前面に持って来ようとして、SetForegroundWindow()を
>>使って色々試しているのですが、うまく実現できずに困っています。
>
> 参考になるかな?
> http://d.hatena.ne.jp/gsf_zero1/20071211/p1

やじゅさん、返信ありがとうございます!
ちょっと試してみます。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -