none
IE7で特定タブをアクティブにしたい RRS feed

  • 全般的な情報交換

  • はじめまして、VB.NET超初心者です。

     

    VB2005を使って

    特定のサイトが既に開かれている場合

    そのタブをアクティブにしたいです。

     

    現在、その特定サイトが開かれている

    タブがあるかどうかの判断までは

    できています。

     

    -----------------------------------

    Dim SWs As New SHDocVw.ShellWindows
    Dim IE As SHDocVw.InternetExplorer
    Dim helpIE As SHDocVw.InternetExplorer
    Dim bExist As Boolean = False
    Dim Doc As Object

    '既にウィンドウが開かれているか検索する
    For Each IE In SWs
        Doc = IE.Document
        If TypeOf Doc Is mshtml.HTMLDocument Then
            If Doc.url.ToString.IndexOf(CommonClass.conServerAddres) >= 0 Then

                 'ここにそのタブをアクティブにする処理を記述したい
    -----------------------------------
    色々なサイトを調べましたが

    これといった解決策が見つかっていません。

    良い方法が分かる方、どうか宜しくお願いします。

    -----------------------------------------------------------------------

    ※2009/02/03 追記 (自己解決?報告)

    マイクロソフトに直接問合せを行ったところ、そういったインターフェイスは公開されて
    いないため実現できないと回答をいただきました。

    (次期IE8についてもIE7と同様、実装されていないとのこと)

    「ctrl」+「tab」キーを送信する苦肉の策で回避することにしました。

    • 種類を変更済み 田中 麻記子 2009年2月13日 1:42 基本的に解決方法は無いことが判明したため
    2009年1月27日 10:53

すべての返信

  •  フォーラムオペレーターの田中です、
    はまきちさん、フォーラムのご利用ありがとうございます!

    弊社のサポートにもお問い合わせをいただいたとのことでありがとうございます。
    USのMSDNでも同じようなお問い合わせがあり、このスレッドの最後の返信で何とか希望に近い実装にこぎつけたようなのですが
    大変、長いコードが必要になっています。(VB5.0なので、お役にたてるかどうかは微妙です)
    IE7 Tabs

    こちらはとりあえず質問からコメントに変更させていただきたいと思います。
    今回ははまきちさんの望む実装が難しいとのことでお役に立てず申し訳ありません。

    今後ともフォーラムのご利用を心よりお待ちしております。

    2009年2月13日 1:45
  • 初めての投稿で、不適切な表記等ありましたら、ご容赦ください。
    参考になるかは分かりませんが、上記リンク先のVB5.0のコードをExcel VBAにて動作確認してみました。
    Function Main(IndOnglet as Long) as LongにてIBreak=0、NbOnglet=0の初期化処理
    のようなことをすれば繰り返して利用できました。
    ただし、IndOngletは左端からのタブ順のようで、ウィンドウ数のカウントのような起動順ではないので
    結果的には特定のURLが存在するIEウィンドウハンドルを捕まえて、その中のタブ数(ウィンドウ数のカウント)
    分、タブを切り替えていきながら特定したいURLかどうかを判定しなければならないようです。
    ==========================
    Sub TAbOperation(URL)
    IEウィンドウハンドルを捕まえ、タブ数(ウィンドウ数カウント)の部分…(複数のIEウィンドウも考慮して)
    For i = 1 to タブ数
      Main(i,IEウィンドウハンドル)
      Ret = TabActivate(URL)'特定したいURL
      If Ret = True then Exit For
    Next
    End Sub
    なお、Main()の1つ目のw=は
    w = IEウィンドウハンドル'FindWindowEx(0, 0, "IEFrame", vbNullString) 以降のwはそのまま

    Function TabActivate(URL)
        ・・・・
        Set wShell = CreateObject("WScript.Shell")
        If wShell.AppActivate(ie.Document.Title) Then
    ===========================
    結果、長いコードを使用すれば、SenKeysを使用しないでマルチタブブラウザを操作できるようです。
    SendKeysを使用すれば短いコードで可能なようです。
    上の判定するコードの参考にさせていただいております。(先輩諸氏に感謝)

    2011年5月10日 15:16