有没有什么办法设定应用程序在指定的时间自动重新启动呀??? ( 积分: 100 )

  • 主题发起人 主题发起人 jsw0525
  • 开始时间 开始时间
to:wanghaiou, <br>还有,你上面给我的这写代码编译不了
 
提示什么错误?
 
to:wanghaiou, <br>流程是<br>1.在主程序的主窗体上放一个时钟控件<br> 在时钟空间里面写代码,随时判断当前日期和时间是否慢足重起条件,如果满足重起条件就执行 close;<br>2 在你的主程序的主窗体的Destroy事件里写上<br>procedure TForm1.FormDestroy(Sender: TObject);<br>begin<br> &nbsp; winexec('从程序',sw_hide);<br>end;<br>这样 在主程序关闭以后就会运行你的重程序<br>3.作一个从程序<br>在从程序的主窗体的Destroy事件里写上<br>procedure TForm1.FormDestroy(Sender: TObject);<br>begin<br> &nbsp; winexec('主程序',sw_hide);<br>end;<br>4.在从程序的主窗体上放一个时钟控件<br> 在时钟空间里面写代码close;<br><br>这个步骤一定可行的 &nbsp;<br><br>这些就是我的要求,你已经正确的理解了我的意思了(如果用都是用delphi的话这样完全可以了)。<br>不过我服务器程序是别人用VC写的,我不太会VC,但又想让VC写的这服务器程序能够自动的重新启动,就想采用delphi来实现这辅助功能。不知道、是否说清楚了。<br>你有QQ吗?我的QQ:27958870,加我好不?谢谢
 
TProcessEntry32;<br>ProcessListHandle:=CreateToolHelp32SnapShot(TH32cs_SnapProcess,0);里面的CreateToolHelp32SnapShot,TH32cs_SnapProcess<br> ok:=Process32First(ProcessListHandle,ProcessStruct);里面的Process32First;<br>Process32Next等没有定义
 
to:wanghaiou, <br>你可以加我吗?我的QQ:27958870<br>你的QQ是多少?<br>谢谢
 
这是一个完整的例子<br>你只需要改变 time控件的事件里的相关参数就可以了<br><br>unit Unit1;<br><br>interface<br><br>uses<br> &nbsp;Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,<br> &nbsp;Dialogs, StdCtrls, Buttons,TlHelp32, ExtCtrls,DateUtils;<br><br>type<br> ///////////////////////////////<br> &nbsp;TProcessInfo=Record<br> &nbsp; &nbsp; &nbsp; ExeFile:string;<br> &nbsp; &nbsp; &nbsp; ProcessID:Dword;<br> &nbsp; end;<br> &nbsp;ProcessInfo=^TProcessInfo;//////////<br> &nbsp;TForm1 = class(TForm)<br> &nbsp; &nbsp;Timer1: TTimer;<br> &nbsp; &nbsp;procedure Timer1Timer(Sender: TObject);<br> &nbsp;private<br> &nbsp; &nbsp;{ Private declarations }<br> &nbsp;public<br> &nbsp; &nbsp;{ Public declarations }<br> &nbsp;end;<br> &nbsp;//////////////////////////////////////////////////////////////////////////////<br> &nbsp;//11.取得当前进程列表<br> &nbsp;//////////////////////////////////////////////////////////////////////////////<br> &nbsp;procedure ProcessList(Var pList:TList);<br> &nbsp;//////////////////////////////////////////////////////////////////////////////<br> &nbsp;//12.终止某一正在运行的进程<br> &nbsp;//////////////////////////////////////////////////////////////////////////////<br> &nbsp;procedure HideProcess(ProcessName:string);<br> &nbsp;/////////////////////////////////////////////////////////////////////////////<br> &nbsp;//13.查找进程<br> &nbsp;//////////////////////////////////////////////////////////////////////////////<br> &nbsp;function FindProcess(ProcessName:string):Bool;<br> &nbsp; &nbsp;////////////////////////////////////////////////////////////////////////////////<br> &nbsp;//23判断此日期是不是当月最后一天<br> &nbsp;////////////////////////////////////////////////////////////////////////////////<br> &nbsp;function LastDay(Date1:Tdate):bool;<br>var<br> &nbsp;Form1: TForm1;<br><br>implementation<br><br>{$R *.dfm}<br>//////////////////////////////////////////////////////////////////////////////<br>//11.取得当前进程列表<br>//////////////////////////////////////////////////////////////////////////////<br>procedure ProcessList(Var pList:TList);<br>var p:ProcessInfo;<br> &nbsp; &nbsp;ok:Bool;<br> &nbsp; &nbsp;ProcessListHandle:THandle;<br> &nbsp; &nbsp;ProcessStruct:TProcessEntry32;<br>begin<br> &nbsp;pList:=TList.Create;<br> &nbsp;pList.Clear;<br> &nbsp;ProcessListHandle:=CreateToolHelp32SnapShot(TH32cs_SnapProcess,0);<br> &nbsp;ProcessStruct.dwSize:=SizeOf(ProcessStruct);<br> &nbsp;ok:=Process32First(ProcessListHandle,ProcessStruct);<br> &nbsp;while integer(ok)&lt;&gt;0 do<br> &nbsp;begin<br> &nbsp; &nbsp;New(p);<br> &nbsp; &nbsp;p.ExeFile:=ProcessStruct.szExeFile;<br> &nbsp; &nbsp;p.ProcessID:=ProcessStruct.th32ProcessID;<br> &nbsp; &nbsp;pList.Add(p);<br> &nbsp; &nbsp;ok:=Process32Next(ProcessListHandle,ProcessStruct);<br> &nbsp;end;<br> // dispose(p); &nbsp;//释放内存<br>end;<br>//////////////////////////////////////////////////////////////////////////////<br>//12.终止某一正在运行的进程<br>//////////////////////////////////////////////////////////////////////////////<br>procedure HideProcess(ProcessName:string);<br>var h:Thandle;<br> &nbsp; &nbsp;a:Dword;<br> &nbsp; &nbsp;p:ProcessInfo;<br> &nbsp; &nbsp;i:integer;<br> &nbsp; &nbsp;Current:TList;<br>begin<br> &nbsp;ProcessList(current);<br> &nbsp;for i:=0 to current.Count-1 do<br> &nbsp;begin<br> &nbsp; &nbsp;p:=Current.Items;<br> &nbsp; &nbsp;if ansiuppercase(p.ExeFile)=ansiuppercase(ProcessName) then<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;h:=OpenProcess(Process_All_Access,true,p.ProcessID);<br> &nbsp; &nbsp; &nbsp;GetExitCodeProcess(h,a);<br> &nbsp; &nbsp; &nbsp;TerminateProcess(h,a);<br> &nbsp; &nbsp;end;<br> &nbsp;end;<br>end;<br>////////////////////////////////////////////////////////////////////////////////<br>//13.查找进程<br>////////////////////////////////////////////////////////////////////////////////<br>function FindProcess(ProcessName:string):Bool;<br>var<br> &nbsp;p:ProcessInfo;<br> &nbsp;i:integer;<br> &nbsp;Current:TList;<br>begin<br> &nbsp;result:=false;<br> &nbsp;ProcessList(current);<br> &nbsp;for i:=0 to current.Count-1 do<br> &nbsp;begin<br> &nbsp; &nbsp;p:=Current.Items;<br> &nbsp; &nbsp;if ansiuppercase(p.ExeFile)=ansiuppercase(ProcessName) then<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp;result:=true;<br> &nbsp; &nbsp; &nbsp;break;<br> &nbsp; &nbsp;end;<br> &nbsp;end;<br> &nbsp;Current.Free;<br> &nbsp;dispose(p); &nbsp;//释放内存<br>end;<br>////////////////////////////////////////////////////////////////////////////////<br>//23判断此日期是不是当月最后一天<br>////////////////////////////////////////////////////////////////////////////////<br>function LastDay(Date1:Tdate):bool;<br>var &nbsp;year,month,day:word;<br>begin<br> &nbsp;result:=false;<br> &nbsp;Decodedate(date1,year,month,day);<br> &nbsp;if DaysInAMonth(year,month)=day then<br> &nbsp;result:=true;<br>end;<br>procedure TForm1.Timer1Timer(Sender: TObject);<br>var &nbsp;hour,minute,second,msecond:word;<br> &nbsp; &nbsp; NewDirNumber:string;<br> &nbsp;begin<br> &nbsp;DecodeTime(time,hour,minute,second,msecond);<br> &nbsp;if (LastDay(date)=true) and (hour=22) and (minute=1) and (second=1) then<br> &nbsp;begin<br> &nbsp; &nbsp;HideProcess('Main.exe');<br> &nbsp; &nbsp;sleep(2000);<br> &nbsp; &nbsp;winexec('main.exe',Sw_hide);<br> &nbsp;end;<br>end;<br><br>end.
 
TO:wanghaiou<br>写的很好。谢谢<br>可是我这还没有实现,你这里面的函数:<br>////////////////////////////////////////////////////////////////////////////////<br>//13.查找进程<br>////////////////////////////////////////////////////////////////////////////////<br>function FindProcess(ProcessName:string):Bool;<br><br>好象没有用到呀。重新启动一个新的服务器程序时,原来的并没有关闭掉
 
进程的名称区分大小写,不带路径
 
我觉得用windows的计划任务 很容易实现的
 
关闭之前先启动另外一个程序,然后在那个程序中进行检测,如果进程中有你的程序,就不做操作,否则的话就启动你的程序,然后那个另外的程序自己退出去。
 
你可以把QQ打开<br>然后<br>HideProcess('QQ.exe');<br>看看有没有反映
 
wanghaiou:<br>谢谢你<br>能不能加我呀,好象有机会在QQ上和你聊一下,好吗?<br>我的QQ:27958870<br>你的呢?能给个机会给我吗?<br>你真是高手呀,好久没有见到你这样的高人了
 
为什么非要我QQ呀,在这里交流不好嘛!
 
这上面交流是蛮好,主要想更好的结交你这朋友,在QQ交流起来速度快,方便些。(你放心,你加我了,我绝对不会总打扰你。说句不好听的话,如果我实在是那样你也可以把我删掉呀,你说呢?)。<br>谢谢
 
谢谢各位热心兄弟
 
后退
顶部