Page 2 of 3
Re: Link mit verschiedenen Browsern öffnen
Posted: 29 Mar 2024, 06:49
by Helmut2
@Noitalommi_2
ich habe dein Programm ausprobiert, bin aber nur bis zur folgenden Messagebox gekommen:
"WinWait:Zeitlimit fur "Firefox1" überschritten".
Linke Maustaste ging nicht mehr, aber mit F4 wie beschrieben konnte ich abbrechen.
Ich habe dann folgende Änderungen vorgenommen:
"sleep 1000" eingefügt 500 hat definitiv nicht gereicht
und die 12 Zeilen außer Kraft gesetzt.
Danach funktionierte das Programm sehr gut.
Muß ich allerdings noch im "Alltagsbetrieb" testen.
Das mit dem deaktivieren Linksklick ist auch gut!
@Noitalommi_2 und @KHA
Falls Du oder KHA es schaffen würdet hier die "Direktklickaktion" aus dem Post 11 einzubauen,
wäre dass das Nonplusultra*
Auf jeden Fall euch beiden vielen vielen Dank.
Gruß
Helmut
Code: Select all
if !WinExist("ahk_exe" Browser.%Name%) { ; Wenn Browser nicht geöffnet.
Run(Browser.%Name%)
sleep 1000 ;Wartezeit eingefügt (weiß nicht ob mein Rechner so langsam ist?
; 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("^t"), Sleep(Wait) ; Fokus auf Adressleiste
Re: Link mit verschiedenen Browsern öffnen
Posted: 29 Mar 2024, 13:18
by Noitalommi_2
@Helmut2
Der WinWait-Fehler kommt wenn der Browser zu lang benötig um zu starten, dachte eigentlich, dass 10 Sekunden ausreichend sein sollten.
Dieses Limit kannst du erhöhen, in dem du in der Zeile, , Limit := 10 ; Limit in s für WinWait/Activ den Wert erhöhst, kannst ja mal 20 oder 30 Sekunden ausprobieren.
Und ich glaube, man kann es vielleicht sogar so machen, dass man wie gewöhnlich auf den Hyperlink klickt, damit das Skript den entsprechenden Browser öffnet.
Werd's mir auf jeden Fall noch einmal angucken wenn ich die Zeit dazu habe. Morgen oder Übermorgen.
Re: Link mit verschiedenen Browsern öffnen
Posted: 30 Mar 2024, 12:30
by Noitalommi_2
@Helmut2
Hab's jetzt so gemacht, dass man auf den Hyperlink klickt und sich dann der jeweilige Browser öffnet und wenn kein Browser angegeben wurde, öffnet sich stattdessen der Standardbrowser.
Das WinWait-Limit habe ich entfernt und die Sleep-Dauer nach Tastendrücken leicht erhöht.
Hier was zum Reinkopieren und Testen:
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||
https://www.autohotkey.com/ Öffnet mit Standardbrowser.
Öffnet mit Standardbrowser. https://www.autohotkey.com/
Und hier das Skript: (Pfade überprüfen!)
Code: Select all
#Requires AutoHotkey 2.0
#SingleInstance
;F1::ListLines
F4::ExitApp
SetTimer(ScribblePapers, 50)
Hotkey("LButton", (*)=> false, "off") ; erstellt Hotkey LButton
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"}
, Wait := 250 ; Sleep-Dauer nach SendInput in ms
, LineMin := 20, LineMax := 500 ; erlaubte Zeilenlänge, min 20 Zeichen max 500 Zeichen
, LButton := false
, wParam := Buffer(4), lParam := Buffer(4)
MouseGetPos ,,, &OutputVarControl
; Wenn ScribblePapers-Fenster aktiv, Cursor über RichEdit-Fenster, Cursor-Art nicht Standard und Hotkey LButton nicht aktiv.
if WinActive(WinTitle) && OutputVarControl = Control && A_Cursor = "Unknown" && !LButton {
Hotkey("LButton", "on"), LButton := true ; deaktiviert linke Maustaste
ControlGetPos &OutX,,,, Control, WinTitle ; Ermittelt X-Posisiton des RichEdit-Fensters.
if ClickWait() { ; ruft ClickWait-Funktion auf
MouseGetPos &OutputVarX, &OutputVarY
MouseClick ,OutX+10, OutputVarY ; Klickt auf die leere Spalte vor der Zeile, um die komplette Zeile zu markieren.
MouseMove OutputVarX, OutputVarY ; Cursor zurück zur ursprünglichen Position.
Sleep 100
SendMessage(0xB0, wParam, lParam, Control, WinTitle) ; EM_GETSEL - Fragt die Anfangs- und Endposition der Auswahl ab.
; Wenn etwas makiert ist, dass größer als LineMin und kleiner als LineMax ist. LineMin sollte min 1 sein.
if (l := NumGet(lParam, "UInt") - w := NumGet(wParam, "UInt")) > LineMin && l-w < LineMax {
Text := EditGetLine(EditGetCurrentLine(Control, WinTitle), Control, WinTitle)
ControlSend("{Home}", 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)
if !Browser.HasOwnProp(Name) ; Wenn Browsername nicht bekannt
Hotkey("LButton", "off"), MsgBox("Browser `"" Name " `"unbekannt.",, 262160), ExitApp()
if !FileExist(Browser.%Name%) ; Wenn Browserpfad nicht existiert.
Hotkey("LButton", "off"), MsgBox("Pfad existiert nicht. `n`n" "`"" Browser.%Name% "`"",, 262160), ExitApp()
ClipSaved := ClipboardAll() ; Sichert Inhalt des Clipboards
A_Clipboard := "", A_Clipboard := Link, ClipWait(2)
if !WinExist("ahk_exe" Browser.%Name%) { ; Wenn Browser nicht geöffnet.
Run(Browser.%Name%)
WinWait("ahk_exe" Browser.%Name%)
WinWaitActive("ahk_exe" Browser.%Name%)
} else { ; Wenn Browser bereits geöffnet.
WinActivate("ahk_exe" Browser.%Name%)
WinWaitActive("ahk_exe" Browser.%Name%)
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.
WinWaitActive(WinTitle)
}
else { ; Wenn Zeile nicht mit "http" beginnt und nicht 2x2 Senkrechtstriche als Separatoren enthält.
Click() ; Klickt Hyperlink
WinWaitActive("A")
WinActivate(WinTitle)
WinWaitActive(WinTitle)
}
}
}
}
else if LButton
Hotkey("LButton", "off"), LButton := false
ClickWait() { ; Wartet darauf, dass die linke Maustaste physisch gedrückt wird.
while A_Cursor = "Unknown" && OutputVarControl = Control { ; Cursor-Art nicht Standard und Cursor über RichEdit-Fenster.
Sleep 50
MouseGetPos ,,, &OutputVarControl
if GetKeyState("LButton", "P") {
return 1
}
}
return 0
}
}
Re: Link mit verschiedenen Browsern öffnen
Posted: 30 Mar 2024, 14:00
by Helmut2
@Noitalommi_2
zu deiner Frage vom 29.03.2024
Ich kann das Limit einstellen wie ich will,
der Browser ist innerhalb von kürzester Zeit aufgerufen und steht wie festgefroren.(F4 hilft)
zu deinem Post von heute 30.03.2024
Der Browser ist innerhalb von kürzester Zeit aufgerufen und steht wie festgefroren.(F4 hilft)
Wenn ich eine Wartezeit einbaue (Sleep 1000 wie schon in meiner Antwort vom 29.03.2024 geschrieben)
und die beiden folgenden Zeilen außer Kraft setze, läuft das Programm, mit deinen Beispielen, wie geschnitten Brot!
Code: Select all
if !WinExist("ahk_exe" Browser.%Name%) {
Run(Browser.%Name%)
Sleep 1000 ;Wartezeit eingefügt - ohne geht das Programm nicht
;WinWait("ahk_exe" Browser.%Name%) ; deaktiviert
;WinWaitActive("ahk_exe" Browser.%Name%) ;deaktiviert
Ich muß das nochmal im Alltagstest probieren.
Falls Du noch die Muße hast, könntest Du das Programm noch einmal so schön kommentieren wie in dem Post vom 26.03.2024
Ich wünsche Dir und allen Mitlesern und Helfern in diesem Forum Frohe Ostern
Gruß
Helmut
Re: Link mit verschiedenen Browsern öffnen
Posted: 30 Mar 2024, 15:37
by Noitalommi_2
@Helmut2
Ich würde gern zuvor herausfinden, weshalb WinWait bei dir nicht wie gewollt funktioniert.
Kannst du bitte einmal dieses Skript mit deinem FireFox-Pfad ausprobieren und mir dann sagen, bis zu welcher MsgBox du mit F1 und F2 kommst?
Code: Select all
#Requires AutoHotkey 2.0
#SingleInstance
Pfad := "E:\FirefoxPortable\App\Firefox\firefox.exe"
F1::{
Run(Pfad)
MsgBox "Run `n" Pfad
WinWait("ahk_exe" Pfad)
MsgBox "WinWait"
WinWaitActive("ahk_exe" Pfad)
MsgBox "WinWaitActive"
}
F2::{
Run(Pfad)
MsgBox "Run `n" Pfad
WinWaitActive("ahk_exe" Pfad)
MsgBox "WinWaitActive"
}
Re: Link mit verschiedenen Browsern öffnen
Posted: 31 Mar 2024, 01:24
by Helmut2
@Noitalommi_2
F1
Browser öffnet sich
Messagebox ist im Hintergrund
Messagebox bestätige ich mit OK
Browser steht und weiter passiert nichts
Schließe ich den Browser und versuche nochmal F1
passiert nichts
Gleiche Prozedur bei F2
Erst wenn ich das Makro schließe und neu starte kann ich wieder
F1 und F2, mit dem Ergebnis siehe oben, durchlaufen.
Ich habe danach noch einmal auf die Version Autohotkey 2.0.12 upgedatet,
aber gleiches Ergebnis
- Noitalommi_2_Test_WinWait_F1.jpg (18.27 KiB) Viewed 822 times
- Noitalommi_2_Test_WinWait_F2.jpg (17.57 KiB) Viewed 822 times
Deine Beispiellinks funktionieren auch mit der AHK 2.0.12 super!
Wie gesagt ich muß das noch mal im Alltagstest ausprobieren
Wenn alles genauso gut funktioniert, bin ich sehr zufrieden, auch ohne WinWait
Gruß
Helmut
Re: Link mit verschiedenen Browsern öffnen
Posted: 31 Mar 2024, 03:41
by just me
Moin @Helmut2,
lass doch bitte das Skript mit Run D:\Programme\Firefox_PremiumSize\Firefox_PremiumSize.exe noch mal laufen und schau Dir das geöffnete Browserfenster mit dem 'AutoHotkey Window Spy' (zu finden im Startmenü oder im Kontextmenü des Skripts in der Taskleiste) an. Was steht da zu Title und ahk_exe?
Verbergen sich hinter den 'verschiedenen' Firefoxen vielleicht nur Verknüpfungen/Links?
Re: Link mit verschiedenen Browsern öffnen
Posted: 31 Mar 2024, 04:18
by Noitalommi_2
Frohe Ostern.
@just me
Gute Idee, könnte nämlich sein, dass "Firefox_Premiumize.exe" nur ein Prozess ist, der den Browser startet aber nicht selbst der Browser, bzw. das Fenster, ist.
@Helmut2
Habe das zuletzt gepostete
Skript kommentiert.
Re: Link mit verschiedenen Browsern öffnen
Posted: 31 Mar 2024, 05:54
by Helmut2
Hallo zusammen,
ich möchte Euch eigentlich nicht dauerbeschäftigen und bekomme mittlerweile ein schlechtes Gewissen.
@just me
Die Firefox sind jeweils einzeln für sich in verschiedenen Ordnern, incl. allem Zubehör (Profile, adblocker usw.)
und habe als Ordnergröße zwischen 350MB - 500MB - je nach Konfiguration
@Noitalommi_2
Danke für das Kommentieren.
Für einen ungeübten ist das eine große Hilfe
Ich habe jetzt das Testprogramm von gestern (F1+F2) noch einmal gestartet und WindowsSpy auf die Messagebox und auf den
Browser gesetzt.
- Curser_steht_auf_der_Messagebox1.jpg (69.55 KiB) Viewed 798 times
- Curser_steht_auf_Browser1.jpg (67.38 KiB) Viewed 798 times
Gruß
Helmut
Re: Link mit verschiedenen Browsern öffnen
Posted: 31 Mar 2024, 08:41
by Noitalommi_2
Ah ok, "Firefox_Premiumize.exe" starte den Browser, weil WindowSpy sagt "ahk_exe firefox.exe".
@Helmut2
Die Sache ist jetzt die, du hast vier verschiedene FireFox-Browser und damit das Skript da unterscheiden kann, welcher Browser offen und wohin mit dem Link, musst du den Pfad zur jeweiligen "firefox.exe" angeben und nicht den Pfad zur "Firefox_Premiumize.exe".
Also aus deinen vier unterschiedlichen FireFox-Ordnern musst du jeweils den Pfad der "firefox.exe" im Skript angeben.
Re: Link mit verschiedenen Browsern öffnen
Posted: 31 Mar 2024, 13:52
by Helmut2
@Noitalommi_2
ich habe jetzt die ganze Zeit probiert und probiert.
Wenn ich den "Direktlink" z.B. zu meinem Browser D:\Programme\Firefox_ESR\Firefox\Firefox.exe in deinem Testprogramm F1+F2 einstelle,
dann läuft es durch. WindowsSpy zeigt aber auch "ahk_exe firefox.exe" an.
- Direktlink.jpg (156.75 KiB) Viewed 780 times
Wenn ich den "Loaderlink" zum gleichen Browser D:\Programme\Firefox_Ebay\Firefox_Ebay.exe in deinem Testprogramm einstelle
dann bleibe ich gleich nach der ersten Messagebox wie in dem Post weiter oben hängen. Die Anzeige hat auch "ahk_exe firefox.exe"
- Curser_steht_auf_dem_Browser_Loader1.jpg (75.89 KiB) Viewed 780 times
Also Schuld hat der Loader, oder mit dem was er auslöst.
Wenn ich den Loader starte oder den Direktlink verhält sich der Browser auch anders und schreibt ein neues Profil auf Laufwerk C.
Das war auch der Grund warum ich einen Loader eingesetzt habe.
Im Loader steht eigendlich nur:
start "" D:\Programme\Firefox_Ebay\Firefox\firefox.exe -profile D:\Programme\Firefox_Ebay\profile
Ich werde mal versuchen, ob ich die Direktpfade hinbekomme und die Profilzuordnung auch nach Updates noch funktioniert und
auf Laufwerk C, außer Temporär, nichts geschrieben wird.
Gruß
Helmut
Re: Link mit verschiedenen Browsern öffnen
Posted: 01 Apr 2024, 02:54
by Noitalommi_2
@Helmut2
Hat jeder Loader einen eigenen Browser?
z.B.:
"D:\Programme\Firefox_Ebay\Firefox_Ebay.exe" ist der Loader für "D:\Programme\Firefox_Ebay\Firefox\firefox.exe" ?
Falls ja, dann probiere doch bitte einmal das folgende Skript aus und sag mir ob die MsgBox erscheint.
(Vorher den Browser schließen, falls er bereits geöffnet ist.)
Code: Select all
#Requires AutoHotkey 2.0
#SingleInstance
Loader: "D:\Programme\Firefox_Ebay\Firefox_Ebay.exe"
Browser: "D:\Programme\Firefox_Ebay\Firefox\firefox.exe"
F1::{
Run(Loader)
WinWait("ahk_exe" Browser)
WinWaitActive("ahk_exe" Browser)
MsgBox "Erfolg"
}
Re: Link mit verschiedenen Browsern öffnen
Posted: 01 Apr 2024, 03:08
by just me
Moin,
es sieht so aus, dass Deine Firefoxe unterschiedliche Einstellungen haben sollen. Das heißt für mich, Du achtest selbst darauf, dass immer nur eine Instanz läuft, oder die Startparameter - wie z.b.
-Profile - erzeugen automatisch verschiedene Instanzen. Dir bleibt deshalb - wie Du ja auch ursprünglich versucht hast - die Möglichkeit, die
PID aus dem
Run-Kommando zu nutzen. Das sollte dann aber eher so aussehen:
Code: Select all
Run 'D:\Programme\Firefox_Ebay\Firefox\firefox.exe -profile "D:\Programme\Firefox_Ebay\profile"', , , &PID ; aktuelle pid Nummer von Firefo
If WinWaitActive("ahk_class MozillaWindowClass ahk_pid " PID, ,1) ; class Nummer und Firefox pid müssen vorhanden sein
...
Andererseits soll die Warterei nur dafür sorgen, dass das Fenster aktiv ist, wenn die URL gesendet wird. Die kannst Du allerdings gleich mitgeben:
Code: Select all
Run 'D:\Programme\Firefox_Ebay\Firefox\firefox.exe -profile "D:\Programme\Firefox_Ebay\profile" -url ' UrlAusScribble
Re: Link mit verschiedenen Browsern öffnen
Posted: 01 Apr 2024, 06:20
by Helmut2
Hallo zusammen,
mal kurz der Reihe nach:
Ich habe die beiden ".inis", die Firefox auf Laufwerk C schreibt, bearbeitet, so das ich die Direktlinks einsetzen konnte.
Dann funktioniert das Programm von Noitalommi_2, allerdings werden dann, wenn ich Links mit einem Browser öffne, nicht einzeln sondern als Tabs geöffnet.
Außerdem meine ich, wenn ein großes Update kommt sind meine Einzelprofile wieder durcheinander. Also habe ich wieder zurückgeändert.
@Noitalommi_2
zu deinen Fragen heute:
Ja, jeder Browser hat seinen eigenen Loader und ich kann alle Browser gleichzeitig aufhaben und habe jeweils für den Browser der seinen Zweck erfüllen soll
alle Zugriffe. Sie arbeiten unabhängig voneinander (hmm hört sich komisch an, aber ich hoffe Du weißt was ich meine)
Dein Testprogramm lief zuerst nicht und habe den Fehler auf Laufwerk C gesucht (bei meinen inis),
bis ich gemerkt habe, dass es in deinem Programm bestimmt Loader und Browser mit := heißen muß.
Dann kam das Ergebnis:
- Noitalommi_2_Test_Loader_Browser_Erfolg.jpg (5.41 KiB) Viewed 743 times
Das Programm habe ich auch noch mit einem 2 Firefox ausprobiert - hat auch funktioniert
@justme
Ja, meine Firefoxe haben alle unterschiedliche Einstellungen und können alle gleichzeitig arbeiten ohne sich zu behindern.
Nur noch mal für mein Verständnis, dein verbesserter Programmcode bezieht sich auf mein Post vom 24.03.2024 hinter dem Spoiler?
@Noitalommi_2
Beim Testen ist mir noch aufgefallen, selbst wenn ich ScribblePapers nicht geöffnet habe, das ich beim Betätigen vom "Windowsfeld" und "Suchenfeld"
immer eine Fehlermeldung bekomme.
- Fehlermeldung_suchen_1.jpg (32.69 KiB) Viewed 743 times
Gruß
Helmut
Re: Link mit verschiedenen Browsern öffnen
Posted: 01 Apr 2024, 07:26
by Noitalommi_2
@Helmut2
Hab's jetzt so gemacht, dass sich der Browser immer in einem neuen Fenster öffnet und dass das Skript den Loader startet aber auf den Browser wartet.
Ich habe die Pfade für den Firefox_Ebay-Browser (Loader/Browser) bereits eingetragen, die anderen musst du dann noch nach dem gleichen Prinzip einfügen. Hoffe es funktioniert so, kann es nämlich nicht testen.
Code: Select all
#Requires AutoHotkey 2.0
#SingleInstance
;F1::ListLines
F4::ExitApp
SetTimer(ScribblePapers, 50)
Hotkey("LButton", (*)=> false, "off") ; erstellt Hotkey LButton
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:"D:\Programme\Firefox_Ebay\Firefox\firefox.exe", ; Pfad des Browsers FireFox1
FireFox2:"",
FireFox3:"",
FireFox4:""}
, Loader := { FireFox1:"D:\Programme\Firefox_Ebay\Firefox_Ebay.exe", ; Pfad des Loaders für Browser FireFox1
FireFox2:"",
FireFox3:"",
FireFox4:""}
, Wait := 250 ; Sleep-Dauer nach SendInput in ms
, LineMin := 20, LineMax := 500 ; erlaubte Zeilenlänge, min 20 Zeichen max 500 Zeichen
, LButton := false
, wParam := Buffer(4), lParam := Buffer(4)
MouseGetPos &OutputVarX, &OutputVarY, &OutputVarWin, &OutputVarControl
; Wenn ScribblePapers-Fenster aktiv, Cursor über RichEdit-Fenster, Cursor-Art nicht Standard und Hotkey LButton nicht aktiv.
if WinActive(WinTitle) && OutputVarControl = Control && A_Cursor = "Unknown" && !LButton {
Hotkey("LButton", "on"), LButton := true ; deaktiviert linke Maustaste
ControlGetPos &OutX,,,, Control, WinTitle ; Ermittelt X-Posisiton des RichEdit-Fensters.
if ClickWait() { ; ruft ClickWait-Funktion auf
MouseGetPos &OutputVarX, &OutputVarY
MouseClick ,OutX+10, OutputVarY ; Klickt auf die leere Spalte vor der Zeile, um die komplette Zeile zu markieren.
MouseMove OutputVarX, OutputVarY ; Cursor zurück zur ursprünglichen Position.
Sleep 100
SendMessage(0xB0, wParam, lParam, Control, WinTitle) ; EM_GETSEL - Fragt die Anfangs- und Endposition der Auswahl ab.
; Wenn etwas makiert ist, dass größer als LineMin und kleiner als LineMax ist. LineMin sollte min 1 sein.
if (l := NumGet(lParam, "UInt") - w := NumGet(wParam, "UInt")) > LineMin && l-w < LineMax {
Text := EditGetLine(EditGetCurrentLine(Control, WinTitle), Control, WinTitle)
ControlSend("{Home}", 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)
if !Browser.HasOwnProp(Name) ; Wenn Browsername nicht bekannt
Hotkey("LButton", "off"), MsgBox("Browser `"" Name " `"unbekannt.",, 262160), ExitApp()
if !FileExist(Browser.%Name%) ; Wenn Browserpfad nicht existiert.
Hotkey("LButton", "off"), MsgBox("Browserpfad existiert nicht. `n`n" "`"" Browser.%Name% "`"",, 262160), ExitApp()
ClipSaved := ClipboardAll() ; Sichert Inhalt des Clipboards
A_Clipboard := "", A_Clipboard := Link, ClipWait(2)
Run(Loader.HasOwnProp(Name) ? Loader.%Name% : Browser.%Name%)
WinWait("ahk_exe" Browser.%Name%)
WinWaitActive("ahk_exe" Browser.%Name%)
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.
WinWaitActive(WinTitle)
}
else { ; Wenn Zeile nicht mit "http" beginnt und nicht 2x2 Senkrechtstriche als Separatoren enthält.
Click() ; Klickt Hyperlink
WinWaitActive("A")
WinActivate(WinTitle)
WinWaitActive(WinTitle)
}
}
}
}
else if LButton
Hotkey("LButton", "off"), LButton := false
ClickWait() { ; Wartet darauf, dass die linke Maustaste physisch gedrückt wird.
while A_Cursor = "Unknown" && OutputVarControl = Control { ; Cursor-Art nicht Standard und Cursor über RichEdit-Fenster.
Sleep 50
MouseGetPos &OutputVarX, &OutputVarY, &OutputVarWin, &OutputVarControl
if GetKeyState("LButton", "P") {
return 1
}
}
return 0
}
}
Re: Link mit verschiedenen Browsern öffnen
Posted: 01 Apr 2024, 10:36
by Helmut2
@Noitalommi_2
Das sieht gut aus!
Die Idee mit dem Loader und Browser war echt gut.
Einzig die Fehlermeldung
- Fehlermeldung_suchen_2.jpg (27.39 KiB) Viewed 727 times
will nicht verschwinden.
Windowsbutton und Suchbutton. Es ist auch egal ob ich ScribblePapers aufgerufen oder garnicht aufgerufen habe.
Gruß
Helmut
Re: Link mit verschiedenen Browsern öffnen Topic is solved
Posted: 01 Apr 2024, 11:14
by Noitalommi_2
@Helmut2
Hmm, mit der Fehlermeldung "Error: Failed" von MouseGetPos kann nicht so richtig etwas anfangen.
Habe MouseGetPos mal eine Etage tiefer gepackt, so das es nur aktiv ist wenn auch das Scribble Papers Fenster aktiv ist, vielleicht hilft es ja.
Code: Select all
#Requires AutoHotkey 2.0
#SingleInstance
;F1::ListLines
F4::ExitApp
SetTimer(ScribblePapers, 50)
Hotkey("LButton", (*)=> false, "off") ; erstellt Hotkey LButton
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:"D:\Programme\Firefox_Ebay\Firefox\firefox.exe", ; Pfad des Browsers FireFox1
FireFox2:"",
FireFox3:"",
FireFox4:""}
, Loader := { FireFox1:"D:\Programme\Firefox_Ebay\Firefox_Ebay.exe", ; Pfad des Loaders für Browser FireFox1
FireFox2:"",
FireFox3:"",
FireFox4:""}
, Wait := 250 ; Sleep-Dauer nach SendInput in ms
, LineMin := 20, LineMax := 500 ; erlaubte Zeilenlänge, min 20 Zeichen max 500 Zeichen
, LButton := false
, wParam := Buffer(4), lParam := Buffer(4)
if WinActive(WinTitle) { ; Wenn ScribblePapers-Fenster aktiv
MouseGetPos &OutputVarX, &OutputVarY, &OutputVarWin, &OutputVarControl
if OutputVarControl = Control && A_Cursor = "Unknown" && !LButton { ; Wenn Cursor über RichEdit-Fenster, Cursor-Art nicht Standard und Hotkey LButton nicht aktiv.
Hotkey("LButton", "on"), LButton := true ; deaktiviert linke Maustaste
try
ControlGetPos &OutX, &OutY, &OutWidth, &OutHeight, Control, WinTitle ; Verucht X-Posisiton des RichEdit-Fensters zu ermitteln
catch TargetError
{
Hotkey("LButton", "off"), LButton := false
Sleep 250
return ; bei Fehler Abbruch
}
if ClickWait() { ; ruft ClickWait-Funktion auf
MouseGetPos &OutputVarX, &OutputVarY
MouseClick ,OutX+10, OutputVarY ; Klickt auf die leere Spalte vor der Zeile, um die komplette Zeile zu markieren.
MouseMove OutputVarX, OutputVarY ; Cursor zurück zur ursprünglichen Position.
Sleep 100
SendMessage(0xB0, wParam, lParam, Control, WinTitle) ; EM_GETSEL - Fragt die Anfangs- und Endposition der Auswahl ab.
; Wenn etwas makiert ist, dass größer als LineMin und kleiner als LineMax ist. LineMin sollte min 1 sein.
if (l := NumGet(lParam, "UInt") - w := NumGet(wParam, "UInt")) > LineMin && l-w < LineMax {
Text := EditGetLine(EditGetCurrentLine(Control, WinTitle), Control, WinTitle)
ControlSend("{Home}", 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)
if !Browser.HasOwnProp(Name) ; Wenn Browsername nicht bekannt
Hotkey("LButton", "off"), MsgBox("Browser `"" Name " `"unbekannt.",, 262160), ExitApp()
if !FileExist(Browser.%Name%) ; Wenn Browserpfad nicht existiert.
Hotkey("LButton", "off"), MsgBox("Browserpfad existiert nicht. `n`n" "`"" Browser.%Name% "`"",, 262160), ExitApp()
ClipSaved := ClipboardAll() ; Sichert Inhalt des Clipboards
A_Clipboard := "", A_Clipboard := Link, ClipWait(2)
Run(Loader.HasOwnProp(Name) ? Loader.%Name% : Browser.%Name%)
WinWait("ahk_exe" Browser.%Name%)
WinWaitActive("ahk_exe" Browser.%Name%)
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.
WinWaitActive(WinTitle)
}
else { ; Wenn Zeile nicht mit "http" beginnt und nicht 2x2 Senkrechtstriche als Separatoren enthält.
Click() ; Klickt Hyperlink
WinWaitActive("A")
WinActivate(WinTitle)
WinWaitActive(WinTitle)
}
}
}
}
else if LButton
Hotkey("LButton", "off"), LButton := false
}
ClickWait() { ; Wartet darauf, dass die linke Maustaste physisch gedrückt wird.
while A_Cursor = "Unknown" && OutputVarControl = Control { ; Cursor-Art nicht Standard und Cursor über RichEdit-Fenster.
Sleep 50
MouseGetPos &OutputVarX, &OutputVarY, &OutputVarWin, &OutputVarControl
if GetKeyState("LButton", "P") {
return 1
}
}
return 0
}
}
Re: Link mit verschiedenen Browsern öffnen
Posted: 01 Apr 2024, 12:26
by Helmut2
@Noitalommi_2
Vielen Dank - funktioniert!
Keine Fehlermeldung mehr.
Alles geht flott.
Jetzt teste ich noch mal den Alltagsbetrieb und Dank deiner Hartnäckigkeit,
weiß ich jetzt auch warum einige von meinen Programmierversuchen nicht geklappt haben.
(z.B.Winwait)
@alle
Ich habe mich hier über jeden Beitrag gefreut und ich könnte mir gut vorstellen,
dass der eine oder andere auch etwas davon lernt, bzw. gebrauchen kann.
Schön, dass es dieses Board gibt.
Gruß
Helmut
Re: Link mit verschiedenen Browsern öffnen
Posted: 03 Apr 2024, 08:50
by Helmut2
@Noitalommi_2
eine Fehlermeldung poppt leider doch noch auf.
*********
Target Control not found
Specifically: TRxRichEdit1
ControlGetPos &OutX,,,, Control, WinTitle
******************
Davon kann ich leider kein Snapshot machen, da die Linke Maustate dann immer nicht geht.
Mit F4 raus.
Die Meldung kommt immer wenn ich innerhalb von ScribblePaper suche und ich die Maus bewege.
Hier die WinSpy Angaben vom Suchfeld:
Suchen
ahk_class #32770
ahk_exe ScPapers.exe
ahk_pid 5440
ahk_id 1246298
Gruß
Helmut
Re: Link mit verschiedenen Browsern öffnen
Posted: 03 Apr 2024, 10:51
by Noitalommi_2
@Helmut2
Ich habe das letzte Skript editiert, bei einem Target Error wird dann keine Fehlermeldung erscheinen, sondern das Skript bricht kurz ab und versucht es erneut. Ich hoffe, das löst das Problem, weil ich den Ablauf nicht kenne.