@Helmut2
Habe das Skript überarbeitet, es funktioniert nun mit Shortcuts für Edge, FireFox und Chrome, ist zwar etwas langsamer aber funktioniert dafür auch mit portable Versionen.
Damit während des Öffnen/Senden nicht der Fokus verloren geht, falls du aus Versehen die linke Maustaste drückst, habe ich die linke Maustaste für die Dauer des Vorgangs deaktiviert. Falls etwas schiefläuft, kannst du das Skript mit F4 beenden dann funktioniert die linke Maustaste wieder.
Das Skript funktioniert wie das vorherige, müsstest noch die Pfade anpassen und ich habe es auch so gemacht, das du z. B. FireFox mehrmals öffnen kannst, so lang die Pfade unterschiedlich sind, das sollte mit allen portable Versionen funktionieren.
Falls du andere Browser außer Edge, FireFox oder Chrome verwenden möchtest, überprüfe vorher, ob die Tastenkombinationen Strg+L (Fokus Adressleiste) und Strg+T (neuer Tab) funktionieren, ansonsten kannst du den Browser nicht mit diesem Skript verwenden.
Das kannst du zum Testen in Scribble Papers kopieren.
Code: Select all
https://www.autohotkey.com ||FireFox1|| Ab hier kann weiterer Text stehen.
https://ahkde.github.io/docs/v2/ ||FireFox2||
https://www.autohotkey.com/boards/viewtopic.php?f=9&t=127756 ||FireFox3||
https://www.t-online.de ||FireFox4||
https://ahkde.github.io/docs/v2/ ||Edge||
https://www.autohotkey.com/ ||Chrome||
Code: Select all
#Requires AutoHotkey 2.0
#SingleInstance
F4::ExitApp
SetTimer(ScribblePapers, 50)
Hotkey("LButton", (*)=> false, "off")
ScribblePapers() {
static WinTitle := "ahk_exe ScPapers.exe"
, Control := "TRxRichEdit1"
, Browser := { Edge:"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe",
Chrome:"C:\Program Files\Google\Chrome\Application\chrome.exe",
FireFox1:"I:\PortableApps\FirefoxPortable\App\Firefox\firefox.exe",
FireFox2:"E:\FirefoxPortable\App\Firefox\firefox.exe",
FireFox3:"I:\PortableApps\FirefoxPortable\App\Firefox\firefox.exe",
FireFox4:"E:\FirefoxPortable\App\Firefox\firefox.exe"}
, Limit := 10 ; Limit in s für WinWait/Activ
, Wait := 100 ; Sleep-Dauer nach SendInput in ms
, LineMin := 20, LineMax := 500
, LButtonDown := false
, CURSORINFO := Buffer(16 + A_PtrSize, 0)
, wParam := Buffer(4), lParam := Buffer(4)
if WinActive(WinTitle) {
MouseGetPos ,,, &OutputVarControl
if GetKeyState("LButton", "P") && !LButtonDown && OutputVarControl = Control { ; Wenn Cursor im Edit-Fenster und LButton gedrückt.
LButtonDown := true
NumPut("UInt", CURSORINFO.Size, CURSORINFO), DllCall("GetCursorInfo", "Ptr", CURSORINFO)
if NumGet(CURSORINFO, 8, "Ptr") > 100000 { ; Wenn Cursor-Typ Pfeil rechts oben. (vermutlich)
Hotkey("LButton", "on") , SetTimer(Timer.Bind(&LButton), -500) ; Deaktiviert LButton für 500ms, verhindert versehentliche Mehrfachauswahl durch Doppelklicks.
Timer(&LButton){
Hotkey("LButton", "off")
LButton := false
}
SendMessage(0xB0, wParam, lParam, Control, WinTitle) ; EM_GETSEL - Fragt die Anfangs- und Endposition der Auswahl ab.
if (l := NumGet(lParam, "UInt") - w := NumGet(wParam, "UInt")) > LineMin && l-w < LineMax { ; Wenn etwas makiert ist, dass größer als LineMin und kleiner als LineMax ist. LineMin sollte min 1 sein.
Text := EditGetLine(EditGetCurrentLine(Control, WinTitle), Control, WinTitle)
if InStr(Text, "http") = 1 && Pos2 := InStr(Text, "||",,, 2) { ; Wenn Zeile mit "http" beginnt und 2x2 Senkrechtstriche als Separatoren enthält.
Text := SubStr(Text, 1, Pos2-1) ; Ermittelt Link und Browsername.
Pos1 := InStr(Text, "||")
Link := SubStr(Text, 1, Pos1-1)
Name := SubStr(Text, Pos1+2, Pos1-1)
Sleep(100), ControlSend("{Home}", Control, WinTitle) ; Hebt die Auswahl auf.
if !Browser.HasOwnProp(Name) ; Wenn Browsername nicht bekannt
MsgBox("Browser `"" Name " `"unbekannt.",, 262160), ExitApp()
if !FileExist(Browser.%Name%) ; Wenn Browserpfad nicht existiert.
MsgBox("Pfad existiert nicht. `n`n" "`"" Browser.%Name% "`"",, 262160), ExitApp()
ClipSaved := ClipboardAll() ; Sichert Inhalt des Clipboards
A_Clipboard := "", A_Clipboard := Link, ClipWait(2)
Loop ; Wartet bis SetTimer beendet ist. (500ms)
if !(LButton ?? true)
break
Hotkey("LButton", "on") ; Deaktiviert LButton.
if !WinExist("ahk_exe" Browser.%Name%) { ; Wenn Browser nicht geöffnet.
Run(Browser.%Name%)
if !WinWait("ahk_exe" Browser.%Name%,, Limit)
MsgBox("WinWait: Zeitlimit für `"" Name "`" überschritten",, 262160), ExitApp()
if !WinWaitActive("ahk_exe" Browser.%Name%,, Limit)
MsgBox("WinWaitActive: Zeitlimit für `"" Name "`" überschritten",, 262160), ExitApp()
} else { ; Wenn Browser bereits geöffnet.
WinActivate("ahk_exe" Browser.%Name%)
if !WinWaitActive("ahk_exe" Browser.%Name%,, Limit)
MsgBox("WinWaitActive: Zeitlimit für `"" Name "`" überschritten",, 262160), ExitApp()
Sleep(Wait)
SendInput("^t") ; neuer Tab
}
Sleep(Wait)
SendInput("^l"), Sleep(Wait) ; Fokus auf Adressleiste
SendInput("^v"), Sleep(Wait) ; paste
SendInput("{Enter}")
A_Clipboard := "", A_Clipboard := ClipSaved, ClipWait(2), ClipSaved := "" ; Clipboard wiederherstellen
WinActivate(WinTitle) ; Gibt den Fokus zurück zu Scribble Papers.
if !WinWaitActive(WinTitle,, Limit)
MsgBox("WinWaitActive: Zeitlimit für `"" WinTitle "`" überschritten",, 262160), ExitApp()
Hotkey("LButton", "off") ; Aktiviert LButton.
}
}
}
}
else
if LButtonDown && !GetKeyState("LButton", "P")
LButtonDown := false
}
}