2017-08-17 116 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

相關問題