怎么用DELPHI执行一个bat文件,且之后还能在程序里关闭这个cmd窗口?最近写一个程序,需要在业务代码开始之前先运行一个java写的程序,这个程序运行之后是个黑黑的cmd窗口,这是一个命令行程序程序退出的时候,我希望可以同时向这个CMD窗口发送一些命令(Exit),使得相关java程序正常退出,然后关闭这个cmd窗口。有没有办法实现?

解决方案 »

  1.   


    shellexecute(form1.handle,'open','c:\vcvarsall.bat','-s','',sw_show);
    一般执行完会自动关闭
      

  2.   

    Shellexecute执行,如果查找窗口可以用进程快照,CreateToolhelp32Snapshot,遍历进程,找到了就发送WM_Close消息或者直接TermianteProcess
      

  3.   

    不会自动退出那就用遍历进程的方法TerminateProcess,只要知道进程名就好办
      

  4.   


    var
      BatchFileName: string;
      ProcessInfo: TProcessInformation;
      StartUpInfo: TStartupInfo;
    begin
      BatchFileName := ExtractFilePath(ParamStr(0)) + 'A.bat';
      FillChar(StartUpInfo, SizeOf(StartUpInfo), $00);
      StartUpInfo.dwFlags := STARTF_USESHOWWINDOW;
      StartUpInfo.wShowWindow := SW_HIDE;
      if CreateProcess(nil, PChar(BatchFileName), nil, nil,
        False, IDLE_PRIORITY_CLASS, nil, nil, StartUpInfo,
        ProcessInfo) then
      begin
        CloseHandle(ProcessInfo.hThread);
        CloseHandle(ProcessInfo.hProcess);
      end;
    end;
      

  5.   

    用FindWindow找到句柄,
    再用sendmessage或postmessage发送WM_CLOSE关闭之。
    若关不了,就直接TerminateProcess
      

  6.   


    哦,还有交互的需要啊,那就使用doscmd控件
      

  7.   

    在bat里最后加上一行:
    EXIT执行完了就自动退CMD窗口了啊。