あるアプリケーションで、これこれこういう処理をして、そのアプリケーションでできたデータを別のアプリケーションで処理をする。というようなことを自動でやりたいです。そういうことをやることはできるのでしょうか。ちなみに、マウスの動きを登録して自動で動かすというのは、それぞれの処理の時間が異なるため、できません。


こういう事をやる方法があれば教えてください。お願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/09/26 19:07:19
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:hirotie No.1

回答回数25ベストアンサー獲得回数1

ポイント25pt

一番目のアプリで処理したデータを一度ファイル(テキストでもなんでも)へ出力します。

そのファイルの先頭へは、処理ステータス(完了日付時刻、成功かどうかなど)の情報も

入れておきます。

2番目のアプリは定期的に実行するか、一番目のアプリからバッチなどを利用して起動し

上記のファイルを読み込み、処理を行います。

id:Gakuen

ありがとうございます。

バッチファイルというものがあるんですね。これを作ると実現できるかもしれませんね。


追加質問です。

私が動かしたいアプリケーションは他の方が作られたもので、データのファイルを直接引数として渡すという様なことはできません。その場合、読み込ませるファイルの場所の指定だとか、設定のためのチェックボックスだとかをバッチファイルで操作できるのでしょうか。それと、最初のアプリケーションが終わった時点で、自動でバッチファイルを動かす方法を教えていただきたいです。

2008/09/22 21:43:09
id:t_shiono No.2

回答回数256ベストアンサー獲得回数22

ポイント30pt

コメントで頂いた情報を元にすると、2つのアプリケーションを操作するプログラムを用意する必要があるかと思います。

各アプリケーションの起動などの大部分はWindows Script Host(WSH)、あるいは、Windos PowerShellなんかで制御スクリプトを用意するのが手ごろかなと思います。

参考(WSH)

http://homepage2.nifty.com/pasocon/nyumon/main.html

参考(Windows PowerShell)

http://www.atmarkit.co.jp/fdotnet/special/powershell01/powershel...

ただ、これだけだと、メニューからファイルを選択させることができません。

そのため、この部分のみを実行するプログラムを作成する必要があります。

ある程度Windowsプログラミングのスキルは必要になってしまいますが、外部プロセスから、対象とするアプリケーションに対して、WM_FILE_OPENメッセージを送信してあげます。

この他にもこのようにメッセージを送信してあげることによって、外部からプログラムを制御することはある程度可能です。


まとめると、外部から操作するプログラムを作成した上で、制御スクリプトで、


最初に起動するアプリケーションを起動

データが生成されるのに十分な時間待機

データを処理するアプリケーションを起動

WM_FILE_OPENメッセージを送信するアプリケーションを起動し、データを処理するアプリケーションでファイルを読み込ませて処理をさせる。


という処理を作っておけば、このスクリプトを実行することで対応はできます。


ただ、バッチファイルをあまりご存知ない方のようでしたので、メッセージを送るプログラムを作成することはちょっと敷居が高いかなと思います。


何かの参考になれば。

id:Gakuen

ありがとうございます。

WSHやWindowsPowerShellというのは初めて知りました。これは便利ですね。

ファイルの受け渡しが難しいのですね。VM_FILE_OPENメッセージというのは、何かのプログラミング言語の命令なのでしょうか?検索してみてもあまりヒットしなかったので、分かりませんでした。VBで作成は可能でしょうか。また作成するための知識を得るにはどういう本やサイトを読んだらいいかも良ければ教えていただけないでしょうか。

的外れな質問かもしれませんが、お時間がありましたら、お願いいたします。

2008/09/23 02:24:34
id:t_shiono No.3

回答回数256ベストアンサー獲得回数22

ポイント20pt

すいません。正しくは、ID_FILE_OPENメッセージを送信する必要があります。

VBはあまり使わないのではっきりとは分かりませんが、たぶん、難しいんじゃないかと思います。

以下のサイトにあるAviUtl Controlというツールは、aviutilという通常のアプリケーションをコマンドラインから操作するツールです。ソースも公開されているので、参考になるかもしれません。

http://www.geocities.jp/aji_0/

どういう用途で作成したいのか分かりませんが、ID_FILE_OPENと書いて分からないようだと、誰かに頼んででも作ってもらった方がよいかと思います。

どうしても時間とかを惜しまず無料で自分でがんばるということであれば、

VC++ Express Edition と Platform SDKをインストールすれば、開発する環境は構築できます。

どんな知識が必要かということで言えば、Windowsプログラミングの知識が必要となります。

ただ、書店でVisual C++入門みたいな本を買ってもイマイチ分からないのかなぁという気はします。そこまで、詳しく、かつ、分かり易く書いてある本はあまりないと思うので。

Web上の情報であれば、以下のサイトの内容のWindows SDK編とかを読んで理解できるようになると作成できるかなと思います。ここの中身が分かるようになれば、AviUtl Controlのソースを見て、あ~なるほどと思えると思います。

http://www.kumei.ne.jp/c_lang/


もっとよい参考情報はあるかもしれませんが、何かの参考になれば。

id:Gakuen

ありがとうございます。

ん~、とても難しそうですね・・・自分で作るのはちょっと無理そうです。

詳しく教えてくださって本当にありがとうございました。

2008/09/26 19:04:38
id:aki1960 No.4

回答回数256ベストアンサー獲得回数8

ポイント30pt

目的のためにプログラミングを習得するのもいいですが、ちょっとした工夫で可能かと。

                      

「マウスの動きを登録して自動で動かすというのは、それぞれの処理の時間が異なるため、できません。」

と書かれていますが、私がよく使うAutoMouseというソフトでは問題なくできますよ。

また、AutoMouseだけでは難しい制御も、先の回答にあったバッチファイルを組み合わせることで可能です。

それぞれのアプリケーションを起動するバッチファイルとは別に、それぞれの動作状態をモニタするバッチを作成して、コンソールに状態を表示してやれば、その表示を基にしてAutoMouseを動かすことができます。

                                   

例えば、                        

1.1番目のアプリケーションが終了した時点で、1番目のアプリケーションを起動したバッチファイルの後続処理でファイルを作ります。(copyコマンド)

2.モニタ・バッチは、ここで作られるファイルを監視し(IF EXIST..)、ファイルが作成されたら、即座に削除(delコマンド)すると同時にコンソールにメッセージを表示します。(echoコマンド)

3.AutoMouseで、上記2のメッセージを監視させ、表示されたら2番目のアプリケーションを起動するバッチを起動します。

4.2番目のアプリケーションを起動したら、AutoMouseでGUI制御をします。

5.2番目のアプリケーションが終了したら、上記1とは違う名前のファイルを、バッチファイルで作ります。(copyコマンド)

6.モニタ・バッチは、上記5で作られるファイル「も」監視し、ファイルが作成されたら、即座に削除すると同時に、コンソールに上記2とは違うメッセージを表示します。

7.AutoMouseで、上記6のメッセージを監視させ、表示されたら1番目のアプリケーションを起動するバッチを起動する...AutoMouseでGUI制御する...

というようなカンジです。

問題は、モニタ・バッチが高速で動き続けないように、ループのどこかになんらかのwaitを入れるなりする必要があるかもしれない、という点ですね。

なお、IF EXISTでは二つの処理を起動できないので、2行並べるか、GOTO処理が必要です。

id:Gakuen

おー、すごいです!

こんな方法もあるんですね。これなら自分でも出来そうです。

ありがとうございました。

2008/09/26 19:06:29
  • id:Gakuen
    <補足>
    あるアプリケーションとは、ウェブアプリケーションではありません。Windows上で動くアプリケーションです。書き忘れました。すみません。
  • id:t_shiono
    以下の点を教えてもらえますか?

    1.起動するアプリケーション自体に変更を加えることはできるのか?

    2.最初に起動するアプリケーションで作成されたデータはどこに格納されるのか?(ファイル?DB?など)

    3.最初に起動するアプリケーションでデータの作成が終了したことは、外部から判別可能?(例えば、ファイルにデータが格納されるとして、ファイルを見ると処理が終わったかどうかが判定できるなどがあるか?)

    4.次に起動するアプリケーションへはどのようにデータを読み込ませることができるのか?(メニューからファイルを選択させることが出来る?など)
  • id:Gakuen
    >t_shionoさん
    コメントありがとうございます。

    >1.起動するアプリケーション自体に変更を加えることはできるのか?
    他の方が作ったアプリケーションなので変更はできません。

    >2.最初に起動するアプリケーションで作成されたデータはどこに格納されるのか?(ファイル?DB?など)
    指定したフォルダにファイルが作成されます。

    >3.最初に起動するアプリケーションでデータの作成が終了したことは、外部から判別可能?(例えば、ファイルにデータが格納されるとして、ファイルを見ると処理が終わったかどうかが判定できるなどがあるか?)
    外部からは判別はできないです。

    >4.次に起動するアプリケーションへはどのようにデータを読み込ませることができるのか?(メニューからファイルを選択させることが出来る?など)
    メニューからファイルを選択して読み込みをできます。
  • id:Gakuen
    >t_shionoさんへ

    3.のデータの作成が終了したかどうか外部から分かるか、ということですが、データの作成が終了したと思われる時間に十分達したという時点で次のアプリケーションが起動するという方法でも良いと考えています。それでしたら、実現は可能でしょうか。
  • id:hirotie
    基本的にバッチファイルは、二つのプログラムを列記した場合順番に実行していきます。
    例えば
    makefile.exe (データを出力するプログラム)
    printdata.exe  (出力されたデータをプリントアウトするプログラム)
    と列記すれば、2行目の印刷はデータが出来るまで実行されません。
    問題は、2番目のアプリに処理すべきファイル(あるいはフォルダ+ファイル名)を、
    渡す手法です。
    事前に登録すればいいのか。出力された時間によってファイル名が変わるのか
    そのあたりで、これで可能かどうかが決まると思います。
  • id:Gakuen
    >hirotieさん
    コメントありがとうございます。

    データを渡すのが、自分が考えているものだとちょっと難しいようですね…少し調べてみて自分でできそうでしたらやってみたいと思います。ありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません