在1.exe的form中双击一个图标(就是listview的一个节点),启动2.exe;
还要传参数(就是节点的信息)给2.exe。然后1.exe和2.exe互不干扰。关掉1.exe不影响2.exe。
这个怎样才能实现?比如像windows里的网络邻居,在里面双击“宽带连接”。启动宽带连接程序,而网络邻居可以关掉或
在里面再添加其它什么连接。

解决方案 »

  1.   

    ShellExecute(handle,'open','2.exe'
                           Pchar('参数'), nil, sw_shownormal);ShellExecute函数是用来打开或者打印一个指定的文件。这个文件可以是一个可执行文件,也可以是一个文档文件。它的语法如下:
    HINSTANCE ShellExecute(HWND hwnd, LPCTSTR lpoperation, LPCTSTR lpFile, 
    LPTSTR lpParameters,LPCTSTR lplnrectory,INTnshowCmd ) ; 
    它的参数是:    hwnd这个参数将指定一个父窗口。这个窗口将接收一个应用过程的任何消息。例如,一个应用程序可产生一个消息对话框来报告一个错误。    IPOPeration它是一个空终端字符串,用来说明操作的模式。下面的字符串是有效的:
        (1)“OPen”它将打开由参数IPFile指定的文件。这个文件可以是一个可执行文件,也可以是一个文档文件。
        (2)“Print“它将打印由参数IPFile指定的文件,这个文件是一个文档文件。当它是一个可执行文件的时候,仍可以执行这个程序。
        lpOPeration参数可以设置为NULL,在这种情况下,这个函数将打开由参数lpFlle指定的文件。    IPFile它是一个空终端字符串,用来说明要打开或者打印的文件。    IPParameters当参数IPFile指定的是一个可执行文件时,参数lpParameters是一个空终端字符串,用来说明要打开程序的参数。当参数lpFile指定的是一个文档文件时,参数IPParameters应设置为空(NULL)。    IPDirectory它是一个空终端字符串,用来说明要打开或者打印的文件目录。    nshowCmd当参数IPFile指定一个可执行文件的时候,参数nshowCmd将指定在打开应用程序后如何显示这个应用程序。它可以是下面的数值;
        (1)SW_HIDE隐藏这个窗口,并激活另一个窗口;
        (2)SW_MAXIMIZE最大化指定的窗口;
        (3)SW_MINIMIZE最小化指定的窗口,并激活在“Z”次序的下一层窗口;
        (4)SWRESTORE激活并显示这个窗口;当这个窗口是最小化或者最大化, Win-dOWS  将储它的原来位置和大小;
        (5)SWSHOW激活这个窗口,并以当前的位置和大小来显示;
        (6)SW_SHOWDEFAULT以STARTUPINFO结构指定的SW_FLAG来设置显示的状态,STARTUPINFO是在应用程序运行时,由函数CreateProcess初始他的,一个应用程序应以这个标志位调用函数Showwindow来设置主窗口的显示状态;
        (7)SW_SHOWMAXIMIZED激活这个窗口,并最大化地显示;
        (8)SW_SHOWMINIMIZED激活这个窗口,并最小化地显示;
        (9)SW_SHOWMINNOACTIVE最小化地显示这个窗口,原来激活的窗口仍然激活;
        (10)SW_SHOWNA以当前的状态来显示这个窗口,原来激活的窗口仍然激活; 1
         (11) SW_SHOWNOACTIVATE以最近的位置和大小来显示这个窗口,原来激活的窗口仍然激活;
        (12) SW_SHOWNORMAL激活并显示这个窗口,当这个窗口是最小化或者最大地.Windows将存储它的原来的位置和大小,应用程序应在初始化的时候指定这个标志让。
        当参数lpFile指定的是一个文档文件的时候,nshowCmd应设为0。    对返回值而言,当这个函数调用成功的时候,将返回被执行的应用程序的句柄,或者是动态数据链接(DDE)服务器应用程序的句柄;当这个函数调用失败的时候,将近日一个小于或者等于排的错误码,下面是这些错误码的意思;
        ① 0操作系统内存不够或者资源不够;
        ② ERROR_FILE_NOT_FOUND 指定的文件没有被发现;
        ② ERROR_PATH_NOT_FOUND 指定的路径没有被发现;
        ④ ERROR_BAD_FORMAT 这个可执行文件是无效的;
        ⑤ SE_ERR_ACCESSDENIED 操作系统不能访问被指定的文件(仅仅是 Windows95才有);
        ⑥ SE_ERR_ASSOCINCOMPLETE 被指定的文件名是不完整的或者是无效的;
        ⑦ SE_ERR_DDEBUSY 由于别的DDE传送正在进行,这个DDE传达将不能完成;
        ⑧ SE_ERR_DDEFAIL DDE传送失败;
        ⑨ SE_ERR_DDETIMUT 由于请求超出时间,DDE传达将不能完成;
        ⑩ SE_ERR_DLLNOTFOUND 被指定的动态连接库没有被发现(仅仅是Windows95才有);
        ⑾ SE_ERRFNF 被指定的文件没有被发现(仅仅是Windows 95才有);
        ⑿ SE_ERR_NOASSOC 没有应用程序和被指定文件的扩展名相关联;
        ⒀ SE_ERR_OOM 没有足够的内存来完成这个操作(仅仅是 Windows 95才有);
        ⒁ SE_ERR_PNF 被指定的路径没有被发现(仅仅是Windows 95才有);
        ⒂ SE_ERR_SHARE 发生共享冲突。
      

  2.   

    ShellExecute(handle,'OPEN',PChar(sExePath),PChar(sParam),nil,SW_SHOWNORMAL);
      

  3.   

    调用shellexecute需要引用哪个单元?
      

  4.   

    最后一点,比如我要传的参数是一个i:integer,传给2.exe的主form,那
    ShellExecute中的 Pchar('参数') 该怎么写?
    2.exe的主form里的函数怎样得到这个参数?
    谢谢!
      

  5.   


    ----------------------------------------------------------------
    原贴内容:
    最后一点,比如我要传的参数是一个i:integer,传给2.exe的主form,那
    ShellExecute中的 Pchar('参数') 该怎么写?
    2.exe的主form里的函数怎样得到这个参数?
    谢谢!这个参数是以空格分割的比如
    'a b c'在2 .exe里面这样获取参数for i := 1 to ParamCount do
    begin
      M_Info.Lines.Add(LowerCase(ParamStr(i)));
    end;//for
    ==============================
    在USES段加入SHELLAPI,使用时如:
       ShellExecute(handle,'open','c:\myapp\myapp.exe','-s','',SW_SHOWNORMAL);
       第一个参数为父窗口句柄;
       第二个参数为打开方式(OPEN,PRINT两种);
       第三个参数为执行文件全路径;
       第四个参数为执行文件参数;
       第五个参数为执行文件开始运行时的初始目录;
       第六个参数为为执行文件运行方式(SW_HIDE,SW_MAXIMIZE,SW_MINIMIZE,
    SW_RESTORE,SW_SHOW,SW_SHOWDEFAULT,SW_SHOWMAXIMIZED,SW_SHOWMINIMIZED,
    SW_SHOWMINNOACTIVE,SW_SHOWNA,SW_SHOWNOACTIVATE,SW_SHOWNORMAL);
       具体请看帮助。另外,如果为字符串参数,其中包含变量或运算的必需用PCHAR()函数。