現在、API関数のShellExexuteExを使用して、URL投入により
ブラウザを起動するプログラムを作成しています。
このブラウザの起動を、常に最大化の状態で起動されるように
したいのですが、なかなか思うようにいきません。
今、NShowにvbMaximizedFocusを与えることにより、新規に
開かれるブラウザついては最大化できるようになったのですが、
既に最大化されていないブラウザが1つ表示されていると、その
ブラウザで最大化せずにページが表示されてしまいます。
これも最大化して表示したいのですが、わかる方がいらっしゃい
ましたら、よろしくご教授お願いします。
確認していないので、間違っているかも知れませんが参考までにどうぞ。
現在起動中のブラウザハンドルを取得して、そいつに対してsendmessageで「最大化」命令を送れば出来るような感じがします。
もしかしたらもっとスマートなやり方があるかも知れません。
MADIAさん、ご回答ありがとうございます。
「現在起動中のブラウザハンドル」の取得ですが、いくつか
ブラウザが起動していた場合、自分のなげたURLがどの
ウィンドウで開かれるのかは特定できるんですか?
ShellExexuteExからウィンドウハンドルを取得するのは
かなり難しい(不可能?)ようなので、やはりFindWindow等
で自力で取得・・・って感じになっちゃうんでしょうか?
全てのトップレベルウィンドウのハンドルを得て、
そのなかでclass名が
"IEFrame"(InternetExplorerのメインウィンドウのクラス)
"Opera Main Window"(Operaのウィンドウクラス)
あとはNetscapeのウィンドウクラスを見つけて、
見つけたらそのウィンドウにSendMessage…。がいいでしょうね。
ほかに対応したいブラウザがあるのなら、
そのブラウザのウィンドウクラス名のウィンドウにも、
SendMessageします。
あと、Operaの場合は、
最大化したあとに、SendKeysかKeybd_eventで、
Ctrl+Shift+5を送ると、ブラウズウィンドウも全部最大化してくれます。
(Operaは多重起動することがないので、FindWindowでもいいです)
たかみちえさん、ご返答ありがとうございます。
基本的にブラウザはIEのみで考えています。
「いくつかブラウザが起動していた場合」というのは
IEが複数起動していた場合・・・というつもりでした。
わかりにくい記述で申し訳ありませんでした。m(__)m
>全てのトップレベルウィンドウのハンドルを得て、
>そのなかでclass名が
>"IEFrame"(InternetExplorerのメインウィンドウのクラス)
というのをさっそく試してみようと思います。
その後、なかなか時間が取れず、開発も思うようにいかずで
書き込みが遅くなってしまいましたが、結局「ShellExexuteEx
で起動したブラウザ(IE)をVBで最大化」という方式は
VBからの制御が思うようにIEに伝わらず、残念ながら断念
することになりました。
くやしいですが、表示するページ側で最大化するような対応を
とることになりそうです。
いろいろご指導いただいた皆さん、ありがとうございました。
ツイート | ![]() |