比如我想使用ExitProcess(PrcInfo.hProcess)结束该进程,结果却把自己(打开EXE文件的程序)给结束了
我的目的:打开一个exe文件,并对它的窗体进行关闭、鼠标点击等操作,我个人认为这就在此之前得到这个exe文件的窗体句柄,所以才用的CreateProcess而不是shelexecute(),但现在还是不能对它进行操作,谁能教教我,谢谢PS:用findwindow()没有用,窗体名太长了,我试过了,我都不知道是什么

解决方案 »

  1.   

    可以用createprocess和terminateprocess两个api函数来打开和关闭其它进程。
    下面的例程打开和关闭h:\x.exe:
    var
     information:PROCESS_INFORMATION;
     startinf:STARTUPINFO;
    procedure open;
    begin
    createprocess('h:\x.exe',nil,nil,nil,false,NORMAL_PRIORITY_CLASS,
                  nil,'h:\',startinf,information);
    end;procedure close;
    begin
    terminateprocess(information.hProcess,0);
    end;
    但使用terminateprocess有一定的危险性,它不会关闭进程打开的dll。如果程序要求不高,可以试试用这种方法。
      

  2.   

    darkliu(钢铁工人甲) :
    我已经用CreateProcess创建一个进程了,我的意思是怎么操控这个进程对应的窗体呢?
    比击点击窗体某个色素坐标位置
      

  3.   

    BOOL CreateProcess(
     LPCTSTR lpApplicationName, // 可执行模块名
     LPTSTR lpCommandLine, // 命令行字符串
     LPSECURITY_ATTRIBUTES lpProcessAttributes, // 进程的安全属性
     LPSECURITY_ATTRIBUTES lpThreadAttributes, // 线程的安全属性
     BOOL bInheritHandles, // 句柄继承标志
     DWORD dwCreationFlags, // 创建标志
     LPVOID lpEnvironment, // 指向新的环境块的指针
     LPCTSTR lpCurrentDirectory, // 指向当前目录名的指针
     LPSTARTUPINFO lpStartupInfo, // 指向启动信息结构的指针
     LPPROCESS_INFORMATION lpProcessInformation // 指向进程信息结构的指针
    ); 
    使用最后一个参数