获得其他程序的光标位置(100分)

  • 主题发起人 主题发起人 wnr
  • 开始时间 开始时间
W

wnr

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样获得其他程序的光标位置(不一定是标准的edit)
 
具体一些。
 
我想让我的程序在后台监控某一个程序的输入框的光标处于第几行第几列。
 
那你先的取得输入框的句柄,然后发送消息
 
具体说一下好吗
 
按你的需要作时当修改:<br>procedure TForm1.UpdateCursorPos;<br>var<br>&nbsp; CharPos: TPoint;<br>begin<br>&nbsp; CharPos.Y := SendMessage(Richedit1.Handle, EM_EXLINEFROMCHAR, 0, Richedit1.SelStart);<br>&nbsp; CharPos.X := (Richedit1.SelStart - SendMessage(Richedit1.Handle, EM_LINEINDEX, CharPos.Y, 0));<br>&nbsp; Inc(CharPos.Y);<br>&nbsp; Inc(CharPos.X);<br>&nbsp; //可赋给全局变量<br>&nbsp; StatusBar1.Panels[0].Text := Format('Line: %3d &nbsp; Col: %3d', [CharPos.Y, CharPos.X]);<br>&nbsp; StatusBar1.Panels[1].Text := 'SelStart:' + InttoStr(Richedit1.SelStart);<br>end;<br>
 
[Error] Unit1.pas(34): Undeclared identifier: 'EM_EXLINEFROMCHAR'
 
uses &nbsp;ShellAPI;
 
在use中加上 RichEdit
 
一样,"updateCursorPos"什么意思,能不能将其放在其他控件下运行。
 
updateCursorPos--按你的需要作时当修改为过程或函数。
 
老兄,变通一下,那是他给你的例子中的一个自己写的函数<br>你只用体会函数中的前两句就可以了
 
不好意思就是不能执行SendMessage(Richedit1.Handle, EM_EXLINEFROMCHAR, 0, Richedit1.SelStart)<br>这句语句<br>[Error] Unit1.pas(34): Undeclared identifier: 'EM_EXLINEFROMCHAR'<br>我用了shellapi可还是不行
 
在use中加上 RichEdit!!!!
 
终于过去了但我要的是获取其他程序的行列
 
将CharPos赋给全局变量,在另一个程序可接受到。
 
我是说像word一样其他程序的行列
 
CharPos.Y, CharPos.X就是光标的行列值。
 
不是给你说了吗,先获得其他程序的输入框的句柄<br>代替<br>SendMessage(Richedit1.Handle, EM_EXLINEFROMCHAR, 0, Richedit1.SelStart)<br>中的Richedit1.Handle<br><br>可以使用WindowFromPoint函数,该函数得到鼠标所在处的窗口的句柄
 
我是说当我激活word时我的程序能够显示出word的行与列,你的代码好像作不到,<br>我当才想了一个办法但只能获得一般标准控件的光标位置,无法获得word的编辑区<br>光标位置。<br>ver<br>bb,cc:dword;<br>begin<br>bb:=GetWindowThreadProcessId(GetForegroundWindow,nil);<br>cc:=GetWindowThreadProcessId(form1.Handle, nil);<br>AttachThreadInput(cc, bb, TRUE);<br>GetCaretPos(aa);<br>form1.Caption:=inttostr(aa.X)+','+inttostr(aa.Y);<br>end<br>帮忙看一下
 
后退
顶部