• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:任意のIEにリンクを指定したいです)

IEにリンクを指定する方法

このQ&Aのポイント
  • 2つのIEが起動しており、特定のIEにリンク先を上書きする方法を教えてください。
  • 指定したIEウィンドウ名のハンドルを取得してリンクを指定する方法を使用していますが、最後に起動したIEウィンドウに上書きされてしまいます。
  • ShellExecute関数の第一引数がハンドルを持つウィンドウを指していると認識していますが、違いましたでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

使うインターフェースは IShellWindows, ISHellBrowser, IWebBrowserの3つでよさそうです Windows.h shlObj.h locale.hをインクルードします ライブラリは ole32.lib oleaut32.libを追加します   IShellWindows* pSW = NULL;   IShellBrowser* pSB = NULL;   IWebBrowser* pWB = NULL;   VARIANT vIndex;   long n, nCnt;   BSTR locName;   HRESULT hr;   // バリアント型は初期化が必要   VariantInit( &vIndex );   // long型の指定   vIndex.vt = VT_I4;   // printfの文字化け対策   _tsetlocale( LC_ALL, _T("Japanese") );   // COMを使用するのでライブラリを初期化   OleInitialize( NULL );   // IShellWindowsを実体化する   hr = CoCreateInstance( CLSID_ShellWindows, NULL,     CLSCTX_SERVER, IID_IShellWindows, (LPVOID*)&pSW );   if ( hr == S_OK ) {     // 起動中のブラウザの数を取得     pSW->get_Count( &nCnt );     for( n=0; n < nCnt; n++ ) {       // 取得するブラウザのインデックスを設定       vIndex.lVal = n;       // IShellBrowserを取得       hr = pSW->Item( vIndex, (IDispatch**)pSB );       if ( hr == S_OK ) {         // IWebBrowserを取得 … ここが自信無し         hr = pSB->QueryInterface( IID_IWebBrowser,                         (void**)&pWB );         if ( hr == S_OK ) {           // LocationNameを取得           pWB->get_LocationName( &locName );           _tprintf( _T("%s\n"), locName );           // BSTRの後始末           SysFreeString( locName );           // 用済みインターフェースの後始末           pWB->Releace();         }         // 用済みインターフェースの後始末         pSB->Releace();       }     }     // 用済みインターフェースの後始末     pSW->Releace();   } といった具合です HWNDで比較するならIShellBrowserのGetWindowで取得可能です HWND* phWnd = NULL; pSB->GetWindow( phWnd );

foot-peng
質問者

お礼

連絡が遅くなり、大変申し訳御座いませんでした。。。 御記述頂いたソースを参考に修正しまして、なんとか上書き起動しないようにすることができました! 但し、まだCOMクラスの理解が中途半端なので学習し直しております。 御教授頂きまして有難う御座いました。

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

すみません m(__)m どうも ShellExecuteのhWndにFindWindowで探したウィンドウハンドルを渡してもダメなようですね 当方でも同じ症状でした 本格的にCから制御するならCOMクラスで制御しないといけないようです COM(Component Object model)については明るくないので … GetActiveObjectやCoCreateInstanceなどをを使うようですけど VB系でしたら dim oShell as Shell Dim oShellWindows as ShellWindows Dim oBrowser as InternetExplorer dim n as Integer Set oShell = new Shell Set oShellWindows = oShell.Windows for n = 0 to oShellWindows.Count -1 Set oBrowser = oShellWindows(n)   if oBrowser.LocationName = "タイトル" then     oBrowser.LocationURL = "設定したいURL"     Exit Sub   end if next といった具合です 参照設定として『Microsoft Shell Controls and Automation』『Microsoft Internet Controls』を使います

foot-peng
質問者

お礼

redfox63様 前回に引き続き、ご回答頂きまして有難う御座います。 COMクラスですか・・・。 まださっぱり分かりませんが、クラスの部分を中心に調べて見ます。 また、何か御座いましたらレスを頂けると助かります^^;

関連するQ&A