TOP 
記事検索(複数ワードSP区切り)
ティアのホームページ☆ミ

 
ティアのホームページ 月依桜へようこそ☆ミ
フルhttps化したので、リンクを張り直してくれると嬉しいです☆

(2024年8月8日更新) ATOM 1.0
女装千年王国 2017年9月29日発売
チャンネル 茉奈香ちゃんねる
 
カテゴリ 自己の紹介 りんく 落書き帳 レガリヤ プログラム みちゃいやん グラフィック RTChart個人用
 
テーマ 日記(825)
たわごと(260)
BlogPet(168)
PSO2(117)
ゲーム(55)
こみけ(45)
PSO2 NGS(35)
番組表(35)
なし(32)
うさこ日記(27)
ココロ日記(20)
Windows10(11)
CG(7)
たるたる(6)
記念日(5)
アニメ(4)
Ys?(4)
あに(2)
拍手返事(2)
激痛(1)
 
旧カテゴリ たわごと
(引っ越し中)
 
カレンダー
<< 2019年05月 >>
Sun Mon Tue Wed Thu Fri Sat
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
             
2019年3月 2018年10月
2019年2月 2018年9月
2019年1月 2018年8月
2018年12月 2018年7月
2018年11月 2018年6月
     
 
フォローする?

女装千年王国 2017年9月29日発売
【プリズム◇リコレクション!】情報ページ公開中!
【プリズム◇リコレクション!】情報ページ公開中!
『大図書館の羊飼い』は2013年1月25日発売予定です。
『大図書館の羊飼い』は2013年1月25日発売予定です。

『えれくと!』を応援しています!
「キミとボクとエデンの林檎」花鏡院琴音を応援中☆ 公式サイトへ
ALcot ハニカム 『アネイロ』 瑛菜応援中!
【カミカゼ☆エクスプローラー!】風花を応援中!
【カミカゼ☆エクスプローラー!】沙織を応援中!
アネカノ 秘密の彼女はお姉ちゃんいちゃらぶADV 応援中!
ゴスデリ 7月23日発売予定
『とっぱら ~ざしきわらしのはなし~』2008年9月26日発売予定!
 
no prev page 1/1ページ(1件) no next page
To Close..ブラウザで遊ぶ 2019年05月14日22時56分
まぁ、仕事でやってたんですけどね?
IEを取得する方法は様々あるんですけれど、
HWNDから取得する方法はそれほど多くはありません。

まずFindWindow等によってIEFrameの様な物を探すのが一般的なブラウザの取得方法だと思います。

しかし、これだけではWindowハンドルを取得できるだけで何も出来ません。

何かするのであれば、IWebBrowserを取得する必要があります。

WebBrowserもしくはIWebBrowser2インターフェイスはWebBrowserコントロールを使ってプログラムを組んだことがある人なら判ると思いますが、IEもWebBrowserコントロールをそのまんま利用して作られているというか?

IEの一部を公開しているに過ぎないので

IE自体も上手いことIWebBrowser2インターフェイスを取得してあげれば簡単にいじくり回せるわけです。

しかし、実はIWebBrowser2を取得するのはとても大変です。

と言うか、大変でした。

判ってしまえば対したことではありません。関数などを使わなくても総コード数は100行も行かないでしょう。とくにC#を使ったので、コードはかなり短めです。

ハッキリ言いましょう、こう言った作業はC++の方が楽なのです。

c#で行うので大変になりました。

今後の同胞のために重要な部分について書いていきます。

まず、IWebBrowser2を直接取得する手段はありません。
かならずIHTMLDocumentを経由して取得します。

IHTMLDocumentの取得方法はそれほど面倒ではありません。
でもソースの量から言えば、IHTMLDocumentからIWebBrowser2を取得するよりもHWNDからIHTMLDocumentを取得する方が多いです。

要点をまとめると
Internet Explorer_Serverを見つけてWM_HTML_GETOBJECTを送信しObjectFromLresultでIHTMLDocumentを取得します。
まぁ、一般的にはIHTMLDocument2を取得すると思いますが?
大した差はありません。

ではそれぞれの解説を・・・

・Internet Explorer_Serverを探す方法

全てのウインドウを探すわけですからFindWindowExがお勧めです。
これにはクラス名を指定することが出来ますが、"Internet Explorer_Server"はかなり深い子ウインドウなので、FindWindowExで直接見つける方法はありません。
なので、再帰処理をして、子ウィンドウの子ウィンドウをと、どんどん深く潜って探す必要があります。
そして、見つけたウインドウがInternet Explorer_ServerかどうかをGetClassNameを使って全部調べる必要があります。

・WM_HTML_GETOBJECTを送信する。

WM_HTML_GETOBJECTを送信するのは、普通のSendMessageではなくSendMessageTimeoutを使うのが一般的のようです。別のプロセスであるIEはフォアグラウンド処理されていないので、反応がちょっと遅いです。
場合によってはFreezeしているかも知れません。 
なので、タイムアウト機能付きのを使う様です。

・IHTMLDocument2を取得する。
SendMessageTimeoutので取得するlpdwResultの値は、すでにIHTMLDocument2等のインターフェイスらしいです。
なのでこれをオブジェクトに変換をします。
ObjectFromLresultを利用します。

これで、IHTMLDocument2を取得する所までが完了です。

ここまでも、C#にはない機能を使うために幾つかAPIを追加する必要がありますが、ごく一般的で、これを行わなくても追加してあるかも知れません。

ですが、ここから先は、あたしが今まで使ったこともないものを追加していきます。


まず、インターフェイスを切り替えIServiceProviderにします。
QueryService(QueryInterfaceではない)を使ってブラウザ本体を取得したら
IWebBrowser2を取得して終了です。

・定義の作成
まず、IServiceProviderを定義します。
c#にはIServiceProviderが元々ありますが、全然違うものです。

[ComImport]
[Guid("6d5140c1-7436-11ce-8034-00aa006009fa")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface IServiceProvider
{
void QueryService(ref Guid guidService, ref Guid riid,
[MarshalAs(UnmanagedType.Interface)] out object ppvObject);
}

他にもメソッドがあるかもしれませんが、QueryServiceしか使わないので、定義は要りません。


・IServiceProviderへの切り替え

IHTMLDocument2からIServiceProviderに変更するためにIDispatchを取得します。
GetIDispatchForObjectでOKです。
戻り値をQueryInterfaceに掛けてIServiceProviderを取得します。

このままではただのIntPtrなのでGetTypedObjectForIUnknownを掛けてIServiceProviderにします。


・ブラウザ本体を取得
作成したIServiceProviderでQueryServiceを実行し、SID_STopLevelBrowserのIServiceProviderを取得します。
この工程がどの程度必要なのかは判りません。
これにQueryServiceを実行しSID_SWebBrowserAppのIWebBrowser2を取得します。
これで、IWebBrowser2の取得が完了しました。なんならDocumentを取得して一致しているか確認しても良いでしょう。


今回のキモは、QueryServiceがC#では提供されていないと言うことです。
GetIDispatchForObjectでIDispatchが取得手出来て、QueryInterfaceが実行できるのにね!

閉じる
テーマ:たわごと URL:https://tsukiyori.sakura.ne.jp/index.cgi?ID=1481
 
no prev page 1/1ページ(1件) no next page
このホームページでは一部、“PULLTOP” 製品の画像素材を加工・引用しています。
これらの素材を他へ転載することを禁じます。
(C)GUST CO.,LTD.
Copyright © 2009 C&C Media Co.,Ltd. All Rights Reserved.
Copyright ©  WeMade Entertainment Co.,Ltd. All Rights Reserved
Copyright ©  INTIVSOFT. All Rights Reserved.
『PHANTASY STAR ONLINE 2』公式サイト
http://pso2.jp/
■PULLTOP Official Website■ やりこみRPGアトリエシリーズ公式ページへ!
モバイル向けのページはこのQRコードを利用ください。
■PULLTOP Official Website■
 
以前のバナーはこちら パメラ七変化はこちら