8

I'm a tab hoarder and I admit it. But at least I've sorted them into contextual windows now, and I'd love to have different icons for each window in the Windows task bar (not the tab bar, which is governed by the favicons). How can this be achieved?

As an example imagine I have one Window with various StackExchange tabs, for which I would like to have the StackExchange logo as icon, another window with GitHub repos that should have the GitHub logo, and a third window with tabs specific to a project for which I have a custom icon (or just e.g. a coloured letter atop the Firefox logo).

I'd also accept a solution that manages to simply use each window's first tab's favicon, though independence on that would be preferred.

  • Do you mean you have pinned items to the taskbar, and have you tried right-click > Properties > Change icon? – harrymc Jan 15 at 8:16
  • @harrymc With that I can only change the icon of all Firefox windows to the same icon. What I would like to achieve is during an open session that each opened windows should have a different icon. I think this cannot be achieved on a system level (since the respective windows' titles change depending on the active tabs), so the question is whether it is possible from within Firefox somehow, probably via an addon. – Tobias Kienzler Jan 15 at 9:00
  • How do you handle your contextual windows? Do you run separate profiles or do you just have a single one? – Seth Jan 15 at 9:11
  • @Seth Just a single one. Using separate profiles sounds like an interesting approach, though now I'm just starting to use Firefox' containers, which seems less of a hassle to me – Tobias Kienzler Jan 15 at 10:11
3
+50

This can be done using the free AutoHotkey.

Create a .ahk text file and enter these contents:

#Persistent
SetTitleMatchMode, 2    ; A window's title to contain the text anywhere

F9::
ChangeWindowIcon("title text", "\path\to\iconfile.ico")

ChangeWindowIcon(WinSpec, IconFile) {
    hIcon := DllCall("LoadImage", uint, 0, str, IconFile, uint, 1, uint, 0, uint, 0, uint, uint 0x10)
    if (!hIcon) {
        MsgBox, "Icon file missing or invalid in `nChangeWindowIcon(" IconFile ", " WinSpec ")`n`n"
        Throw "Icon file missing or invalid in `nChangeWindowIcon(" IconFile ", " WinSpec ")`n`n"
    }
    hWnd := WinExist(WinSpec)
    if (!hWnd) {
        MsgBox, Window Not Found
        return "Window Not Found"
    }
    SendMessage, WM_SETICON:=0x80, ICON_SMALL:=0, hIcon,, ahk_id %hWnd% ; Set the window's small icon
    SendMessage, WM_SETICON:=0x80, ICON_BIG:=1, hIcon,, ahk_id %hWnd%   ; Set the window's big icon
    SendMessage, WM_SETICON:=0x80, ICON_SMALL2:=2, hIcon,, ahk_id %hWnd%    ; Set the window's small icon
}

The script is set to be activated upon hitting F9, but you may set your own key. Add as many calls to the function ChangeWindowIcon as required, each with the parameters of:

  • Unique text that can be found in the title
  • The full address of an icon file

When the script is running, you may right-click its green H icon in the traybar and choose Exit to terminate. If it works, you may also add it to your Startup group to run when you login.

Note that AutoHotkey can also launch your favorite tabs and arrange their layout on the screen. There isn't really much that AutoHotkey cannot do.

  • Good old AHK 😁 Hm, that will work I guess, though this won't persist over sessions. But starting from this, maybe AHK can also grab and use the favicon of the first (or currently active) tab of each Window before I end up reimplementing session management in AHK 🤔 But the bounty will probably be yours – Tobias Kienzler Jan 18 at 15:45
  • 1
    Grabbing the favicon of a tab will need some work, since the tabs in Firefox are not real graphical objects. Firefox just paints them on the canvas. Probably a complete solution will require a Greasemonkey script to capture the active tab's icon, maybe through the clipboard, and an AHK script to loop over the clipboard and do the work. You are looking at a good amount of work. If the tabs are grouped in Firefox sessions, it would be simpler to stay with a fixed icon per group. – harrymc Jan 18 at 16:25
  • Okay, that sounds like quite some effort. I guess then I might as well dive into Firefox' source code if the addon API doesn't expose the window icon anyway... Which I wanted to learn about anyway – Tobias Kienzler Jan 19 at 10:03
  • Well, you deserve the bounty, no question :) But accept it I cannot yet, too much manual work left for the lazy likes of me... – Tobias Kienzler Jan 21 at 11:04
  • You could probably set the script to check the command line for specific profile names, and use one of the methods in superuser.com/q/440189/59597 to run multiple instances dedicated to certain sites. Difficulty is that they'd probably still be grouped as one icon, I think. I'll have to give it a try. – SilverbackNet Oct 1 at 3:49

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.