2016-03-22 11 views
-1

次のことを行うコードを実行しました。 FirefoxまたはEndNoteでマウスで選択すると、スクリプトはCtrl + cを送信し、クリップボードで正規表現の一致をチェックします。一致するものがあれば、クリップボードの内容が変更され、ツールチップが表示されます。これらの2つのプログラムでうまく動作します。 Adobe Acrobatでは、Ctrl + cを押すとエラーが表示されることがあります(たとえユーザーがctrl-cを押したとしても、有名な「クリップボードにコピー中にエラーが発生しました」という内部エラーが発生しました)。 F9ホットキーですが、Acrobatのみではなく、すべてのプログラムに有効です。Acrobatでは、どのようにして1つのウィンドウにホットキーを割り当てることができますか?特定。AHK:1つの特定のアクティブウィンドウにのみホットキーを割り当てます。

#If WinActive("ahk_exe firefox.exe") || WinActive("ahk_exe EndNote.exe") || WinActive("ahk_exe Acrobat.exe") 
     if WinActive("ahk_exe Acrobat.exe") 
     F9:: 
     { 
     Clipboard:="" 
     send,^c 
     ClipWait, 1 
     ToolTip % Clipboard := RegExReplace(Clipboard, "\r\n", " ") 
     SetTimer, ToolTipOff, -1000 
     } 
     return 

    ~LButton:: 
     now := A_TickCount 
     while GetKeyState("LButton", "P") 
      continue 
     if (A_TickCount-now > 500) 
     { 
      Send ^c 
      if WinActive("ahk_exe firefox.exe") 
      { 
       If RegExMatch(Clipboard, "[0-9]\.\s[A-Za-z,]*\s[A-Za-z]*") 
       { 
       regex := "[0-9]\.\s*|\s?\([^)]*\)|\." 
       replace := "" 
       } 
       else If RegExMatch(Clipboard,"[0-9]{2}[-\/][0-9]{2}[-\/][0-9]{4}") 
       { 
       Clipboard := RegExReplace(Clipboard, "^0", "") 
       regex := "\/" 
       replace := "." 
       } 
       else return 
      } 
      else if WinActive("ahk_exe EndNote.exe") 
      { 
       If RegExMatch(Clipboard, "[a-z]+\,\s[A-Z0-9‘“]") 
       { 
       regex := "\??!?\:|\?|!" 
       replace := "." 
       } 
       else return 
       } 
      ToolTip % Clipboard := RegExReplace(Clipboard, regex, replace) 
      SetTimer, ToolTipOff, -1000 
     } 
    return 
#If 

ToolTipOff: 
    ToolTip 
return 

答えて

1

私は最初の数行ではいくつかの非常に基本的な問題を参照してください。私に説明してみましょう...
AutoHotkeyをIfにおけるif文と#Ifの2種類があります。 通常は、常に通常の使用01ホットキーを使って何かをしていて、特定のホットキーを状況依存型にしたいのでない限り、-statementsです。
重要なルールは次のとおりです。
普通の式If -statementsは、式が真である場合に実行されるコードの領域をマークするために中括弧{}を使用する必要があります。中括弧を使用しない場合は、If文の直下の最初のコマンドの前後に中括弧を置いたかのように、If文が機能します。
例:

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

もう一つの例:If

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

ノーマル-statementsはだけ、その中に、ホットキーの定義の周りに使用することはできません。これではありません

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

は、これが許可されている

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

しかし、それを回避する方法があり、それは#If -statementsです。
#If -statementsでは中括弧を使用しません。
ホットキーの定義でのみ使用できます。
また、別の#If文でのみ閉じることができます。
(それは単にそれを閉じるために、空の#Ifを使用することは非常に一般的です。)

例:

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

より複雑な例:

#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 

あなたは今では推測しているかもしれませんが、ホットキーの定義は常にhotkey::のようなパターンで開始され、Returnで終了します。ホットキーは1行で定義できますが、 例:

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

ホットキー、それ自体では、中括弧を使用することはありませんか!ホットキー内のIfの記述は、前述の規則に従ってそれらを使用しなければならない。

+0

ありがとうございます。私は今AHKにアクセスできないが、あなたが答えると私は多くの助けになると思う。私がコードに問題があるなら、私は戻ってきます。 – menteith

+0

美しい!より多くのahkersはこれを読む必要があります。 – Blauhirn

関連する問題