c# - 在任何打开的应用程序的文本字段中获取 'word before the cursor' 的最佳方法

标签 c# text textbox

我正在编写一个文本输入应用程序,它位于系统托盘中,可通过键盘 Hook 协助文本输入。用户输入的当前字符由之前的字母决定。

所以如果你有“我想本|”其中“|”表示插入符号,当用户敲击键盘时,下一个字母是通过对单词“ben”的前一个字母进行计算来确定的。结果可能是“d”>“弯曲”或“t”>“弯曲”等。

如果我从头开始每个单词,这很好用,我可以在我的程序中跟踪字符串中的单词。

当我将插入符放在单词中间时,问题就出现了。我需要检测插入符号位置之前出现的字符。如果我按箭头键等,也会出现这种情况。

在过去的 AutoHotkey 应用程序中,我通过发送一个“Shift + Ctrl + 左箭头”命令来突出显示字符,一个“Ctrl + C”命令来复制它,然后将剪贴板保存到我的字符串中。我希望在像 C# 这样的更健壮的语言中,我可以避免这种技术的丑陋突出显示。有没有办法以编程方式获取字符?

请注意,这必须出现在应用程序的任何文本字段中,因此我无法从文本字段本身获取字符(除非有一种方法可以访问当前处于焦点的文本字段)。

你怎么看?

最佳答案

获取“当前文本框”没有万无一失的方法。任何应用程序都可以推出自己的应用程序,因此您不知道要寻找什么。如果一个应用程序在这些事情上不合作,你就不能真正强制它。好吧,我猜你总是可以 try catch 屏幕截图并尝试对其进行 OCR,但这不太现实。

但是,使用质量不错的小部件工具包(或使用库存控制)编写的应用程序应该支持 Microsoft Active Accessibility ,它确实提供了一种访问该应用程序 UI 的标准化方法——或者更确切地说,是该 UI 的一些抽象 View ,它经过优化以通过屏幕阅读器等工具从中提取信息。听起来像你想要的,除了我不知道有什么方法可以从使用 MSAA 的控件中检索有关选择之前的文本的信息(插入符号只是一个 0 宽度的选择)。

关于c# - 在任何打开的应用程序的文本字段中获取 'word before the cursor' 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2074531/

相关文章:

c# - 从 ffmpeg 标准输出的单个流中获取多个图像

c# - 来自公钥的 RSA 模数和指数

android - 获取 View 文本(按钮)

CSS 停止文本大小调整到最底部

java - 将突出显示文本应用于多个文本行

jquery - 如何获取 jquery 克隆文本框的值?

css - 网站相对于视口(viewport)宽度的定位

javascript - 两个文本框,其中一个包含有限数量的字符,另一个文本框包含剩余的字符

c# - 无法从异步函数启动新的 Intent Activity

c# - 为什么计时器在 Windows 服务中不起作用?