プロが教えるわが家の防犯対策術!

vbscriptで、ファイル選択ダイアログを表示する方法を確認してます。
あるボタンを押すと、ダイアログを表示するようにしようとしてますが、
以下の場合、元の画面(ボタンを押す画面)の後方にダイアログが表示されます。
ダイアログを前面に表示する事は可能でしょうか。

ーーーーーーーーーーーーー
Dim iptObj
Dim ret

With CreateObject("InternetExplorer.Application")
.Visible = False
.FullScreen = True
.Navigate "about:blank"

'表示待ち
While .Busy Or .readyState <> 4
WScript.Sleep 100
Wend

Set iptObj = .document.createElement("input")
iptObj.setAttribute "type", "file"
.document.body.appendChild iptObj
iptObj.Click
If Trim(Len(iptObj.Value)) > 0 Then
iptObj.Focus
.ExecWB 17, 0 'OLECMDID_SELECTALL
.ExecWB 12, 0 'OLECMDID_COPY
ret = CreateObject("htmlfile").parentWindow.clipboardData.GetData("text")
End If
Set iptObj = Nothing
.Quit
End With
GetFilePathIE2 = ret

質問者からの補足コメント

  • どうもありがとうございます。
    Excelの方式も行いましたが、
    やはり後ろに表示されてしまいます。
    環境の問題でしょうか。
    前面にするのがやはりうまくいってません。

    No.1の回答に寄せられた補足コメントです。 補足日時:2018/03/05 23:49

A 回答 (2件)

こんにちは。


WScript をわざわざ使う方にとって、私が紹介する方法は、あまり良い案とは言えませんが、Excel等の環境がない人にとっては、一案だと思います。
それは、DynamicWrapperを使う方法です。後は、前面にだすのがうまくいくかは、Win32API のコードの問題ですから、うまくいかなければ、方法を変えるだけです。

入手先
http://glsft.free.fr/index.php?option=content&ta …

使用準備
https://www.recfor.net/jeans/index.php?itemid=23
regsvr32 で、DynaWrap.dll を登録してあげます。

//

With CreateObject("InternetExplorer.Application")
.Visible = False
.FullScreen = True
.Navigate "about:blank"

'表示待ち
While .Busy Or .readyState <> 4
WScript.Sleep 100
Wend

'//ここから
Dim objDynaWrap
Dim hWnd
Dim CC
Set objDynaWrap = CreateObject("DynamicWrapper")
objDynaWrap.Register "USER32.DLL", "FindWindow", "i=sl", "f=s", "r=h"
objDynaWrap.Register "USER32.DLL", "SetForegroundWindow","i=l"

hWnd = objDynaWrap.FindWindow("#32770", 0)
If hWnd =0 Then
MsgBox "Failure!"
WScript.Quit
End If
Call objDynaWrap.SetForegroundWindow(hWnd)
'//ここまで。後は既存の通り
    • good
    • 0

こんにちは



VBSは触ったことがないので、まったくわからないのですが…


事象だけから推測すると、IEのウィンドウをアクティブ(最前面)にしておけば良さそうに思えます。
https://netwiz.jp/?p=513

ダイアログを出す方法を検索してみると、他にも
 ・BrowseForFolder を利用する方法
 ・CommonDialog を利用する方法
などがあるようですが、アプリケーション経由で行う方法としてはIE利用の例が多いみたいですね。

愚考してみるに、IE利用だとReady待ちや要素生成などの余分な処理が多い気がしましたので、Exelなどを利用した方が簡単なのではないかと、少し試してみました。

以下を単独で実行してみる限りでは、私の環境ではダイアログは最前面に表示されますが、ご提示の内容を IE → Excel にほぼ置き換えただけなので、質問者様の環境では後ろに表示されるのかも知れません。
試してはいませんが、最前面に表示する処理を追加してあげれば、前面に表示されるようにならないでしょうか?

Dim fName

With CreateObject("Excel.Application")
.Visible = False
fName = .GetOpenFilename("All Files (*.*),*.*")
.Quit
End With

MsgBox fName
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A