请问:如何得到Caret的绝对位置?

解决方案 »

  1.   

    1、使用GetCaretPos,只能得到Caret在窗口中的绝对位置,对于Screen而言,此位置是相对位置,还需用到ClientToScreen。
    2、在Word中,GetCaretPos返回值为0,0问题未解决。
      

  2.   

    GetCaretPos是取相对位置,还要取焦点窗口的位置:GetWindowRect ,然后相加,应该就是绝对位置了。
      

  3.   

    To hjd_cw:谢谢,但你的方法只能取到本程序的caretr的绝对坐标。我想要的是取另一个程序中正在闪烁的caret绝对坐标。
      

  4.   

    GetcursorPos得到鼠标位置,GetCaretPos得到插入符位置!
      

  5.   

    你不会用findwindow找到你想要得到窗口的句柄,
    通过句柄得到它的窗口坐标
    然后在得到caret的坐标,然后相加
      

  6.   

    国庆节我还要值班,在CSDN上到处接分
      

  7.   

    同志们,如果谁能用GetCaretPos配合其它函数在Word中获得Caret在Screen上的绝对坐标,楼主不仅把这100分都送给他,而且还要再加上100分,共计200分,说话算数。试问谁有这个本事?
      

  8.   

    在这里,楼主把自己的代码贴出来,供大家参考。
    除了Word等office软件的Caret位置,其它的都可以,怪怪怪!
    注释我就不写了,能帮我找Bub的一定没问题。var
        X,Y:integer;
        CaretW,CaretH:integer;
        Pos:TPoint;
        R:TRect;
        MyId,ItID:DWord;
        H:HWND;
        
    begin
        ..............................    H:=GetForeGroundWindow;
        if (H =Handle) then Exit;    MyID := GetCurrentThreadId();
        ItID := GetWindowThreadProcessId(H, nil);    AttachThreadInput(ItID, MyID,true);    SetForeGroundWindow(H);
        Windows.SetFocus(H);
        H:=GetFocus;    GetWindowRect(H,R);
        GetCaretPos(Pos);    AttachThreadInput(ItID, MyID,false);    CaretW:=GetSystemMetrics(SM_CXCURSOR);
        CaretH:=GetSystemMetrics(SM_CYCURSOR);    X:=R.Left+Pos.X+CaretW;
        Y:=R.Top+Pos.Y+CaretH;    ................................
    end;
      

  9.   

    To:zp911(二过一)
       但是Word中的Caret绝对坐标找不到。
      

  10.   

    Word中的caret绝对位置真的就没人能取得吗???
      

  11.   

    GetCaretPos
    楼主节日快乐!!!!