【问题标题】:Check if text caret is in a text box in AutoHotkey检查文本插入符号是否在 AutoHotkey 的文本框中
【发布时间】:2017-08-17 08:34:23
【问题描述】:

我希望能够根据文本插入符号是否在文本框中执行不同的操作。

例如,如果插入符号在文本框中,则退格键正常工作;但如果不是,则退格键映射到 Alt+Left(Chrome 中的上一页)。

我能想到的代码如下:

IsInTextBox()
{
    clipboardCache := Clipboard
    Clipboard :=

    ; Try to highlight the character to the left, if something gets highlighted, then we are definitely in a text box.
    Send, +{Left}^c{Right}
    ClipWait, 0.1
    If (Clipboard = "")
    {
        Clipboard := clipboardCache
        Return False
    }
    Else
    {
        Clipboard := clipboardCache
        Return True
    }
}

此方法有两个问题:首先,如果文本插入符号位于文本框的开头,它将不起作用(因为左侧没有要突出显示的字符)。其次,您可以看到插入符号四处移动并突出显示左侧的字符。

有没有办法检查插入符号是否聚焦在文本框上不影响用户看到的内容?

【问题讨论】:

  • 根据@Oleg 后来的发现,我想撤回我的反对票。只需编辑您的问题,以便系统允许我更改投票。

标签: screen-scraping autohotkey caret


【解决方案1】:

有一个comment regarding Chrome 表示在 Chrome 中无法使用标准检测方式,因为它没有经典窗口。 因此,Chrome 中的标准 AHK 方式无法实现您想要实现的目标。也许你可以通过编写一个 Chrome 插件来取得成功,但我认为这是更大的里程数。


在其他浏览器中,您应该使用我最初写的这个答案成功:

AutoHotKey 论坛有一个answer

BackSpace::
    ControlGetFocus, variable, A,
    if  variable = WindowsForms10.EDIT.app.0.35533901
    {
         ;processing when text box was focused,
    }
    ; add "Else" clause here if you need
    return

这向您展示了检测文本框的方法,但是:

  • 只有某些应用程序使用 Windows 窗体技术及其文本框 (WindowsForms10.EDIT.app.0.35533901)。对于其他人,您需要将不同的文本框类添加到条件中
  • 这只是展示如何测试它的草稿,但它应该给出想法

【讨论】:

  • @Oleg – “再次”是什么意思。我使用除 Chrome 以外的所有浏览器,因此无法对其进行测试。 :) 由于一些不连贯的 GUI 实现,Chrome 会返回空的 variable 吗?我希望像 Chrome 这样的浏览器会遵守标准。 Chrome 的结果是什么?谢谢。
  • 我的意思是我们几天前在this 问题中的互动,这个问题始于我告诉你你的代码不起作用;)。 Chrome 不使用 Windows 控件。所有的 chrome 都是一个控件。
  • ControlGetFocus, variable, A 在 chrome 是活动窗口时总是不返回任何内容。
  • @Oleg - 感谢您的意见。赞赏。我更新了答案。
猜你喜欢
  • 1970-01-01
  • 2011-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-06
  • 2013-01-07
  • 1970-01-01
  • 2016-09-28
相关资源
最近更新 更多