D7中:如何实现如下功能:   屏幕上有Button1 和Button2   如何在点击Button1后,执行C盘下a.exe;  点击Button2后,结束a.exe进程呢   请给出代码...

解决方案 »

  1.   

    小弟是C#版面的,由于必须使用Delphi所以来贵宝地求教...能否给出比较完整一些的代码?谢谢
      

  2.   

    -_-!
    点BUTTON1时
    winexec('c:\a.exe -s'),0);
    点BUTTON2时
    ...
      

  3.   

    执行 Winexec('路径',SW_SHOW); 或 ShellExecute(0,'Open','路径',0,0,SW_SHOW)  
    结束 我现在也没有很好的解决办法 Up
      

  4.   

    function WinExecAndWait32(FileName: string; Visibility: Boolean): integer;
    var
      zAppName: array[0..512] of char; //存放应用程序名
      StartupInfo: TStartupInfo;
      ProcessInfo: TProcessInformation;
      exitCode: Dword;
      aVisibility: integer;
    begin
      StrPCopy(zAppName, FileName);
      FillChar(StartupInfo, Sizeof(StartupInfo), #0);
      //给StartupInfo结构体赋值
      StartupInfo.cb := Sizeof(StartupInfo);
      StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
      if Visibility then
        aVisibility := 1
      else
        aVisibility := 0;  StartupInfo.wShowWindow := aVisibility;
      //调用CreateProcess 创建进程,执行指定的可执行文件
      if not CreateProcess(nil, zAppName, nil, nil, false
        , CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS
        , nil, nil, StartupInfo, ProcessInfo) then
        Result := -1
      else
      begin
        //等待可执行文件退出
        WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
        //得到进程终止状态码
        GetExitCodeProcess(ProcessInfo.hProcess, exitCode);
        result := Exitcode;
      end;
    end;
    得到ExitCode后调用ExitProcess就可以了。
      

  5.   

    方法一http://www.kaer.com.cn:8056/jxwz/useexternal.htm
      

  6.   

    windowclose()
    sendmessage()
    winexec()
      

  7.   

    或者如何结束a.exe  呢??能否给出具体代码或伪代码
      

  8.   

    唉,我不是说了嘛?
    上面的代码里是执行程序,同时也得到了ExitCode,得到这个后用ExitProcess这个API函数就能结束进程了,不是解决问题了吗?实在不懂请参考MSDN。
      

  9.   

    啊哈哈   星星大哥真的是很好啊...帮我把代码写完整吧  :)以后到ASP.NET和Java版  我帮你搞定一切问题hoho
      

  10.   

    嘿嘿嘿,Java Java Enterprise Open Source版的斑竹Totodo是我大学同学,你认识吗?
      

  11.   

    看看吧,我多好,呵呵,下面是我打开Windows优化大师,然后关闭的代码:(给我加分,20不够,哈哈)
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}var ExitCode: DWORD;function WinExecAndWait32(FileName: string; Visibility: Boolean): integer;
    var
      zAppName: array[0..512] of char; //存放应用程序名
      StartupInfo: TStartupInfo;
      ProcessInfo: TProcessInformation;
      exitCode: Dword;
      aVisibility: integer;
    begin
      StrPCopy(zAppName, FileName);
      FillChar(StartupInfo, Sizeof(StartupInfo), #0);
      //给StartupInfo结构体赋值
      StartupInfo.cb := Sizeof(StartupInfo);
      StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
      if Visibility then
        aVisibility := 1
      else
        aVisibility := 0;  StartupInfo.wShowWindow := aVisibility;
      //调用CreateProcess 创建进程,执行指定的可执行文件
      if not CreateProcess(nil, zAppName, nil, nil, false
        , CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS
        , nil, nil, StartupInfo, ProcessInfo) then
        Result := -1
      else
      begin
        //得到进程终止状态码
        GetExitCodeProcess(ProcessInfo.hProcess, exitCode);
        result := Exitcode;
      end;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ExitCode := WinExecAndWait32('C:\Program Files\Wom\Windows优化大师.exe',True);
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      ExitProcess(ExitCode);
    end;end.
      

  12.   

    星星哥的function好像不行哦,点击了bt1后,开启进程,则无法点击bt2关闭进程了啊!
    有更好的方法没有?我也想知道怎么解决啊!呵呵
      

  13.   

    是不对,改了一下:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}var ExitCode: DWORD;
        ProcessInfo: TProcessInformation;function WinExecAndWait32(FileName: string; Visibility: Boolean): integer;
    var
      zAppName: array[0..512] of char; //存放应用程序名
      StartupInfo: TStartupInfo;
      aVisibility: integer;
    begin
      StrPCopy(zAppName, FileName);
      FillChar(StartupInfo, Sizeof(StartupInfo), #0);
      //给StartupInfo结构体赋值
      StartupInfo.cb := Sizeof(StartupInfo);
      StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
      if Visibility then
        aVisibility := 1
      else
        aVisibility := 0;  StartupInfo.wShowWindow := aVisibility;
      //调用CreateProcess 创建进程,执行指定的可执行文件
      if not CreateProcess(nil, zAppName, nil, nil, false
        , CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS
        , nil, nil, StartupInfo, ProcessInfo) then
        Result := -1
      else
      begin
        //得到进程终止状态码
        GetExitCodeProcess(ProcessInfo.hProcess, exitCode);
        result := Exitcode;
      end;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      WinExecAndWait32('C:\Program Files\Wom\Windows优化大师.exe',True);
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      TerminateProcess(ProcessInfo.hProcess, ExitCode);
    end;end.
      

  14.   

    运行用
    var
      zappname:array [0..512] of char;
      zcurdir:array [0..255] of char;
      workdir:string;
      startupinfo:tstartupinfo;
      processinfo:tprocessinformation;
      exitcode:cardinal;
    begin
      strpcopy(zappname,filename);
      getdir(0,workdir);
      strpcopy(zcurdir,workdir);
      fillchar(startupinfo,sizeof(startupinfo),#0);
      startupinfo.cb:=sizeof(startupinfo);
      startupinfo.wShowWindow:=visibility;
      if not createprocess(nil,zappname,nil,nil,false,create_new_console or Normal_priority_class,
                           nil,nil,startupinfo,processinfo) then result:=-1;
    end;结束用TerminateProcess(processinfo.hProcess,exitcode)