[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/01/07(Fri) 00:57
投稿者名:優花
Eメール:
URL :
タイトル:
IEへの文字列転送
最近、独学でVBを勉強をはじめた優花と申します。

IEで表示されている複数のテキストボックスの中から任意のテキストボックスへ、
フォームで表示されている文字列を貼り付けたいのですが、実現することは
可能でしょうか。
 ・開発環境…VB6.0


[例]
1.以下のようなフォームを表示させます
        □AAAA(□…チェックボックス)
        □BBBB
        □CCCC
        □DDDD
   
2.同フォーム内に用意した[貼り付け]ボタンをクリックし、
  チェックした文字列をIEで表示されている対象のテキストボックスにその文字列を
  貼り付けます

Googleで検索してはみたものの、IEへ文字列を転送させる(?)方法が見つかりませんでした。

お教えいただければと思います。
どうぞよろしくお願いします。

投稿時間:2005/01/07(Fri) 01:35
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: IEへの文字列転送
> IEで表示されている複数のテキストボックスの中から任意のテキストボックスへ、
> フォームで表示されている文字列を貼り付けたいのですが、実現することは
> 可能でしょうか。

可能です。

過去のログ、No.4629 等をご覧下さい。

この手の回答は、魔界の仮面弁士さんがよく答えておられるので、過去ログを
[Document 魔界の仮面弁士]をキーワードに検索して見てください。
新の掲示板のログだけでも40件ヒットしますのでじっくり見て下さい。

投稿時間:2005/01/07(Fri) 12:16
投稿者名:優花
Eメール:
URL :
タイトル:
Re^2: IEへの文字列転送
ご回答ありがとうございます。

> 過去のログ、No.4629 等をご覧下さい。

Private Sub Command1_Click()
    Dim IE As Object
    
    Set IE = CreateObject("InternetExplorer.Application")
    'IEオブジェクトの作成
    
    With IE
        .Navigate ("hhttp://mail.yahoo.co.jp/")
        
        DoEvents
        
        Do While .Busy = True
            DoEvents
        Loop
        
        .Visible = True
        Do While .Document.ReadyState <> "complete"
            DoEvents
        Loop
        
      '--ここにチェックボックスの文字列を入れる。
        .Document.Forms(0).Elements("login").Value = CVar("ユーザID")
        .Document.Forms(0).Elements("passwd").Value = CVar("パスワード")
        .Document.Forms(0).Elements(".persistent").Click
        .Document.Forms(0).Elements(16).Click
    
    End With
    Set IE = Nothing
End Sub

参考にさせていただきました。
なんとなく分かりました(@_@)

意図する使い方としては、[チェックボックス][貼り付け]ボタンを作成したフォームを画面上に
常駐させます。
そこで、すでに開いてあるホームページの対象のテキストボックスに文字列を送り
こみたいと考えおります。

すると、
 ・フォームをクリックした瞬間に、対象となるホームページは非アクティブになってしまいます。
  ⇒そのような中で、どのホームページのどのテキストボックスに文字列を送り込むのか
   指定して命令することはできるのでしょうか。
   対象のテキストボックスに一度カーソルを置いてから実行すれば、そのカーソル
   のところへ文字列を送り込めればよいのですが…。

また、.Document.Forms(0).Elements("login").Value = CVar("ユーザID")で、文字列を貼り付け
ていますが、この"login"というオブジェクト名は、「ソースの表示」をして経験と勘で見分けるのでしょう
か。

いろいろ教えていただき、申し訳ございません。

投稿時間:2005/01/07(Fri) 13:30
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: IEへの文字列転送
> なんとなく分かりました(@_@)
本当ですか?

> そこで、すでに開いてあるホームページの対象のテキストボックスに文字列を送り
> こみたいと考えおります。
>  ・フォームをクリックした瞬間に、対象となるホームページは非アクティブになってしまいます。
>   ⇒そのような中で、どのホームページのどのテキストボックスに文字列を送り込むのか
>    指定して命令することはできるのでしょうか。
>    対象のテキストボックスに一度カーソルを置いてから実行すれば、そのカーソル
>    のところへ文字列を送り込めればよいのですが…。

本当に上記コードを試されたのでしょうか? 試して見れば解るはずですが?
まず、インターネットが使える環境で試して見て下さい。
そしてコードの一部を変更すればどうなるか、等色々試して見て下さい。

又、コード中の .Document.Forms(0).Elements("login").Value = CVar("ユーザID")
の中の CVar("ユーザID") は CVar(Text1.Text) でもいいのですよ。

>この"login"というオブジェクト名は、「ソースの表示」をして経験と勘で見分けるのでしょうか。

経験や勘ではありません。hhttp://mail.yahoo.co.jp/ のソース(構造)がそうなっているのです。

某掲示板への投稿は下記のようになります。
        .Document.Forms(0).Elements("name").Value = "投稿者名"
        .Document.Forms(0).Elements("mail").Value = "E-MAil"
        .Document.Forms(0).Elements("daimei").Value = "タイトル名"
        .Document.Forms(0).Elements("naiyou").Value = "投稿内容(本文)"
        .Document.Forms(0).Elements("password").Value = "パスワード"
        .Document.Forms(0).Elements("homepage").Value = "ホームページ"

検索した結果の40件もよく読んで試せるものは試して見て下さい。
自分で色々試さない事には理解できないかと思います。

多分、貴方は下記のような事をイメージされているのだと思うのですが。
hhttp://www.bcap.co.jp/hanafusa/VBHLP/keybdeve.htm

どのような方法を取るにしてもここの掲示板のログにいくつかサンプルもあり
参考になる事も色々ありますので自分で調べ試して見て下さい。
(私も、魔界の仮面弁士さんの回答を見て勉強しました。いや、勉強中です)
こう言った事は、ある程度理解されないと、使えません。貼り付けたい箇所によって
色々やり方が変わってくるので応用ができるようにならないと・・・・

# 不必要な引用はさけて下さい。特にコードのまるペースト等は

投稿時間:2005/01/07(Fri) 14:45
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^4: IEへの文字列転送
> hhttp://www.bcap.co.jp/hanafusa/VBHLP/keybdeve.htm

上記のサンプルでは少し複雑なので下記を試して見て下さい。
Commandボタンを押してから3秒以内に書き込みたいテキストボックスを
クリックして見て下さい。
そのテキストボックスに[テスト書き込み]と書き込まれるはずですが。

Option Explicit
Private Declare Function GetWindowText Lib "user32" _
    Alias "GetWindowTextA" (ByVal hwnd As Long, _
    ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function timeGetTime Lib "winmm.dll" () As Long

Private Sub Command1_Click()
    Dim AWhwnd    As Long
    Dim lpString  As String * 255
    Dim lngResult As Long
    Dim Title     As String
    WaitTime 3000                   '3秒後に実施
    AWhwnd = GetForegroundWindow    'ハンドルを取得
    'アクティブウインドウのタイトルを取得
    lngResult = GetWindowText(AWhwnd, lpString, 255)
    '取得したタイトルを表示
    Title = Left$(lpString, InStr(lpString, vbNullChar) - 1)
    AppActivate Title
    WaitTime 100                   'アクティブになる迄待つ
    SendKeys "テスト書き込み", True
End Sub

Private Sub WaitTime(st As Long)
'指定の時間待つ(1/1000 秒単位で指定)
    Dim lngSt As Long
    lngSt = timeGetTime
    Do While timeGetTime - lngSt < st
        DoEvents
    Loop
End Sub

上記コードは、動作を確認するためのコードで実用は色々問題があるので・・・
勉強用の教材という事でお願いします。