【问题标题】:Caret location/position Inside any Application插入符号位置/位置在任何应用程序内
【发布时间】:2013-03-10 10:34:51
【问题描述】:
我正在用 C# 编写一个通用文本自动完成器应用程序。所以我需要在当前活动的窗口中获取插入符号的位置(可能是记事本、Ms Word 等)。我应该怎么做才能获得插入符号的 X、Y 坐标?我需要它在用户键入时在光标(插入符号)下显示建议。
我的程序正在后台运行。它应该在当前活动的任何窗口中检测插入符号的存在并获取插入符号的实时位置。每当用户输入文本时,位置值都应该更新。
我不知道该怎么做。这一切都可能使用 C# 吗?还是我应该更改编程语言?
【问题讨论】:
标签:
c#
.net
windows
mouse
【解决方案1】:
语言选择在很大程度上与这个问题无关。文本输入本身就很困难。
解决您的问题会很困难,因为应用程序经常使用自定义或高度自定义的控件来编辑文本。记事本使用标准的编辑控件,因此您可以使用 EM_GETSEL 消息检索字符中的插入符号位置,并使用 EM_POSFROMCHAR 将其转换为屏幕位置。标准 Rich Edit 控件存在类似的消息。但是,对于 Microsoft Word,您可能必须使用 COM 调用它并找出插入符号的位置。其他应用程序将具有其他 API,您必须对其进行研究、逆向工程、支持和测试。而这仅仅是开始——我希望你会想要检索插入符号周围的文本并修改它,和/或显示一个 UI 来为用户提供选择。这将是一个主要的 PITA,所以我会研究 IME API,看看那里是否有合适的东西。应该有,因为东亚输入模式本身就是一种自动完成器。 IME 的优点是它不依赖于目标控件。