2017-08-17 121 views
1

我希望能够根据文本插入符号是否在文本框中来做不同的事情。检查文本插入符号是否在AutoHotkey中的文本框中

例如,如果插入符号位于文本框中,则退格键将按正常方式运行;但如果不是,那么退格键会映射到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 
    } 
} 

有2个问题,用这种方法:首先,如果文本插入符号在文本框中的开始,它不会工作(因为没有要突出显示的字符)。其次,你可以看到插入符号移动并突出显示左边的字符。

是否有方法检查插入符号是否集中在文本框没有影响用户看到的内容?

+0

,我想收回我的downvote。只需编辑你的问题,这样系统就可以让我改变我的投票。 – miroxlav

回答

-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窗体技术及其TextBox(WindowsForms10.EDIT.app.0.35533901)。对于其他人,则需要不同的文本框类添加到条件
  • 这只是起草说明如何进行测试,但它应该给基于由@Oleg后来发现这个想法
+0

然后我们再次出发,这不适用于Chrome。 – Oleg

+0

@Oleg - 你是什么意思的“再次?”。我使用除Chrome以外的所有浏览器,因此无法对其进行测试。 :)由于一些不连贯的GUI实现,Chrome会返回空'变量'吗?我预计Chrome等浏览器将遵循标准。 Chrome的结果是什么?谢谢。 – miroxlav

+0

我的意思是我们前几天在[this](https://stackoverflow.com/questions/45651087/autohotkey-conflict-between-functions-using-the-same-key)的问题,这个问题以我告诉你的代码开始将不起作用;)。 Chrome不使用Windows控制台。所有的铬都是一个控件。 – Oleg

相关问题