假设有一个悬浮窗口(包含一个编辑框)用来动态获取其他窗口选中的文字,每当在其他窗口(可能是浏览器,也可能是文本编辑器...)中选中了文字,当鼠标移到该悬浮窗口之上时该窗口的编辑框中即能显示此段选中文字。请问这个可能实现吗?(应该是可以的,我在其他软件中看到过类似的效果)。如何实现?

解决方案 »

  1.   

    可以实现,先用findwindow取得活动窗口,接下来根据其他窗口(可能是浏览器,也可能是文本编辑器...)类型,来实现具体的操作
      

  2.   

    前半部分可以参考密码查看器,思路是坐标-子窗体句柄-发送WM_GETTEXT取得控件文本
    后半部分发送EM_GETSEL,取得选中的位置,接着对上面的文本截取.
      

  3.   

    楼上的好 我也在考虑这个问题,但是现在使用 SENDMESSAGE EM_GETSEL 后取得开始位置和结束位置了,但是我如何来根据开始位置和结束位置获取该文本呢.指点下迷津!
      

  4.   

    //看一下VCL是如何实现的就明白怎么做了!:)function TCustomEdit.GetSelStart: Integer;
    begin
      SendMessage(Handle, EM_GETSEL, Longint(@Result), 0);
    end;function TCustomEdit.GetSelLength: Integer;
    var
      Selection: TSelection;
    begin
      SendMessage(Handle, EM_GETSEL, Longint(@Selection.StartPos), Longint(@Selection.EndPos));
      Result := Selection.EndPos - Selection.StartPos;
    end;function TCustomEdit.GetSelText: string;
    var
      P: PChar;
      SelStart, Len: Integer;
    begin
      SelStart := GetSelStart;
      Len := GetSelLength;
      SetString(Result, PChar(nil), Len);
      if Len <> 0 then
      begin
        P := StrAlloc(GetTextLen + 1);
        try
          GetTextBuf(P, StrBufSize(P));
          Move(P[SelStart], Pointer(Result)^, Len);
        finally
          StrDispose(P);
        end;
      end;
    end;