Open nizos opened 6 years ago
I tried it, failed. Windows API does not support controlling different taskbars. If you have a better way, please let me know. I really want to solve this problem.
Hi ChanpleCai,
Great work!
I notice that when a window is maximized (say on monitor 1) and the taskbar is hidden on all monitors (monitors 1,2 & 3), if I move the mouse down to the taskbar area on one of the monitors where the window is not maximized (monitor 2 or 3), the taskbar will raise only on that particular monitor.
When doing that, the window focus is not taken away, I can still type on the maximized window on monitor 1 while still being able to see the taskbar on the monitor where the taskbar is raised.
I would really love for this to work for two reasons: 1 - Always being able to tell what time it is. 2- Always being able to see which programs are running and where to find them on the taskbar.
All of this while still being able to enjoy having a fully maximized window on the other monitors.
So this is what I am thinking: A - Find whatever underlying signal that is being sent to explorer.exe or the responsible service in this case that is responsible for triggering this behavior and try to inherit it and override it. B - Implement a custom taskbar that replaces the original taskbar on none-primary monitors (like Display Fusion has done).
Again, I would love for this to work and I understand that it might not be possible to implement due to the current limitations on the the operating system at the moment. I will look around for information and possible solutions and implementation methods if you are open to it, which gladly you seem to be, and I would be happy to do anything from my end as well to contribute towards this feature becoming possible.
Link to referenced Display Fusion taskbar in my previous comment (method B): https://www.displayfusion.com/Features/Taskbar/
Specifically, bullet #5: • Auto-Hide: Configure each of your taskbars to auto-hide, or to stay always visible.
Actually I am trying the A method you said. I found that the activation of the taskbar is related to the mouse event. yet, the simulated mouse event does not work for it. ^_^
the new Auto Mode partial support for multiple monitors, not perfect, but enough.
I bought it from the store and installed the latest release here as well. I don't see a difference. Maybe it hasn't been pushed yet? Thanks for the effort!
Ok I have tried building the source code. Your implementation works but it seems like there is some logical conflict in terms of behavior. The closest way I can explain it is that the bar behaves this way when maximizing different windows on different monitors:
https://i.imgur.com/e16qOEj.gif
I added a missing "break" at the bottom of this function in TaskbarController.cs:
switch (Settings.ModeType)
{
case AutoModeType.Disabled:
#if DEBUG
_autoMode = new DumbMode();
#endif
break;
case AutoModeType.ForegroundMode:
_autoMode = new ForegroundMode();
break;
case AutoModeType.ClassicAutoMode:
case AutoModeType.ClassicAdaptiveMode:
case AutoModeType.WhitelistMode:
case AutoModeType.BlacklistMode:
_autoMode = new AutoMode();
break;
default:
#if DEBUG
throw new ArgumentOutOfRangeException();
#else
Settings.ModeType = AutoModeType.Disabled;
#endif
break;
}
I would love to help you with this project but there is barely any comments on what anything does so I feel like I am trying to solve a maze.
This would really be a nice feature. I am looking forward too it (:
Ok I have tried building the source code. Your implementation works but it seems like there is some logical conflict in terms of behavior. The closest way I can explain it is that the bar behaves this way when maximizing different windows on different monitors:
https://i.imgur.com/e16qOEj.gif
I added a missing "break" at the bottom of this function in TaskbarController.cs:
switch (Settings.ModeType) { case AutoModeType.Disabled: #if DEBUG _autoMode = new DumbMode(); #endif break; case AutoModeType.ForegroundMode: _autoMode = new ForegroundMode(); break; case AutoModeType.ClassicAutoMode: case AutoModeType.ClassicAdaptiveMode: case AutoModeType.WhitelistMode: case AutoModeType.BlacklistMode: _autoMode = new AutoMode(); break; default: #if DEBUG throw new ArgumentOutOfRangeException(); #else Settings.ModeType = AutoModeType.Disabled; #endif break; }
I would love to help you with this project but there is barely any comments on what anything does so I feel like I am trying to solve a maze.
I wrote that piece of code a bit rough, I will add some comments later.
The new windows 11 version bypasses this problem. I will later add this logic to the windows 10 version.
Can you make the taskbar hide only on the display where a program is maximized and not all the others?