Link mit verschiedenen Browsern öffnen Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Helmut2
Posts: 22
Joined: 16 Jul 2023, 12:08

Re: Link mit verschiedenen Browsern öffnen

Post by Helmut2 » 29 Mar 2024, 06:49

@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

Noitalommi_2
Posts: 225
Joined: 16 Aug 2023, 10:58

Re: Link mit verschiedenen Browsern öffnen

Post by Noitalommi_2 » 29 Mar 2024, 13:18

@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.

Noitalommi_2
Posts: 225
Joined: 16 Aug 2023, 10:58

Re: Link mit verschiedenen Browsern öffnen

Post by Noitalommi_2 » 30 Mar 2024, 12:30

@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
	}
}
Last edited by Noitalommi_2 on 31 Mar 2024, 04:09, edited 1 time in total.

Helmut2
Posts: 22
Joined: 16 Jul 2023, 12:08

Re: Link mit verschiedenen Browsern öffnen

Post by Helmut2 » 30 Mar 2024, 14:00

@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

Noitalommi_2
Posts: 225
Joined: 16 Aug 2023, 10:58

Re: Link mit verschiedenen Browsern öffnen

Post by Noitalommi_2 » 30 Mar 2024, 15:37

@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"
}

Helmut2
Posts: 22
Joined: 16 Jul 2023, 12:08

Re: Link mit verschiedenen Browsern öffnen

Post by Helmut2 » 31 Mar 2024, 01:24

@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
Noitalommi_2_Test_WinWait_F1.jpg (18.27 KiB) Viewed 263 times
Noitalommi_2_Test_WinWait_F2.jpg
Noitalommi_2_Test_WinWait_F2.jpg (17.57 KiB) Viewed 263 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

just me
Posts: 9466
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Link mit verschiedenen Browsern öffnen

Post by just me » 31 Mar 2024, 03:41

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?

Noitalommi_2
Posts: 225
Joined: 16 Aug 2023, 10:58

Re: Link mit verschiedenen Browsern öffnen

Post by Noitalommi_2 » 31 Mar 2024, 04:18

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.

Helmut2
Posts: 22
Joined: 16 Jul 2023, 12:08

Re: Link mit verschiedenen Browsern öffnen

Post by Helmut2 » 31 Mar 2024, 05:54

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
Curser_steht_auf_der_Messagebox1.jpg (69.55 KiB) Viewed 239 times
Curser_steht_auf_Browser1.jpg
Curser_steht_auf_Browser1.jpg (67.38 KiB) Viewed 239 times
Gruß
Helmut

Noitalommi_2
Posts: 225
Joined: 16 Aug 2023, 10:58

Re: Link mit verschiedenen Browsern öffnen

Post by Noitalommi_2 » 31 Mar 2024, 08:41

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.

Helmut2
Posts: 22
Joined: 16 Jul 2023, 12:08

Re: Link mit verschiedenen Browsern öffnen

Post by Helmut2 » 31 Mar 2024, 13:52

@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
Direktlink.jpg (156.75 KiB) Viewed 221 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
Curser_steht_auf_dem_Browser_Loader1.jpg (75.89 KiB) Viewed 221 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

Noitalommi_2
Posts: 225
Joined: 16 Aug 2023, 10:58

Re: Link mit verschiedenen Browsern öffnen

Post by Noitalommi_2 » 01 Apr 2024, 02:54

@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"
}

just me
Posts: 9466
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Link mit verschiedenen Browsern öffnen

Post by just me » 01 Apr 2024, 03:08

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

Helmut2
Posts: 22
Joined: 16 Jul 2023, 12:08

Re: Link mit verschiedenen Browsern öffnen

Post by Helmut2 » 01 Apr 2024, 06:20

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
Noitalommi_2_Test_Loader_Browser_Erfolg.jpg (5.41 KiB) Viewed 184 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
Fehlermeldung_suchen_1.jpg (32.69 KiB) Viewed 184 times

Gruß
Helmut

Noitalommi_2
Posts: 225
Joined: 16 Aug 2023, 10:58

Re: Link mit verschiedenen Browsern öffnen

Post by Noitalommi_2 » 01 Apr 2024, 07:26

@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
	}
}

Helmut2
Posts: 22
Joined: 16 Jul 2023, 12:08

Re: Link mit verschiedenen Browsern öffnen

Post by Helmut2 » 01 Apr 2024, 10:36

@Noitalommi_2

Das sieht gut aus!
Die Idee mit dem Loader und Browser war echt gut.
Einzig die Fehlermeldung

Fehlermeldung_suchen_2.jpg
Fehlermeldung_suchen_2.jpg (27.39 KiB) Viewed 168 times
will nicht verschwinden.
Windowsbutton und Suchbutton. Es ist auch egal ob ich ScribblePapers aufgerufen oder garnicht aufgerufen habe.

Gruß
Helmut

Noitalommi_2
Posts: 225
Joined: 16 Aug 2023, 10:58

Re: Link mit verschiedenen Browsern öffnen  Topic is solved

Post by Noitalommi_2 » 01 Apr 2024, 11:14

@Helmut2

Hmm, mit der Fehlermeldung "Error: Failed" von MouseGetPos kann nicht so richtig etwas anfangen. :think:
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
	}
}
Last edited by Noitalommi_2 on 03 Apr 2024, 10:43, edited 1 time in total.

Helmut2
Posts: 22
Joined: 16 Jul 2023, 12:08

Re: Link mit verschiedenen Browsern öffnen

Post by Helmut2 » 01 Apr 2024, 12:26

@Noitalommi_2

Vielen Dank - funktioniert! :bravo: :dance:
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

Helmut2
Posts: 22
Joined: 16 Jul 2023, 12:08

Re: Link mit verschiedenen Browsern öffnen

Post by Helmut2 » 03 Apr 2024, 08:50

@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

Noitalommi_2
Posts: 225
Joined: 16 Aug 2023, 10:58

Re: Link mit verschiedenen Browsern öffnen

Post by Noitalommi_2 » 03 Apr 2024, 10:51

@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.

Post Reply

Return to “Ich brauche Hilfe”