Visual Basicのフォームからホームページを開いて変数を渡すには

解決


おがわ  2006-12-27 19:29:00  No: 97549

VB6.0で開発中です。

フォームにボタンをおいてボタンを押したら
ホームページを開いて、開かれたホームページのテキストボックスに数字を渡したいと考えています。

APIのShellExecuteでホームページを開くことができるのですが
開いたホームページのテキストボックスに数字(たとえば123456など)を渡す方法がわかりません。

可能であればホームページ上のボタンも一緒にフォーム上のボタンを押したら押されるようにしたいのですが無理なようでしたらこちらはあきらめたいと思います。

VB初心者ですが宜しくお願いいたします。


ヤマ@文系  2006-12-28 06:08:47  No: 97550

パラメータの渡し方ですが
HTMLタグを事前に調べて
タグのnameとvalueを
http://~~~/index.cgi?name=value
のようにクエリーを?をつかってつけてやります。

>ホームページ上のボタンも一緒にフォーム上のボタン
mshtmlで調べてみてください。
shellexecuteで開いてしまうと
ShellwindowsからIEを操作できるようにIEを取得する必要があると思います。
shdocvwctl.shellwindowsで調べてみるといいと思います。


ありがとうございます。  2006-12-28 07:47:13  No: 97551

開きたいホームーページアドレスは
http://www.----/shanghai/search.php
なのですが

渡したい変数は
<td>&nbsp;</td>のようです。
http://www.----/shanghai/search.php?nbsp=1234567
と変数を渡すのでしょうか?

ホームページ上に直接入力してもテキストボックスに値が入っていないように思われます。

どうしてでしょうか?
ほんとに初心者の質問で申し訳ありません。


おがわ  2006-12-28 08:23:04  No: 97552

mshtmlでネットサーフィンしてみました。

IEオブジェクトで開いたほうが楽なようですね。

ソースを抜粋すると以下のようになっており
&nbsp;が変数でsubmitと書いてあるあたりがボタンかと思うのですが
具体的にはどのような感じになるのでしょうか?

ほんとに初心者の質問で申し訳ありません。

<td width="306" height="68" background="images/Gaobei_skin/gaobei_shardh.gif"><div align="center" class="style1"></div>
          <form name="form1" method="post" action="searchecho.php">
            <table width="303" border="0">
              <tr>
                <td width="124"><div align="right">
                  <p><strong><img src="image/p_1.gif" width="10" height="8">Serial No. </strong></p>
                </div></td>
                <td width="168"><input name="scorejp0" type="text" id="scorejp"></td>
              </tr>
              <tr>
                <td>&nbsp;</td>
                <td>
                  <div align="left">
                    <input name="Submit3" type="submit" class="style2" value="Sign on.">
</div></td>
              </tr>
            </table>
      </form></td>
    </tr>


通ってみた  2006-12-28 11:02:51  No: 97553

とりあえず、「&nbsp;」を検索してみてください
たぶん思ってるのとは違う検索結果が出ると思います


おがわ  2006-12-28 15:54:40  No: 97554

タグの勉強不足で申し訳ありません

<td width="168"><input name="scorejp0" type="text" id="scorejp"></td>

がテキストボックスで

<input name="Submit3" type="submit" class="style2" value="Sign on.">

がボタンのように思うのですが

IEオブジェクトを使って書くとするとどんな感じになるのでしょうか?
ネットサーフィンをしてもmshtmlの初心者的なページがなかなかありません。

ほんとに初歩的な質問で申し訳ありません。


魔界の仮面弁士  2006-12-28 18:40:35  No: 97555

前後の HTML 構造がわからないので、正確なコードは書けませんが
(特に、フレームを使用しているページだと、また話が変わってきますし)、
基本的には、ページを表示させた後の DocumentComplete イベント発生後に、
  〜.Document.form1.scorejp0.value = "おがわ"
  〜.Document.form1.submit
とすれば良いかと思います。それ以外の書き方としては、
  〜.Document.forms("form1").elements("scorejp0").value  = "おがわ"
  〜.Document.forms("form1").submit
とか、
  〜.Document.GetElementById("scorejp").value = "おがわ"
  〜.Document.GetElementsByName("Submit3")(0).Click
などですね。

> ネットサーフィンをしてもmshtmlの初心者的なページがなかなかありません。
mshtml というよりも「DHTML」に関して学んでみましょう。

HTML ページを表示している場合、InternetExplorer オブジェクトの
Document プロパティというのは、MSHTML の HTMLDocument オブジェクトを
返してきます。そしてそれは、DHTML / Dynamic HTML でいうところの
document オブジェクトと全く同一の物となっていますので、IE 上の
HTML の内容を動的に操作しようとするならば、最終的にはどうしても
DHTML に対する最低限の知識が必要となってきますから。

あるいは、MSHTML.TLB を参照設定しておいた上で、
  Dim Doc As HTMLDocument
  Set Doc = 〜.Document
  Stop
のようにし、この変数 Doc の内容を、VB6 の ローカルウィンドウ や
ウォッチウィンドウ や イミディエイトウィンドウ にて表示/操作すれば、
オブジェクト構造が理解できるかと思います。


魔界の仮面弁士  2006-12-28 18:46:43  No: 97556

ちなみに、最初にヤマ@文系さんが提示した
  http://www.----/shanghai/searchecho.php?scorejp0=abcd&Submit3=Sign+on.
という URL を送出する方法というのは、残念ながら今回の
  <form name="form1" method="post" action="searchecho.php">
のように「POSTメソッド」で送信するページの場合には利用できませんが、
google などのように「GETメソッド」で送信するタイプのページには
利用できる方法なので、余力があれば、そちらも調べておくと良いかも。


おがわ  2006-12-28 19:50:07  No: 97557

以下のようにソースを書いたら無事に動きました。

---
Dim IE As InternetExplorer
Set IE = CreateObject("InternetExplorer.Application")
IE.navigate "http://---/shanghai/search.php"
IE.Visible = True
Do Until Not IE.Busy
DoEvents
Loop
IE.document.getElementById("scorejp").Value = "1206999"
IE.document.getElementsByName("Submit3")(0).Click
Set IE = Nothing
---

魔界の仮面弁士 さんはじめありがとうございました。
このソースで動きました。
ありがとうございました。

ところで記載のありました「Form1」というのは
すべてに共通するものなのか、自分で名前を取得するものなのか
教えてください。
.Document.form1.scorejp0.value = "おがわ"
これではプロパティ(メソッド?)が対応していませんとエラーが出ました。

どうしてでしょうか?


魔界の仮面弁士  2006-12-28 21:58:08  No: 97558

> ところで記載のありました「Form1」というのは
正確には、Form1 ではなく form1 ですけれどね。

で、それは、
  <form name="form1" method="post" action="searchecho.php">
で指定される form 要素を指しています。(name 属性が form1 になっていますよね)

> どうしてでしょうか?
先にも書きましたように、前後の HTML 構造がわからないと回答できません。(^_^;)
入れ子になっているタグの構造次第では、getElement(s)By〜系メソッドでは
取得できても、動的な名称プロパティからの取得ができない場合もありますし。

それ以外の理由としては、たとえば名前の重複が考えられます。
id 属性とは異なり、name 属性は文書中で重複しても良いことになっているので、
もし、同じnameを持つ要素が存在していた場合、それらはコレクションとして
返される事になり、何番目の要素を取得するのかを指示せねばなりません。

故に、VB6 から制御する場合には、要素名を直接指定するのではなく、
(DHTMLの) forms や all などのコレクションによる列挙や、あるいは
getElementById / getElementsByTagName / getElementsByName メソッド等による検索を行う方が安全かと。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加