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

Link mit verschiedenen Browsern öffnen

24 Mar 2024, 13:16

Hallo zusammen,

ich habe ein Notizprogramm mit Namen Scribble Papers.
http://www.scribblepapers.de/
Es ist klein, portable, schnell und kann leicht gesichert werden.
Das Programm gefällt mir ganz gut, leider hat es für mich einen Nachteil, den ich hoffe mit AHK zu lösen.
Links werden immer mit dem Standardbrowser geöffnet.
Ich habe jetzt ein kleines Makro mit AHK geschrieben, bei dem ich hinter dem Link mit dem Curser stehe, der Link kopiert wird
und dann kann ich über ein Auswahlmenü den Browser auswählen mit dem der Link ausgeführt werden kann.
Spoiler

Das würde ich gerne einfacher gestalten.

Gibt es die Möglichkeit hinter dem Link den Namen z.B Browser1 zu schreiben und der Link wird dann mit dem Browser1 geöffnet?
Also zum Beispiel so:
www.t-online.de Browser1
www.tvtoday.de Browser2
oder so:
www.t-online.de_Browser1
www.tvtoday.de_Browser2
Auswertung im Clipboard oder im Text und wenn _Browser1 erkannt wird, wird der Browser1 gestartet und der Restlink eingefügt.
Falls das irgendwie ohne allzu viel Programmcode funktionieren würde, wäre ich über jede Hilfe oder Hinweise dankbar.

Eine Erkenntnis aus meiner Anfrage könnte auch sein geht nicht mit Windows 10 - Such dir ein anderes Programm.
Wie auch immer - Danke für jede Hilfe.

Gruß
Helmut
KHA
Posts: 403
Joined: 21 Aug 2018, 11:11

Re: Link mit verschiedenen Browsern öffnen

24 Mar 2024, 16:04

Hi,
um einen Link normalerweise mit einem Browser zu öffnen, gibt man den Link als Parameter an, während man den Browser startet.
z.B:

Run "D:\Programme\Firefox_1\Firefox_1.exe https://autohotkey.com"
gero
Posts: 171
Joined: 02 Oct 2013, 05:36

Re: Link mit verschiedenen Browsern öffnen

25 Mar 2024, 04:39

Ich (mit AHK V1 ... sollte aber auch mit V2 gehen) würde den Link in Scribble Papers copieren und mit "OnClipboardChange" arbeiten ... so etwa:

gruss
gero

Code: Select all

#persistent
#SingleInstance force
SetTitleMatchMode,2
Gui, +AlwaysOnTop
Gui,margin,0,0
Gui,add,button,x0 y0 w100 gBROWSER_1,Firefox
Gui,add,button,x0 y+0 wp gBROWSER_2,PaleMoon
Gui,add,button,x0 y+0 wp gCANCEL,cancel
return

OnClipboardChange:
IfWinActive,- Scribble Papers
	{
	IFinString,ClipBoard,https://
		Gui,show
	}
return

BROWSER_1:
MsgBox,4096,Info, Firefox %ClipBoard%
;run, "Path zum FireFox" %clipbord%  ;<<< passend machen
Gui,hide
return

BROWSER_2:
MsgBox,4096,Info, Pale Moon %ClipBoard%
;run, "Path zum Pale Moon" %clipbord%  <<< passend machen
Gui,hide
return

CANCEL:
Gui,hide
return

ESC::
GuiClose:
exitapp
return
Helmut2
Posts: 22
Joined: 16 Jul 2023, 12:08

Re: Link mit verschiedenen Browsern öffnen

26 Mar 2024, 02:29

Vielen Dank für eure Antworten.
Ich freue mich über jeden Ansatz.

Ich habe schon sehr lange überlegt, wie ich meine Anfrage so stelle, dass sie leicht zu verstehen ist, ohne seitenlange Beschreibungen
zu erzeugen und den Helfer damit zu langweilen und dabei festgestellt - es ist schwierig.

Das Notizprogramm hat im Laufe der Jahre bei mir mehrere 100 Eintragungen incl. mehr oder weniger lange Kommentare.
Mein Ziel ist es mit einem Klick bzw. einem Tastendruck den Link mit dem entsprechenden Browser zu öffnen, so als wenn ich den Link direkt
betätige. Eine direkte Betätigung vom Link ohne, dass der Curser erst hinter dem Link gestellt werden muß, wäre natürlich das Nonplusultra,
aber funktioniert so weit ich es rausgefunden habe nicht, ohne das Betriebssystem zu verbiegen, bzw. Zusatzprogramme wie
https://www.majorgeeks.com/files/details/browser_tamer.html zu benutzen

Hier ein Beispiel - ein Bild sagt mehr als 1000 Worte
[img
ScribblePaper_Seite.jpg
ScribblePaper_Seite.jpg (32.56 KiB) Viewed 404 times
][/img]
Gibt es so eine Möglichkeit und dann am Besten noch mit AHK 2 ?
So nun ist der Text doch wieder länger geworden.
Danke schon mal im Voraus

Gruß
Helmut
gero
Posts: 171
Joined: 02 Oct 2013, 05:36

Re: Link mit verschiedenen Browsern öffnen

26 Mar 2024, 04:34

letzer Versuch :D
Wenn zwischen Link und Browser-NR genau 1 Leerzeichen ist ... dann könnte es per HotKey so etwa gehen:

Code: Select all

#SingleInstance force
SetTitleMatchMode,2
#persistent
SendMode,input
Browser1:="PathToFireFox"
Browser2:="PathToPaleMoon"
return

F3::
IfWinActive,- Scribble Papers
	{
	send, {Home}
	sleep, 100
	send, +{Down}
	sleep, 100
	send, ^{c}
	sleep, 100
	StringSplit,a,ClipBoard,%A_Space%
	IfInString,a2,BROWSER1
		MsgBox,4096,Info,%BROWSER1% %a1%
		;run, ...
	IfInString,a2,BROWSER2
		MsgBox,4096,Info,%BROWSER2% %a1%
		;run, ....
	;usw.
	;usw.
	}
return
gruss
gero

//1x edit
Last edited by gero on 27 Mar 2024, 03:00, edited 2 times in total.
KHA
Posts: 403
Joined: 21 Aug 2018, 11:11

Re: Link mit verschiedenen Browsern öffnen

26 Mar 2024, 08:10

Vielleicht so etwas:

Code: Select all

#Requires Autohotkey v2.0
#SingleInstance Force

Browser1 := "firefox.exe "
Browser2 := "chrome.exe "

#HotIf WinActive("Scribble Papers")
~LButton:: {
	If (A_Cursor = "Unknown"){
	   Send("{Esc}")
	   AktZeilenNr := EditGetCurrentLine("TRxRichEdit1", "Scribble Papers")
	   AktZeilenText := EditGetLine(AktZeilenNr, "TRxRichEdit1", "Scribble Papers")
	   TeileZeile := StrSplit(AktZeilenText, "|", A_Space)
		if (Trim(TeileZeile[2], "`r`n") = "Browser1")
		   Run(Browser1 Trim(TeileZeile[1]))
		else if (Trim(TeileZeile[2], "`r`n") = "Browser2")
		   Run(Browser2 Trim(TeileZeile[1]))
	}

}
#HotIf

^esc::ExitApp
Noitalommi_2
Posts: 224
Joined: 16 Aug 2023, 10:58

Re: Link mit verschiedenen Browsern öffnen

26 Mar 2024, 09:52

Hi.

Hab auch noch etwa erstellt. ^^

Der Link öffnet sich in dem du in den leeren Bereich vor einer Zeile klickst, das ist die Stelle, wo der Cursor zu einem Pfeil wird der nach rechts oben zeigt.
Die Zeile muss mit dem Hyperlink beginnen, gefolgt von einem Leerzeichen und den Separatoren (Senkrechtstriche) + Browsername.
(Der Link muss mit "http" beginnen)

z.B.:

https://www.autohotkey.com/ ||FireFox|| Ab hier kann weiterer Text stehen.

Mögliche Browsernamen sind Edge, FireFox und Chrome. Die Browserpfade müssen evl. angepasst werden. (Win11)

Edit: Fehler behoben.

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"
	, Edge := {Path:"C:\Program Files (x86)\Microsoft\Edge\Application\msedge", Process:"msedge.exe"}
	, FireFox := {Path:"C:\Program Files\Mozilla Firefox\firefox.exe", Process:"firefox.exe"}
	, Chrome := {Path:"C:\Program Files\Google\Chrome\Application\chrome.exe", Process:"chrome.exe"}
	, 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 vermutlich Pfeil rechts oben.

				Hotkey("LButton", "on"), SetTimer(() => Hotkey("LButton", "off"), -500) ; Deaktiviert LButton für 500ms, verhindert versehentliche Mehrfachauswahl durch Doppelklicks.
				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 Browser.
						Pos1 := InStr(Text, "||")
						Link := SubStr(Text, 1, Pos1-1)
						Browser := SubStr(Text, Pos1+2, Pos1-1)

						Sleep(100), ControlSend("{Home}", Control, WinTitle) ; Hebt die Auswahl auf.

						switch Browser { ; Öffnet den Link im jeweiligen Browser, wartet bis der Browser aktiv ist und gibt den Fokus danach zurück.
							case "Edge": Run(Edge.Path " " Link)
							case "FireFox": Run(FireFox.Path " " Link)
							case "Chrome":  Run(Chrome.Path " " Link)
						default: MsgBox("Browser unbekannt.",, 262160), ExitApp()
						}
						WinWaitActive("ahk_exe" %Browser%.Process,,5)
						WinActivate(WinTitle)
					}
				}
			}
		}
		else
			if LButtonDown && !GetKeyState("LButton", "P")
				LButtonDown := false
	}
}
Helmut2
Posts: 22
Joined: 16 Jul 2023, 12:08

Re: Link mit verschiedenen Browsern öffnen

27 Mar 2024, 04:39

Hallo zusammen,

ich freue mich sehr über die Hilfen und habe gleich wieder was gelernt.
@gero
Dein Programmbeispiel ist in AHK1.
Da ich sowieso nicht so besonders gut im Programmieren bin,
schaffe ich es nicht es in AHK2 umzusetzen.
Ich Danke Dir trotzdem sehr für deinen Beitrag.
@KHA und Noitalommi_2
Die Aufrufe mit den verschiedenen Browsern klappt mit beiden Vorschlägen.
Geht super zügig und das ohne extra Makrotasten!
Leider ist das Ergebnis, bei beiden Vorschlägen, ohne die Internetadresse
AHK_Link_leer.jpg
AHK_Link_leer.jpg (10 KiB) Viewed 337 times
Also die entsprechenden Browser starten, allerdings mit leerer Adresszeile.
Ich benutze Win10 und AHK 2.0.11.
Sind bei mir irgendwelche Einstellungen nicht richtig?
Verhält Scribble Papers sich anders als andere Programme?

Gruß
Helmut
KHA
Posts: 403
Joined: 21 Aug 2018, 11:11

Re: Link mit verschiedenen Browsern öffnen

27 Mar 2024, 05:00

Hi,
mein Skript funktioniert nur, wenn der Mauszeiger eine Hand darstellt und auf den Link geklickt wird.
Die "link-Zeile" sollte wie folgt aussehen:

forum
https://autohotkey.com/ | Browser1
Suche
https://google.de | Browser2

Die Variable Trim(TeileZeile[1]) enthält den Teil der Zeile vor dem Trennzeichen |, wobei führende und abschließende Leerzeichen entfernt werden.
Was zeigt MsgBox(Trim(TeileZeile[1]))?
Noitalommi_2
Posts: 224
Joined: 16 Aug 2023, 10:58

Re: Link mit verschiedenen Browsern öffnen

27 Mar 2024, 06:33

@Helmut2

Kannst du bitte das folgende Skript testen und mir sagen, ob FireFox mit Url geöffnet wird oder nicht wenn du F1 oder F2 drückst?
Ansonsten müssen wir mal nachgucken was in den Variablen steht aber probiere erstmal das.

Edit: Ich nutze noch AHK-Version 2.0.10
Edit2: Habe auf 2.0.12 aktualisiert, also an der AHK-Version liegt es nicht.

Code: Select all

#Requires Autohotkey v2.0
#SingleInstance Force

FireFox_Path := "C:\Program Files\Mozilla Firefox\firefox.exe"
Url := "https://www.autohotkey.com/"

F1::Run(FireFox_Path " " Url)
F2::Run(FireFox_Path " -url " Url)
Helmut2
Posts: 22
Joined: 16 Jul 2023, 12:08

Re: Link mit verschiedenen Browsern öffnen

27 Mar 2024, 12:39

@Noitalommi_2
Bei F1 und F2 wird der Browser aufgerufen, aber es erscheint keine Url.

Die Zeile von KHA habe ich auch ausprobiert
Run "D:\Programme\Firefox_1\Firefox_1.exe https://autohotkey.com"
Das geht auch nicht

Ich habe die Firefoxversionen alle als Portable auf Laufwerk D.
Nicht, dass es an irgendwelchen verkorksten Einstellungen bei mir liegt und
ihr Euch alle Mühe gebt - das möchte ich nicht.
Ich freue mich auch schon so, dass es viele Meldungen gab und das in einem
ordentlichen Ton.
Ich werde mal schauen ob es auf einem anderen Rechner funktioniert.
Das wird aber heute nichts mehr
Der Ansatz mit deinem Progrämmchen wird bei der Fehlersuche bestimmt helfen.

Gruß
Helmut
garry
Posts: 3770
Joined: 22 Dec 2013, 12:50

Re: Link mit verschiedenen Browsern öffnen

27 Mar 2024, 13:09

sollte so sein :
run,"D:\Programme\Firefox_1\Firefox_1.exe" https://autohotkey.com
gero
Posts: 171
Joined: 02 Oct 2013, 05:36

Re: Link mit verschiedenen Browsern öffnen

27 Mar 2024, 14:02

@KHA ... den Cursor abfragen ! - geniale Idee ... :thumbup:

OT// Damit klappt das mit Click auf den Link zuverlässig auch für die Freunde von AHK V1 ... :D
gruss
gero

Code: Select all

#SingleInstance force
SetTitleMatchMode,2
SendMode,input
BROWSER1:="PathToFireFox"
BROWSER2:="PathToPaleMoon"
return

#IfWinActive,- Scribble Papers
~LButton::
IF (A_Cursor="Unknown")
	{
	send {esc}
	send, {Home}
	sleep, 100
	send, +{down}
	sleep, 100
	send, ^{c}
	sleep, 300
	StringSplit,a,ClipBoard, |  ; oder anderer Trenner
	IfInString,a2,BROWSER1
		MsgBox,4096,Info,"%BROWSER1%" %a1%
		;run,"%BROWSER1%" %a1%
	IfInString,a2,BROWSER2
		MsgBox,4096,Info,"%BROWSER2%" %a1%
		;run,"%BROWSER2%" %a1%
	}
return
#IfWinActive

^ESC::
exitapp
KHA
Posts: 403
Joined: 21 Aug 2018, 11:11

Re: Link mit verschiedenen Browsern öffnen

27 Mar 2024, 16:32

@gero
Danke für die Anerkennung, aber das habe ich mir hier im Forum abgeschaut. Es ist nicht mein eigenes Verdienst.

@Helmut2
Um herauszufinden, ob dein launcher.exe oder loader.exe das direkte Aufrufen von Parametern unterstützen, drücke die Win+R Taste und die r-Taste, und füge dann

"D:\Programme\Firefox_1\Firefox_1.exe https://autohotkey.com/"

ein. Wenn das nicht funktioniert, unterstützt dein portable Browser das Aufrufen von Links als Parameter nicht. In diesem Fall kann dir auch AHK nicht weiterhelfen, und ich bezweifle, dass Browser Tamer eine Lösung bietet.
Noitalommi_2
Posts: 224
Joined: 16 Aug 2023, 10:58

Re: Link mit verschiedenen Browsern öffnen

28 Mar 2024, 03:50

@KHA

Man könnte noch versuchen das mit Shortcuts zu händeln.

@Helmut2

Also FireFox ist die portable Version aber wie schaut es denn mit den anderen Browsern aus, welche möchtest du nutzen und sind diese portable oder normale Installationen?
KHA
Posts: 403
Joined: 21 Aug 2018, 11:11

Re: Link mit verschiedenen Browsern öffnen

28 Mar 2024, 05:13

HI, @Noitalommi_2
Meinst wahrscheinlich sowas?
Würde funktionieren, ist aber nicht so zuverlässig.

Code: Select all

RunBrowserEnterLink(Browser, Link){
   ClipSave := ClipboardAll()
   A_Clipboard := Link
   Run(Browser,,,&Pid)
	if !WinWait("ahk_pid " Pid,, 3){
	   MsgBox("Browser startet nicht!")
	   Return
	}
      WinActivate()
   Sleep(150)
   Send("{F6}")
   Sleep(50)
   Send("^v{Enter}")
   A_Clipboard := ClipSave
   ClipSave := ""
}

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

Re: Link mit verschiedenen Browsern öffnen

28 Mar 2024, 06:43

Hallo zusammen,

nachdem ich nun den ganzen Vormittag probiert habe, hat es geklappt.
KHA hatte recht.Die Loader.exe verhindert das direkte aufrufen.
Ich benutze 4 Portable Versionen vom Firefox, die ich je nach Verwendungszweck konfiguriert habe.
Also für Video, Werbung, Einkäufe usw. mit diversen Werbeblockern und Apps.
Ich habe hier einmal den Programmtext von Noitalommi_2 den ich dann für meine Zwecke modifiziert habe gepostet.
Ob das programmtechnisch einwandfrei ist, weiß ich nicht, aber funktioniert.(also das was ich gemacht habe)
Ich werde jetzt mal mein Scribble Papers modifizieren und schauen ob mir noch was auffällt.
Das Programm von KHA funktioniert bestimmt genauso gut, da ich die verschiedenen Browser dort auch aufrufen konnte.
Ich werde das noch mal ausprobieren.
Auf jeden Fall bedanke ich mich für die großartige Hilfe hier, denn ohne hätte ich es bestimmt nicht hinbekommen.
Das ist ein angenehmes Forum

Gruß
Helmut

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

Re: Link mit verschiedenen Browsern öffnen

28 Mar 2024, 10:17

Hallo KHA,

nun habe ich auch mal versucht deine Version umzusetzen.
Jetzt habe ich schon bald viereckige Augen.

Erkenntniss:
Mit der Version kann man die Links direkt anklicken und sie öffnen sich mit dem entsprechenden Browser.
Ich habe immer gedacht das das direkte Abfangen nicht funktioniert.

Code einmal berichtigt - Klammern bei else if fehlten : 29.03.2024
Danke KHA für den Hinweis
Spoiler


Was ich nicht hnbekommen habe:
Wenn nur ein Link steht ohne Kommentar und mit welchem Browser geöffnet werden soll,
öffne mit Standardbrowser
aber dann kommt folgende Fehlermeldung:
Scribble_Link ohne Text.jpg
Scribble_Link ohne Text.jpg (25.51 KiB) Viewed 185 times
Je nach dem wie schnell ich die Links hintereinander anklicke wird die Url in Scribble Papers kopiert oder nur verschoben.
Warte ich bis die Seite steht kann ich ohne weitere Veränderungen den nächsten Link anklicken
Scribble_original.jpg
Scribble_original.jpg (13.09 KiB) Viewed 185 times
Scribble_schnell.jpg
Scribble_schnell.jpg (14.08 KiB) Viewed 185 times
Auch diese Lösung ist für meine Zwecke fast fertig.
Vielen Dank nochmal

Gruß
Helmut
Last edited by Helmut2 on 29 Mar 2024, 11:54, edited 2 times in total.
Noitalommi_2
Posts: 224
Joined: 16 Aug 2023, 10:58

Re: Link mit verschiedenen Browsern öffnen

28 Mar 2024, 10:26

@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
	}
}
KHA
Posts: 403
Joined: 21 Aug 2018, 11:11

Re: Link mit verschiedenen Browsern öffnen

29 Mar 2024, 06:36

@Helmut2
Was ich nicht hnbekommen habe:
Wenn nur ein Link steht ohne Kommentar und mit welchem Browser geöffnet werden soll,
öffne mit Standardbrowser
aber dann kommt folgende Fehlermeldung:
Ja, das liegt daran, dass die Funktion TeileZeile := StrSplit(AktZeilenText, "|", A_Space) die Zeile nach dem "|" aufteilt. Wenn dieses Zeichen jedoch nicht existiert, kann AHK die Zeile nicht in 2 Teile aufteilen, was bedeutet, dass Trim(TeileZeile[2]) nicht existiert.

Um dieses Problem zu umgehen, könnte man beispielsweise eine Bedingung verwenden, um zu überprüfen, ob TeileZeile mehr als ein Element enthält, z.B:

Code: Select all

If (TeileZeile.Length > 1) {
}
Und bei deinem Beispiel fehlen die geschweiften Klammern für die else if-Anweisung.

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 80 guests