Web上での必要な情報を全自動で入力してくれるソフトを求めています。その情報はテキストファイルから参照できるとします。ブラウザが表示している入力フォームを自動的に検出し、フォームの項目に応じて自動入力しくれる。店舗名や住所、電話番号、郵便番号などをファイルに書き込んでおくだけで、勝手にブラウザのアクティブウインドウに入力ができるというプログラムを目指しています。
たとえば
#1
郵便番号
住所
氏名
#2
郵便番号
住所
氏名
・・・
と百件ほどあって
それをファイルからブラウザのアクティブウインドウのフォームの入力ボックスに自動で入力すると言うものです。
プログラミング言語は問いませんが・・
できればC言語のwin32apiを使ったものがいいです・・(sdk?
MFCはよくわかりませんが・・
サンプルをいただけるのであればどの言語であっても勉強しようと思っています。
似ているプログラムをあらわしますと
http://www5.ocn.ne.jp/~miisan/aibar/support/
などがあります。
このプログラムと違う点といえば・・
件数が100件ほどであると言う点と
ファイルから入力できないという点と
応用が利くようにカスタマイズできるようにしたいという点です。
どうかよろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
★アドバイス
・つまりは自分でプログラムを組みたい。という事ですね。
それでどの程度の何が出来る方ですか?
要望が多すぎます。知りたい質問を限定して。
>その情報はテキストファイルから参照できるとします。
これは作り手のインターフェイスの問題です。→仕様。
>ブラウザが表示している入力フォームを自動的に検出し、
>フォームの項目に応じて自動入力しくれる。
HTMLソースを直接解析する必要がありそうです。
全自動という事は人間と同じ思考をプログラムで行わせるため HTML ソースの項目を
検索する必要があります。これにより住所、電話番号、郵便番号などの項目に応じた
データをファイルから読み込み、アクティブ・ウインドウに自動入力すれば良いことになります。
>できればC言語のwin32apiを使ったものがいいです・・(sdk?
Win32 API なら SendInput() 関数でキー入力、マウス入力をプログラム上で行えます。
http://msdn.microsoft.com/library/ja/default.asp …
を参考に。1つの共用体で3つの構造体を使っているので要注意。
>サンプルをいただけるのであればどの言語であっても勉強しようと思っています。
SendInput() 関数のサンプルはネット検索すると大量に見つかるためここでは省略。
もしネット検索で分からない場合はアドバイスします。
仕組み:
・すべてを全自動にするのは大変だと思いますので、次のようにしてみるのはどうでしょうか。
(1)入力する Web ページのアドレス(URL)をプログラムで管理。
(2)プログラムから入力する Web ページの URL を選択。
(3)ShellExecute() API関数でブラウザを起動して Web ページを表示。
(4)Web ページが完全に表示されるまで数秒間だけ待つ。
(5)(4)で待っている間に URL から HTML ソースを解読して INPUT タグより入力すべき項目を
検索しておく。これによりフォームに入力する項目の順番をプログラムで把握できる。
(6)(4)(5)で Web ページが完全に表示され、入力する項目も解読できたら SendInput() 関数で
順番に項目を入力させる。→キー入力をプログラムでエミュレートするわけ。
(7)1件目が入力されたら次の項目に移る処理を指定回数分だけ繰り返す。
全体的な仕組みは上記のようにします。
・注意点としてはフォームの入力場所を特定してフォーカスを合わせる部分が一番重要に
なると思います。→この辺を手抜き(楽)したい場合は人間が最初に入力場所にフォーカスを
合わせておく。その後にプログラムから URL を選択します。あとはプログラムでキー入力と
同じ文字列を SendInput() 関数で転送するだけ。
・なおプログラムで URL を選択する直前のウインドウ・ハンドルを監視してプログラムから
アクティブ・ウインドウを切り替えるようにします。その後に SendInput() 関数で転送します。
その他:
・ファイルから読み出す部分のインターフェイスや応用が利くカスタマイズを実装するなら
まずはフォームから入力する Web ページのスタイルを調査することです。
そしてどんな機能と仕組みにすべきかを考えます。上記のは一般的な方法です。
・あと入力フォームにプログラムから文字列(名前,住所など)を送るサンプルを先に作ります。
SendInput() 関数を使うことになりますが、あまり早く文字を送ると上手く受け取れないので
ウエイトを入れたり、次の入力項目に移動するために Tab キーを押された状態をエミュレート
します。SendInput() 関数の注意点としてはキーが押された、離されたという状態を2つペアで
転送することになります。また漢字文字は Unicode で指定する必要があります。ここ注意。
まずはちょっとしたサンプルを作りフォームの自動入力の検証をして下さい。
・以上。
参考文献:
・http://msdn.microsoft.com/library/ja/default.asp …
・http://msdn.microsoft.com/library/ja/default.asp …
・http://msdn.microsoft.com/library/ja/default.asp …
・http://msdn.microsoft.com/library/ja/default.asp …
・http://msdn.microsoft.com/library/ja/default.asp …
この回答への補足
あれ・・補足つけて更新したはずだったんですが・・
ブラウザを開いてタブキーを押すという操作ができたら
このプログラムができたら後は一気に進みそうなのですが・・
ブラウザを起動してからアクティブウインドウにタブキーを送信することができません・・
ウインドウフォーカスの問題なのか・・Sleepを入れる場所が間違っているのか・・いろいろ試行錯誤してますが・・よくわかりません・・
SendInputは最初よくわからなかったのですが・・いろいろな例を見ながら理解できたつもりで居るだけです・・
#define _WIN32_WINNT (0x0500)
#include <windows.h>
#include <stdio.h>
#include <winuser.h>
#include <Winbase.h>
int WriteClip(char *str);
static VOID FuncSetKeybrd( LPINPUT lpKey, WORD wVKey, BOOL bKeyDown );
static VOID TABKEY( VOID );
void SendKey(unsigned char code);
int
main()
{
ShellExecute(NULL, "open", "http://www.yahoo.co.jp/", NULL, NULL, SW_SHOWMAXIMIZED);
Sleep(500);
TABKEY();
SendKey(VK_TAB);
return 0;
}
int WriteClip(char *str)
{
HGLOBAL hGlobal;
int iLength;
LPSTR lpStr;
int i;
iLength = lstrlen(str);
if (iLength > 1024) iLength = 1024; hGlobal = GlobalAlloc(GHND, iLength + 1);
if (hGlobal == NULL) return -1;
lpStr = (LPSTR)GlobalLock(hGlobal);
for (i = 0; i < iLength; i++)
*lpStr++ = *str++;
GlobalUnlock(hGlobal);
if (OpenClipboard(NULL) == 0)
{
GlobalFree(hGlobal);
return -2;
}
EmptyClipboard();
SetClipboardData(CF_TEXT, hGlobal);
CloseClipboard();
return 0;
}
/* キーの設定用関数 */
static VOID FuncSetKeybrd( LPINPUT lpKey, WORD wVKey, BOOL bKeyDown )
{
lpKey->type = INPUT_KEYBOARD;
lpKey->ki.wVk = wVKey;
lpKey->ki.wScan = (WORD)MapVirtualKey( wVKey, 0 );
lpKey->ki.dwFlags = (bKeyDown ? 0 : KEYEVENTF_KEYUP);
lpKey->ki.dwExtraInfo = 0;
lpKey->ki.time = 0;
}
/* キーボードイベントの送信用関数 */
static VOID TABKEY( VOID )
{
INPUT Key[ 16 ];
LPINPUT lpKey = Key;
SetForegroundWindow(GetForegroundWindow()); // メモ帳のウインドウハンドルを検索&設定
FuncSetKeybrd( lpKey++, VK_TAB, TRUE );
SendInput( (UINT)(lpKey - Key), Key, sizeof(INPUT) );
FuncSetKeybrd( lpKey++, VK_TAB, FALSE );
SendInput( (UINT)(lpKey - Key), Key, sizeof(INPUT) );
}
void SendKey(unsigned char code)
{
EnableWindow(GetForegroundWindow(),TRUE);
SetFocus(GetForegroundWindow());
keybd_event(code,0x00,KEYEVENTF_EXTENDEDKEY|0,0);
keybd_event(code,0x00,KEYEVENTF_EXTENDEDKEY|KEYEVENTF_KEYUP,0);
}
ソースがごちゃごちゃしてしまっていますがよろしくお願いします。
結局のところ問題はSleepが短かったみたいです・・・汗
そしてキーボードエミュレートの関数はちゃんと元に戻しておきました。
ありがとうございます。。
データを移す作業はクリップボードに書き込んでペーストしていく形でいこうと思っています。
また機会がありましたら回答よろしくお願いします。
コレにて受付を終了したいと思います。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) 入力フォームへ、データを自動的に入力するプログラム。どうやって作る? 4 2023/01/16 10:24
- Amazon Amazonの配送先住所入力の自動入力機能が作動しなくなりました。 2 2022/10/06 08:58
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- Access(アクセス) 【至急・画像あり】建物or住所から電話番号を出す方法を教えてください 3 2023/02/17 11:58
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Chrome(クローム) 入力フォームの履歴を消したい 2 2023/06/29 13:02
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- アイドル・グラビアアイドル ジャニーズショップでログインしてもグッズが買えないです。 購入画面になって、個人情報を入力する画面で 2 2022/04/04 17:12
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- AJAX 入力フォームの値をQRコードで入力できるようにしたい。 6 2023/03/29 08:34
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
初歩的な事だと思います。 Sub...
-
Excel-VBAでInputBox+Pulldown...
-
エクセルVBA テキストボックス...
-
数字以外の入力をエラーにする...
-
テキストボックスの番号を使っ...
-
InputBoxでキャンセルボタンを...
-
DataGridViewの桁数制限に関して
-
DataGridView 列ごとの入力制限
-
c#でTextBoxの入力制限
-
FIREFOXでWebページを表示でき...
-
エディットボックスの入力制限...
-
EXCEL VBA で指定した範囲に入...
-
VBAでInputBoxの再入力をさせる...
-
EXCEL VBAで、URLを入力して、...
-
excel vba でユーザーフォーム...
-
インプットボックスでの日付入力
-
入力関数を使うがコンソール上...
-
入力フォームへ、データを自動...
-
WebフォームのIMEモードを入力...
-
accessで該当するレコードがな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA テキストボックス...
-
テキストボックスの番号を使っ...
-
数字以外の入力をエラーにする...
-
初歩的な事だと思います。 Sub...
-
EXCEL VBA で指定した範囲に入...
-
Windowsのアプリ開発ってなんの...
-
入力フォームの値をQRコードで...
-
教えて!全角文字「μ」の半角
-
Excel-VBAでInputBox+Pulldown...
-
VBAでInputBoxの再入力をさせる...
-
エディットボックスの入力制限...
-
TextBoxから数字が文字...
-
VBAの質問になります メッセー...
-
指定した演算を実施の結果を表...
-
excel vba でユーザーフォーム...
-
アルファベットGの小文字の入力
-
DataGridView 列ごとの入力制限
-
accessで該当するレコードがな...
-
c#でTextBoxの入力制限
-
VBA R1C1形式で変数の入力について
おすすめ情報