DOBON.NET DOBON.NETプログラミング掲示板過去ログ

WebBrowserを使用してデータの入力

環境/言語:[os Vista VB.net 2005]
分類:[.NET]

WebBrowserを使用してデータの入力をテストしているのですが
画像ファイルのみ何故か入力が出来ません。

--------------------- Html
<TR>
<td nowrap="nowrap">ホームページ</td>
<td><input name="site" value="" size="30" type="text"></td>
</TR>
<TR>
<td nowrap="nowrap">画像</td>
<td><input name="file" value="" type="file"></td>
</TR>


------------- Prg

' ホームページ 入力
  WebBrowser2.Document.GetElementById("site").SetAttribute("value", "http://abcdefg")  ← OK

Call WaitCompleted() '表示待ちの部分

' 画像 入力    
WebBrowser2.Document.GetElementById("file").SetAttribute("value", "PICUrl") ← NG

※ <input name="file" のときは上の構文とはなにか異なる処理が必要なのでしょうか?

  画像のインプットの所のみ入力枠の横にボタンが付いています(ファイルのダイアログ表示)

よろしくご指導お願いします。
IE8がインストールされているという前提で書いていますが、もしIE8をインストールしていないのであれば、別の問題かもしれません。

■No24994に返信(ふろんさんの記事)
> ※ <input name="file" のときは上の構文とはなにか異なる処理が必要なのでしょうか?

Internet Explorer 8(IE8)がインストールされている環境ではご提示の手法は利用できません。
これはセキュリティ上の問題が理由となります。
(勝手にユーザのファイルをアップロードできるのが問題)

関連情報
http://social.msdn.microsoft.com/Forums/ja-JP/internetexplorerja/thread/885f7e56-1198-483e-8a89-b1e01f43f590
> ■No24994に返信(ふろんさんの記事)
>> ※ <input name="file" のときは上の構文とはなにか異なる処理が必要なのでしょうか?
>
> Internet Explorer 8(IE8)がインストールされている環境ではご提示の手法は利用できません。

IE8以外であっても <input name="file" value="" type="file"> に対して SetAttribute は無効になります。

Azuleanさんが紹介されたページを参考にするか、WebBrowserでPOSTを実現するかになります。
■No24995に返信(Azuleanさんの記事)
> IE8がインストールされているという前提で書いていますが、もしIE8をインストールしていないのであれば、別の問題かもしれません。
>
> ■No24994に返信(ふろんさんの記事)
>> ※ <input name="file" のときは上の構文とはなにか異なる処理が必要なのでしょうか?
>
> Internet Explorer 8(IE8)がインストールされている環境ではご提示の手法は利用できません。
> これはセキュリティ上の問題が理由となります。
> (勝手にユーザのファイルをアップロードできるのが問題)
>
> 関連情報
> http://social.msdn.microsoft.com/Forums/ja-JP/internetexplorerja/thread/885f7e56-1198-483e-8a89-b1e01f43f590


Azuleanさんへ
貴重な情報ありがとうございます
IE8ではセキュリティの関係でできなくしてるんですね

しかし、IEのバージョンを確認しましたが、Internet Explorer 7 でした。

※ <input name="file"のフィールドはファイルパス以外にも何を入れても
反応しません

引き続き解決策を探しています よろしくお願いします
■No24997に返信(ヴァンさんの記事)
>>■No24994に返信(ふろんさんの記事)
> >> ※ <input name="file" のときは上の構文とはなにか異なる処理が必要なのでしょうか?
>>
>>Internet Explorer 8(IE8)がインストールされている環境ではご提示の手法は利用できません。
>
> IE8以外であっても <input name="file" value="" type="file"> に対して SetAttribute は無効になります。
>
> Azuleanさんが紹介されたページを参考にするか、WebBrowserでPOSTを実現するかになります。

ヴァン様
ありがとうございます。
>SetAttribute は無効になります
そうなんですか道理で何も反応がないのですね 困りました!

>WebBrowserでPOSTを実現するかになります。
について調べてみようと思うのですが
何か参考記事ありましたら よろしくお願いします
> >WebBrowserでPOSTを実現するかになります。
> について調べてみようと思うのですが
> 何か参考記事ありましたら よろしくお願いします

自分もまだ試行錯誤中ですが、以下のページが参考になると思います。

http://www.codeproject.com/KB/aspnet/set-webbrowser-file-input.aspx?display=Print
2009/07/21(Tue) 18:48:19 編集(投稿者)

こんにちは。
対象がメモ帳ですがポストしている例がこちらどぼんさんの掲示板のログにあります。
http://dobon.net/vb/bbs/log3-34/21332.html


IEのというかWebBrowserコントロールでも、私自身がドラッグアンドドロップした複数のファイルを順に投稿するツールを作って使っているのですが、
そこで以下のようにすることで入力しています。
(とあるブログでひとつの記事に7〜10枚程度の画像をつけるような運用をしているためいちいちひとつひとつ選んで送信するのが面倒で。)

'ファイルパスの入力欄にフォーカスを当て…
BrowserUnit.Document.GetElementById("uploadfilename").Focus()
Dim ptr As IntPtr = GetChildWindows(Me.BrowserUnit.Handle)(2)    '2番目がブラウザのキャンバスというかボディの部分
'ファイル名を一文字ずつ送る
For charcounter As Integer = 1 To Len(fname)
    PostMessage(ptr, WM_CHAR, AscW(Mid(fname, charcounter, 1)), 0)
Next

'再度フォーカスを当ててDoEvents。
'これをしないと、値がセットされない(見かけ上は確かに入力されているのだが、実際の値が空になっている模様。)
BrowserUnit.Document.GetElementById("uploadfilename").Focus()
Application.DoEvents()

(あ、WM_CHARは&H102です。)
■No25003に返信(とん。さんの記事)
> 2009/07/21(Tue) 18:48:19 編集(投稿者)
>
> こんにちは。
> 対象がメモ帳ですがポストしている例がこちらどぼんさんの掲示板のログにあります。
> http://dobon.net/vb/bbs/log3-34/21332.html
>
>
> IEのというかWebBrowserコントロールでも、私自身がドラッグアンドドロップした複数のファイルを順に投稿するツールを作って使っているのですが、
> そこで以下のようにすることで入力しています。
> (とあるブログでひとつの記事に7〜10枚程度の画像をつけるような運用をしているためいちいちひとつひとつ選んで送信するのが面倒で。)
>
> 'ファイルパスの入力欄にフォーカスを当て…
> BrowserUnit.Document.GetElementById("uploadfilename").Focus()
> Dim ptr As IntPtr = GetChildWindows(Me.BrowserUnit.Handle)(2) '2番目がブラウザのキャンバスというかボディの部分
> 'ファイル名を一文字ずつ送る
> For charcounter As Integer = 1 To Len(fname)
> PostMessage(ptr, WM_CHAR, AscW(Mid(fname, charcounter, 1)), 0)
> Next
>
> '再度フォーカスを当ててDoEvents。
> 'これをしないと、値がセットされない(見かけ上は確かに入力されているのだが、実際の値が空になっている模様。)
> BrowserUnit.Document.GetElementById("uploadfilename").Focus()
> Application.DoEvents()
>
> (あ、WM_CHARは&H102です。)

とん様
ありがとうございます

早速テストしてみたのですが下記の2ヶ所でエラーです。

'ファイルパスの入力欄にフォーカスを当て…
WebBrowser2.Document.GetElementById("C:\testpic01.jpg").Focus()
Dim ptr As IntPtr = GetChildWindows(WebBrowser2.Handle)(2)
             ~~~~~~~~~~~~~~~~~~~
'ファイル名を一文字ずつ送る
For charcounter As Integer = 1 To Len("C:\testpic01.jpg")
PostMessage(ptr, &H102, AscW(Mid("C:\testpic01.jpg", charcounter, 1)), 0)
      ~~~~~~~~~~~
Next

'再度フォーカスを当ててDoEvents
WebBrowser2.Document.GetElementById("C:\testpic01.jpg").Focus()
Application.DoEvents()
ふろんさん。…ごめんなさい。下を貼ってください。


    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function PostMessage( _
    ByVal hWnd As IntPtr, _
    ByVal Msg As UInteger, _
    ByVal wParam As IntPtr, _
    ByVal lParam As IntPtr) As Boolean
    End Function

    <DllImport("User32.dll")> _
    Private Shared Function EnumChildWindows _
        (ByVal WindowHandle As IntPtr, ByVal Callback As EnumWindowProcess, _
        ByVal lParam As IntPtr) As Boolean
    End Function

    Public Delegate Function EnumWindowProcess(ByVal Handle As IntPtr, ByVal Parameter As IntPtr) As Boolean

    Public Shared Function GetChildWindows(ByVal ParentHandle As IntPtr) As IntPtr()
        Dim ChildrenList As New List(Of IntPtr)
        Dim ListHandle As GCHandle = GCHandle.Alloc(ChildrenList)
        Try
            EnumChildWindows(ParentHandle, AddressOf EnumWindow, GCHandle.ToIntPtr(ListHandle))
        Finally
            If ListHandle.IsAllocated Then ListHandle.Free()
        End Try
        Return ChildrenList.ToArray
    End Function

    Private Shared Function EnumWindow(ByVal Handle As IntPtr, ByVal Parameter As IntPtr) As Boolean
        Dim ChildrenList As List(Of IntPtr) = GCHandle.FromIntPtr(Parameter).Target
        If ChildrenList Is Nothing Then Throw New Exception("GCHandle Target could not be cast as List(Of IntPtr)")
        ChildrenList.Add(Handle)
        Return True
    End Function
■No25003に返信(とん。さんの記事)
> 2009/07/21(Tue) 18:48:19 編集(投稿者)
>
> こんにちは。
> 対象がメモ帳ですがポストしている例がこちらどぼんさんの掲示板のログにあります。
> http://dobon.net/vb/bbs/log3-34/21332.html
>
>
> IEのというかWebBrowserコントロールでも、私自身がドラッグアンドドロップした複数のファイルを順に投稿するツールを作って使っているのですが、
> そこで以下のようにすることで入力しています。
> (とあるブログでひとつの記事に7〜10枚程度の画像をつけるような運用をしているためいちいちひとつひとつ選んで送信するのが面倒で。)
>
> 'ファイルパスの入力欄にフォーカスを当て…
> BrowserUnit.Document.GetElementById("uploadfilename").Focus()
> Dim ptr As IntPtr = GetChildWindows(Me.BrowserUnit.Handle)(2) '2番目がブラウザのキャンバスというかボディの部分
> 'ファイル名を一文字ずつ送る
> For charcounter As Integer = 1 To Len(fname)
> PostMessage(ptr, WM_CHAR, AscW(Mid(fname, charcounter, 1)), 0)
> Next
>
> '再度フォーカスを当ててDoEvents。
> 'これをしないと、値がセットされない(見かけ上は確かに入力されているのだが、実際の値が空になっている模様。)
> BrowserUnit.Document.GetElementById("uploadfilename").Focus()
> Application.DoEvents()
>
> (あ、WM_CHARは&H102です。)

とん様
ありがとうございます

早速テストしてみたのですが下記の2ヶ所でエラーです(名前が宣言されておいません) 何か参照ファイルの追加などが必要なのでしょうか??

'ファイルパスの入力欄にフォーカスを当て…
WebBrowser2.Document.GetElementById("C:\testpic01.jpg").Focus()
Dim ptr As IntPtr = GetChildWindows(WebBrowser2.Handle)(2)
            ~~~~~~~~~~~~~~~~~~~
'ファイル名を一文字ずつ送る
For charcounter As Integer = 1 To Len("C:\testpic01.jpg")
PostMessage(ptr, &H102, AscW(Mid("C:\testpic01.jpg", charcounter, 1)), 0)
~~~~~~~~~~~~~~
Next

'再度フォーカスを当ててDoEvents
WebBrowser2.Document.GetElementById("C:\testpic01.jpg").Focus()
Application.DoEvents()

よろしくお願いします。
■No25007に返信(ふろんさんの記事)
> ■No25003に返信(とん。さんの記事)
>>2009/07/21(Tue) 18:48:19 編集(投稿者)
>>
>>こんにちは。
>>対象がメモ帳ですがポストしている例がこちらどぼんさんの掲示板のログにあります。
>>http://dobon.net/vb/bbs/log3-34/21332.html
>>
>>
>>IEのというかWebBrowserコントロールでも、私自身がドラッグアンドドロップした複数のファイルを順に投稿するツールを作って使っているのですが、
>>そこで以下のようにすることで入力しています。
>>(とあるブログでひとつの記事に7〜10枚程度の画像をつけるような運用をしているためいちいちひとつひとつ選んで送信するのが面倒で。)
>>
>>'ファイルパスの入力欄にフォーカスを当て…
>>BrowserUnit.Document.GetElementById("uploadfilename").Focus()
>>Dim ptr As IntPtr = GetChildWindows(Me.BrowserUnit.Handle)(2) '2番目がブラウザのキャンバスというかボディの部分
>>'ファイル名を一文字ずつ送る
>>For charcounter As Integer = 1 To Len(fname)
>> PostMessage(ptr, WM_CHAR, AscW(Mid(fname, charcounter, 1)), 0)
>>Next
>>
>>'再度フォーカスを当ててDoEvents。
>>'これをしないと、値がセットされない(見かけ上は確かに入力されているのだが、実際の値が空になっている模様。)
>>BrowserUnit.Document.GetElementById("uploadfilename").Focus()
>>Application.DoEvents()
>>
>>(あ、WM_CHARは&H102です。)
>
> とん様
> ありがとうございます
>
> 早速テストしてみたのですが下記の2ヶ所でエラーです。
>
> 'ファイルパスの入力欄にフォーカスを当て…
> WebBrowser2.Document.GetElementById("C:\testpic01.jpg").Focus()
> Dim ptr As IntPtr = GetChildWindows(WebBrowser2.Handle)(2)
>              ~~~~~~~~~~~~~~~~~~~
> 'ファイル名を一文字ずつ送る
> For charcounter As Integer = 1 To Len("C:\testpic01.jpg")
> PostMessage(ptr, &H102, AscW(Mid("C:\testpic01.jpg", charcounter, 1)), 0)
>    ~~~~~~~~~~~
> Next
>
> '再度フォーカスを当ててDoEvents
> WebBrowser2.Document.GetElementById("C:\testpic01.jpg").Focus()
> Application.DoEvents()
>
■No25008に返信(とん。さんの記事)
> ふろんさん。…ごめんなさい。下を貼ってください。
>
>
> <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)>
> Private Shared Function PostMessage( _
> ByVal hWnd As IntPtr, _
> ByVal Msg As UInteger, _
> ByVal wParam As IntPtr, _
> ByVal lParam As IntPtr) As Boolean
> End Function
>
> <DllImport("User32.dll")> _
> Private Shared Function EnumChildWindows _
> (ByVal WindowHandle As IntPtr, ByVal Callback As EnumWindowProcess, _
> ByVal lParam As IntPtr) As Boolean
> End Function
>
> Public Delegate Function EnumWindowProcess(ByVal Handle As IntPtr, ByVal Parameter As IntPtr) As Boolean
>
> Public Shared Function GetChildWindows(ByVal ParentHandle As IntPtr) As IntPtr()
> Dim ChildrenList As New List(Of IntPtr)
> Dim ListHandle As GCHandle = GCHandle.Alloc(ChildrenList)
> Try
> EnumChildWindows(ParentHandle, AddressOf EnumWindow, GCHandle.ToIntPtr(ListHandle))
> Finally
> If ListHandle.IsAllocated Then ListHandle.Free()
> End Try
> Return ChildrenList.ToArray
> End Function
>
> Private Shared Function EnumWindow(ByVal Handle As IntPtr, ByVal Parameter As IntPtr) As Boolean
> Dim ChildrenList As List(Of IntPtr) = GCHandle.FromIntPtr(Parameter).Target
> If ChildrenList Is Nothing Then Throw New Exception("GCHandle Target could not be cast as List(Of IntPtr)")
> ChildrenList.Add(Handle)
> Return True
> End Function
>

とん様
ありがとうございます
ご返事遅くなりました
早速テストしてるのですが

DllImport 2ヶ所(定義されていません)
GCHandle 3箇所 (定義されていません 1、 宣言されていません 2)

上記のエラーが出ています
何か参照ファイルなどの追加が必要なのでしょうか??

よろしくお願いします。
あ、ごめんなさい。
参照の追加は要りませんが、両者はSystem.Runtime.InteropServices内なので
System.Runtime.InteropServicesをImportsするか、頭から記述してください。
■No25012に返信(とん。さんの記事)
> あ、ごめんなさい。
> 参照の追加は要りませんが、両者はSystem.Runtime.InteropServices内なので
> System.Runtime.InteropServicesをImportsするか、頭から記述してください。

とん様
度々のご指導ありがとうございます。
System.Runtime.InteropServicesをImportsをTopに記述しエラーは回避できました。

お教えいただいたサンプルを以下のように変更しテストしているのですが

'ファイルパスの入力欄にフォーカスを当て…
WebBrowser2.Document.GetElementById("file").Focus()
Dim ptr As IntPtr = GetChildWindows(WebBrowser2.Handle)(2)

'ファイル名を一文字ずつ送る
For charcounter As Integer = 1 To Len("C:\testpic01.jpg")

'PostMessage(hWnd, &H102, AscW(Mid(strMY, intI, 1)), 0)

PostMessage(ptr, &H102, AscW(Mid("C:\testpic01.jpg", charcounter, 1)), 0)
Next

'再度フォーカスを当ててDoEvents
WebBrowser2.Document.GetElementById("file").Focus()
Application.DoEvents()


フォーカスは狙った所へ移動し点滅しているのですが
データが入らず空白のままです。
後一息のような気がするのですが・・・・・

PostMessage(ptr, &H102, AscW(Mid("C:\testpic01.jpg", charcounter, 1)), 0)

ここの所だと思うのですが色々調べても分りません
再度ご指導をお願いできませんでしょうか
よろしくお願いします。
> フォーカスは狙った所へ移動し点滅しているのですが
> データが入らず空白のままです。
> 後一息のような気がするのですが・・・・・

これがまさにIE8での現象だと思うのですが...
こんにちは。
IE7なら大丈夫かなと思って書いたのですが…7も駄目っぽいですね。失礼しました。
■No25019に返信(とん。さんの記事)
> こんにちは。
> IE7なら大丈夫かなと思って書いたのですが…7も駄目っぽいですね。失礼しました。


ヴァン様 とん様

あ〜〜 そうなんですか
まことに残念ですが、仕方ないですかね
他人のファイルを覗くのはもちろんご法度は分るんですが
自分のファイルを自動化するのに何か救済策はないものですかね

でも、マイクロソフトのセキュリティー方針がそういうことであれば
何らかの方法でそういうことが出来たとしてもその穴は何れ塞がれるのでしょうね

しかし、よい勉強をさせていただきました。
教えて頂いたPostMessageは他のインプットフィールドでは
有効に機能していますので、何かの約に立つでしょう
色々とご指導や情報を頂き感謝いたします。

また何かあればよろしくお願いいたします。
かなりトリッキーなやり方かもしれませんが、ファイル選択ダイアログを表示させて、そこにPostMessageするのはどうでしょうか?
■No25021に返信(ヴァンさんの記事)
> かなりトリッキーなやり方かもしれませんが、ファイル選択ダイアログを表示させて、そこにPostMessageするのはどうでしょうか?
>
>
ヴァン様
それ考えてみたんですけど
-------------------- Html
<TR>
<td nowrap="nowrap">ホームページ</td>
<td><input name="site" value="" size="30" type="text"></td>
</TR>
<TR>
<td nowrap="nowrap">画像</td>
<td><input name="file" value="" type="file"></td>
</TR>
上記inputフィールド内の右に「参照...」ボタンがあるのですが
押せないって言うか上記Htmlにその記述がない????

WebBrowser2.Document.Forms(0).InvokeMember("submit")

この辺りがよく分りません。
どのようにして、ファイル選択ダイアログを表示させるのでしょうか?
こんばんは。
ダイアログ自体は
Me.Browser.Document.GetElementById("uploadfile").InvokeMember("Click")
のようにファイル用の入力欄のClickを発動させるとIE7でも出るかもしれません。
(IE6では出ますがIE7がないので分かりません。)

ところで、
「<input name="file" value="" type="file">」が実際の相手だとすると
GetElementByIdは使用できません(GetElementsByTagNameを使用して探す必要があります。)が、
実物はidがついているのでしょうか。
■No25023に返信(とん。さんの記事)
> こんばんは。
> ダイアログ自体は
> Me.Browser.Document.GetElementById("uploadfile").InvokeMember("Click")
> のようにファイル用の入力欄のClickを発動させるとIE7でも出るかもしれません。
> (IE6では出ますがIE7がないので分かりません。)
>
> ところで、
> 「<input name="file" value="" type="file">」が実際の相手だとすると
> GetElementByIdは使用できません(GetElementsByTagNameを使用して探す必要があります。)が、
> 実物はidがついているのでしょうか。


とん様
こんばんわ

idと云うのがよく分らないのですが
下記の前後近辺にはありません

--------------------- Html
<TR>
<td nowrap="nowrap">ホームページ</td>
<td><input name="site" value="" size="30" type="text"></td>
</TR>
<TR>
<td nowrap="nowrap">画像</td>
<td><input name="file" value="" type="file"></td>
</TR>

>GetElementsByTagNameを使用して探す必要があります
どのようにして探すのでしょうか?

尚、下記をテストしてみましたがエラーでした
WebBrowser2.Document.GetElementById("C:\Pic").InvokeMember("Click")

 → オブジェクト参照がオブジェクト インスタンスに設定されていません。
こんばんは。
(久々だったのでコンピュータ系での自分の名前を間違ってますね。…。「とん。」じゃないです。)

idというのは<input type="file" id="uploadfile">のような記述をしてある際についているもので、
これがないとGetElementByIdでエレメントを見つけることはできません。
nameしかない場合は代わりに
●GetElementsByTagName("input")でHtmlElementCollectionを受け取って中のエレメントをFor Eachループし
name属性が"file"と一致するエレメントを探すか、
●Document.All.GetElementsByName("uploadfile")でHtmlElementCollectionを受け取って中のエレメントをFor Eachループし
何か(タグの種類やら、何かしら。)が一致するエレメントを探すか、
という方法でエレメントを発見する必要があります。(nameもない場合は、大変。)

なお、例示のあるそのHTMLなのであれば、
25013にあった「WebBrowser2.Document.GetElementById("file").Focus()」もエラーになるのでは?
セキュリティがどうこう、バージョンがどうこう以前に正しく動作しませんよね?

>尚、下記をテストしてみましたがエラーでした
>WebBrowser2.Document.GetElementById("C:\Pic").InvokeMember("Click")
"C:\Pic"というidのついたエレメントが存在しないので、当然エラーになります。


昨年の質問の際に書いたとおり、
GetElementById、GetElementsByTagName、GetElementsByNameの3つ程度は
役割を調べておいて使い分けられるようにしておくといいですよ。でないと、操作できません。
■No25027に返信(こど。さんの記事)
> こんばんは。
> (久々だったのでコンピュータ系での自分の名前を間違ってますね。…。「とん。」じゃないです。)
>
> idというのは<input type="file" id="uploadfile">のような記述をしてある際についているもので、
> これがないとGetElementByIdでエレメントを見つけることはできません。
> nameしかない場合は代わりに
> ●GetElementsByTagName("input")でHtmlElementCollectionを受け取って中のエレメントをFor Eachループし
> name属性が"file"と一致するエレメントを探すか、
> ●Document.All.GetElementsByName("uploadfile")でHtmlElementCollectionを受け取って中のエレメントをFor Eachループし
> 何か(タグの種類やら、何かしら。)が一致するエレメントを探すか、
> という方法でエレメントを発見する必要があります。(nameもない場合は、大変。)
>
> なお、例示のあるそのHTMLなのであれば、
> 25013にあった「WebBrowser2.Document.GetElementById("file").Focus()」もエラーになるのでは?
> セキュリティがどうこう、バージョンがどうこう以前に正しく動作しませんよね?
>
> >尚、下記をテストしてみましたがエラーでした
> >WebBrowser2.Document.GetElementById("C:\Pic").InvokeMember("Click")
> "C:\Pic"というidのついたエレメントが存在しないので、当然エラーになります。
>
>
> 昨年の質問の際に書いたとおり、
> GetElementById、GetElementsByTagName、GetElementsByNameの3つ程度は
> 役割を調べておいて使い分けられるようにしておくといいですよ。でないと、操作できません。

こど様
大変失礼しました

昨年は大変お世話になりました
あの時色々教えていただいたのに
この辺りが未だによく理解ができてなく似たような問題で悩んでいます

"C:\Pic"というidのついたエレメントが存在しないので、当然エラーになります
WebBrowser2.Document.GetElementById("C:\Pic").InvokeMember("Click")

WebBrowser2.Document.GetElementById("file").Focus()

こう言う意味だったのですね!
ファイルのダイアログは出すことに成功しました!!

PostMessageと組み合わせてみます、ありがとうございました

>「WebBrowser2.Document.GetElementById("file").Focus()」もエラーになるのでは?
ここのところは再度確認しましたがエラーにはなりませんでした。
カーソル位置を別のところにもって行き、部分的に上記を実行しますと
ファイル名の入力欄へカーソルが移動しますのでこれでOkかなと思っていました。

>中のエレメントをFor Eachループし
name属性が"file"と一致するエレメントを探すか

ここの部分は、再度勉強しながら試行錯誤(四苦八苦?)してみます。
いずれにしても、マイクロソフトのセキュリティーホールの穴を探しているような
ものですから、私のような初心者にはハードルが高すぎますが・・・・

よろしくご指導お願いします。
これは同じようなやり方かなと思われます。

http://wallerdev.com/

>いずれにしても、マイクロソフトのセキュリティーホールの穴を探しているような

穴と言うか、人が操作する方法をシミュレートしているだけだと思います。
■No25030に返信(ヴァンさんの記事)
> これは同じようなやり方かなと思われます。
>
> http://wallerdev.com/
>
> >いずれにしても、マイクロソフトのセキュリティーホールの穴を探しているような
>
> 穴と言うか、人が操作する方法をシミュレートしているだけだと思います。

ヴァン様
そうですね・・・・
しかしながら
そのシュミレーションをしようとしているところが
マイクロソフトのセキュリティーが掛かっていて
私の知識ではハードルが高過ぎるのですが

かなりやり取りが長くなりすぎ見にくいようなので
以降別スレッドに移行します。
→ WebBrowserを使用してデータの入力 A
■No25030に返信(ヴァンさんの記事)
> 穴と言うか、人が操作する方法をシミュレートしているだけだと思います。

人が操作する方法をシミュレートして、人(ユーザ)が意図しない動作を引き起こせることが、今回のテーマの場合、「穴」(弱点?脆弱性?)でしょう。

「シミュレートするだけだから問題ない」のであれば、IE7 → IE8 での変更点にある input type="file" のテキストボックスを読み取り専用にする必要はなかったわけです。

DOBON.NET | プログラミング道 | プログラミング掲示板