IEditorを作成した時に、 程よく使いやすいサンプルが出来たのでメモ。 ソースが長いので、見づらい場合には閉じて下さい。 ▼ソースを開く/たたむ以下参考メモ。 ソースの大本は、以下を参考にしました。 ファイル選択ダイアログを開く:SQLの窓 IEオブジェクトを作成した際にエラーチェックしていませんが、 「IEの入っていないWindows環境」を見たことがないのに加え、 Vista+IE8でも問題無く通過しているので、様子見の状態です。 このサンプルでは、 ファイルを選択した際に拡張子を判別しています。 別に無くても良いのですが、IEオブジェクトを使用するという仕様上、 ファイル選択ダイアログ時に拡張子を限定することが出来ないため、 仕方無くファイルを選択した後の判断となります。 IE8の場合、<INPUT>に格納されるファイルパスを取得した際に、 セキュリティの問題上「C:\fakepath\」となります。 その回避として、 何度も紹介させて頂いている以下のサイトを参考にしました。 IE8で、input type=fileの.valueがc:\fakepath\filenameを返す。(その2): Windows Script Programming' ********************************************************** ' ファイル選択ダイアログを表示し、ファイルパスを取得する ' ********************************************************** Function GetFilePath() ' 変数宣言 FilePath = "" ' ファイルパス ExtName = "exe" ' 拡張子判断用 ' 初期メッセージ Msgbox("パスを取得するファイル(." & ExtName & ")を選択して下さい。") ' IEオブジェクトを用意 Set Ie = CreateObject("InternetExplorer.Application") Ie.Navigate( "about:blank" ) Ie.document.getElementsByTagName("BODY")(0).innerHTML = _ "<INPUT id=FilePath type=file><TEXTAREA id=Text></TEXTAREA>" Ie.document.getElementById("FilePath").click ' 選択ファイルパス格納 FilePath = Ie.document.getElementById("FilePath").value ' 選択ファイルパスチェック If FilePath = "" then ' ファイルが選択されなかったので終了 Msgbox("ファイルが選択されなかったので終了します。") Wscript.Quit end If Set Fso = CreateObject( "Scripting.FileSystemObject" ) If Fso.GetExtensionName( FilePath ) <> ExtName then ' 実行ファイル(.exe)が選択されなかったので終了 Msgbox("選択されたファイルが実行ファイル(." & ExtName & ")で無いので、終了します。") Wscript.Quit End If ' IE8の場合はセキュリティの関係上、 ' 「C:\fakepath」となるので、別処理取得 If InStr( FilePath, ":\fakepath\" ) = 2 Then ' コピー&ペースト用定数用意 Const OLECMDID_COPY = 12 Const OLECMDID_PASTE = 13 Const OLECMDID_SELECTALL = 17 '(&H11) Const OLECMDEXECOPT_DODEFAULT = 0 ' FilePathの内容をコピーし、Textへペースト Ie.Document.all.FilePath.focus Ie.ExecWB OLECMDID_SELECTALL,OLECMDEXECOPT_DODEFAULT Ie.ExecWB OLECMDID_COPY,OLECMDEXECOPT_DODEFAULT Ie.Document.all.Text.focus Ie.ExecWB OLECMDID_PASTE,OLECMDEXECOPT_DODEFAULT FilePath = Ie.Document.all.Text.value End If ' Ie破棄 Ie.Quit Set Ie = Nothing ' 最終的にファイルパス取得 GetFilePath = FilePath End Function
ホーム > ソース > VBScript fakepath回避選択ファイルパス取得サンプル
0 件のコメント:
コメントを投稿