はじめまして
Delphi6 Personal を使っているのですが
既にあるプログラム(例)abc.exe
を10時と16時の2度定時的に実行させるという事は可能でしょうか?
その時に abc.exe はユーザにわからないようにして起動したいのですが可能でしょうか?
( abc.exe ) 既にあるプログラム
↑ 定時になるとユーザーにわからないよーに実行
( def.exe ) 定期実行用のプログラム←今回はココの事です
タイマーのOnTimerイベントで、定時だったら実行すればよいかと。
APIのShellExecuteを使って、第6引数にSW_HIDEを指定すれば、見えなくなると思います。
ただ、ユーザがわからないかどうかは不明です。
定期実行が走れば、HDDは動きますしCPUにも負荷がかかりますから。
気づく人は気づくでしょう。
にしの 様
早速の返信ありがとうございます。
なるほど、既にあるプログラムを起動させる場合にはそれで出来そうです。
定期実行の方もOnTimerでやってみたいと思いますが、定期実行用のプログラム(def.exe)
自身をフォームもタスクトレイにも表示させる事無く、実行させる事はできるのでしょうか?
例えば、
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.ShowMainForm := False;
end;
とすれば、アプリケーションは見えなくなりますね。
ただし、Form1.OnShowイベントも起きないので、記述箇所には注意です。
NT系なら、ATコマンドたたいて、自動実行するとか?
または、サービスで動くスケジュールソフトを使う。
時間になったらシャットダウンするようなスケジュール可能なソフトは、Vectorからダウンロードできます。
そうじゃなく、自分でやりたいのなら、にしの氏が答えている通り。
ゴミレス失礼しました。
>にしの様
その方法でうまくいきました、ありがとうございますっ
>むひょ様
まだ少数ですが9x系も何台かあるので・・・サービス登録はあきらめていたんです。
あ、あと作っていて思ったのですが
管理用のPCにホストアプリケーションをおいて、ネットワーク上にブロードキャスト等でdef.exeにリクエストを送り
任意にdef.exeを実行する事等はできるのでしょうか?
UDPのブロードキャストなら可能ですね。TCPだと、任意のIPには送れるけれど、不特定のは出来なかったような気がします。
でも、ファイアウォール系のアプリが動いていると、def.exeに気づかれる場合がありますよ。
>にしの様
早速の返信ありがとうございます
やはいりUDPを使うのですか・・・もしよろしければホストの方と、def.exeの方で具体的にどのような動きをしたらよいのかご教授お願いできますか?
ここは?
http://www.borland.co.jp/qanda/delphi/d0003060.html
あと、こことか
http://www.geocities.co.jp/SiliconValley-SanJose/2560/delphi4/network/UDP.htm
D6 Personalには TUDPはありません。
あ、D5にもありませんでした^^;
>deldel様
ぐはっ・・・それならばDelphi7の導入を真剣に考えて無くてはならないようにですね
Delphi6で代替的な機能等ってありますか?
TNMUDP でできるようです。
以下は、NMUDP1 が受信用、NMUDP2 が送信用です。
procedure TForm1.FormCreate(Sender: TObject);
begin
NMUDP1.LocalPort := 1234;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
C: array[1..8] of Char;
begin
C[1] := 'A';
C[2] := 'B';
C[3] := 'C';
C[4] := 'D';
C[5] := 'E';
C[6] := 'F';
C[7] := 'G';
C[8] := 'H';
NMUDP2.RemoteHost := '100.101.102.103';
NMUDP2.RemotePort := 1234;
NMUDP2.SendBuffer(C, 8);
end;
procedure TForm1.NMUDP1DataReceived(Sender: TComponent; NumberBytes: Integer; FromIP: String; Port: Integer);
var
C: array[1..8] of Char;
i: Integer;
begin
if NumberBytes <= 8 then begin
NMUDP1.ReadBuffer(C, i);
Memo1.Lines.Add('受信文字列:' + C);
Memo1.Lines.Add('送信元IP:' + FromIP);
end;
end;
D6 Personalには TNMUDPもありません。
ネットでTNMUDPのFree版を探しましょう(あるのかな…)
でなければ、Indyか…
Indyでのサンプル。
Indyの場合、UdpServerとUdpClientにわかれているようで、受信はServer側でやるようです。
procedure TMainForm.Button1Click(Sender: TObject);
begin
IdUDPClient1.Active := True;
IdUDPClient1.Broadcast('ABCDEFGHIJKLMNOPQRSTUVWXYZ', 1234);
end;
procedure TMainForm.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
Buffer: String;
tmp: String;
buf: array[0..8] of char;
count: integer;
begin
Memo1.Lines.Add('PeerIP:' + ABinding.PeerIP);
Memo1.Lines.Add('PeerIP:' + IntToStr(ABinding.PeerPort));
ABinding.Accept(0);
Buffer := '';
repeat
count := AData.Read(buf, 8);
if count = 0 then break;
SetLength(tmp, count);
CopyMemory(PCHAR(tmp), @buf[0], count);
Buffer := Buffer + tmp;
until count = 0;
Memo1.Lines.Add(BUffer);
end;
横からで申し訳ありません
私はDelphi7 Proを使っているのですが
その条件での同じような事を考えています
その際のサンプルソース等はありませんか?
↑7ならので出来るんじゃない?
さっき投稿したの反映されてない?
ツイート | ![]() |