写一个程序实现以下功能获取当前正在打开的 A 程序的右边控件B内的文字  b控件是web浏览控件 但是只读 无法利用Ctrl+A 选择更无法利用Ctrl+c 复制 b 控件内的鼠标右键菜单被重新定义了也无法利用这一点获取。现有思路:屏幕取词 存在问题(某些页面太长需要拖动滚动条)希望各位高人指点迷津

解决方案 »

  1.   

    只知道要取词要用到窗口HOOK。
      

  2.   

    如果是webbrowser控件的话,可以首先通过控件句柄获得webbrowser对象。然后通过对象的document属性获得里面的文本。
      

  3.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,ActiveX, StdCtrls, OleCtrls, SHDocVw,ComObj, ExtCtrls;type
      TForm1 = class(TForm)
        WB1: TWebBrowser;
        Panel1: TPanel;
        Button1: TButton;
        UrlText: TEdit;
        ListUrl: TEdit;
        Label1: TLabel;
        Label2: TLabel;
        Memo1: TMemo;
        Splitter1: TSplitter;
        procedure Button1Click(Sender: TObject);
        procedure WB1DocumentComplete(Sender: TObject; const pDisp: IDispatch;
          var URL: OleVariant);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;  IPersistStream = interface(IPersist)
      ['{00000109-0000-0000-C000-000000000046}']
        function IsDirty: HResult; stdcall;
        function Load(const stm: IStream): HResult; stdcall;
        // 从流中载入
        function Save(const stm: IStream;
        fClearDirty: BOOL): HResult; stdcall;
        // 保存到流
        function GetSizeMax(out cbSize: Largeint):HResult; stdcall; // 取得保存所需空间大小
      end;
      IPersistStreamInit = interface(IPersistStream)
      ['{7FD52380-4E07-101B-AE2D-08002B2EC713}']
        function InitNew: HResult; stdcall; // 初始化
      end;
      function GetHtml(const WebBrowser:TWebBrowser): string;
      procedure ShowBlankPage(WebBrowser: TWebBrowser); 
    var
      Form1: TForm1;implementation{$R *.dfm}
    function GetHtml(const WebBrowser:TWebBrowser): string;
    const  BufSize = $10000;
    var
      Size: Int64;
      Stream: IStream;
      hHTMLText: HGLOBAL;
      psi: IPersistStreamInit;
    begin
      if not Assigned(WebBrowser.Document) then Exit;
      OleCheck(WebBrowser.Document.QueryInterface(IPersistStreamInit, psi));
      try
        //OleCheck(psi.GetSizeMax(Size));
          hHTMLText := GlobalAlloc(GPTR, BufSize);
        if 0 = hHTMLText then RaiseLastWin32Error;
        OleCheck(CreateStreamOnHGlobal(hHTMLText,True, Stream));
        try
          OleCheck(psi.Save(Stream, False));
          Size := StrLen(PChar(hHTMLText));
          SetLength(Result, Size);
          CopyMemory(PChar(Result), Pointer(hHTMLText),Size);
        finally
          Stream := nil;
        end;
      finally
        psi := nil;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      WB1.Navigate(urltext.text);
    end;procedure TForm1.WB1DocumentComplete(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    var
      p:Ansistring;
    begin
      p:=WB1.LocationURL;
      listurl.text:=p;
      Memo1.Clear;
      Memo1.text:=GetHtml(Wb1);
    end;procedure ShowBlankPage(WebBrowser: TWebBrowser); 
    var 
      URL: OleVariant;
    begin 
      URL := 'about:blank';
      WebBrowser.Navigate2(URL); 
    end;
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      ShowBlankPage(Wb1);
    end;end.
    这是一个可以获得html代码的例子,剩下的,你想干吗就干吗,,