IE8で、<input type=file>の.valueがc:\fakepath\filenameを返す。(その2)
IEでも頑張ればできます。<input type=file>の.valueを見る代わりに、<input type=file>の編集ボックスをクリップボードにコピーして、それを<textarea>に張り付けて、<textarea>の.valueを見ます。
Option Explicit
MsgBox ieFileOpen("C:\Program Files\*.txt")
Function ieFileOpen(FileName)
Dim ie
Dim wShell
Set ie=CreateObject("InternetExplorer.Application")
ie.Navigate "about:blank"
Do While ie.Busy Or ie.ReadyState<>4
WScript.Sleep 100
Loop
ie.Document.body.innerHTML="<input type=file id=FILE><textarea id=TEXT></textarea>"
ie.Document.parentWindow.setTimeout "FILE.click();"
Set wShell=CreateObject("WScript.Shell")
Do While Not wShell.AppActivate("ファイルの選択")
WScript.Sleep 100
Loop
wShell.SendKeys "%n"&FileName&"%o"
Do While ie.Busy
WScript.Sleep 100
Loop
ieFileOpen=ie.Document.all.FILE.value
If InStr(ieFileOpen,":\fakepath\")=2 Then
Const OLECMDID_COPY = 12
Const OLECMDID_PASTE = 13
Const OLECMDID_SELECTALL = 17 '(&H11)
Const OLECMDEXECOPT_DODEFAULT = 0
ie.Document.all.FILE.focus
ie.ExecWB OLECMDID_SELECTALL,OLECMDEXECOPT_DODEFAULT
ie.ExecWB OLECMDID_COPY,OLECMDEXECOPT_DODEFAULT
ie.Document.all.TEXT.focus
ie.ExecWB OLECMDID_PASTE,OLECMDEXECOPT_DODEFAULT
ieFileOpen=ie.Document.all.TEXT.value
End If
ie.Quit
End Function
« IE8で、<input type=file>の.valueがc:\fakepath\filenameを返す。 | トップページ | バッチファイルから「ファイルを開く」ダイアログを使う。 »