fox88, on 08 May 2017 - 12:11 PM, said:
New
unofficial build. If nothing gets broken, the next build could be released with language dlls.
I have your latest build. It has a minor but inconvenient issue with the following API
BOOL Shell_NotifyIcon(
_In_ DWORD dwMessage,
_In_ PNOTIFYICONDATA lpdata
);
My system is Windows 10 with Intel HD4000 and NVidia650M which means it has 2 graphics cards.
* When on HD4000 latest or standard Windows Video driver for this build in Intel Video Card, after a screen resolution change Emule can no longer communicate with Explorer.exe but Explorer.exe Systray can SendMessage(...) to Emule which means Emule can no longer minimize.
* This also happens after playing a game for example Resident Evil or Doom 2016 but even simple software which only changes screen resolution, Emule can no longer communicate and believes it has no longer a Systray Icon. But Since the Systray is a 'hidden' secret Window you can find with EnumWindow(...) or FindWindow(...) the Systray and Explorer can forward Window Message, like SendMessage(...) with SW_SHOW to Emule, but again Emule cannot communicate back to Explorer.exe
This happened and happens on all Windows 10 builds, and Emule is not the only affected program. But very few programs have this error, only 1 other program I have.
What I would like. I want when Explorer.exe is killed and restarted that Emule.exe receives the message that Explorer.exe created a new Window from the Systray class. Like Microsoft API for the Systray is documented an application must recreate the Systray Icon.
The other application that behaves the same as Emule in the Systray behaves to this rule, I can kill explorer.exe restart explorer.exe and that program receives that the Systray Window class is recreated and recreates its program Icon.
Current workaround is happily maximizing Emule or at least showing Emule, that way it removes the Systray Icon of Emule in the Tray notify area. Then I play Doom 2016 or Resident Evil or whatever game that changed the resolution or any other software like an emulator that uses not only NVidia but simply only changed the resolution of the screen.
Then I kill explorer.exe from TaskManager taskmgr.exe and restart explorer.exe
Emule should implement that only function if it's possible to recreate the systray icon as required by Microsoft its Systray API.
Because if Emule is in the Systray, and Explorer.exe gets killed, you cannot bring back Emule on the screen.
I consider this a design error in Windows 10, since I for only Emule and another single program have to kill explorer.exe after a simple screen resolution change.
Steps to repeat:
1 Run EMULE.EXE and minimize it to the Systray as a Systray Icon only
2 Kill Explorer.exe from task manager
3 Restart Explorer.exe from task manager
4 Emule can no longer be seen in systray or be brought back visible
5 Current solution unfortunately in that state is to kill emule.exe
6 Text and Items were magnified at 150% since it's a high DPI screen
I am not sure if NVidia Optimus is to blame, but since no other software except 1 has this problem it must be a tiny miscommunication between Emule and Explorer.exe
I can off course never change the screen resolution but then I cannot play games since the higher the screen resolution the game runs to slow.
EDIT: Important, as long as DPI is set at 100% I do not have systray icons malfunctioning. However with DPI at 150% or any other value Emule and another program Systray Icons malfunction after screen resolution change. With 4k monitors coming there is definately something wrong in Explorer.exe itself with some software at least. It is not the software. But still Emule.Exe should recreate the systray icon after killing Explorer.exe and restarting Explorer.exe since that is how Microsoft designed the Systray API. When the Systray area is recreated from a explorer.exe restart a system wide Window Message is broadcasted to every window including Emule, Emule should catch that message and behave accordingly. It's not Emule its fault but explorer strange things happen at high DPI screens, but those screens are becoming mainstream. Note, explorer.exe is both the taskbar, the systray and the Explorer Browser as well.
EDIT: The internet is full with people talking about their software too having problems with High DPI monitors on some software including Microsoft their products. Well the objective of my request was that if Explorer.exe is terminated/killed or crashed, and Explorer.exe is run again that Emule.exe will recreate its Systray Icon as Microsoft intended for these kind of troubles.
My workaround is to no longer use 150% DPI but exactly 149% DPI, no longer have to kill Explorer.exe (which is the taskbar and its systray as said before) after I played games or changed resolution. I think if you have 200% DPI and you would set it to 199% DPI it would work too. One minor inconvenience is I now have a very tiny mouse cursor but I prefer that over having to kill explorer.exe which affects emule.exe and other software. Another side effect is all monitors if you have multiple will have the same DPI. No more blurry Emule Icons, no more blurry Universal media server Icon, just by changing High DPI to 149% instead of 150%. This is definately a Microsoft problem. However my requests stands that if explorer restarts Emule will recreate its taskbar icon. Since that is how the systray API is designed.
This post has been edited by MMouse: 21 May 2017 - 01:53 PM