[[20171212102808]] 『VBAでIEをInPrivateで操作』(ぽこぽん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAでIEをInPrivateで操作』(ぽこぽん)

 はじめまして。VBAでのIEの操作で分からない部分があるので教えていただけますか。

 IEをInPrivateモードで開き、開いた検索窓にテキスト入力をしたいのですが、
 InPrivateで開いた後のHTMLDocumentの取得方法が分からないのです。

 開くのはCreateObjectでShellにて開いているのですが、これをInternetExplorerのInPrivateで開けるように変更できないでしょうか。
 以下、現在のコードです。

 Sub Test()
 Dim Obj As Object
 Set Obj = CreateObject("WScript.Shell")

 With Obj
    .Run """C:\Program Files\Internet Explorer\iexplore.exe""" & " -
private ""https://search.yahoo.co.jp/"""
 End With

 End Sub

 どなたかお分かりになる方、ご教示いただけますようお願いいたします。

< 使用 Excel:Excel2013、使用 OS:Windows7 >


これ、難問ですね。 IEオブジェクトを使うとInPrivateモードにならないし、ご提示の方法だと投げっぱなし起動(OBJはシェルであって、IEじゃない)なので、文字列の送り先が判らないし…。 ちょっとググったかんじだと、英語サイトに、VB.Netならどうこう…、とかありました。
https://autohotkey.com/boards/viewtopic.php?t=3502

飛ばずに起動だけしてから、PIDかららhwndを得て、そこからIEを探して、改めて飛んでいる模様。 いきなりURLを指定しないのがミソっぽいですね。
(???) 2017/12/12(火) 11:49


 ???様
 回答いただきありがとうございます。

 >>ご提示の方法だと投げっぱなし起動(OBJはシェルであって、IEじゃない)なので、文字列の送り先が判らないし…。
 そうなんです。なので、ShellではなくIEでInPrivateでページを開けないものかと思い質問させていただきました。

 少しですが貼っていただいたページを見にいってみました。コンバートできない!他の人助けてーと書かれていますね;;
 VB.Netは手をつけたことがないのですが、VBAではやはり無理なのでしょうか・・・。

 hwndを取得してとなると、IEを探して見つけたらそこからはSendKeyでの操作になるのでしょうか。

 質問ばかりで申し訳ありません。
 よろしくお願いいたします。
(ぽこぽん) 2017/12/12(火) 12:01

お手軽なのはSendKeysですが、それが検索文字列のテキストボックスに届くかが問題ですね。IEに届いてしまうと、URL指定になってしまいそう。TABとか送りつけてフォーカス移動できれば、いけるかもです。

普通のアプリならば、親のハンドルから子オブジェクトのハンドルを得て、そこにSendMessageですが、ブラウザなのでどうなるやら。なので、IEオブジェクトで開いて、ブラウザに対していろいろ操作する方法が一般的なのだと思います。しかし、IEオブジェクト案では、InPrivateモードに関するものは見つかりませんでしたし、それらしいプロパティも無かったので、現状のRun起動案を進めるのが良いでしょう。

VBAでも、工夫すればIEのハンドルを捕まえられるのではないかと思うので、まずは単独起動した後にURLを送りつけてyahoo等に飛ぶ事ですね。 良さげなページは全く見つけられなかったので、かなり試行錯誤が必要だし、遠回りな手段(全プロセスの一覧からIEを探し、目的のページを表示しているものを探し、そのハンドルを得る、等)が必要かも知れません。
(???.) 2017/12/12(火) 13:00


 ???様
 回答ありがとうございます。
 VBAの知識だけでは解決できなさそうですね。
 方法を探りつつ、別の手段が無いか検討してみます。

 調べていただけて助かりました。とても勉強になりました。
 ありがとうございました。
(ぽこぽん) 2017/12/12(火) 14:30

あ、これだけでできたかも?(同期待つのが面倒なので、sleep使っちゃいました)

 Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

 Sub test()
    CreateObject("WScript.Shell").Run """C:\Program Files\Internet Explorer\iexplore.exe""" & " -private ""https://search.yahoo.co.jp/"""
    Sleep 2000
    SendKeys "abcd{ENTER}", True
 End Sub
(???.) 2017/12/12(火) 14:37

余談ながら、無理矢理ですが、ウィンドウハンドルは以下の方法で得られました。

・IE起動前に、Wbemを使ってプロセスIDを列挙、"iexplore.exe" だったらIDをDictionaryに追加。
・IE起動。(元のコードの方法)
・再度プロセスIDを列挙。DictionaryにないプロセスIDが、今起動したヤツ!
・OpenProcess APIを使って、プロセスIDをhwndに変換。

が、ウィンドウに文字列を送っても無反応でした…。やっぱりIEは難しいです。
(???.) 2017/12/12(火) 14:43


 ???様
 回答ありがとうございます。
 IEのセッションの完了を待てば動きそうな感じでした!
 一番上に開いたIEが来ていれば動かせそうです。

 hwndの取得方法の詳細もありがとうございます。
 外部アプリケーションを動かすコードを作ることが割りとあるので、とても助かります。

 感動です!ありがとうございました!
(ぽこぽん) 2017/12/12(火) 14:53

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.