在Notepad关闭时,将其文本内容保存到指定文件,初学用HOOK,难度大,用WH_CBT钩子,怎么都实现不了,以下是钩子,请各位老哥帮看一下,在????处如何做
function  CBTProc(iCode:integer;  wParam:  WParam;  lParam:  lparam):  lresult;stdcall;export;
var
   hWnd:  Thandle;
   nLen:  Integer;
   Buff:  array[0..4095]  of  Char;
   PackFile:textFile;
   i:integer;
begin
   if  iCode  <0  then
   begin
       ......
   end;
   if  iCode=HCBT_DESTROYWND  then
   begin
       hWnd  :=  Thandle(wparam);
       GetClassName(hWnd,  @Buff,  128);
       if  CompareStr(Buff,'Notepad')=0  then
       begin
           hWnd  :=  FindWindowEx(hWnd,  0,  @Buff,nil  );
           nLen  :=  GetWindowText(hWnd,  @Buff,  SizeOf(Buff));
             //  这儿保存Buff里的文字到文件'E:\b.txt'????此处如何做,下面的代码行不通
           begin
           AssignFile(PackFile,'E:\b.txt');
           Rewrite(PackFile);
           try
           for  i:=0  to  nlen-1 do  begin
           write(PackFile,buff[i]);
           end;
           finally
           closeFile(PackFile);
           end;
         end;
       end;
   end;
   ......
end;

解决方案 »

  1.   

    我试过用流,未实现,我是这样做的。请指教:
    var
    Fstr:TFileStream;
    begin
    ....
    Fstr:=TFileStream.create('E:\b.txt',fmcreate);
    try
      Fstr.write(buff,sizeof(buff));
    finally
      Fstr.Free;
    end;
    end;
      

  2.   

    Help me. 我实在太太差吗
      

  3.   

    //如果内容都取错了,怎么存都没用~~
    //hWnd  :=  FindWindowEx(hWnd,  0,  @Buff,nil  ); //这句使hWnd为0
    //意思就是在hWnd寻找类名为“Buff”值('Notepad')的窗体
    //可Notepad窗体中哪有Notepad窗体?
    //真正有文本内容的是Edit窗体~~
           GetClassName(hWnd, Buff, 128);
           if SameText(Buff, 'Notepad') then
           begin
             hWnd := FindWindowEx(hWnd, 0, 'Edit', nil);
             SendMessage(hWnd, WM_GETTEXT, SizeOf(Buff), Integer(@Buff[0]));
             { TODO : 保存Buff }
           end;
      

  4.   

    GetClassName(hWnd, Buff, 128);
           if SameText(Buff, 'Notepad') then
           begin
             hWnd := FindWindowEx(hWnd, 0, 'Edit', nil);
             { TODO : 保存Buff }
             with TFileStream.Create('E:\b.txt', fmCreate) do try
               Write(Buff[0], SendMessage(hWnd, WM_GETTEXT, SizeOf(Buff), Integer(@Buff[0])));
             finally
               Free;
             end;
           end;