|
▼ハチ さん:
こんにちは
>実際は子WindowのinnerText(もしくはソース)を引っ張って
>データ取得しようしていました。
>hwndからオブジェクトを取得するには、またまたAPIでやる必要がありそうですね。
え〜っと、IE内のテキストデータなどを取得したいなら、APIでやると
恐ろしく難しいことをしなければならないような気がします。
・・・・私はやったことないです。
その目的ならですが、Microsoft Web browserコントロールというものを
ご存知でしょうか?
確かOffice2000の頃はAccessには付属していたような気がします。(未確認です)
付属していなかったら、VB2005 ExpressEdition (MSが無料で配布しているやつ)
に付属しています。
これでやると、イベントも取得できるし、objectを作らなくても良いし
結構楽チンです。私も、過去ログを収集するのにツールを作ったことあります。
・・・今はどこかに行きましたけど。
大きなお世話かもしれませんが、ハチさんなら、環境が許すなら
OfficeのWebbrowserコントロールを使用するか、VB2005をタダでGet、
インストールして、そちらでおつくりになる方が将来のためにも
宜しいんじゃないでしょうか?
多分サンプルも沢山Web上に在りそうですし。割と簡単にできると思います。
VB2005自体はVBAと全く別物なので少しなれるのに時間はかかるとは思いますが。
>提示して頂いたサンプルコードを調べていたのですが、
>「AddressOf」演算子あたりで脳ミソから煙が出ました。
ビールでもかけて消して下さい^ ^;;
この辺りのことは既にご存知でしょうが、ややこしそうな気がするところを
一応簡単に説明しておきます。
EnumFuncはenumwindows用のコールバック関数、EnumWindowsProc API関数です。
関数の名前はEnumWindowsProc とする必要はなく、
BOOL CALLBACK EnumWindowsProc(
HWND hwnd, // 親ウィンドウのハンドル
LPARAM lParam // アプリケーション定義の値
);
の構造を持っていれば、任意の名前をつけることが出来ます。
第2引数では、任意の数値を指定できるので、今回は除外するHWNDを渡してます。
>Private Function EnumFunc(ByVal hwnd As Long, _
> ByVal lparam As Long) As Boolean
クラス名を保存するのに十分な文字数の領域を確保しておく。
MAX_PATHは、Cでは、普通255と定義されるものなので、わかりやすいので使用してます。
>Dim sClassName As String * MAX_PATH
>Dim sbuf As String
>
> EnumFunc = True
引数hwndのクラス名を取得します。
> GetClassName hwnd, sClassName, MAX_PATH
取得したクラス名には有効な文字以降255文字目まではchr(0)で満たされて
いますから、不要な文字chr(0)を取り除き、判断に使用します。
> sbuf = Left(sClassName, InStr(1, sClassName, Chr(0)) - 1)
ここは良いですね。
> If sbuf = IEClassName Then
> If hwnd <> lparam Then
> OtherIE = hwnd
見つかって、目的を達成したので、これで関数を走らせるのを止める。
(戻り値をFalseにする。Trueの場合は全てのWindowを列挙し終わるまで走り続ける。)
> EnumFunc = False
> End If
> End If
>End Function
>
|
|