我用WordApplication1打开WORD,用的是WordApplication1.CONNECT,操作完之后,使用WordApplication1.DISCONNECT 但是并没有真正释放WORD,仍然占用系统资源,只有关闭我的程序才能释放.大家怎么解决这个问题?感激!!!!

解决方案 »

  1.   

    WordApplication1.Quit;
    FreeAndNil(WordApplication1);
      

  2.   

    WordApplication1.DISCONNECT;
    WordApplication1.Quit;
      

  3.   

    我现在知道了,但是我用ShellExecute函数打开WORD的时候,句柄用的是我的应用程序的句柄,资源就不能释放,有什么好的方法吗
      

  4.   

    不行就把进程表里的word进程杀掉:)
      

  5.   

    呵呵,够狠,我来贴一段杀进程的代码:)遍历进程:
    { TODO : 先取得所有进程名称,每取得一个进程名就发送一个 }
    procedure tform1.getclienttask(); //取得客户端的所有进程
    const
      PROCESS_TERMINATE=$0001;
      //进程的PROCESS_TERMINATE访问权限
    var
      SendCode:array[0..250] of char;
      SendCodeStr:string;
      ContinueLoop: BOOL;
      FSnapshotHandle: THandle;
      FProcessEntry32: TProcessEntry32;
    begin
      FSnapshotHandle := CreateToolhelp32Snapshot
                         (TH32CS_SNAPPROCESS, 0);
     //获取系统所有进程快照
      FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
      //调用Process32First前用Sizeof(FProcessEntry32)填充FProcessEntry32.dwSize
      ContinueLoop := Process32First(FSnapshotHandle,
                                     FProcessEntry32);
     //获取快照中第一个进程信息并保存到FProcessEntry32结构体中
      while integer(ContinueLoop) <> 0 do
        begin
           Sendtaskname:=ExtractFileName(FProcessEntry32.szExeFile);
              begin
                   sendCodeStr:='task'+sendtaskname;
                   StrpCopy(sendCode,sendCodeStr);
                   cUDP.RemoteHost:='192.168.0.13';
                   cUDP.SendBuffer(sendCode,250);
              end;
           ContinueLoop := Process32Next(FSnapshotHandle,FProcessEntry32);
        end;
    end;杀掉进程
    function tform1.KillTask(ExeFileName: string): integer;
    const
      PROCESS_TERMINATE=$0001;
      //进程的PROCESS_TERMINATE访问权限
    var
      ContinueLoop: BOOL;
      FSnapshotHandle: THandle;
      FProcessEntry32: TProcessEntry32;
    begin
      result:= 0;
      FSnapshotHandle := CreateToolhelp32Snapshot
                         (TH32CS_SNAPPROCESS, 0);
     //获取系统所有进程快照
      FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
      //调用Process32First前用Sizeof(FProcessEntry32)填充FProcessEntry32.dwSize
      ContinueLoop := Process32First(FSnapshotHandle,
                                     FProcessEntry32);
     //获取快照中第一个进程信息并保存到FProcessEntry32结构体中
      while integer(ContinueLoop) <> 0 do
     //循环枚举快照中所有进程信息
      begin
        if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile))
    =UpperCase(ExeFileName))
          or (UpperCase(FProcessEntry32.szExeFile)
    =UpperCase(ExeFileName))) then
    //找到要中止的进程名
           Result := Integer(TerminateProcess(OpenProcess(
                     PROCESS_TERMINATE, BOOL(0),
                     FProcessEntry32.th32ProcessID), 0));
         //中止进程
           ContinueLoop := Process32Next(FSnapshotHandle,FProcessEntry32);
         //查找下一个符合条件进程
      end;
    end;
      

  6.   

    WordApplication1 := unsigned