我现在需要做一个程序,可以调用别的应用程序(这些程序也都是我们开发的,现在需要集成到一块),控制这个程序的启动、关闭、最大化、最小化、启动位置等,而且新启动的程序要嵌在我的程序里面,启动后我的程序就把控制权交给这个程序,以后就是对新启动这个程序进行操作,可以说与桌面的功能很像。
   最近急需解决这个问题,谢谢大家了!
   ,对这个问题感兴趣的朋友咱们一块研究。

解决方案 »

  1.   

    这个问题说简单也简单,说难也难。没有必要跟你一起讨论研究了,因为此问题我也遇到过,已解决。把其它EXE加到自己的程序里面,不释放临时文件而动态加载调用,不就等于是加壳嘛。你给的分太少,我只给你一些提示。下面的贴子曾经讨论过这个问题,你可以参考一下。如果需要亲自帮你写,你需要再加点分。http://topic.csdn.net/u/20080315/16/f2e6a1eb-8c8b-4d32-8695-fd0d7de348b8.htmlhttp://topic.csdn.net/t/20050518/10/4015574.html
      

  2.   

    以前用资源文件释放文件的时候,也想过,能不能不释放,而直接执行里面的资源exe程序
    和你想的差不多
    关注一下.
      

  3.   

    还有,再说白点,就是大量使用SendMessage或PostMessage,哈哈!:)
      

  4.   

    在use 里添加:shellapi;
    然后在要用的地方添加下面的函数:
    ShellExecute(Handle, 'open', PChar('c:\test\app.exe'), nil, nil, SW_SHOW);函数详解:
    ShellExecute详解ShellExecute函数用于打开或者打印一个指定的文件。指定的文件必须是可执行文件或者文档文件。
    HINSTANCE ShellExecute(
        HWND hwnd, // handle to parent window 
        LPCTSTR lpOperation, // pointer to string that specifies operation to perform
        LPCTSTR lpFile, // pointer to filename or folder name string
        LPCTSTR lpParameters, // pointer to string that specifies executable-file parameters 
        LPCTSTR lpDirectory, // pointer to string that specifies default directory
        INT nShowCmd  // whether file is shown when opened
       )* Params(参数解释)
    Hwnd
    指定父窗口句柄。这个窗口接收工程产生的所有消息。例如:一个工程可以通过消息框报告错误。
    lpOperation
    以一个以null结束的字符串描述操作的执行。以下的操作字符串是有效的:行号 参数 含义
    1 “open” 函数打开由lpFile指定的文件。这个文件必须是可执行文件或者文档文件。文件夹必须是可打开的文件夹。
    2 “print” 函数打印由lpFile指定的文件。这个文件应该是文档文件。如果指定的文件是可执行文件,函数将以open的方式打开这个文件。
    3 “explore” 函数将搜索由lpFile指定的文件夹。lpOperation参数如果为null,函数将以open的方式打开由lpFile指定的文件。
    lpFile
    以一个null结束的字符串描述打开或者打印指定的文件,或者打开或者搜索指定的
    文件夹。函数可以打开一个指定的文件或者文件夹,也可以打印一个文档文件。
    lpParameters
    如果lpFile指定的是一个可执行文件,lpParameters以一个以null结束的字符串指定该执行文件传给应用软件的参数。
    行号 参数 含义
    1 SW_HIDE 隐藏这个窗体,并激活其他窗体。
    2 SW_MAXIMIZE 最大化指定的窗体。
    3 SW_MINIMIZE 最小化指定的窗体,并按顺序激活最上层的窗体。
    4 SW_RESTORE 激活并显示窗体。如果窗体为最小化或者最大化,窗体恢复到原始大小和位置。应用程序当恢复一个最小化的窗体时将指定标记。
    5 SW_SHOW 以当前的大小和位置激活并显示窗体。
    6 SW_SHOWDEFAULT 
    7 SW_SHOWMAXIMIZED 激活并最大化显示窗体。
    8 SW_SHOWMINIMIZED 激活并最小化现实窗体。
    9 SW_SHOWMINNOACTIVE 最小化窗体,保持其激活状态。
    10 SW_SHOWNA 以当前状态显示窗体,保持其激活状态。
    11 SW_SHOWNOACTIVATE 以当前的大小和位置显示窗体,并保持其激活状态。
    12 SW_SHOWNORMAL 激活并显示一个窗体。如果窗体为最大化或者最小化,窗体恢复到原始的大小和位置。当窗体第一次显示的时候,应用程序记录标记。
    如果lpField指定的是一个文档文件,lpParameters应该为null。
    lpDirectory
    以一个以null结束的字符串指定文件开始运行的默认目录。
    nShowCmd
    如果lpField指定了一个可执行文件,nShowCmd指定这个文件在被打开时如何显示。这个参数可以是以下值中的任何一个:如果lpField指定的是文档文件,nShowCmd应该为0。* return Values(返回值)
    如果函数执行成功,返回值是已经运行的工程的实例句柄,或者动态数据交换服务器应用程序的句柄。
    (具体返回值列表从略,请参考Delphi在线帮助)
    * Res(注释)
    被lpFile参数指定的文件必须是一个可执行文件或者文档文件。如果文件是一个文档文件,ShellExecute函数将根据lpOperation参数决定打开或者打印这个文件。如果是可执行文件,ShellExecute函数将打开它,即使lpOperation参数被指定为printing。
    你可以使用ShellExecute打开活着搜索一个文件夹。可以使用以下任意一种方式打开一个文件夹:
    ShellExecute(handle, NULL, path_to_folder, NULL, NULL, SW_SHOWNORMAL);
    或者
    ShellExecute(handle, "open", path_to_folder, NULL, NULL, SW_SHOWNORMAL);
    使用下面的调用搜索文件夹:
    ShellExecute(handle, "explore", path_to_folder, NULL, NULL, SW_SHOWNORMAL)
    如果lpOperation参数为null,函数将打开由lpFile指定的文件。如果lpOperation参数为”open”或者”explore”,函数将强制打开窗体或者资源管理器。 
      

  5.   

    请注意,楼主要的方法关键是调用的程序在程序自己里面包含着,而不是硬盘上已存在的文件。
    比如我的程序有两个窗体form1和form2,我在form1中使用form2.show就可以调用了,现在的问题是form2没有源码,是别的EXE文件,要求form1调用form2并且form2在硬盘上没有对应的文件存在,你难道可以用ShellExecute来解决?
    另外3楼所说的:通过窗口句柄找各控件句柄,得知所有要用的句柄后通过句柄来操作相应控件或窗口。你所答非所问,楼主要求软件集成到一起,嵌在一个EXE里面,而并不是控制其它EXE窗体。=================楼主的问题可以解决的,只是给的分太没有诚意了。