4

我是否可以从 Delphi 应用程序的记事本窗口中找出打字坐标(相对于桌面坐标)?例如,如果我们看下图,我在记事本窗口上打字。我可以找出我在记事本上打字的屏幕坐标吗?

编辑 如果有人可以提出通用解决方案,那将很有帮助。答案 no1 是关于记事本的。控制台窗口怎么样?如果我在控制台窗口上打字,是否可以计算出坐标?

在此处输入图像描述

4

1 回答 1

4

我想,如果 UAC 不会禁用它,您可以实现以下序列:

  1. 你必须学习记事本的windows结构。使用WinSpy++,WinSightProcFS for Total Commander其他工具。然后您必须获得HWND实际编辑框窗口的句柄 ( )。枚举或查找其他应用程序窗口的主题已经在 StackOverflow 和 Google 上讨论过很多次。

  2. 然后你必须向主编辑窗口询问它的坐标。查看Get{Client/Window}Rect函数,请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/ms633503.aspxhttp://msdn.microsoft.com/en-us/library/windows/desktop/ms633519。 aspx也许更好的是SendMessageEM_GETRECT定义消息:http: //msdn.microsoft.com/en-us/library/ms997530.aspx

  3. 然后你必须知道插入符号的位置:like TMemo.SelEndand TEdit.SelStart- 最好的方法就是阅读它们是如何在 VCL 中实现的。可能这将植根于SendMessage(EM_GETSEL,...)- http://msdn.microsoft.com/en-us/library/ms997530.aspx - 有一个现成的例子可以做到这一点

  4. 然后您必须向寡妇询问该位置的相对坐标 - 相对于您在上述步骤中获得的客户端矩形。请参阅EM_POSFROMCHAR消息http://msdn.microsoft.com/en-us/library/windows/desktop/bb761631.aspx和 Delphi 示例http://www.delphipages.com/forum/showthread.php?t=33707

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

于 2013-05-29T12:32:19.010 回答