定时自动启动外部应用软件并限时关闭此软件程序

     今天由于要配合同事使用DCS软件开发一套工业控制软件,而DCS软件需要勾买,否则每次只能用两个小时,又要重启一次方可使用,所以就想到用delphi来解决这个问题,这样我们的那个工业控制软件就可以拿去进行实时监控了,设想的方案是这样的:通过用DELPHI来编写一个软件,通过此软件来启动DCS软件,然后每隔两个小时就自动关闭DCS软件又重启DCS软件,这样就可以正常使用了,一想觉得简单,所以就动手做了,可是做了之后才发现,DCS这个软件不像我们平常的一些软件,无法通过findwindow函数找到他的窗口句柄,试通过一些进程查找函数查找并结束进程的方式解决,结果也行不通,真的很奇怪,而且启动DCS软件时还要不断的用鼠标点击弹出来的几个提示窗口方能进入到要看的界面,想到这点我就有办法了,可以通过模拟按键的方法来解决以上的所有问题,于是就做到了。。。。。。呵呵!大家可以拿去试试,应该也可以用于其它的软件,特别是在网上看到的一些说用findwindow函数无法结束外部程序的问题,我想你也可以用此方法试试:

var
  Form1: TForm1;
  hParent: HWND;
  filestr:string;
  jgtime:integer;
implementation

{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
    if filestr<>'' then   //要启动的软件路径
    begin
      zqdcs.InTerval:=jgtime;   //重启间隔时间设定
      dcsqt.Enabled:=true; //自动重启时钟
      hParent:=Form1.Handle;//本软件窗口句柄
    end
    else
    begin
      showmessage('请先初始化本软件系统,否则无法运行!');
      Form1.WindowState:=wsNormal;
    end;
end;

procedure TForm1.dcsqtTimer(Sender: TObject);
begin
    if (hParent <> 0) then
    ShellExecute(handle,'open',Pchar(filestr),nil,nil,sw_shownormal); //启动外部软件
    sleep(3000); //延时3S
    keybd_event(ord(82), MapVirtualKey(ord(82), 0 ),0, 0 );//模拟按键R按下
    keybd_event(ord(82), MapVirtualKey(ord(82), 0 ),KEYEVENTF_KEYUP, 0 );模拟按键R放开
    sleep(3000);
    SetCursorPos(50,10);// 以下开始模拟鼠标
    mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
    mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
    dcsqt.Enabled:=false;
    sleep(8000);
    zqdcs.Enabled:=true;
    dcsqt.Enabled:=false;
end;

procedure TForm1.zqdcsTimer(Sender: TObject);
begin
   closedcs.Enabled:=true;
end;

procedure TForm1.closedcsTimer(Sender: TObject);
begin
   //ALT+f4组合键
   keybd_event(ord(18), MapVirtualKey(ord(18), 0 ),0, 0 );
   keybd_event(VK_F4, VK_F4,0, 0 );
   keybd_event(VK_F4, VK_F4,KEYEVENTF_KEYUP, 0 );
   keybd_event(ord(18), MapVirtualKey(ord(18), 0 ),KEYEVENTF_KEYUP, 0 );
   //ALT+X组合键
   keybd_event(ord(18), MapVirtualKey(ord(18), 0 ),0, 0 );
   keybd_event(ord(88), MapVirtualKey(ord(88), 0 ),0, 0 );
   keybd_event(ord(88), MapVirtualKey(ord(88), 0 ),KEYEVENTF_KEYUP, 0 );
   keybd_event(ord(18), MapVirtualKey(ord(18), 0 ),KEYEVENTF_KEYUP, 0 );
   //回车键
   keybd_event(ord(13), MapVirtualKey(ord(13), 0 ),0, 0 );
   keybd_event(ord(13), MapVirtualKey(ord(13), 0 ),KEYEVENTF_KEYUP, 0 );
   closedcs.Enabled:=false;
   sleep(10000);
   dcsqt.Enabled := true;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if trim(file_edit.Text)<>'' then
    filestr:= trim(file_edit.Text)
  else
    showmessage('请先选择软件路径');
  if trim(jg_edit.Text)<>'' then
    jgtime:= strtoint(trim(jg_edit.Text))
  else
    showmessage('请设置时间间隔');
  if filestr<>'' then
  begin
     Form1.WindowState:=wsMinimized;
     zqdcs.InTerval:=jgtime;
     dcsqt.Enabled:=true;
     hParent:=Form1.Handle;
  end
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   Application.Terminate;
end;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值