FindWindiwSwでIEを取れない

このQ&Aのポイント
  • ActiveXのShdocvwの「FindWindowSW」を使ってみたが挫折してしまいました。
  • Process.GetProcessesByNameメソッドを使用しても、Internet Explorerを取得することができませんでした。
  • Enumwindowで取得したハンドルをShdocvwを扱うポインタに紐付けて操作する方法もわかりませんでした。
回答を見る
  • ベストアンサー

FindWindiwSwでIEを取れない

ActiveXのShdocvwの「FindWindowSW」は、 .NETのいずれかのクラスのメソッドで行うことはできるでしょうか? 【目的】 InternetExplorerを操作したい。 【案1】 ActiveXのShdocvwの「FindWindowSW」を使ってみたが挫折 FindWindowSW(urlアドレス, empty, 1, 0, 1) ⇒ ヒットしない。 【案2】 Process[] process = Process.GetProcessesByName("iexplore"); ⇒ ヒットしない。 【案3】 Enumwindowで取ったハンドルを、 Shdocvwを扱うポインタに紐付けて操作する。 ⇒ やりかたわからず。 ※本件は  http://okwave.jp/qa/q8845657.html を参考に進めました。

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

  • ベストアンサー
noname#212058
noname#212058
回答No.1

> 【案3】 > Enumwindowで取ったハンドルを、 > Shdocvwを扱うポインタに紐付けて操作する。 これが一番簡単です。サンプルはこちら。 http://mitsu.three-atmarks.com/archives/7858

TeferiMage
質問者

お礼

ありがとうございます! できました!

関連するQ&A

  • .NETとActiveXの関係

    c++からブラウザ操作を行うプログラムを作成しています。 その際、.NET版 と ActiveX版を作りましょうという話になったのですが、 .NET と ActiveX の関係がわからず、教えて頂きたいです。 ActiveXは、 ネット関連のコンポーネントや技術と捉えています。 例えば、 WebBrowser コントロール (SHDocVw.dll)も ActiveXに属するという認識です。 対して、.NETは、 端的に言えばマイクロソフトが開発したアプリケーション開発、実行環境とのことですが、 WebBrowser コントロール (SHDocVw.dll)と同じことをしようと思ったら、 System.Windows.Forms.WebBrowser を使ったり、 SHDocVw.dll をimport することになるとおもいます (後者は工夫が必要そうですが) なので、 .NET は、ActiveXを包含しているという風に認識していたのです。 ActiveX コントロールは、.NETのControlクラスを継承しているはずがないので、 Windowsのポインタ(EnvDTE::Windows)ではなく IEオブジェクト用のポインタ( IShellWindowsPtr、 IWebBrowser2Ptr)を使う必要があるものの、 この認識だと、 「.NET版 を作成したら ActiveX版を作っているのと同じ」となので 冒頭の「.NET版 と ActiveX版を作りましょう」と矛盾し、 .NET が ActiveX を包含しているというわけではない?? .NET と ActiveX の関係ってどういう関係?? となり、正しい認識を教えて頂きたいのです。 .

  • InternetExplolerで開いているページ

    C++で、 (1)IEのプロセスを全て取得する。 (2)そのIEの各タブで、「任意のドメインの含むページ(例えばhttps://www.google.co.jp)」を開いているかをチェックする ということを、「ActiveXを使わずに」行いたいです。 System.Diagnostics に属するProcessクラスで、 Process.GetProcessesByName でプロセスの配列を掴むことはできるようなのですが、 このプロセスを、「GetURL」のようなインタフェースを持ったクラスのインスタンスとして、 代入して、表示しているページのアドレスを取得したいのです。 ブラウザの操作を行うには、 System.Windows.Forms.WebBrowser というクラスを使うのが良さそうだというのまでは調べてわかったのですが、 Process のインスタンスを、WebBrowser のインスタンスに代入するには、 どうすればよいのでしょうか?

  • 起動したIEのウインドウタイトルを取得する方法

    こんばんは。WindowsXP+VB.NET環境です。 IE = CreateObject("InternetExplorer.Application") IE.Navigate("http://www.yahoo.co.jp") でインターネットエクスプローラを起動した場合に IEのウインドウの上の部分に表示されている 「Yahoo! JAPAN - Microsoft Internet Explorer」という文字と プロセスIDとプロセス名を取得したいのですが どのようなコードを書けば良いでしょうか? WEBサイトで調べていたら起動中の全プロセスのものを全て表示する 方法はあったのですが、起動したIE限定で取得したいです。 IE.IdとかIE.ProcessName、IE.MainWindowTitleのようにしてみたのですが エラーになってしまいました。 あと、別の方法で Dim hProcess As System.Diagnostics.Process = System.Diagnostics.Process.Start("iexplore") hProcess.WaitForInputIdle() Dim pName As String = hProcess.MainWindowTitle としたら出来るようになったのですが、 起動した後に上の方法でやった時のようにIE.Navigate("http://****")で 移動したりしたいのですが、この方法で起動した場合の 方法が分からなくなってしまいました。 IE = CreateObject("InternetExplorer.Application")で起動したIEのように 操作できるようにする方法を教えて頂きたいです。よろしくお願い致します。

  • Autocad 体験版 ダウンロードで 

    Autocad 2012体験版をダウンロードしようとしたら、 ”アクセスが拒否されました。” のメッセージがでてダウンロードできません。 ググってみたのですが中々みつかりません。 解決方法はありますでしょうか。 AutoDiskで検索すると下記がヒットしたので行ってみましたが解決できませんでした。 1)DWF ビューア コントロールが埋め込まれた Web ページを開こうとすると、「アクセスが拒否されました」というメッセージが表示される。 この問題は次の方法でも対処いただけます: Internet Explorer 7 で、[ツール] > [インターネット オプション]を選択します。[セキュリティ]タブで[ローカル イントラネット]をクリックし、セキュリティ レベルを[中低]に設定します。 2)DWF ビューア コントロールが埋め込まれた Web ページを JavaScript のユーザ インタフェースで操作しようとすると、「アクセスが拒否されました」というメッセージが表示される。この問題は、DWF ActiveX コントロールのコード内における構造の変更によって修正されました。コントロールの機能に関して、構造の変更による影響はありません。

  • Shell32ライブラリのインスタンスのオブジェクト

    エクセルからインターネットエクスプローラを操作して、任意のULRをからデータを取得しようと考えています。URLのアドレスとテキスト名を引数として、IEへのオブジェクトを返す関数を作ろうかと思いましたが、一向にうまくいきません。コードの99%は、ネット、雑誌からの引用なので問題はない(継ぎ接ぎ上の問題はあるかと思いますが)と思います。やりたいことは、関数から返されるオブジェクトを使ってのTest()の最後の2行の.body.innerTextと、.body.innerHTMLの取得です。 どなたか詳しい方がいらっしゃいましたら教えてください。よろしくお願いいたします。 Sub test() Dim myIE As Object Dim URL_address As String Dim URL_Title As String Dim IE_Text As String Dim IE_Html As String ULR_address = "http://oshiete1.goo.ne.jp/c232.html" Ulr_Title = "教えて!goo Office系ソフト" myIE = IE_URL(URL_address, Ulr_Title) IE_Text = myIE.document.body.innerText IE_Html = myIE.document.body.innerHTML End Sub Function IE_URL(URL_address As String, URL_Title As String) As Object Dim myIE As SHDocVw.InternetExplorer Dim myIE2 As Object ' 起動しているIEの中にURL_Titleと合致するULRがあるか調べる With New Shell32.Shell For Each myIE In .Windows If UCase(Dir(myIE.FullName)) = "IEXPLORE.EXE" Then If myIE.document.Title = URL_Title Then myIE.Navigate URL_address Exit For End If End If Next End With 'URL_Titleと合致するURLがない場合、新たにIEを立ち上げて表示させる If myIE Is Nothing Then With New SHDocVw.InternetExplorer ' .Navigate URL_address .Visible = True End With Application.Wait Now + TimeValue("00:00:01") 'myIEにオブジェクトをセットさせるために再度全体を検索する(上のwithでオブジェクトを取得できれば不要) With New Shell32.Shell For Each myIE In .Windows If UCase(Dir(myIE.FullName)) = "IEXPLORE.EXE" Then If myIE.document.Title = URL_Title Then myIE.Navigate URL_address Exit For End If End If Next End With End If Set myIE2 = GetObject(myIE.FullName) IE_URL = myIE2 End Function

  • Windows7 でのフォルダアクセス制御について

    実現方法について、質問させて頂きます。 宜しくお願い致します。 ■環境 ○OS:Windows7 SP1 ○Internet Explorer:IE9 ○ユーザアカウント:  ・「Administrator」:管理者※デフォルトユーザ  ・「SUPERUSER」:管理者※作成ユーザ  ・「OPE」:標準ユーザー※作成ユーザ ○パーティション構成:  ・C:\  ・D:\  ・E:\  ※全フォルダでオプション「別のプロセスでフォルダウインドウを開く」は許可しています。 ■実施したいこと (1)「OPE」ユーザーにてOSログイン (2)エクスプローラを開いた場合「D:\」以外のフォルダ参照および、全操作不可にしたい (この際、Interner Explorerやtextからファイル保存した場合でも同様) (3)OSのログインユーザを変更しないまま、 エクスプローラを「SUPERUSER」ユーザに切り替えて起動 (4)全フォルダ(C:\やE:\ドライブなど)を参照および、全操作可能にしたい ■前提 ○OS標準機能のみ使用して制御したい ■試したが失敗したこと 過去の質問など参照して、以下を実施してみましたが、うまくいきませんでした。 【RANAS利用(エクスプローラ)】 (1)「C:\」および「E:\」ドライブのプロパティからアクセス許可で「OPE」ユーザーへ全操作拒否設定  ・「フォルダ右クリック」→「プロパティ」→「セキュリティ」→「アクセス許可の変更」   →「追加操作」で「OPE」ユーザーの全操作拒否登録     (SUPERUSERはフルコントロール許可状態です) (2)RANASコマンドで、エクスプローラ起動  ・コマンド「runas /user:SUPERUSER "explorer"」 (3)結果NG:「C:\」および「E:\」ともにアクセス許可が無く参照が出来ない 【RANAS利用(Internet Explorer)】 (1)「C:\」および「E:\」ドライブのプロパティからアクセス許可で「OPE」ユーザーへ全操作拒否設定  ・「フォルダ右クリック」→「プロパティ」→「セキュリティ」→「アクセス許可の変更」   →「追加操作」で「OPE」ユーザーの全操作拒否登録     (SUPERUSERはフルコントロール許可状態です) (2)RANASコマンドで、インターネットエクスプローラ起動  ・コマンド「Runas /user:SUPERUSER "%systemroot%\ie9\iexplore.exe ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"」 (3)結果NG:「C:\」および「E:\」ともにアクセス許可が無く参照が出来ない 上記を実現する方法、ありますでしょうか? ご助言のほど、よろしくお願い致します。

  • mysqlで変数を使う方法

    SQL文にPHPの変数のように変動する値を指定することはできますでしょうか。 データベースから特定のレコードを拾ってきて PHPのPOSTメソッドでその値を送信するシステムを作ろうとしています。 具体的には、データベースに名簿(IDと名前だけの簡単なものです)を 予め作っておき、送信ボタンをクリックしたユーザーのIDと紐付いている 名前を送信したいと考えています。 [MySQL] table:meibo id | name ------------ 1 | itou 2 | yamada 3 | suzuki [PHPソース](一部抜粋) ------------ $sql = mysql_query('SELECT * FROM meibo where id=【ここを変動させたい】', $connect); $sql = mysql_fetch_array($sql); $req->addPostData("user_name", $sql['name']); ------------ $idに操作しているユーザーのIDが代入されているとして 以下のようにmysql_queryの中で実行しているSELECT文に$idを利用することは可能でしょうか。 SELECT * FROM meibo where id=$id もし上記のような方法が無理な場合、 代替案をご提案いただけると非常に助かります。 読みにくい文章で恐縮ですが、 どうかお助けください。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • IE8よりIE7 IE7よりIE6

    今頃なのですが、1GBのネットブック〔XP〕のブラウザをIE7からIE8にアップグレードしたら、やたら軽いとかいわれているはずなのに、ものすごく重くなってしまいました。 さらになんとなくIE6へ戻すと、今度はすんごく軽くなりました。 新しいブラウザが出るたびに、高速化とかマイクロソフトはいっていますが、これってやっぱり嘘なのでしょうか・・・それとも、ネットブックが低スペだからでしょうか・・・?

  • IE9→IE8→IE9

    PCの買い替えを予定しています。(Windows 7 Home Premium with Service Pack 1) 現PCのIE6の LANの設定 お気に入り Cookie 履歴 ホームページ URLオートコンプリート フォームの入力履歴 Firefoxのアドイン・テーマ その他 マイ ドキュメント マイ ピクチャ マイ ビデオ マイ ミュージック デスクトップのファイル・フォルダ 壁紙 iTunesの音楽 Windowsログインアカウント ↑ これらをマカセル引越しというソフトでIE9に移行したいのですが Service Pack 1ではIE9ですのでこのソフトは対応していません。(対応 IE6.7.8) そこで、一旦Win7 Service Pack 1にIE8をインストールして このソフトで移行した後で IE9に戻せば良いのでは?と思い立ったのですが 次の疑問が生じました 1.後からインストールしたIE8はプログラムの追加と削除で削除すれば、 Service Pack 1のIE9に戻る、そしてIE8の上記設定はIE9に移行されてるのでしょうか?  2.それともIE8をアンインストールすれば元のデフォのIE9に戻るのでしょうか? 3.そもそもService Pack 1にIE8をダウングレードインストール出来るのでしょうか? ★IE7→IE8などのアップグレードの場合はIE7をアンインストールしなくてもIE8を インストール出来るのは知っていますが、  IE9→IE8などのダウングレードの場合は一旦IE9をアンインストール後IE8をインストール しなくてはならないのでしょうか?

  • IE6からIE5.5に戻すには?

    インターネットエクスプローラを6.0にしたのですが、バンキングや凄速が6.0に対応していないので5.5に戻したいのですが、インストールしようとすると「このコンピュータには最新のIEが入っていますのでインストールできません」というメッセージが出てしまいます。IEのバージョンを下げてインストールする方法はないものでしょうか?ご存知の方よろしくお願いします。

専門家に質問してみよう