Jump to content

My XP programs


ntfoxy

Recommended Posts

KbdTray

Display keyboard layout in the system tray.

This utility may be used as standard language bar replacement, which has some bugs on XP (occasionally loses position, increases taskbar height). The language bar should be disabled in "Control Panel" → "Regional and Language Options" → "Languages" → "Details…" → "Language Bar…" → uncheck "Show the Language bar on the desktop" (disabling it via toolbar menu may cause language bar to show again after logout).

spacer.png

Download: kbdtray-1.0.7z

SysTrayUtil

Preserve system tray icon order.

Note, that this program doesn't allow to move icons, it only preserves the order! Here are recommended programs to move them:

  1. Taskbar Shuffle — Drag taskbar items and tray icons.
  2. Shell Tray Info — Display system tray information, move icons using buttons within program's window.

Download: systrayutil-1.1.7z

 

Version 1.0: systrayutil-1.0.7z

WPA Supplicant

Manage wireless network connections. WPA/WPA2 supplicant.

This program is useful on XP SP1/SP2, which don't support WPA/WPA2. It has supplicant service and GUI utility to manage connections.

There are some alternatives, like (probably the most shilled here) Boingo Wireless, but they all are proprietary and have ugly GUI. I was surprised to find that WPA Supplicant was maintained for Windows decades ago, but faced some problems when tried to use it. So, it's not my project, I just added some bug fixes and cosmetic patches. All these patches are included into the archive.

Download: wpa-supplicant-0.7.3.7z

--------------------------------------------------

I made/modified these programs just for fun. I doubt I'll seriously maintain them, but I thought they might be useful for someone here (it seems to be a pretty large XP users community).

There is README.txt file in all archives with further instructions to install programs or build them from the source code (included into the archives). All links are archived on web.archive.org (just in case somebody will want to use these programs in 2030, who knows).

I didn't try to use these programs on Windows 2000, but they probably will work.

Edited by ntfoxy
Link to comment
Share on other sites


I've been experimenting with your SysTrayUtil program.
I've been using PSTrayFactory for some years to organise the system tray and remember where icons are, but thought I'd try an alternative.
It seems to work OK, but there are a couple of icons which don't seem to appear in the HKEY_CURRENT_USER\Software\SysTrayUtil "Order" entry.
One is the icon for Trusteer Rapport, and the other is for the Eudora e-mail client.
That being the case I can't reorder them as I want.
:dubbio:

Link to comment
Share on other sites

Whoa, I didn't know about PSTrayFactory. The reason I made SysTrayUtil is because I didn't find any methods to arrange the tray :/

Trusteer Rapport is fun. The way it requires to enter captcha before exit is fantastic, hehe. Anyway, it's indeed a strange program, because it places its tray window under PID 0. Maybe it's better to just ignore these cases… I'm attaching a modified dll with attempt to fix this problem (it's not a new version, just an attempt).

Regarding Eudora, I'm not sure, it works for me (does version matter?). Running in debug mode (instead of run) may help to reveal the reason.

spacer.png

systrayutil.dll

Edited by ntfoxy
Link to comment
Share on other sites

PSTrayFactory works very well, but isn't free of course.

Your new DLL is better, the only anomaly I'm seeing now is that the icons for HWiNFO, which i want on the very right of the tray, are appearing on the very left insted, which is not where they are in the "Order" registry key.

eudora:32770
firefox:MozillaWindowClass
explorer:ConnectionsTray:pci.8086.1096
TrusteerNotificationAreaMsgBox
plexMediaServer:PlexMediaServerTrayIconClass
cgmenu:NortonCrashGuardMonitorWnd
hotswap:HotSwap AppletWindowClass
eFatibne:TrayIconWClass
unlockerassistant:32770
explorer:SystemTrayMain:volume
trayit:TrayItHook
procexplore1021:PROCEXPL
windowssearch:_SearchTrayIconClass_
mbamtray:QTrayIconMessageWindowClass
hwinfo32:Afx400000b100116102bd
hwinfo32:Afx400000b10011611033d
hwinfo32:Afx400000b100116103a3

Here is the debug if it gives any clues as to why this is happening.

Waiting for tray window.
Waiting for thread finish.
Attach DLL.
Sort tray.
Insert button "eFatibne:TrayIconWClass".
Sort tray.
Set index 0 for "eFatibne:TrayIconWClass".
Insert button "hotswap:HotSwap AppletWindowClass".
Sort tray.
Set index 0 for "hotswap:HotSwap AppletWindowClass".
Set index 1 for "eFatibne:TrayIconWClass".
Insert button "plexMediaServer:PlexMediaServerTrayIconClass".
Sort tray.
Set index 0 for "plexMediaServer:PlexMediaServerTrayIconClass".
Set index 1 for "hotswap:HotSwap AppletWindowClass".
Set index 2 for "eFatibne:TrayIconWClass".
Insert button "procexplore1021:PROCEXPL".
Sort tray.
Set index 0 for "plexMediaServer:PlexMediaServerTrayIconClass".
Set index 1 for "hotswap:HotSwap AppletWindowClass".
Set index 2 for "eFatibne:TrayIconWClass".
Set index 3 for "procexplore1021:PROCEXPL".
Insert button "explorer:SystemTrayMain".
Sort tray.
Set index 0 for "plexMediaServer:PlexMediaServerTrayIconClass".
Set index 1 for "hotswap:HotSwap AppletWindowClass".
Set index 2 for "eFatibne:TrayIconWClass".
Set index 3 for "explorer:SystemTrayMain:volume".
Set index 4 for "procexplore1021:PROCEXPL".
Insert button "cgmenu:NortonCrashGuardMonitorWnd".
Sort tray.
Set index 0 for "plexMediaServer:PlexMediaServerTrayIconClass".
Set index 1 for "cgmenu:NortonCrashGuardMonitorWnd".
Set index 2 for "hotswap:HotSwap AppletWindowClass".
Set index 3 for "eFatibne:TrayIconWClass".
Set index 4 for "explorer:SystemTrayMain:volume".
Set index 5 for "procexplore1021:PROCEXPL".
Insert button "trayit:TrayItHook".
Sort tray.
Set index 0 for "plexMediaServer:PlexMediaServerTrayIconClass".
Set index 1 for "cgmenu:NortonCrashGuardMonitorWnd".
Set index 2 for "hotswap:HotSwap AppletWindowClass".
Set index 3 for "eFatibne:TrayIconWClass".
Set index 4 for "explorer:SystemTrayMain:volume".
Set index 5 for "trayit:TrayItHook".
Set index 6 for "procexplore1021:PROCEXPL".
Insert button "TrusteerNotificationAreaMsgBox".
Sort tray.
Set index 0 for "TrusteerNotificationAreaMsgBox".
Set index 1 for "plexMediaServer:PlexMediaServerTrayIconClass".
Set index 2 for "cgmenu:NortonCrashGuardMonitorWnd".
Set index 3 for "hotswap:HotSwap AppletWindowClass".
Set index 4 for "eFatibne:TrayIconWClass".
Set index 5 for "explorer:SystemTrayMain:volume".
Set index 6 for "trayit:TrayItHook".
Set index 7 for "procexplore1021:PROCEXPL".
Insert button "windowssearch:_SearchTrayIconClass_".
Sort tray.
Set index 0 for "TrusteerNotificationAreaMsgBox".
Set index 1 for "plexMediaServer:PlexMediaServerTrayIconClass".
Set index 2 for "cgmenu:NortonCrashGuardMonitorWnd".
Set index 3 for "hotswap:HotSwap AppletWindowClass".
Set index 4 for "eFatibne:TrayIconWClass".
Set index 5 for "explorer:SystemTrayMain:volume".
Set index 6 for "trayit:TrayItHook".
Set index 7 for "procexplore1021:PROCEXPL".
Set index 8 for "windowssearch:_SearchTrayIconClass_".
Insert button "explorer:ConnectionsTray".
Sort tray.
Set index 0 for "null".
Set index 1 for "TrusteerNotificationAreaMsgBox".
Set index 2 for "plexMediaServer:PlexMediaServerTrayIconClass".
Set index 3 for "cgmenu:NortonCrashGuardMonitorWnd".
Set index 4 for "hotswap:HotSwap AppletWindowClass".
Set index 5 for "eFatibne:TrayIconWClass".
Set index 6 for "explorer:SystemTrayMain:volume".
Set index 7 for "trayit:TrayItHook".
Set index 8 for "procexplore1021:PROCEXPL".
Set index 9 for "windowssearch:_SearchTrayIconClass_".
Insert button "explorer:ConnectionsTray".
Sort tray.
Insert button "explorer:ConnectionsTray".
Set index 0 for "null".
Set index 1 for "explorer:ConnectionsTray".
Set index 2 for "explorer:ConnectionsTray:pci.8086.1096".
Set index 3 for "TrusteerNotificationAreaMsgBox".
Set index 4 for "plexMediaServer:PlexMediaServerTrayIconClass".
Set index 5 for "cgmenu:NortonCrashGuardMonitorWnd".
Set index 6 for "hotswap:HotSwap AppletWindowClass".
Set index 7 for "eFatibne:TrayIconWClass".
Set index 8 for "explorer:SystemTrayMain:volume".
Set index 9 for "trayit:TrayItHook".
Set index 10 for "procexplore1021:PROCEXPL".
Insert button "explorer:ConnectionsTray".
Sort tray.
Insert button "explorer:ConnectionsTray".
Set index 0 for "explorer:ConnectionsTray".
Set index 1 for "null".
Set index 2 for "explorer:ConnectionsTray:pci.8086.1096".
Set index 3 for "TrusteerNotificationAreaMsgBox".
Set index 4 for "plexMediaServer:PlexMediaServerTrayIconClass".
Set index 5 for "cgmenu:NortonCrashGuardMonitorWnd".
Set index 6 for "hotswap:HotSwap AppletWindowClass".
Set index 7 for "eFatibne:TrayIconWClass".
Set index 8 for "explorer:SystemTrayMain:volume".
Set index 9 for "trayit:TrayItHook".
Set index 10 for "procexplore1021:PROCEXPL".
Set index 11 for "windowssearch:_SearchTrayIconClass_".
Sort tray.
Set index 0 for "null".
Set index 1 for "explorer:ConnectionsTray:pci.8086.1096".
Set index 2 for "TrusteerNotificationAreaMsgBox".
Set index 3 for "plexMediaServer:PlexMediaServerTrayIconClass".
Set index 4 for "cgmenu:NortonCrashGuardMonitorWnd".
Set index 5 for "hotswap:HotSwap AppletWindowClass".
Set index 6 for "eFatibne:TrayIconWClass".
Set index 7 for "explorer:SystemTrayMain:volume".
Set index 8 for "trayit:TrayItHook".
Set index 9 for "procexplore1021:PROCEXPL".
Set index 10 for "windowssearch:_SearchTrayIconClass_".
Insert button "explorer:ConnectionsTray".
Sort tray.
Failed to get button.
Set index 0 for "explorer:ConnectionsTray".
Set index 1 for "null".
Set index 2 for "explorer:ConnectionsTray:pci.8086.1096".
Set index 3 for "TrusteerNotificationAreaMsgBox".
Set index 4 for "plexMediaServer:PlexMediaServerTrayIconClass".
Set index 5 for "cgmenu:NortonCrashGuardMonitorWnd".
Set index 6 for "hotswap:HotSwap AppletWindowClass".
Set index 7 for "eFatibne:TrayIconWClass".
Set index 8 for "explorer:SystemTrayMain:volume".
Set index 9 for "trayit:TrayItHook".
Set index 10 for "procexplore1021:PROCEXPL".
Set index 11 for "windowssearch:_SearchTrayIconClass_".
Insert button "explorer:ConnectionsTray".
Sort tray.
Set index 0 for "null".
Set index 1 for "explorer:ConnectionsTray".
Set index 2 for "explorer:ConnectionsTray:pci.8086.1096".
Set index 3 for "TrusteerNotificationAreaMsgBox".
Set index 4 for "plexMediaServer:PlexMediaServerTrayIconClass".
Set index 5 for "cgmenu:NortonCrashGuardMonitorWnd".
Set index 6 for "hotswap:HotSwap AppletWindowClass".
Set index 7 for "eFatibne:TrayIconWClass".
Set index 8 for "explorer:SystemTrayMain:volume".
Set index 9 for "trayit:TrayItHook".
Set index 10 for "procexplore1021:PROCEXPL".
Set index 11 for "windowssearch:_SearchTrayIconClass_".
Insert button "hwinfo32:Afx400000b100116302ad".
Sort tray.
Set index 0 for "null".
Set index 1 for "hwinfo32:Afx400000b100116302ad".
Set index 2 for "explorer:ConnectionsTray:pci.8086.1096".
Set index 3 for "explorer:ConnectionsTray:pci.8086.1096".
Set index 4 for "TrusteerNotificationAreaMsgBox".
Set index 5 for "plexMediaServer:PlexMediaServerTrayIconClass".
Set index 6 for "cgmenu:NortonCrashGuardMonitorWnd".
Set index 7 for "hotswap:HotSwap AppletWindowClass".
Set index 8 for "eFatibne:TrayIconWClass".
Set index 9 for "explorer:SystemTrayMain:volume".
Set index 10 for "trayit:TrayItHook".
Set index 11 for "procexplore1021:PROCEXPL".
Set index 12 for "windowssearch:_SearchTrayIconClass_".
Insert button "hwinfo32:Afx400000b100116302ad".
Sort tray.
Set index 0 for "null".
Set index 1 for "hwinfo32:Afx400000b100116302ad".
Set index 2 for "hwinfo32:Afx400000b100116302ad".
Set index 3 for "explorer:ConnectionsTray:pci.8086.1096".
Set index 4 for "explorer:ConnectionsTray:pci.8086.1096".
Set index 5 for "TrusteerNotificationAreaMsgBox".
Set index 6 for "plexMediaServer:PlexMediaServerTrayIconClass".
Set index 7 for "cgmenu:NortonCrashGuardMonitorWnd".
Set index 8 for "hotswap:HotSwap AppletWindowClass".
Set index 9 for "eFatibne:TrayIconWClass".
Set index 10 for "explorer:SystemTrayMain:volume".
Set index 11 for "trayit:TrayItHook".
Set index 12 for "procexplore1021:PROCEXPL".
Set index 13 for "windowssearch:_SearchTrayIconClass_".
Insert button "hwinfo32:Afx400000b100116302ad".
Sort tray.
Set index 0 for "null".
Set index 1 for "hwinfo32:Afx400000b100116302ad".
Set index 2 for "hwinfo32:Afx400000b100116302ad".
Set index 3 for "hwinfo32:Afx400000b100116302ad".
Set index 4 for "explorer:ConnectionsTray:pci.8086.1096".
Set index 5 for "explorer:ConnectionsTray:pci.8086.1096".
Set index 6 for "TrusteerNotificationAreaMsgBox".
Set index 7 for "plexMediaServer:PlexMediaServerTrayIconClass".
Set index 8 for "cgmenu:NortonCrashGuardMonitorWnd".
Set index 9 for "hotswap:HotSwap AppletWindowClass".
Set index 10 for "eFatibne:TrayIconWClass".
Set index 11 for "explorer:SystemTrayMain:volume".
Set index 12 for "trayit:TrayItHook".
Set index 13 for "procexplore1021:PROCEXPL".
Set index 14 for "windowssearch:_SearchTrayIconClass_".
Insert button "explorer:ConnectionsTray".
Sort tray.
Set index 0 for "null".
Set index 1 for "hwinfo32:Afx400000b100116302ad".
Set index 2 for "hwinfo32:Afx400000b100116302ad".
Set index 3 for "hwinfo32:Afx400000b100116302ad".
Set index 4 for "null".
Set index 5 for "explorer:ConnectionsTray:pci.8086.1096".
Set index 6 for "explorer:ConnectionsTray:pci.8086.1096".
Set index 7 for "TrusteerNotificationAreaMsgBox".
Set index 8 for "plexMediaServer:PlexMediaServerTrayIconClass".
Set index 9 for "cgmenu:NortonCrashGuardMonitorWnd".
Set index 10 for "hotswap:HotSwap AppletWindowClass".
Set index 11 for "eFatibne:TrayIconWClass".
Set index 12 for "explorer:SystemTrayMain:volume".
Set index 13 for "trayit:TrayItHook".
Set index 14 for "procexplore1021:PROCEXPL".
Set index 15 for "windowssearch:_SearchTrayIconClass_".
Insert button "mbamtray:QTrayIconMessageWindowClass".
Sort tray.
Set index 0 for "null".
Set index 1 for "hwinfo32:Afx400000b100116302ad".
Set index 2 for "hwinfo32:Afx400000b100116302ad".
Set index 3 for "hwinfo32:Afx400000b100116302ad".
Set index 4 for "null".
Set index 5 for "explorer:ConnectionsTray:pci.8086.1096".
Set index 6 for "explorer:ConnectionsTray:pci.8086.1096".
Set index 7 for "TrusteerNotificationAreaMsgBox".
Set index 8 for "plexMediaServer:PlexMediaServerTrayIconClass".
Set index 9 for "cgmenu:NortonCrashGuardMonitorWnd".
Set index 10 for "hotswap:HotSwap AppletWindowClass".
Set index 11 for "eFatibne:TrayIconWClass".
Set index 12 for "explorer:SystemTrayMain:volume".
Set index 13 for "trayit:TrayItHook".
Set index 14 for "procexplore1021:PROCEXPL".
Set index 15 for "windowssearch:_SearchTrayIconClass_".
Set index 16 for "mbamtray:QTrayIconMessageWindowClass".
Insert button "explorer:ConnectionsTray".
Sort tray.
Set index 0 for "null".
Set index 1 for "hwinfo32:Afx400000b100116302ad".
Set index 2 for "hwinfo32:Afx400000b100116302ad".
Set index 3 for "hwinfo32:Afx400000b100116302ad".
Set index 4 for "null".
Set index 5 for "null".
Set index 6 for "explorer:ConnectionsTray:pci.8086.1096".
Set index 7 for "explorer:ConnectionsTray:pci.8086.1096".
Set index 8 for "TrusteerNotificationAreaMsgBox".
Set index 9 for "plexMediaServer:PlexMediaServerTrayIconClass".
Set index 10 for "cgmenu:NortonCrashGuardMonitorWnd".
Set index 11 for "hotswap:HotSwap AppletWindowClass".
Set index 12 for "eFatibne:TrayIconWClass".
Set index 13 for "explorer:SystemTrayMain:volume".
Set index 14 for "trayit:TrayItHook".
Set index 15 for "procexplore1021:PROCEXPL".
Set index 16 for "windowssearch:_SearchTrayIconClass_".
Set index 17 for "mbamtray:QTrayIconMessageWindowClass".
Insert button "explorer:ConnectionsTray".
Sort tray.
Set index 0 for "null".
Set index 1 for "hwinfo32:Afx400000b100116302ad".
Set index 2 for "hwinfo32:Afx400000b100116302ad".
Set index 3 for "hwinfo32:Afx400000b100116302ad".
Set index 4 for "null".
Set index 5 for "null".
Set index 6 for "null".
Set index 7 for "explorer:ConnectionsTray:pci.8086.1096".
Set index 8 for "explorer:ConnectionsTray:pci.8086.1096".
Set index 9 for "TrusteerNotificationAreaMsgBox".
Set index 10 for "plexMediaServer:PlexMediaServerTrayIconClass".
Set index 11 for "cgmenu:NortonCrashGuardMonitorWnd".
Set index 12 for "hotswap:HotSwap AppletWindowClass".
Set index 13 for "eFatibne:TrayIconWClass".
Set index 14 for "explorer:SystemTrayMain:volume".
Set index 15 for "trayit:TrayItHook".
Set index 16 for "procexplore1021:PROCEXPL".
Set index 17 for "windowssearch:_SearchTrayIconClass_".
Set index 18 for "mbamtray:QTrayIconMessageWindowClass".

:)

Link to comment
Share on other sites

On 10/12/2021 at 2:38 PM, Dave-H said:

the icons for HWiNFO, which i want on the very right of the tray, are appearing on the very left insted, which is not where they are in the "Order" registry key

Weird program, it uses random window class names, so identifiers I generate for icons differ across hwinfo restart…

I looked at PSTrayFactory to see how it solves this problem. Well, for me it didn't work (for some reason hwinfo icon wasn't listed at all, other icons were fine). But I noticed there is an option which allows to ignore window class name. I think, it's a good solution, but for SysTrayUtil it will require manual registry intervention. So, instead of hwinfo:Afx400RanDomMeSs there should be hwinfo:* in Order value (the * sign makes it match any class name). I implemented it in a new (test) dll I attached below.

(Actually, I refactored the code a lot, there might be new problems!)

On 10/12/2021 at 2:38 PM, Dave-H said:

Here is the debug if it gives any clues as to why this is happening.

Yes, It helps to understand what happens with hwinfo… Actually, I'd asked to make a log again, there is something wrong with some identifiers, I want to make sure it was fixed.

Also, what about Eudora? I don't see it in the log. Does it mean the problem with Eudora remains, or it just wasn't started?

systrayutil.dll

Link to comment
Share on other sites

Thanks, I tried with the new DLL (with Eudora and Firefox running this time!)
Unfortunately the Trusteer icon and the HWiNFO icons are still not obeying the order specified in the registry.

eudora:32770
firefox:MozillaWindowClass
windowssearch:_SearchTrayIconClass_
procexplore1021:PROCEXPL
explorer:ConnectionsTray:pci.8086.1096
plexMediaServer:PlexMediaServerTrayIconClass
cgmenu:NortonCrashGuardMonitorWnd
hotswap:HotSwap AppletWindowClass
eFatibne:TrayIconWClass
unlockerassistant:32770
explorer:SystemTrayMain:volume
trayit:TrayItHook
TrusteerNotificationAreaMsgBox
mbamtray:QTrayIconMessageWindowClass
hwinfo:*

Tray2.jpg.a80f5465d359588dc96b55db1be76e08.jpg

As you can see, HWiNFO's icons are still on the very left, where they seem to want to be whatever I do, and the Trusteer icon is next to them, although it should be between the Trayit icon (which is actually ProxHTTPSProxy) and the Malwarebytes icon.
:dubbio:
 

Link to comment
Share on other sites

13 minutes ago, Dave-H said:

HWiNFO's icons are still on the very left

Ah, sorry, should be hwinfo32:* instead. Basically, get the initial identifier (it was hwinfo32:Afx400000b100116102bd in your case) and replace everything after colon with asterisk.

16 minutes ago, Dave-H said:

Trusteer icon is next to them

I changed the algorithm which generates identifier. Now there should be a colon before TrusteerNotificationAreaMsgBox (like :TrusteerNotificationAreaMsgBox).

Identifier follows this format: EXENAME:CLASSNAME, where EXENAME is a lower case name of executable file without extension (like hwinfo32, eudora, etc), and CLASSNAME is a simplified window class name. EXENAME may be empty like in case of Trusteer (so it will be just :CLASSNAME). CLASSNAME can be * which matches any class (EXENAME:*).

(There are special cases for explorer:ConnectionsTray and explorer:SystemTrayMain, which have extra field in their identifiers, but that's another story.)

22 minutes ago, Dave-H said:
windowssearch:_SearchTrayIconClass_
plexMediaServer:PlexMediaServerTrayIconClass
eFatibne:TrayIconWClass

This is what I find wrong with identifiers… EXENAMEs should always be in lower case (plexMediaServer should become plexmediaserver), and CLASSNAMEs are simplified (they surely shouldn't contain underscores, so _SearchTrayIconClass_ should become SearchTrayIconClass). Can you check they're the same in the log?

Link to comment
Share on other sites

Hi guys, to debug this systrayutil.dll, can I do it from Command line?

I tried this:

debug "C:\WINDOWS\system32\systrayutil.dll"

but it says: "File not found". I am probably doing it wrong.

Link to comment
Share on other sites

@ntfoxy

Thanks very much, that seems to have made things work as they should!
:thumbup
What I need to check now is whether the three HWiNFO icons remain in the order that I want them to be in.
I have a dual processor machine, and the yellow and green numerical icons monitor my CPU cores' average temperatures.
I want the yellow icon  (CPU #0) to always be on the left of the green icon (CPU #1).
With PSTrayFactory, they would often be the wrong way around, and I would have to do a manual sort on the tray using a keyboard shortcut to correct that.
They seem right at present, but I will be interested to see if they are always right with your sorting utility, I will be delighted if they are!
Cheer, Dave.
:)

Link to comment
Share on other sites

Hey thank you ntfoxy for these XP enhancements. XP will always have the most special place for me as the OS that treated users right. It is lovely to see little enhancements for it that later Windows releases got. I no longer have XP on real hardware but my VMs will live on forever.

Link to comment
Share on other sites

OP is updated, as I released SysTrayUtil 1.1 which includes the fixes for incorrectly identified programs and ability to use * as CLASSNAME identifier.

In addition, a bug with incorrecly transformed identifiers was fixed. This will probably affect your configuration, @Dave-H. Here is the list of how identifiers were changed (according to the Order value you posted above).

 

windowssearch:_SearchTrayIconClass_windowssearch:SearchTrayIconClass
plexMediaServer:PlexMediaServerTrayIconClassplexmediaserver:PlexMediaServerTrayIconClass
hotswap:HotSwap AppletWindowClasshotswap:HotSwapAppletWindowClass
eFatibne:TrayIconWClassefatibne:TrayIconWClass
Everything else shouldn't be changed.

 

On 10/14/2021 at 4:31 PM, Dave-H said:

What I need to check now is whether the three HWiNFO icons remain in the order that I want them to be in.

There is additional inner identifier assigned to any tray icon by a program, it's just a number. However, it's a bad idea to rely on these numbers (to identify icons) as programs may use them as they wish. For instance, netshell.dll (which is loaded as a part of explorer.exe and displays network adapters in the tray) re-assigns a new number each time connection is down or up. Instead, I use a combination of EXENAME + CLASSNAME as identifier. But for netshell (explorer:ConnectionsTray identifiers) there is additional EXTRA field which contains hwid if available, so it would be possible to order network adapters separately. This a special case implemented for netshell only.

In other cases, it's impossible to do this. For example, if you have 2 hwinfo32 icons, you can't place any icon in between — SysTrayUtil will always reorder them so hwinfo32 icons will be placed next to each other. But the "number" I told above is still used to order them within the group!! This is why CPU 0 icon is always placed before CPU 1 — it's hwinfo32 has assigned properly ordered numbers for each tray icon. For other programs this may or may not work. However, it's a pretty rare case when a program have multiple tray icons, so I'm fine with this (for now, at least).

44 minutes ago, xpclient said:

I no longer have XP on real hardware but my VMs will live on forever.

I just have an old laptop (because I love old laptops), so I thought it will be a good idea to install XP on it. Apart from that, I didn't use Windows since 2016 or so.

Edited by ntfoxy
Link to comment
Share on other sites

Thanks very much, the new version seems to work fine after making the necessary modifications to the order list in the registry.
Just wondered if it's possible to define the order of the network icons, as with the HWiNFO icons.
I have two network connections, and at the moment the two icons are the wrong way around.
Is it possible to order them correctly and fix that order?
Cheers,
Dave.
:dubbio:

Link to comment
Share on other sites

On 10/19/2021 at 3:13 PM, Dave-H said:

Is it possible to order them correctly and fix that order?

With the current algorithm — no. It seems that you have 2 network adapters bound to the same hwid (either you have 2 identical network cards, or they have 2 interfaces).

Determining how connection tray icon corresponds to network adapter is a dirty hack: SysTrayUtil just extracts the adapter name from icon's tooltip and tries to find the adapter with the same name. However, it's possible to assign the same name to different adapters, which will also break the algorithm. In this case, I'd recommended to rename your adapters.

If your adapters are named differently (so you have multiple adapters assigned to the same hwid) and you still have this problem, you can try this fixed version. It uses adapter ID (assigned to each network adapter by Windows) instead of hwid as icon identifier, however this can lead to other problems (I'm not sure how well Windows keeps these ID across device reconnects, etc). You'll need to manually reorder connection icons.

systrayutil.dll

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...