Hello there, I'm Chanakya
Working full time as a Backend Engineer, writing stuff in Clojure ๐ค. Trying to learn more about GPU programming for a year already.
Choose the browser on the click of a link
License: MIT License
Working full time as a Backend Engineer, writing stuff in Clojure ๐ค. Trying to learn more about GPU programming for a year already.
I have kept Hurl in startup folder,
after v0.6.3 update, all browser icons & toolbar icons disappeared, on hover they reappear
First off, thank you for the great program, it is designed so much nicer than other apps like it. ๐
Here's my understanding of the issue โ in AutoRulesCheck.cs, the browser is started with this command:
Process.Start(x.ExePath, link);
It's missing the LaunchArgs
part that is included elsewhere, such as BrowsersList.xaml.cs, there's some extra logic to include the LaunchArgs
and apply them to the command:
Process.Start(browser.ExePath, Link + " " + browser.LaunchArgs);
For reference, my use case is this: I have a different Github account for my work, and a separate Chrome profile where I'm logged into my work Github. But when I click PR links in Slack, it randomly opens in either my default profile or the work profile (whichever one I most recently opened a tab in).
I found that the Building from Source instructions in README.md were missing a couple of things.
First, After checking out the repo I needed to do a git submodule init to load the Wpfui project.
Second, I was getting a build error because the CommunityToolkit.Labs.WinUI.SettingsControls package could not be found. Eventually I figured out I could fix this by adding this package source in the settings of the NuGet Package Manager
https://pkgs.dev.azure.com/dotnet/CommunityToolkit/_packaging/CommunityToolkit-Labs/nuget/v3/index.json
An extra step to select browser profile is not necessary.
The right click menu doesn't contain any special function and could be merged into main window
(Might release on Aug 4) Not all of the below list might make it to the final release planning, often might get postponed to later releases due to complexity involved in implementing.
UserSettings.json
optionalPrevious Version: #30
Hello! Thank you for your hardwork here, and the Hurl software really helped me a lot! I have yet to find any software like this (except Browser Select). I only found your software from the Browser Select GitHub page.
I found a bug. When you drag the Hurl UI in Windows 10, it lags when you hold and drag. I found a temporary fix with this for now. If you close the transparency in Windows 10 Personalize > Colors Tab, you will eventually have no lags when dragging. The only problem is if you want the transparency tab in Windows 10 along with no Hurl Lagging Drag since I use the transparency effect on my windows taskbar.
Thank you, and I really appreciate your effort in making Hurl :)
That would be great if/when I only want to view link on my phone
Hello,
Just a heads up that the latest update seems to not function at all on windows 10, it just refuses to launch entirely. I've been using the 7.0.0 Alpha prior to this just fine aside from some weird lag when moving the window which is no biggie but with the update it now doesn't even launch.
I've also made sure to update .Net 6 runtime.
Thanks for your time and take care!
After updating to v0.8 On Windows 11, I was prompted to update my .NET Desktop Runtime to 7.0.9 or later. The prompt included a button to update, but that didn't seem to do anything but close the window. Running winget install Microsoft.DotNet.DesktopRuntime.7
made easy work of silently downloading and installing the runtime. Perhaps the installer could do this automatically.
Acrylic wont work for some win10 and win11 22H2 (even for me). The problem is with both WPF-UI lib that I use for Acrylic Support and Hurl having a Custom Window.
if u experience the issue, paste the following code into the UserSettings.json
. Make sure to do proper json formating for avoiding launch errors. (usually paste it above LastUpdated line)
"AppSettings": {
"DisableAcrylic": true,
"BackgroundRGB": [51, 51, 51]
},
Either
Title says it all.
It would be nice to be able to automatically dismiss the UI by clicking somewhere else.
The planning for this version is bit messy. Things are added and Removed bunch of times (Seperation of Project and unification). MVVM Architecture Pattern needs to be used, but my knowledge is lacking.
Currently, configuration of Hurl means modifying a json file, which can be error-prone and unfamiliar to most.
I'm considering ease of development
over consistent UI
and codebase
for the app frameworks.
As of v0.6.3, For me, the Hurl is almost fitting for all of my use cases. Additional features below might make this project more useful for any future users:
Open this browser for next 10mins automatically
I intend to work on those slowly maybe like spending a week per month or randomly. I believe Hurl will hit the v1 after v0.9
release at this rate.
EDIT (2023-02-10): About the Code Quality, I feel like It's a absolute mess. Inventing patterns, Frequent Refactors all over, reverting/reusing old good ideas..... I can only think of fixing all slowly as I learn and experience more of the language and framework. Maybe look about it for stable release.
EDIT (2024-03-20): Code quality for the newer Ruleset Manager is much better, Looking to Refactor Browser Selector now with similar patterns.
Hi,
I think there might have been a bug causing the application to crash on Windows 11 (Pro 22H2) when trying to press the "Copy URL" button multiple times. i.e. do a double click instead of single click.
The weird thing is that this issue doesn't occur on Windows 10; just wonder if there is any windows 11 feature would cause this.
I got this error from the System Logs upon application crash.
Application: Hurl.exe
CoreCLR Version: 6.0.1423.7309
.NET Version: 6.0.14
Description: The process was terminated due to an unhandled exception.
Exception Info: System.Runtime.InteropServices.COMException (0x800401D0): OpenClipboard Failed (0x800401D0 (CLIPBRD_E_CANT_OPEN))
at System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(Int32 errorCode, IntPtr errorInfo)
at System.Windows.Clipboard.Flush()
at System.Windows.Clipboard.CriticalSetDataObject(Object data, Boolean copy)
at System.Windows.Clipboard.SetDataInternal(String format, Object data)
at System.Windows.Clipboard.SetText(String text, TextDataFormat format)
at System.Windows.Clipboard.SetText(String text)
at Hurl.BrowserSelector.Views.MainWindow.LinkCopyBtnClick(Object sender, RoutedEventArgs e)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
at System.Windows.Controls.Primitives.ButtonBase.OnClick()
at System.Windows.Controls.Button.OnClick()
at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e)
at System.Windows.UIElement.OnMouseLeftButtonUpThunk(Object sender, MouseButtonEventArgs e)
at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.ReRaiseEventAs(DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent)
at System.Windows.UIElement.OnMouseUpThunk(Object sender, MouseButtonEventArgs e)
at System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(Delegate genericHandler, Object genericTarget)
at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
at System.Windows.UIElement.RaiseTrustedEvent(RoutedEventArgs args)
at System.Windows.Input.InputManager.ProcessStagingArea()
at System.Windows.Input.InputProviderSite.ReportInput(InputReport inputReport)
at System.Windows.Interop.HwndMouseInputProvider.ReportInput(IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 y, Int32 wheel)
at System.Windows.Interop.HwndMouseInputProvider.FilterMessage(IntPtr hwnd, WindowMessage msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at System.Windows.Interop.HwndSource.InputFilterMessage(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
at System.Windows.Threading.Dispatcher.Run()
at System.Windows.Application.RunDispatcher(Object ignore)
at System.Windows.Application.RunInternal(Window window)
at System.Windows.Application.Run()
at Hurl.BrowserSelector.App.Main()
Hello again,
First here's what I'm seeing, .
I read #57 but I cannot tell if your screenshot is showing the same thing or not. I would prefer Acrylic over Mica, but it's not the biggest issue so don't consider this blocking - either look better than this haha.
Windows 11 22621.1555
{
"LastUpdated": "4/6/2023 8:59:49 PM",
"Browsers": [
{
"Name": "Vivaldi",
"ExePath": "C:\\Program Files\\Vivaldi\\Application\\vivaldi.exe"
},
{
"Name": "Opera GX Stable",
"ExePath": "\u0022C:\\Program Files\\Opera GX\\Launcher.exe\u0022"
},
{
"Name": "Brave",
"ExePath": "C:\\Program Files\\BraveSoftware\\Brave-Browser\\Application\\brave.exe",
"Hidden": true
},
{
"Name": "Firefox",
"ExePath": "C:\\Program Files\\Mozilla Firefox\\firefox.exe",
"Hidden": true
},
{
"Name": "Google Chrome",
"ExePath": "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"
},
{
"Name": "Microsoft Edge",
"ExePath": "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe"
}
],
"AppSettings": {
"LaunchUnderMouse": true,
"NoWhiteBorder": true,
"BackgroundType": "acrylic",
"WindowSize": [
560,
220
]
},
"AutoRoutingRules": []
}
Hi,
I got an idea if it would be possible to have memory of files to be opened,
for example when opening multiple PDF files in browser from file explorer, it gives user the chance to decide in what browser Hurl should open the file.
Thanks
Hello, I've upgraded my computer 's .NET Desktop rumtime from 7 to 8, and Hurl said that it should run under .NET 7 environment.
Will Hurl support .NET 8 in the future?
Hi!
Got a weird looking main window.
How it should be:
How it looks like:
Version 0.8 on Version 22H2 (OS Build 22621.2134)
The gray bar on the top is because of
Would be nice to make it wider to match the buttons on the right.
But why it's not transparent like on official screenshot?
Transparency option is on in windows settings.
But changing windows theme to light doesn't change Hurl window theme.
Make context-menu look like tray's menu
OR drop context menu instead use a โขโขโข OR ๐ค icon at bottom-right corner,
Newcomer won't know that they can right click on it
Originally posted by Clemens-Ratte-Polle July 22, 2023
idea:
Hurl could open all web protocols like mailto: etc. with Outlook, Thunderbird.
Currently, I am building the binaries and packaging them with inno setup locally.
https://github.com/BartoszCichecki/LenovoLegionToolkit , A pure WPF/.NET 6 app also uses Inno Setup with GitHub actions somehow
Hi!
I'm having issues with running Hurl...
My system:
The installation process:
Issue: Tried to run Hurl but nothing happened:
Is there any step missing in the installation process? Is any other dependency/library required?
Ruleset Manager
and Rename it to Hurl Settings
v0.5.0-alpha-1
to v0.5.0-alpha
When selecting an image file for the CustomIconPath, the icon is loaded as a bitmap and defaults to a low resolution even though the icon file has a high resolution.
This could probably be easily resolved changing the following lines:
Hurl/Source/Hurl.Library/Models/Browser.cs
Lines 41 to 51 in 71b6b38
To
if (!string.IsNullOrEmpty(CustomIconPath) && CustomIconPath.EndsWith(".ico"))
{
Icon RawIcon = new System.Drawing.Icon(CustomIconPath,-1,-1);
return IconUtilites.ToImageSource(RawIcon);
}
else if (!string.IsNullOrEmpty(CustomIconPath))
{
return new BitmapImage(new Uri(CustomIconPath));
}
else if (!string.IsNullOrEmpty(ExePath))
{
Icon RawIcon = ExePath.StartsWith('"'.ToString())
? IconExtractor.FromFile(ExePath.Substring(1, ExePath.Length - 2))
: IconExtractor.FromFile(ExePath);
return IconUtilites.ToImageSource(RawIcon);
also the substring method of the ExePath could be changed to using Trim() for better readability
Icon RawIcon = IconExtractor.FromFile(ExePath.Trim('"'));
Notes for the -1, -1 size of the icon, please see this StackOverflow post:
https://stackoverflow.com/questions/35081239/how-to-retrieve-the-largest-available-image-from-an-icon-file-using-c-sharp
Note: This is untested right now, it was just a thought.
The reason I though of this is because I am setting my profiles as different browsers, and MSEdge creates a Profile icon for each profile: %USERPROFILE%\AppData\Local\Microsoft\Edge\User Data\Default\Edge Profile.ico
this is my UserSettings.json
and Hurl is not opening! if I use the alternate launch option for Chrome then its fine :(
{
"LastUpdated": "24-Aug-23 18:55:33",
"Browsers": [
{
"Name": "Brave",
"ExePath": "C:\\Program Files\\BraveSoftware\\Brave-Browser\\Application\\brave.exe"
"AlternateLaunches": [
{
"ItemName": "Profile 1",
"LaunchArgs": "--profile-directory=\"Default\""
},
{
"ItemName": "Incognito",
"LaunchArgs": "-incognito"
}
},
{
"Name": "Firefox",
"ExePath": "C:\\Program Files\\Mozilla Firefox\\firefox.exe"
},
{
"Name": "Microsoft Edge",
"ExePath": "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe"
}
]
}
This could just as easily be my personal failings with code, but I can't get hurl to work with opening any of the firefox profiles I have whether as alternate launches or just as separate browsers. ๐
Here is the code as separate browser:
{
"LastUpdated": "20/12/2023 12:45:39 PM",
"Browsers": [
{
"Name": "Firefox",
"ExePath": "C:\\Program Files\\Mozilla Firefox\\firefox.exe"
},
{
"Name": "Firefox - downloading",
"ExePath": "\"C:\Program Files\Mozilla Firefox\firefox.exe\" -P downloading"
},
{
"Name": "Microsoft Edge",
"ExePath": "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe"
}
]
}
and here is it as an alternate launch:
{
"LastUpdated": "20/12/2023 12:45:39 PM",
"Browsers": [
{
"Name": "Firefox",
"ExePath": "C:\\Program Files\\Mozilla Firefox\\firefox.exe"
"AlternateLaunches": [
{
"ItemName": "downloading",
"LaunchArgs": "-P downloading"
}
]
},
{
"Name": "Microsoft Edge",
"ExePath": "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe"
}
]
}
Please help!
Hi,
When I try to open an HTML file with folder names containing space, it breaks the path in several chunks and open each with a different part of the path in a separate tab.
I think you can easily reproduce it.
Hi,
I noticed that a scrollbar is shown when more than five browsers are configured and the width of the window is limited accordingly.
When I tried to scroll to the right to select the 6th browser, the app crashed once I hovered the cursor over the scrollbar.
I would also like to suggest a configuration option for the number of browsers that can be seen at any one time. The scrollbar solution is logical, but quite inconvenient, since it takes a lot more time to select a browser or application that is on the 6th or later position. Maybe an option to extend the maximum width of the window would be possible? Or better yet, using a second or even third row?
Hi I have been attempting to get this to work on my pc for a few versions and have hesitated to comment but it seems Hurl fails to load correctly on my PC. It will appear black rather than glass/transparent and when I hover the mouse over the scrollbar it will exit on its own. I'm not sure what is going on or why but I have attempted to install a number of versions of .NET but still no luck unless I have missed one.
Right now Browser Select seems vastly lighter and more stable but I still have hopes for this one since it reminds me of the OG Browser Chooser with a lot more potential.
ANNOUCEMENT (03-03-2022): THIS RELEASE IS PUT TO HOLD AND INSTEAD 0.5 WILL BE RELEASED SOON
.net6
version along with .netf48
Hide Browsers
I would prefer if the program did not stay idle in the background and system tray at all times. I understand that the startup time for the program/UI can be long (I mean several seconds), and that the solution to this problem was to keep it loaded in advance. But I think it would be much better to just have an .exe
with a more-or-less instant startup time (particularly for auto-routing rules).
If this isn't a design direction you're interested in going in, feel free to close this issue, no worries โ it's just my personal preference and user feedback.
Hi,
first of all: great App!
Sometimes I'm getting links to Office documents (Excel, PowerPoint, Word), that I would like to open directly in the respective app.
This is possible by using C:\Program Files\Microsoft Office\root\Office16\protocolhandler.exe as the browser with the argument ms-excel:ofe|u|https://... (for Excel)
to make this work, it would be required to have a parameter for the URL though that I can put into the LaunchArgs. Something like %URL% or $1, so the LaunchArgs would become ms-excel:ofe|u|%URL%
For the same use case, it would also be helpful to select a custom icon, since the icon of protocolhandler.exe is a generic Office icon, which obviously becomes confusing if you configure it three times for Excel, PowerPoint and Word.
Let me know what you think!
Thanks
Hi,
I got another idea which - I think - would be a great addition to the app:
It would be great if it was possible to assign hotkeys for each browser. For example, after clicking the link, I press "F" for Firefox, "C" for Chrome and "E" for Edge, or even simpler 1,2,3
Another usability improvement would be to have the window open where the mouse cursor is, as opposed to the center of the screen, so the path to the desired browser is shorter.
Let me know what you think.
Thanks!
Two types of Installers can be used....
Install
Uninstall
Register Protocol
Set as Default
Check if Hurl is installed
More than 5 browsers produces a scroll bar which is not really ideal.
Maybe a grid system can be implemented with multiple rows?
Thanks
Hello everyone,
I just want to ask if there is a way that I can open links using Firefox incognito? Recently, I used this format here (as it also has been mentioned in the Firefox's official website).
{ "Name": "Firefox", "ExePath": "C:\\Program Files\\Mozilla Firefox\\firefox.exe", "LaunchArgs": null, "Hidden": false, "AlternateLaunches": [ { "ItemName": "Incognito", "LaunchArgs": "-private-window" } ] },
Although this works when I open incognito mode without a link, it does not work as intended when you have a link and you choose Incognito
in the Firefox Alternate Launcher. It goes to open the Non-Private Window and the link within that Non-Private Window, and it also opens the Private Window, but with an empty tab. I was looking for a workaround for this but really can't find anything. I do understand that this might be an error within Firefox's end, just wanted to make sure if someone has a workaround for this. Thanks! I am quite glad that this app is also being updated, keep it up! (*๏ผพ-๏ผพ*)
The vast majority of links I click are from Outlook or Teams, and are "obfuscated" safelinks.
It looks to me that they can be reverse engineered and reconstructed from the parameters in the actual link without actually following the link. At least the first part of the url.
It would be a great improvement to show the actual link behind the safelink and trigger rules based on the link behind the safelink, not the ever present "https://outlook.office.com" of the safelink.
Note: I suppose this functionality could possibly be expanded to work for all kinds of link shorteners, but that would require following the link to get the actual url for a list of link shortening services.
I have kept Hurl in Startup folder,
On every reboot and power up it shows on top of other widows & I have to minimise it
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.