こんばんは、
初めて投稿させていただきます。
実はタイトルのことがしたくて、先日Dolphi6をDLしました。
プログラムはEXCELのVBAを少々かじったくらいの超初心者です。
これから、必死で勉強していこうと思います。
いきなりこんな質問は10年早い!と言われそうですが、宜しくお願い致します。
1)毎時00分にアプリを起動させる(実行ファイルは abc.exe)
2)キーボードの「r」「u」「n」を押し、ENTERキーを押す。
3)Prinscreenキーを押す。
以上なのですが、宜しくお願い致します。
アプリケーションを起動させるのは誰でしょうか。
考えられるのは2つで、
1.OS
2.別のアプリケーション
1であれば、Windowsについているタスクに登録して、タスクのサービスを立ち上げておけばOKです。
2であれば、常時立ち上げっぱなしになるアプリケーションで、TTimerを貼り付けて一定間隔ごとに時刻を調べ、n時00分であればアプリケーションを実行し、INC(n)しておきます。
# INC(n)のあと、0〜23の数字にしないといけません
1,2,3は順に実行したいのでしょうか。
2,3は、いずれもkeybd_eventで実現できます。
2なら、
keybd_event(Byte('R'), 0, 0, 0);
keybd_event(Byte('U'), 0, 0, 0);
keybd_event(Byte('N'), 0, 0, 0);
keybd_event(VK_RETURN, 0, 0, 0);
です。
3なら、
keybd_event(VK_PRINT, 0, 0, 0);
です。
# keybd_eventについては、googleで検索するとたくさん出てきます。
ただ、やりたいことを実現するにはもう少し面倒だと思いますよ。
かかれていることだけであればここに書いたもので実現できますが、予想では、
1.n時00分にアプリを起動。
1−2.アプリの起動を確認。
1−3.アプリにフォーカスする。
2.キーボードの"r","u","n"を押し、Enterを押す
2−2.run[ENTER]が処理されるまで待つ
3.printscreenキーを押す
こうなのでは?
そうであれば、1−2,1−3,2−2にあたる部分が必要になります。
# 違うなら、よけいな説明は忘れてください。
にしの様、レスありがとうございました。
説明不足ですみませんでした。
>アプリケーションを起動させるのは誰でしょうか。
>1.OS
>2.別のアプリケーション
>1であれば、Windowsについているタスクに登録して、タスクのサービスを>立ち上げておけばOKです。
やりたいことは、1)です。タスクトレーに常駐するソフトを作りたいのです。
アプリを毎時00分に立ち上げ、キーボードにr・u・n と入力しENTERを押して、run[ENTER]が処理されるまで待つ。(実際は1秒くらいです)
その後、PrintScreenキーを押す。
その後、立ち上げた abc.exe を終了させる。
次の00分に同じことを繰り返す。
キーボードの入力については、# keybd_event ですね。
調べてみます。
タスクトレーに常駐させるにはどうすればいいのでしょう?
タイマー起動は ShellExecuteというAPI関数を使うのでしょうか?
アプリを終了させるにはどんな関数を使うのでしょう?
甘えて、また質問ばかりですが、よろしくご教示くださいませ。
アプリケーションを立ち上げるのがOSでよければ、特に常駐する必要はありませんよ。
WindowsXPであればコントロールパネルに、たぶんその前までは、マイコンピュータかコントロールパネルのどちらか、またはタスクトレイに「タスクスケジューラ」というのがあります。
# WindowsXPでは「タスク」とあるので、こちらかもしれません
これに、アプリケーション(便宜上Bとします)を毎時00分に立ち上がるよう設定し、アプリケーションBから、本当に立ち上げたいアプリケーション(便宜上Aとします)を立ち上げます。
説明を見ると、たぶん2でしょうから、上の説明は参考程度にしてくださいね。
常駐するアプリは簡単です。終了しなければ常駐と同じですから。
あとは、タスクトレイにどういれるかですね。
簡単にすましたいのであれば、コンポーネントを使用します。
Delphian World
http://home1.infonia.ne.jp/~delphian/delphi/
ここなどに、タスクトレイにアイコンを表示するコンポーネントがあります。
自分でタスクトレイにアイコンを入れたいのであれば、Shell_NotifyIconというAPIを使用します。
http://www.wwlnk.com/boheme/delphi/tips/tec0310.htm
にサンプルがありました。
あとは、TTimerコンポーネントで1秒とか数秒ごとに起動させればOKです。
あとはこんな感じですね。
これをTTimerのOnIntervalイベントに設定すれば、それなりにできると思います。
var
si : TStartupInfo;
pi : TProcessInformation;
Temp : String;
begin
FillChar(si,SizeOf(TStartupInfo), 0);
if CreateProcess(
nil,
PChar('C:\WINDOWS\system32\notepad.exe'),
nil,
nil,
false,
NORMAL_PRIORITY_CLASS,
nil,
nil,
si,pi) then
begin
WaitForInputIdle(pi.hProcess, 100);//初期化されるのを待つ
sleep(200);//起動後、画面が安定するのを適当に待つ
keybd_event(Byte('R'), 0, 0, 0);
keybd_event(Byte('U'), 0, 0, 0);
keybd_event(Byte('N'), 0, 0, 0);
keybd_event(VK_RETURN, 0, 0, 0);
sleep(1000);//run[ENTER]の処理を適当に待つ
keybd_event(VK_SNAPSHOT, 0, 0, 0);// PrintScreenでスナップショットを取得
sleep(200);//スナップショットが終了するのを適当に待つ
TerminateProcess(pi.hProcess, 0);
CloseHandle(pi.hProcess);
end
end;
西野さま、ご返事ありがとうございました。
大変参考になりました。
今後とも宜しくお願い致します。
ツイート | ![]() |