我要截获word文档关闭的消息,但是word又和记事本不一样(打开word多个文档就好像用了一个程序的几个模版一样,而打开多个记事本就象是打开不同的程序,所以关闭一个word文档可以不用关闭word程序).截获每一份word文档后,我想得到这分文档在系统的详细路径.请问应该如何实现?是不是一定要用钩子做啊?能不能就用server里面的控件?谢谢

解决方案 »

  1.   

    觉得VBA来弄比较简单,复杂点自己写个DLL挂到WORD下;
      

  2.   

    我觉得可以使用server里面的控件
    每个WORD文档都有自己的文件名,如果没有,他就默认为1,2,3的下去~!
    你可以从文件是否存在去想啊
      

  3.   

    >>能不能就用server里面的控件?谢谢
    你可以用 connect , 而不是create一個新的 word.application, 就能連接到已存在的 work 實例,
    然後可遍歷其中打開的文件,
    如果真的要做到
    >>截获Word的关闭 
    可能要做一個 word 的 plugin
      

  4.   

    to aiirii(ari-爱的眼睛)  :我用了connect,但是connect每次总是会在进程管理器里面产生一个进程,就是如果打开了word,再connect,就会出现两个word的进程啊
      

  5.   

    我设了一个定时器,每五秒就检测一下是否启动word,源码是
    procedure TForm1.TimerTimer(Sender: TObject);
    var
         FSnapshotHandle:THandle;
         FProcessEntry32:TProcessEntry32;
         Ret:bool;
         s:string;begin
       FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
       FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
       Ret:=Process32First(FSnapshotHandle,FProcessEntry32);
       while Ret do
       begin
        s:=ExtractFileName(FProcessEntry32.szExeFile);
        if s='WINWORD.EXE' then
        begin
          try
            WordApplication1.Disconnect;
            WordApplication1.Connect;
            WordApplication1.OnDocumentBeforeClose := WordOnSave;  
            exit;
          except
          end;
        end;
        Ret:=Process32Next(FSnapshotHandle,FProcessEntry32);
      end;
    end;
    当然从理论上是不会出现两个word进程的,但是在有个系统中运行确实出现两个进程啊