« IE8で、<input type=file>の.valueがc:\fakepath\filenameを返す。 | トップページ | バッチファイルから「ファイルを開く」ダイアログを使う。 »

2009年5月28日 (木)

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を返す。 | トップページ | バッチファイルから「ファイルを開く」ダイアログを使う。 »