2016-03-22 4 views
-1

Ich habe gerade ein Stück Code gemacht, der die folgende Sache macht. Wenn ich in Firefox oder EndNote eine Maus auswähle, zeigt das Skript Strg + c an und überprüft die Zwischenablage auf eine Übereinstimmung mit dem regulären Ausdruck. Wenn es eine Übereinstimmung gibt, wird der Inhalt der Zwischenablage geändert und eine QuickInfo angezeigt. Es funktioniert gut für diese beiden Programme. Adobe Acrobat zeigt manchmal einen Fehler an, wenn eine Strg + c gesendet wird (selbst wenn ein Benutzer eine Strg-Taste drückt) Acrobat zeigt manchmal "Beim Kopieren in die Zwischenablage ist ein Fehler aufgetreten. Ein interner Fehler ist aufgetreten F9 Hotkey, aber es funktioniert für alle Programme und nicht nur für Acrobat.Wie ordne ich einen Hotkey für nur ein Fenster - Acrobat? Hier ist mein Code.Ich weiß, es ist lahm - Ich bin ein Neuling für die Programmierung im Allgemeinen und in AHK in besonderen.AHK: Hotkey nur für ein bestimmtes aktives Fenster zuweisen und nicht für andere

#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 

Antwort

1

sehe ich einige sehr grundlegende Probleme in den ersten Zeilen. Lassen Sie mich erklären ...
Es gibt zwei Arten von if-Anweisungen in AutoHotkey If und #If. Sie in der Regel immer die normale Verwendung If - Anweisungen, sofern Sie nicht etwas mit Hotkeys machen und bestimmte Hotkeys kontextsensitiv sein sollen.
Hier sind einige wichtige Regeln:
Normal If -Statements müssen geschweifte Klammern {} verwenden, um den Codebereich zu markieren, der ausgeführt werden soll, wenn der Ausdruck wahr ist. Wenn Sie keine geschweiften Klammern verwenden, funktioniert die If-Anweisung so, als hätten Sie geschweifte Klammern um den ersten Befehl direkt unter der If-Anweisung platziert.
Beispiel:

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

Ein weiteres Beispiel:

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

Normale If -Aussagen können nicht um eine Hotkey-Definition verwendet werden, aber in ihm nur.

Dies erlaubt:

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

Dies ist NICHT:

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

Aber es gibt einen Weg, um das und das ist #If -Aussagen.
#If -Statements verwenden keine geschweiften Klammern jemals.
Sie können nur für Hotkey-Definitionen verwendet werden.
Und sie können nur durch eine andere #If-Anweisung geschlossen werden.
(Es ist sehr üblich, einfach eine leere #If verwenden um es zu schließen.)

Beispiele:

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

Ein komplexeres Beispiel:

#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 

Wie Sie schon erraten haben könnte, Hotkey-Definitionen werden immer durch ein Muster wie dieses hotkey:: gestartet und durch ein Return geschlossen. Sie können zwar Hotkeys in einer einzigen Zeile definieren. Beispiele:

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

Hotkeys selbst noch nie geschweiften Klammern verwenden! Obwohl eine If -Anweisung innerhalb eines Hotkeys sie immer noch nach den oben genannten Regeln verwenden muss.

+0

Vielen Dank. Ich habe momentan keinen Zugang zu AHK, aber ich denke, du antwortest mir sehr. Ich werde zurückkommen, wenn ich ein Problem mit dem Code habe. – menteith

+0

schön! mehr ahkers sollten das lesen. – Blauhirn