FC2ブログ
現役プログラマー村健の、投資に役立つプログラムを作るための勉強ブログです。 自動売買、システムトレードに挑戦!します。 勉強と習得の成果を記録です。
本ブログについて
本ブログは、プログラマー観点で投資への対費用効果を上げるために何ができるか?を考えていくブログです。
基本的には、ツール作成・公開、投資に関わるプログラム情報、最終的には 完全なる自動売買を目指しています。

現在、HPの方で現在作成中のツールや発注ロジックなどを公開中です。
前回の記事の続きです。

なんとか解決しました。
別に難しい現象が発生していたのではなかったのですが、盲点でした。

プログラムで説明した方がわかりやすいと思うので下記します。
Yahoo検索の処理です。

Submit用のメソッドとしてこんなのを作成し、
Public Function DocumentSubmit(ByVal formName As String) As Boolean
  objIE.Document.forms(formName).submit()
End Function


呼び側としてこうやって使っていました。
objIE.Document.Forms("sf1").All.Item("srchtxt").InnerText = "キーワード"
DocumentSubmit("sf1")


色々試してみると、
objIE.Document.forms(formName)
この使い方がダメっぽいです。
つまり、formsにName属性の文字で指定する場合は、変数ではダメみたいです。
objIE.Document.forms("srchtxt").submit()
直接こうするとうまくいきます。

WebBrowserで大丈夫なのでてっきり問題ないと思い込んでいました。。。
どうりで同じような問題が起きている人がいないわけです。

あー時間がもったいなかった。。。

ちなみに、変数でも数値(インデックス番号指定)ならうまくいきました。
Dim i as integer = 0
objIE.Document.forms(i).submit()



ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
スポンサーサイト



久しぶりにIE操作のプログラムを組んでいたら、
なぜかSubmitで例外が発生してハマっています。

Windows7+IE8+VB.NET2008の環境で、
単純にGoogle等の検索サイトでキーワードを入力し、検索ボタンをsubmitさせると、
以下の例外が発生しました。

・'System.Runtime.InteropServices.COMException = {"リモート プロシージャ コールに失敗しました。 (HRESULT からの例外: 0x800706BE)"}
・'System.Runtime.InteropServices.COMException = {"サーバーによって例外が返されました。 (HRESULT からの例外: 0x80010105 (RPC_E_SERVERFAULT))"}

色々試しているうちに、例外は2種類でてました。

原因として考えらえれるのは、こちらのサイトで詳しく書かれていますが、VISTAとIE7以降では保護モードがONになっている事。

しかし、保護モードを解除してもなおらなかったのです。

参照先のサイトではNavigateで失敗していますが、自分の場合はSubmitで例外。
信頼済のサイトに登録したりしましたがダメ。
オプションを色々いじくってもダメ。
検索しても同じような現象が起こっている人もいない・・・

これを回避する方法は今のところわかりません。
誰か知っている方がいれば教えていただけるとありがたいです。

とりあえずの回避策としては、submitではなく、submitのボタンをclickなら
問題なく行えます。

あとWebBrowserは保護モードとか関係なく動いてそうでした。

ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング
久方ぶりの更新です。

投資プログラムに関係しそうなネタがあったので。。。

VB.NETからUWSCのファイルを実行する方法です。

例えば"autologin.uws"というUWSCの定義ファイルを、VB.NETからUWSCで実行したい場合。

まず、こちら(http://www.atmarkit.co.jp/fwin2k/win2ktips/482ftype/ftype.html)
の記事を参考にして、UWSファイルをUWSC.exeに関連付けします。

VB.NETで以下のプログラムを書きます。

Dim p As System.Diagnostics.Process = System.Diagnostics.Process.Start("autologin.uws")
p.WaitForExit()

これで、UWSファイルが実行され、VB.NETはUWSの実行が終わるまで処理をまちます。
p.WaitForExitを行わなければ、UWSCの完了を待たずに処理を継続します。

ブログランキングのクリックにご協力お願いします<(__)>
FC2ブログランキング
blogRanking
くる株・株ブログランキング
株・投資ランキング