我用TC编译了个程序,生成exe文件。
我想问一下在delphi里怎么调用这个exe文件。。
比如用一个button,我一点击,就运行这个exe。希望说具体点。。小弟先谢谢了。。

解决方案 »

  1.   

    比如ShellExecute(Handle,'Open','C:\Winnt\System32\abc.exe',nil,nil, SW_SHOWNORMAL); 
                    
                    
      

  2.   

    呵呵  
    我会了。。
    在大富翁上面搜索到的。。
    就这样:uses WinProcs;   
       ……
         begin   
          WinExec('e:\*.exe',sw_show);         end.   
      

  3.   

    谢谢上面两位的解答。。shellexcute我还不知道怎么用。。
      

  4.   

    WinExec好像是为了兼容16位系统而使用的,建议使用ShellExecute!
      

  5.   

    借问一下winexe需要引用哪个单元?
    偶试的怎么找不到winexe啊
      

  6.   

    呵呵,看到了,uses WinProcs;
    寒自己一个
      

  7.   


    WinExec好像是为了兼容16位系统而使用的,建议使用ShellExecute!请问怎么说来的??  先说声谢谢。。
    对了 我用这个不行啊
    uses WinProcs;   
       ……
         begin   
          WinExec('e:\*.exe',sw_show);         end.   
    delphi编译生成了个exe文件。
    我运行这个exe文件,它还要求我原来引用的那个exe文件在原来的路径上。。比如上面那个,,我把这个*.exe拿开e盘,就关联不上了。也就是说:它delphi生成exe文件时,不会把那个我想关联的exe文件联到里面去。请问用WinExec这个函数具体该怎么用?还有ShellExecute怎么用?能不能贴几行代码上来看看。
    呵呵。。向各位热心的朋友致谢……
      

  8.   

    ShellExecute(Handle,'Open','C:\Winnt\System32\abc.exe',nil,nil, SW_SHOWNORMAL);调用之前要引用 ShellApi单元文件
      

  9.   

    谢谢牛仔,,我刚刚也查到了。试成功了。问题还是出在跟winexec一样的地方,那个引用的exe文件路径是死的。。换地方就调不出来了。。
      

  10.   

    if fileexists(Gsyspath + 'verinfo.htm') then
        shellexecute(handle, 'open', pchar( 'C:\x.exe'), '', '', SW_MAXIMIZE)//SW_MAXIMIZE代表打开窗体为最大化
    else
        application.MessageBox('x.exe文件不存在!', '提示', mb_ok + mb_iconinformation);
      

  11.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls,WinProcs;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
        Winexec('Test.exe',SW_NORMAL); //将exe文件拷贝到delphi文件的文件夹下  uses   WinProcs
    end;
    end
      

  12.   

    //将exe文件拷贝到该程序文件的文件夹下  注意:要引用这个单元 WinProcs
      

  13.   

    就是啦,winexec執行時,不要帶絕對路徑,用相對路徑就是
      

  14.   

    to:kampan(卡庙)  jozosoft(水灵灵的乌兰诺娃) 相对路径也解决不了问题。只要我要调用的exe不在原来的位置,delphi生成的exe文件执行时就关联不到了。。比如我把生成的exe拿到其它电脑上,这个调用就失效了,该如何解决呢?
      

  15.   

    费劲……if FileExist('C:\a.exe') then
      ShellExecute(Self.Handle, 'Open', 'C:\a.exe', nil, nil, SW_SHOW)
    else
      ShowMessage('文件不存在!');这样不就可以了吗?
      

  16.   

    to:gobiz(拔剑容易收剑难) 先谢谢你的两次回帖。呵呵,,,我现在做这个程序就是用到调用的那个exe。你告诉它不存在,我怎么用呢?我的目的是想delphi生成的exe拿到任何地方都可以正常调用我想要的那个exe。能不能实现?这个“ShowMessage('文件不存在!');”的意思就好比别人要你解决一件事,你说你不会,那你算不算解决了。
      

  17.   

    前题是你的机器中必有你要调用的exe文件,你就写一个全盘搜索过程,第一次运行时查找出要调用的EXE文件所在的路径,写入一个INI文件中。下次就直接由INI文件中调入路径。
      

  18.   

    我的目的是想delphi生成的exe拿到任何地方都可以正常调用我想要的那个exe。能不能实现?-------
    不能实现,这本身就是两个exe文件,
    除非你把两个exe的功能整合在一个exe文件里。
      

  19.   

    把TC的那个文件放到资源中,在Delphi中调用是释放出来,这样只要一个Delphi生成的exe文件就可以了。
      

  20.   

    晕,晚了,楼上的都对,一般是winexec和ShellExecute这两种方法
      

  21.   

    to:chenjun631(小菜) 
    /************
    前题是你的机器中必有你要调用的exe文件,你就写一个全盘搜索过程,第一次运行时查找出要调用的EXE文件所在的路径,写入一个INI文件中。下次就直接由INI文件中调入路径。
    *************/
    谢谢你的热心指导。这个看起来好像很难。是不是??
    “全盘搜索”,“ini”,小弟都不懂。
      

  22.   

    to:merkey2002(小样的) /*************
    不能实现,这本身就是两个exe文件,
    除非你把两个exe的功能整合在一个exe文件里。
    *************/
    先向你说声谢谢。
    整合在一个exe文件里正是我想要的,我就是想要一个exe就能实现所有的功能。
    请问delphi能不能实现??还是有什么其它办法。。
      

  23.   

    to:wxmwxm(wxmwxm) 
    /**************
    把TC的那个文件放到资源中,在Delphi中调用是释放出来,这样只要一个Delphi生成的exe文件就可以了。
    **************/谢谢你的热心指导。
    小弟看不大明白,把要被调用的exe放到资源中,“资源”是哪里呢??这样delphi生成的exe就整合了我想调用的那个exe吗??
      

  24.   

    简单的问题说的这么复杂!
    你把两个文件放在一起,
    procedure openexe;
    var
      path,fileName: String;
      
    begin
      path := ExtractFilePath(Application.ExeName);  //取当前EXE执行路径
      fileName := path +'test.exe';                  //你的哪个EXE文件
    if FileExist(fileName ) then
      ShellExecute(Self.Handle, 'Open', fileName, nil, nil, SW_SHOW)
      

  25.   

    uses shellapi简单的问题说的这么复杂!
    你把两个文件放在一起,
    procedure openexe;
    var
      path,fileName: String;
      
    begin
      path := ExtractFilePath(Application.ExeName);  //取当前EXE执行路径
      fileName := path +'test.exe';                  //你的哪个EXE文件
    if FileExist(fileName ) then
      ShellExecute(Self.Handle, 'Open', fileName, nil, nil, SW_SHOW)
    end;
      

  26.   

    天啊,你那個exe文件不跟著你自己的exe文件走,怎麼調用 ???
    除非是windows自帶的exe文件!!!
      

  27.   

    to : loveWife(我爱红) 谢谢你的回帖。
    你这方法我会的。。你看我前面的回贴
    ××××××××××××××××××××
    to:merkey2002(小样的) /*************
    不能实现,这本身就是两个exe文件,
    除非你把两个exe的功能整合在一个exe文件里。
    *************/
    先向你说声谢谢。
    整合在一个exe文件里正是我想要的,我就是想要一个exe就能实现所有的功能。
    请问delphi能不能实现??还是有什么其它办法。。××××××××××××××××××××××
      

  28.   

    to:jozosoft(水灵灵的乌兰诺娃) 
    /**************
    天啊,你那個exe文件不跟著你自己的exe文件走,怎麼調用 ???
    除非是windows自帶的exe文件!!!
    ***************/
    就是就是……我就想解决这个问题。。能不能整合这两个exe呢?谢谢啊……
      

  29.   

    把你另外一个文件做成res文件就可以了
      

  30.   

    把你另外一个文件做成res文件就可以了
      

  31.   

    转贴一个例子吧(只有如何加入,应用自己想吧)
    =========================================================
    信息标题:我知道了如何动态在EXE中加入任何资源(.EXE,.BMP,.SWF,.DOC..)大家分享一下吧!(1460字) 
    信息作者:crisee 
    发表时间:2001-8-18 11:06:00
    阅读次数:363
    信息内容:前些日子,我发表了类似的帖子,是求援的。
      然后,参考了些源码。经过“处心积虑”的琢磨,终于弄懂了。
      本人是编程初学者,脑子也笨,高手见了不要见笑!
      我发现哦,在EXE资源区内写入其它资源,虽然EXE还可运行,但图标会变成Windows默认的样儿,也就是说EXE中的ICON资源遭破坏了。然后,我尝试在EXE尾部写入资源,太棒了!虽然文件长度增加,但丝毫没有影响EXE的运行。我们假定要把 sir32.exe 加入 程序(project1.exe)中。
    首先,创建新的Project,定义 private 变量 fStream:TFileStream,然后写个过程
    Procedure TForm1.EXEStrore;
    var FS: TFileStream;
    Begin
      //首先将程序自身复制为~tmp.exe
      CopyFile(Application.ExeName, '~tmp.exe', false);
      //为打~tmp.exe创建 fStream,模式为 只读。
      fStream.Create('~tmp.exe',fmOpenRead);
      //为打开sir32.exe创建 FS,模式为 只读。
      FS.Create('Sir32.exe',fmOpenRead);
    try
      //将fStream定位至 ~tmp.exe文件尾部。
      fStream.position := fStream.Seek(0, SoFromEnd);
      //将 FS (sir32.exe) 定位至文件首部,准备读入内存。
      FS.Postion := 0;
      //将 FS(Sir32.exe) 写入 fStream(编译后的程序project1.exe)
      //OK..
      fStream.CopyFrom(FS, FS.Size);
    finally
      //释放资源,要不会出错的。
      fStream.free;
      FS.free;
    end;
    end;
    以上简短的代码,就可以把任何类型的文件写入~tmp.exe中。当然,~tmp.exe只是中转站。然后在写一段用.bat文件删除程序本身,并把~tmp.exe改为程序名的代码。
    如 定义 var pfile: TEXTFILE ; 
    begin
      AssignFile(pfile,'~tmp.bat');
      reWrite(pfile);
      WriteLn(pfile, Pchar('Del '+Application.ExeName));
      WriteLn(pfile, Pchar('ren ~tmp.exe '+Application.ExeName));
      WriteLn(pfile, 'Del %0');
      WriteLn(pfile, 'Exit');
      CloseFile(pfile);
      WinExec('~tmp.bat',SW_Hide);
      Halt; 
    end;
    最后,你会发现project1.exe文件长度增加了,具体增加的长度刚是sir32.exe的大小(一个字节也不差)。
    但是,如何再把写入的文件再读出呢?自己想想,或是我下回就说 ^:^
      

  32.   

    使用资源,很简单.
    先打开记事本,输入
    b_exe EXEFILE "b.exe"将文件存为bexe.rc,打开windows命令提示窗口,输入brcc32.exe bexe.rc得到一个名为bexe.res的资源文件。将该文件与工程文件(.dpr)放在一起。
    在源程序中加上一句:
    {$R bexe.res}下面这段代码在运行时释放出b.exe文件:
    var
      rs:TResourceStream;
    begin
      rs:=TResourceStream.create(hinstance,'b_exe','EXEFILE');
      try
        rs.saveToFile('b.exe');
      finally
        rs.free;
      end;
      winExec('b.exe',sw_show);
    end;
      

  33.   

    if FindWindow(nil, 'exe执行程序的标题') = 0 then
        WinExec(exe文件',SW_SHOW);