当前位置 : 主页 > 编程语言 > delphi >

delphi – 我可以在相对于桌面窗口的记事本中找到当前的输入坐标

来源:互联网 收集:自由互联 发布时间:2021-06-23
我是否可以在Delphi应用程序的记事本窗口中找到键入坐标(相对于桌面坐标)?例如,如果我们看下面的图片,我在记事本窗口上打字.我可以找到屏幕坐标,我在记事本上打字. 编辑 如果有人
我是否可以在Delphi应用程序的记事本窗口中找到键入坐标(相对于桌面坐标)?例如,如果我们看下面的图片,我在记事本窗口上打字.我可以找到屏幕坐标,我在记事本上打字.

编辑
如果有人可以提出通用解决方案,将会很有帮助.回答no1谈到记事本.控制台窗口怎么样?如果我在控制台窗口上打字,是否可以找出坐标?

我想,如果UAC不禁用它,你可以实现以下顺序:

>你必须学习记事本的窗口结构.使用WinSpy,WinSight或ProcFS for Total Commander等工具.然后你必须得到实际编辑框窗口的句柄(HWND).在StackOverflow和Google上已经多次讨论了枚举或查找其他应用程序窗口的主题.
>然后你必须向主编辑窗口询问它的坐标.请参阅获取{Client / Window} Rect函数,请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/ms633503.aspx和http://msdn.microsoft.com/en-us/library/windows/desktop/ms633519.aspx或许更好的是SendMessage EM_GETRECT自定义消息:http://msdn.microsoft.com/en-us/library/ms997530.aspx
>然后你必须知道插入符号的位置:如TMemo.SelEnd和TEdit.SelStart – 再次最好的方法是阅读它们在VCL中的实现方式.可能根植于SendMessage(EM_GETSEL,…) – http://msdn.microsoft.com/en-us/library/ms997530.aspx – 有一个很好的例子可以做到这一点
>然后你必须向Widows询问该位置的相对坐标 – 相对于上面步骤中的Client Rect.请参阅EMPOSFROMCHAR消息http://msdn.microsoft.com/en-us/library/windows/desktop/bb761631.aspx和德尔福样本于http://www.delphipages.com/forum/showthread.php?t=33707

然而有些人声称这并不总是可靠地运行:http://vbcity.com/forums/t/14951.aspx所以作为最后的手段,你可以使用硬核字符串解析,如本答案第1版所述.

网友评论