WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:IEが勝手にアクティブになる

0:[投稿] EUR [2006/10/25 17:41 ] [環境:クライアント:WinXPsp2、IE6、Jre1.5.0_08 サーバー側:Apache]

お世話になっております。

VBで作成したGUIを常に最前面に表示させており、VBからIEを立ち上げているのですが、たまにVBよりも手前にIEが表示されることがあり、困っています。
よく調べてみますと、IEのオンロード時に勝手にウィンドウがアクティブになっており、VBのGUIで操作をするタイミングとIEのアクティブになるタイミングがうまく重なると、表示がおかしくなるようでした。
VBから呼び出すページをIE単体で起動してみたところ、毎回ではないですが、以下のことが確認できました。
・ロード時にウインドウがアクティブになり、IEのウインドウにフォーカスが当たる。
・最小化をしていても、オンロードの時点でウインドウにフォーカスが当たり、元のサイズに戻る。

IEで開いている画面は、3つフレームに分かれており、1つにはアプレットが搭載されております。
ウィンドウにフォーカスが当たるタイミングは、このアプレットが埋め込まれているフレームのオンロード時のようです。
JavaScriptのfocus()や、Javaのshow(),toFocus()は使用しておりません。
アプレットのpaintメソッドの中では、drawStringメソッドのみを使用しております。
Javaのコンパイルはsdk1.5.0_08で行っており、表示はjre1.5.0_08で行っております。

原因をご存知の方がいらっしゃいましたら、ご教授をお願いいたします。


1:[回答] 燕雀 [2006/10/26 22:22 ]

文面から察するに,おそらく CreateProcess() かなにかでIEを立ち上げているのでは,と思いますが,立ち上げ元アプリケーションから細かな制御が必要な場合には,IEのCOMコンポーネントである IWebBrowser2 を使用してIEを立ち上げるのが良いでしょう.IEブラウザのウィンドウハンドルも取得できますし,かなりのことができるようになるはずです.VBユーザということですので,以下のサイトを参照して下さい.
http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/webbrowser/reflist_vb.asp

JavaScript で記述した使用例を下記に示しましたので,参考にしていただければ,と思います.
これを実行する場合は,ファイル拡張子を .hta にして,ダブルクリックしてください(例:ファイル名を test.hta とし,ダブルクリック).実行にブラウザは必要としません.

実行する時の注意!
hta の実行では,コンピュータのローカルな資源に無警告でアクセスが可能です.
コード内容をよく確認いただいて,ご自身の責任において実行してください.万一予期しない事態が発生したとしても,当方は一切責任を負いかねますことをご了承ください.
(InternetExplorer の ActiveX しか使っていませんけどね)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis" />
<title>IEの作成と制御</title>
<script type="text/javascript">
IEobj= null;
timerid= 0;

function ieCreate() {
    IEobj = new ActiveXObject("InternetExplorer.Application");
    IEobj.Visible = true;
    IEobj.Navigate("http://www.google.co.jp/");
    if(IEobj.Busy){
        timerid= setInterval(iewait, 1000);
        return;
        }
    ieComplete();
}

function iewait()  {
    if(IEobj.Busy) {return;}
    clearInterval(timerid);
    ieComplete();
}

function ieComplete() {
    btnobjs= document.getElementsByTagName("button");
    for(i= 1; i < 3; ++i) {btnobjs[i].style.visibility= "visible";}
    hwndIE=IEobj.HWND;
    document.getElementById("display1div").innerHTML= hwndIE;
    document.getElementById("display2div").innerHTML= IEobj.document.title;
}

function ieVisible(sw) {
    if(sw == 1) {IEobj.Visible= true;}
    if(sw == 0) {IEobj.Visible= false;}    
}

function cleanUp() {
    IEobj.quit();
}
</script>
</head>
<body onunload="cleanUp();">
<button onclick="ieCreate();">IEを作成</button>
<button onclick="ieVisible(1);" style="visibility:hidden">IEを見えるようにする</button>
<button onclick="ieVisible(0);" style="visibility:hidden">IEを見えないようにする</button>
<p> IEのウィンドウハンドル
<div id="display1div" style="border:1px solid blue;width:5em;"></div>
IEのタイトル
<div id="display2div" style="border:1px solid blue;width:20em"></div>
</p>
<button onclick="window.close();">終了</button>
</body>
</html>

回答(必須): 状態:

お名前(必須):

URL:




[戻る]