
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
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.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)
'//ここまで。後は既存の通り
No.1
- 回答日時:
こんにちは
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAにてメッセージボックスを最前面に表示させる
その他(プログラミング・Web制作)
-
ファイル保存先のダイアログが背面に表示されてしまう
Java
-
メッセージボックスを前面に表示させるには?
Visual Basic(VBA)
-
-
4
VBSでファイル選択ダイアログを表示させたい
その他(プログラミング・Web制作)
-
5
VBA ファイルを開くダイアログでの初期表示にファイルサーバーを指定
Excel(エクセル)
-
6
VBScriptでのフォルダ指定ダイアログについて
Visual Basic(VBA)
-
7
VBS(WSH)で開いたIEのウィンドウがアクティブにならない
Visual Basic(VBA)
-
8
vbsで選択ダイアログを表示したいのですがやり方が分かりません。教えて
その他(プログラミング・Web制作)
-
9
VBSで起動したアプリが前面表示しない
Visual Basic(VBA)
-
10
【HTML、VBScript】HTAアプリケーションにて別ウインドウで開きたい
Visual Basic(VBA)
-
11
Application.Runエラー(1004)
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ボタンの配置を変更したい
-
vbscriptで、ファイル選択ダイ...
-
ボタンの表示の色、フォントを...
-
メッセージボックスのボタン文...
-
MFCダイアログボックスを最前面...
-
'int' から 'LPCSTR' に変換で...
-
ショートカットキーをカスタマ...
-
メッセージボックスを大きくす...
-
ダイアログの上のテキストボッ...
-
MFC ポップアップメニューのチ...
-
Microsoft Visual C++ 6.0でダ...
-
ダイアログに表示されるアイコ...
-
【MFC】sleep関数を用いたモー...
-
C# ボタンコントロール内で文字...
-
CWnd::SetCapture()の動作について
-
フォーム上のリストボックスに...
-
Visual C++のダイアログ編集画...
-
グラフの交点の求め方(Excel)
-
「アイテムは収集されました」...
-
コントロールの書式設定で、“コ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
メッセージボックスを大きくす...
-
フォーム上のリストボックスに...
-
ボタンの表示の色、フォントを...
-
ダイアログの上のテキストボッ...
-
リソースファイルとは・・・
-
ボタンの配置を変更したい
-
コンボボックスのドロップダウ...
-
'int' から 'LPCSTR' に変換で...
-
ダイアログボックスで指定した...
-
C# ボタンコントロール内で文字...
-
メッセージボックスのボタン文...
-
ダイアログの一部を半透明化す...
-
vbscriptで、ファイル選択ダイ...
-
【MFC】sleep関数を用いたモー...
-
【VC++2005】ダイアログサイズ...
-
Visual C++のダイアログ編集画...
-
MFCのリストボックスについて
-
エディットボックスの処理で画...
-
ダイアログを自分の好きな位置...
-
MFCダイアログボックスを最前面...
おすすめ情報
どうもありがとうございます。
Excelの方式も行いましたが、
やはり後ろに表示されてしまいます。
環境の問題でしょうか。
前面にするのがやはりうまくいってません。