例によって、自作のWindowsAPIクラスに組み込んだ。追加するものが多いので、順に挙げていく。Longまずは、Win32APIの関数群。最初、あろうことかGetClassName関数の返り値の型をなぜか「String」と打ち間違えていたために、コード実行後にExcelが強制終了したのだが、大丈夫だったのだろうか......。2これらは、GetNextWindow関数の引数(第2引数wFlag)にするための定数。GW_HWNDLAST)とすれば、最後に取得するウインドウである場合にGetNextWindow関数がウインドウハンドル(hwndの値)と同じ値を返すっぽい。それによって終了判定に使うことができるらしい。Functionこれがメインのコード。200でString型変数を宣言する際に固定長にしておくこと。固定長にして、使用するメモリのサイズを厳密に確保しておかないと、えらいことになるような気がする。このあたり、C言語に詳しい人がいたら、教えろ教えてください。vbNullString)は、FindWindow関数を用いて、ウインドウハンドルを取得。引数に二つともvbNullStringを渡しているので、とりあえずテキトーにどれか一つを取得しているのだと思う。違っていたら教えろ教えてください。ここからDoループに突入。'......(6)'If文がネストしているので、読みづらいかも知れない。(3)でIsWindowVisible関数を用いて、可視状態のウインドウかどうかを調べる。この関門をクリアすると、今度はGetWindowTextでウインドウのキャプションを取得する。Len(gotCaption))の実行直後に「gotCaption」にウィンドウのキャプションと残りの文字数をNull文字で埋めた固定長の文字列が格納されていることがわかる。ここの返り値が結構長い文字列になることがあるので、とりあえず固定長を200と大きめに取っておいたが、これが適切なのかどうかもよくわからない。これまた詳しい人がいたら教えろ教えてください。変数gotCaptionには、ウインドウのキャプションとNull文字が入っているので、引数の「targetAppNameKeyWord」を含んでいるなら、お目当てのウインドウだということで、Ifブロック内に進むようにした。アプリケーション名が入っていると思うので。アプリケーション名が全角文字のときにどうなるのかはわからない。このあたりも、詳しい人がいたら、教えろ教えてください。Len(gotClassName))でGetClassNameを呼び出す。これで、gotClassNameに残りの文字数をNull文字で埋めた固定長の文字列が格納される。1)で正味の文字の部分だけを切り出してretに格納し、ループを抜ける。retでretの内容をreturnして終わり。GW_HWNDNEXT)で次のウインドウハンドルを取得してループの先頭へ。GW_HWNDLAST)によってループを抜ける。この場合は""が返ることになる。Explorerのクラス名を知ることなので、次のコードで実行する。Subアホみたいに簡単。テキトーにIEを起動してから実行すると、イミディエイト・ウインドウに「IEFrame」と表示された。Explorerのクラス名ということだ。おわりに何かに使えるかも知れないので、「WinAPIEnums」という標準モジュールを挿入し、次のような列挙体を作った。Enumその上で、我がWindowsAPIクラスのモジュールに次のPrivateメソッドを追加。Function標準モジュール「WinAPIEnums」と必ずセットでインポートしなければならなくなるけれど、このようにすることで、今後WindowsAPIオブジェクトを利用する際にクラス名を指定しやすくなった。......とはいえ、列挙されているアプリ以外については、今後追加していかねばなりませんが......。»プロフィールid:akashi_keirinExcelVBAネタです。SyntaxHighlighter.all();注目記事はてなブログをはじめよう!akashi_keirinさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。