ティアのホームページ☆ミ:Page 61 oC
<<< << < prev3$F? 61/554ページ(1661件) $FAnext3 > >> >>>
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_m.cgi?ID=1481
 
To Close..ハードディスクが壊れた! 2019年05月10日21時33分
引っ越す前から調子が悪かったDドライブを、引っ越しを期に、外付けのHDDに中身を全部移しました。

Dドライブに入っていた最も重要なデータは、元々のドライブがそのまま残っているので、そのまま使えるんじゃないかと思うのですが、複数ドライブに分割されていたゲームのデータはひとまとめにして全部入れたので、こっちは元がありません。

ゲームははじめから全部やり直しになる可能性が高いです。

それにしても、なんで急に壊れたのでしょうか?

やっぱり引っ越しが負担になっていたのかな?

今はとりあえずPCが終了しなくて困っているのと、
今日のPSO2が・・・

まーDドライブなくてもPCは起動出来るのですが?

いくつかの最重要ではないデータが消し飛んだかと思うと、悲しいです。

取りあえず、新しいHDDを用意して、生きてるデータを引っこ抜きますかー

あーそうそう、GWが終わったら、会社で使っていたノートも壊れたのです。
BIOSすら起動しないのです。
こっちは完全にどれかの機能が壊れていて、もう修理に出すことも出来ないので直せません。
まーCorei7とか乗ってて度々熱膨張してましたから、
そろそろ壊れるだろうなーって思ってたのですよ。

壊れそうだったPCと壊れそうもなかったHDDでは受けるダメージが違います。
閉じる
テーマ:日記 URL:https://tsukiyori.sakura.ne.jp/index_m.cgi?ID=1480
 
To Close..鑢を手に入れた 2019年05月09日16時00分
まぁ、先日も、ベッドの脚を足すために木工ヤスリを買ったと書きましたが・・・

それとは別です。

そもそも、脚を一つ加工するのに1ヶ月以上掛かりましたから、買ったのは結構前ですしね!


で、買ったのは、角質を削るお風呂で使う肌用の鑢です。

軽石を買うとか言うことも考えてみたのですが、最近はなかなか売っていませんよね?

溶岩から出来た軽石は、重金属を含む場合もありますし、安易に手に入れると、捕まるような物かも知れませんし・・・・

なので、普通に美容グッズの中から選んで買いました。


まず、引越前から削っていたけれど、削り終わっていなかった所が、この2ヶ月削っていないせいで大変な事になってきました。

また、最近の歩行数?が以前の生活に比べて半端なく増えているので、色々な所の皮が剥けてきました。
これも、古い角質の内ですし、運動不足?により少しずつ厚くなってきていた所が削れて、元の厚さに戻ろうとしているのですが?
良く削れるところと、それほどでも無い所、余り削れない所と、段々が出来てきて、歩くときに変な皺が出来たりして、痛かったりするのです。

沢山削れた所は当然のように柔らかいですが、まだ古い角質の多い部分は硬くあまり曲がらないのですよ。

で、ここで言う古い角質というのは、

垢じゃないのか?

汚い!

とか思う人も居るかもしれませんが?
日常的に肌用鑢で削ったり、洗うときにゴシゴシしたり、そういう事をしても尚、皮が厚くなる方が早いという、トンデモ部分なので、おそらく垢ではありません。


そういう訳で、昨晩は、早速お風呂で使ってみたのですが、削り残りが大変な事になっていた、くるぶしは、数回擦っただけでボロボロと体積部分が剥がれて、引越前と同じくらいまで一気に削れてしまいました。

まぁ、ここからつやつや肌にする方が大変なんですけどね?

とりあえず、くるぶしはなんとかなったけど、
かかとの周辺がちょっと大変ですね?

最も擦れる所は、既に綺麗になっているのですが、全然擦れない(そもそも古い角質が殆ど無い)所との間に、角質が溜まっている部分がUの時にあるのですよ。

まずここの堆積した部分を綺麗にしたいです。

次は足の指先ですね〜
閉じる
テーマ:日記 URL:https://tsukiyori.sakura.ne.jp/index_m.cgi?ID=1479
 
<<< << < prev3$F? 61/554ページ(1661件) $FAnext3 > >> >>>