トップ回答者
どんな体系がよいか

質問
-
いつも質問で申し訳ありません。
次のことをやりたいのですが、vc++expressだけで、あるいはNetflameworkであればできるでしょうか。すべてプログラムコントロールです(人手は介在しません)。
・特定のサイトのページを表示する
・ページ内のテキスト入力フィルードにテキストを入力する
・ページ内のログインボタンを押す
・ページ内のページ遷移を伴うタブ状のボタンを押す
・同様にいくつかのテキスト欄にテキストを入力する
・ページ内の決定ボタンを押す
・ええーと名前を忘れましたが、ページ内のボタンを押すと選択枝が現れ、それを選択する(dropdownmenu?)
・これらの動作タイミングと、選択条件は別途アプリのDDLの機能として実現し、ddlとこのアプリでプロセス間通信をおこなう。一応DDEが候補ですが、なにかOLEのようなものがよいかこれから検討。などです。今までの調査で、postするhtmlを編集して、それをポストするような方法の提案もありました。(これは面倒そう)
なるべく簡単でわかりやすいのよいのですが、どういった体系を用いるのがよいでしょうか。
・VC++expressだけでできる。
・Netflamworkの機能を使う。能書きによると、Netflamworkもvc++で扱えるそうですね。
回答
すべての返信
-
DDLとはなんでしょうか? データ定義言語 (DDL) ステートメント (Transact-SQL)ぐらいしか思い当りませんが…文脈からは該当しないように思います。もしかしてDLLの誤字ですか? 誤字が多過ぎることが他人とコミュニケーションできなくなることを理解してください。
- Netflamework → .NET Framework
- ソルーション → ソリューション
DDEとかOLEとかのキーワードも出てきていますがやりたいこととどう結びつくのかわかりません。また「人手は介在しません」とのことなのにドロップダウンを選択するとかも意味が分かりません。人手が介在しないのなら画面表示は不要で、データ処理だけ行えばいいのでは?
VC++でできるかどうか質問されていますが、別スレッドを読む限り質問者さんはC++言語の基本的な構文(メンバー関数の呼出し方)すら理解できておらずかなり敷居が高いと思います。
例えるならば、ひらがな漢字があやふやにもかかわらず「私にも小論文の解き方を教えてください」と言っているようなものです。 -
誤字のご指摘はその通りです。f
>VC++でできるかどうか質問されていますが、別スレッドを読む限り質問者さんはC++言語の基本的な構文(メンバー関数の呼出し方)すら理解できておらずかなり敷居が高いと思います。
ただ一つの構文の間違いで全体を判断されるのは残念です。
小生はやりたいことがどのような手法でできるのか、判断しかねるので、方針の参考にさせていただきたいのです。
>例えるならば、ひらがな漢字があやふやにもかかわらず「私にも小論文の解き方を教えてください」と言っているようなものです。
ずいぶんと失礼ですね。別スレッドににしましたのは、問題をできるだけ絞込み、適切なスレッドだろうと思ったので、NETframeworkのスレッドでお尋ねしました。
- 編集済み sige2 2012年7月25日 6:30
-
個人的な感想に近くなりますが、さきほどまで件の情報を得るため、本屋にて、NETframeworkやwinAPIの本を探しに行きましたが、なかなか近い情報が得られませんでした。個別の機能がしりたいのでポイントはNETframeworkならではの関数(クラス)がポイントでしたが、全般的な説明のものしかありませんでした。開発プラットホームを何にするかが決められません。確実にはUWSCにせざるを得ないかなと思いつつあります。でも、UWSCでは面白くないので、Cでやりたいところです。
ネット検索ではなかなか希望の情報がえられませんでしたので、皆さんのご経験を踏まえた意見をお伺いしたく質問させていただきました。
不可能に近いか、かなり難しいことを、調べて試して、できないことが分るのは避けたいのです(勝手ではありますが)。ご提案頂いたその方法ができるかできないかは、自分の技量に相談することになります。- 編集済み sige2 2012年7月25日 7:03
-
その後調べて、TCppWebBrowserとTComInterface(vc++ではCppWebBrowserとComInterface?)をつかえば、できそうに思っているところです。
佐祐理さん
>また「人手は介在しません」とのことなのにドロップダウンを選択するとかも意味が分かりません。人手が介在しないのなら画面表示は不要で、データ処理だけ行えばいいのでは?
dropdownmenuはまたまた用語の間違いで、pulldownmenuでした。 選択肢がこの形式が使用されることがあるということです。
人手は介在しないけれど、人の代わりにプログラムが色んな操作をする動きを確認するために画面表示が必要なのです。
- 編集済み sige2 2012年7月26日 1:21
-
まず、ご質問の内容と少し異なる命題に変更させてもらい、
「Webページへの操作をプログラムから自動的に行う」
とすると、1.あらゆるWebページを対象とした場合は、「マウスとキーボードのエミュレーションを行う」
方法が唯一で最終的な結論になります。
その他の方法では人間の操作の代替はできないと考えられるからです。2.次に特定のWebページを対象とした場合は、そのWebページの仕様に依存します。
これは、当たり前ですね。3.最後にID、パスワードの入力による、特定サービスへのWeb経由の自動ログオン
を想定している場合も、「その特定のログオンページの仕様に依存」します。
つまり、2.ですね。しかし、セキュリティを重要視するため、プログラムからの
自動ログオンは排除する傾向になっているため、確実に動作を行うには最終的に
1.の方法以外に選択の余地は無いと考えられます。さて、以上の想定が正しいと仮定した場合で、2.は対象Webページの仕様が特定できない
限り、結論を出すのが不可能なので排除すると、その他については次の結論が導けます。4.必要なWin32SDKの関数が利用できる、あらゆる処理系で実装可能。
ということですね。ただし、
5.だからといって、プログラムは人間の操作を完全に真似ることはできない。
6.特に3.の自動ログオンについては一般には試みてはいけない事象であり、
場合によっては犯罪になる。ということをお忘れなく。
- 編集済み 仲澤@失業者 2012年7月26日 2:10
-
いつも有益なコメントありがとうございます。
命題はまさにそれです。もう少し再定義しますと、特定のWebページを対象として、「マウスとキーボードのエミュレーションを行う」ということになります。それには、やはりWin32SDKの関数が利用できる処理系ならば何でもよいということになるのですね。どちらかといえば小生はWIN32sdkのようなプリミティブな関数が好みです。最近のいろんな便利な仕組みの方がかえって戸惑うのではないかと思います。
そうすると次の問題は、
・win32sdkの関数仕様について、今のところよい資料が見つからないこと--上記目的に必要なものだけでよいのに、見つけることができません。
・対象ページを別途IEで開いたページにすればよいのですが、できれば、CppWebBrowserなどのように自分のウィンド内で開いたページにたいしてマウスとキーボードのエミュレーションをwin32SDKでできるのかどうか。
なのです。その後別掲示板で教わったところ、TCppWebBrowserとTComInterfaseを使えばできそうな感じをつかんだところです。最終確認はできていません。(内容をまだ十分理解していないので調査中)
>特に3.の自動ログオンについては一般には試みてはいけない事象であり、
場合によっては犯罪になる。えそんなことがあるのですか。サイトが禁止しているならともかく。 実際の目的はここで述べる必要はないのですが、あるサイトに対する自動執行システムで、人手ではとても行えない頻度(やってやれないことはないが)で実行するあくまで自分用なのです。執行条件は別プログラムで算出して、それに従い執行するというものです。
-
-
-
仮にidとpwの自動ログインが問題になるなら、今回の場合は、始めだけなので、パスすることは考えられます。
自動ログインが問題になるのは、ハッカーが、IDとpwをプログラムで生成してかたぱっしから試す場合などではないでしょうか。自分が権利を持っているIDなら問題ないと思うような気がします。目的が間違いないようにすばやくやるために自動化するのでしょうから。
で本題の、マウスとキーのエミュレーションを行うwin32apiの関数は何でしょうか、ご存知あれば教えてください。検索は難しいです。名前さえわかれば、機能は調べられると思うのですが・・・・・。
自動処理が禁止されているのは、Googleの検索結果などを網羅的に取得するために自動的に発行することとして、記載がありますね。もちろんこんな目的ではありません。
- 編集済み sige2 2012年7月26日 10:55
-
-
ログオン画面にも様々なものがあります。
その仕様によってはマウスとキーのエミュレーションでは
自動化できないものもあります。
それをご納得いただいた上でマウスとキーのエミュレートを行うときに
使用する可能性の高い関数を以下にリストアップします。
SetCursorPos
SetKeyboardState
keybd_event
SendInput
mouse_event
これでもうまくいかない場合は、当該ウインドウのコールバックを差し替える
必要がありますが、この方法はセキュリティソフトやOSから妨害される可能性が
ありますので、その場合はあきらめてください。