AHK: Assign hotkey only for one specific active window and not for others

后端 未结 1 1229
-上瘾入骨i
-上瘾入骨i 2020-12-22 13:04

I have just done a piece of code that does the following thing. When I make a selection by mouse in Firefox or EndNote, the script sents a Ctrl+c and checks the clipboard fo

相关标签:
1条回答
  • 2020-12-22 13:49

    I see some very fundamental problems in the first few lines. Let me explain...
    There are two types of if-statements in AutoHotkey If and #If. You usually always use the normal If-statements unless you are doing something with hotkeys and you want specific hotkeys to be context-sensitive.
    Here are some important rules:
    Normal If-statements have to use curly braces {} to mark the area of code that should be executed if the expression is true. If you don't use curly braces, the If-statement will work as if you had put curly braces around the first command directly under the If-statement.
    Example:

    If WinActive("Firefox") {
        Send, Test
        MsgBox, The script just typed "Test.
    }
    

    Another example:

    If WinActive("Firefox")
        MsgBox, Firefox is the active window.
    

    Normal If-statements cannot be used around a hotkey definition, but only within it.

    This is allowed:

    F1::
        If (A_OSVersion = "WIN_7") {
            MsgBox, Your operating system is Windows 7 and you just pressed F1.
        }
    Return
    

    This is NOT:

    If (A_OSVersion = "WIN_7") {
        F1::
            MsgBox, Your operating system is Windows 7 and you just pressed F1.
        Return
    }
    

    But there is a way around that and that is #If-statements.
    #If-statements don't use curly braces ever.
    They can only be used on hotkey definitions.
    And they can only be closed by another #If-statement.
    (It's very common to simply use an empty #If to close it.)

    Examples:

    #If (A_OSVersion = "WIN_7")
        F1::
            MsgBox, Your operating system is Windows 7 and you just pressed F1.
        Return
    #If
    

    A more complex example:

    #If (A_ScreenWidth >= 1920)
        F1::
            MsgBox, Your your screen is at least 1920 pixels wide.
        Return
        F2::
            MsgBox, Your operating system is %A_OSVersion%.
        Return
    #If (A_ScreenWidth < 1920)
        F1::
            MsgBox, Your your screen width is smaller than 1920 pixels.
        Return
    #If
    

    As you might have guessed by now, hotkey definitions are always started by a pattern like this hotkey:: and closed by a Return. Although you can define hotkeys on a single line. Examples:

    F1::MsgBox, Hello!
    F2::a ;This will remap the F2 key to an a-key. 
    

    Hotkeys by themselves do never use curly braces! Though an If-statement within a hotkey still has to use them according to the before mentioned rules.

    0 讨论(0)
提交回复
热议问题