RudeWindowFixer: fix Windows taskbar always-on-top issues

Overview

RudeWindowFixer: fix Windows taskbar always-on-top issues

Brought to you by Etienne Dechamps - GitHub

If you are looking for executables, see the GitHub releases page.

Description

Ever felt frustrated by this?

Taskbar bug screencap

RudeWindowFixer is a small program that gets rid of at least one known "Windows taskbar not always on top" bug.

Specifically, it works around a proven bug in the internal Windows taskbar code where, under very specific circumstances, Windows mistakenly believes that you are using a full screen application and hides the taskbar.

Usage

  1. Download RudeWindowFixer.exe from the GitHub releases page.
  2. Run RudeWindowFixer.exe.
    • Nothing will happen at first; this is normal. RudeWindowFixer is quietly running in the background. You can check in the Task Manager if you want to make sure.
  3. That's it!
    • You will likely want to make RudeWindowFixer.exe run on startup so that it persists across reboots.
  4. Upvote this Microsoft bug report to hopefully get Microsoft to prioritize fixing the underlying Windows bug, which is described in detail below.

I am still experiencing issues even with RudeWindowFixer

RudeWindowFixer attempts to work around one known taskbar always-on-top bug (see next section for details). Unfortunately, the investigation revealed that the relevant Windows code paths are somewhat brittle and might be prone to variations of that bug (e.g. different triggers or problematic window state) that RudeWindowFixer might not be able to detect and fix.

Also note that all investigation and testing was done on Windows 11 21H2 22000.434; other Windows versions might behave differently.

If you notice that RudeWindowFixer does not fix the problem for you, or at least not consistently, do feel free to file an issue - it might be possible to instrument your system to gather detailed data about your problem, especially if you can reliably trigger it.

The bug in detail

Disclaimer: The following information was gathered through careful instrumentation of various window management facilities as well as reverse engineering (disassembly) of the relevant Windows code, helped by public Microsoft symbols. Reverse engineering is a difficult task where quick progress requires a fair amount of guesswork, so I wouldn't assume all the details below are exactly correct. This information applies to Windows 11 21H2 22000.434. The behaviour of other Windows versions might differ.

TL;DR

Here's a quick overview of one way this Windows bug can surface:

  • The taskbar "always on top" window property is controlled by a piece of internal Windows code called the Rude Window Manager.
  • The Rude Window Manager will only make the taskbar "always on top" on a given monitor if, among all the windows located on that monitor, the top (foreground) window is not a full screen window.
  • A minimized window is not "located on" any monitor and is therefore never seen as the "top" window by the Rude Window Manager.
  • When a minimized window is activated, a race condition can occur wherein the Rude Window Manager still sees the window as minimized and therefore does not treat it as the new "top" window.
  • If the next window located on that monitor happens to be a full screen window, the Rude Window Manager will wrongly conclude that a full screen window is on top, and wrongly drop the taskbar "always on top" property.
  • This can happen even when there is no apparent full screen window, because some applications create transparent "click-through" full screen windows that are essentially invisible, but can still interfere with the Rude Window Manager.

The rest of this section go into each of these points in more detail.

Taskbar "always on top" behavior

During normal usage, the Windows taskbar is "always on top" of other windows. More specifically, the taskbar window (Shell_TrayWnd window class, part of explorer.exe) has the WS_EX_TOPMOST extended window style.

However, there is a case where Windows will drop the "always on top" property and will put the taskbar behind all other windows. This happens when Windows believes the top (foreground) window is a full screen application. This is to prevent the taskbar from obscuring the full screen application.

The Rude Window Manager

In internal Windows code, this full screen detection logic is implemented in an internal class called the rude window manager (twinui!CGlobalRudeWindowManager, also running in explorer.exe). Internally, the code uses the term rude window to refer to a full screen window, and to a rude monitor to refer to a monitor on which the top window is a rude (full screen) window. RudeWindowFixer is named after this terminology.

(If you are lucky enough to have access to the Windows source, you will find this code in shell\twinui\rudewindowmanager\lib\globalrudewindowmanager.cpp.)

Roughly, the rude window manager is implemented as follows:

  1. Listen for specific window management events.
    • Most of these events come from shell hook messages. For the purpose of this discussion, we are mostly interested in window activation messages (HSHELL_WINDOWACTIVATED and HSHELL_RUDEAPPACTIVATED - note the differences between the two aren't clear, and the rude window manager treats them the same).
  2. If one of these events occur, twinui!CGlobalRudeWindowManager::RecalculateRudeWindowState() will look at each monitor and determine if it should be considered "rude".
  3. In the event a monitor "rudeness" changes, notifications are delivered to other components through CRudeWindowManager.
    • This notably includes the code in charge of the taskbar, through Explorer!CTray::OnRudeWindowStateChange(), which calls Taskbar!TrayUI::RudenessChanged(), which calls Taskbar!TrayUI::_ResetZorder(), which finally sets or unsets the "always on top" property of the taskbar window based on the new state.

Let's focus on step (2).

What makes a monitor "rude"?

RecalculateRudeWindowState() looks at all visible windows and looks at a number of window properties to make this determination. For the purpose of this discussion, the most relevant property are the window dimensions (i.e. its spatial coordinates and size). These are determined by RudeWindowWin32Functions::GetWindowRectForFullscreenCheck() which internally uses GetWindowRect().

(If the window has any of the WS_THICKFRAME or WS_CAPTION style bits, i.e. it has a border, then GetClientRect() is used instead and the result is converted to screen coordinates using MapWindowPoints(). This subtlety doesn't matter much for the purposes of this discussion.)

A window is deemed to be located on a monitor if its dimensions overlap with that monitor. Within the set of windows that are on a given monitor, the window that comes at the top of the Z-order is defined as the top (foreground) window for that monitor. If that top window happens to completely cover the monitor, then the window and monitor are considered rude.

Asking for trouble: rudeness state desynchronization

The fundamental problem with the way CGlobalRudeWindowManager works is that it looks at a wide set of window properties, but it is not necessarily notified when some of these properties change. Indeed the rude window manager only listens to a fairly narrow set of events (mostly window activation events). This can lead to the monitor rudeness state getting out of sync, as it might not be recomputed in response to changes to window properties.

If this happens, the taskbar might wrongly behave as if a full screen window is on top and drop itself to the background (or vice-versa), even though that is not the case.

In theory, the missed event could be a change to any kind of property the rude window manager could be interested in. RudeWindowFixer focuses on one especially problematic scenario that we're going to discuss next.

Missed changes to window dimensions

Consider the following sequence of events:

  1. A window is activated and thus comes to the top (foreground).
  2. CGlobalRudeWindowManager runs and calculate the new rudeness state.
  3. The dimensions of the window that was just activated change.

A change to window dimensions is not an event CGlobalRudeWindowManager reacts to. (The code suggests it might be notified if the window is becoming full screen - but as we'll see, that won't help with this particular bug.) This can lead to rudeness state getting out of sync.

A race condition: activating a minimized window

The animated screencap shown at the top of this document shows the bug being triggered by activating a minimized Firefox window. As it turns out, there is a very specific (and quite subtle!) reason why opening a minimized window can trigger a rudeness state desync.

When a minimized window is activated (e.g. by clicking on it in the taskbar, as shown in the screencap), the following occurs immediately (among other things):

  • The minimized (WS_ICONIC) window style is removed.
  • The window is moved to the foreground, i.e. the top of the Z-order.
  • HSHELL_WINDOWACTIVATED/HSHELL_RUDEAPPACTIVATED notifications are delivered to registered listeners, including the Rude Window Manager.
  • A WM_WINDOWPOSCHANGING message is sent to the window.

Now here's the important part: the window dimensions are only updated after the window has processed the WM_WINDOWPOSCHANGING message. This is because the window can make changes to the suggested dimensions while processing this message, so the final dimensions are not known until the message has been completely handled by the application.

The amount of time it takes for the change in window dimensions to take place is therefore up to the application. It is potentially unbounded, varies depending on the application, and is not necessarily deterministic. This explains why the problem is not always reproducible and seems to occur more or less often depending on the application. Firefox seems especially prone to this problem, for example. At the other extreme, you'll have a hard time triggering it with something like Notepad. For demonstration purposes, DelayedWindowPos from the WindowInvestigator toolbox can be used to simulate a window with arbitrary WM_WINDOWPOSCHANGING processing delays.

So how does this relate to the Rude Window Manager? Well, in this context, RecalculateRudeWindowState() is called on receipt of the HSHELL_WINDOWACTIVATED or HSHELL_RUDEAPPACTIVATED message, which is sent around the same time as WM_WINDOWPOSCHANGING. This means that the new rudeness state is calculated at the same time the new top window is processing the WM_WINDOWPOSCHANGING message. These two processes will therefore race against each other. If the window was quick enough to process the WM_WINDOWPOSCHANGING message in time, the Rude Window Manager will use the final dimensions and compute the correct state. Conversely, if the window is too slow to process the message, the Rude Window Manager will operate based on stale window dimensions, and potentially compute an incorrect state.

Unfortunately, the Rude Window Manager is not notified again when window dimensions finally change (unless perhaps it is becoming full screen, but that doesn't have to be the case here). Therefore, that incorrect state will persist until the next event occurs - typically, when activating another window.

Dimensions of minimized windows

We still need to discuss is why this is a problem for initially minimized windows specifically. This is because, for historical reasons, Windows moves windows to an arbitrary (-32000, -32000) position when they are minimized. This position is what RecalculateRudeWindowState() will see if it "wins" the race and retrieves the window position before the application had a chance to process the WM_WINDOWPOSCHANGING message.

This is important, because a window that is at coordinates (-32000, -32000) does not overlap with any monitor. Therefore, the Rude Window Manager will not consider that window to be the top (foreground) window on any monitor. As far as the Rude Window Manager is concerned, it's as if that window does not exist at all.

In contrast, if the window is not initially minimized, then it already has proper dimensions, and the Rude Window Manager will correctly determine which monitor it's on, no matter who "wins" the race condition. This is why this bug typically only surfaces when activating an initially minimized window.

Full screen windows and minimized windows

As we just discussed, when the bug is triggered, the Rude Window Manager's assessment of which window is the top window is incorrect. Instead of treating the window that was just activated as the top window, the Rude Window Manager will wrongly believe the next window in the Z-order is the top window.

If that incorrect top window is not a full screen window, then this is not a real problem in practice: the monitor was not rude before, and it's still not rude now. The taskbar therefore keeps its "always on top" property, and everything is still fine.

We can therefore deduce that this bug only surfaces when activating a minimized window and the next window in the Z-order is a full screen window. In other words, when switching directly from a full screen window to an initially minimized window.

The last piece of the puzzle: sneaky full screen windows

Now, at this point, if you are not using any full screen applications (games, video players), you might think this investigation does not apply to you and is a gigantic waste of time.

In fact, even if you are using such applications, you might reasonably object that it's actually pretty hard to switch directly from a full screen window to a minimized window. You could do it from the taskbar, but then you'd need to activate the taskbar first, since it's not shown on top of full screen applications - but then you're not switching directly from the full screen window anymore. You could also do it using ALT+TAB, but that's also indirect since you're going through the ALT+TAB window itself. (The ALT+TAB window is a bit special - it is a full screen window, but it's not treated as such by the Rude Window Manager, because it has a magic "NonRudeHWND" window property that the Rude Window Manager recognizes.)

Clearly we're still missing something here. If there's no full screen window to switch from, then how can this bug be triggered?

The answer is: there is a full screen window. You just can't see it!

Indeed, it is possible for applications to set up windows that are:

  • Transparent, using the layered window mechanism (WS_EX_LAYERED extended window style), combined with transparency effects such as WS_EX_TRANSPARENT or SetLayeredWindowAttributes().
  • Click-through, using the WS_EX_NOACTIVATE extended window style. This prevents the window from capturing user input, which instead passes through to the window below it.
  • Not listed in window lists such as the taskbar or ALT+TAB, again using specific styles.

If a full screen window does all of the above, then it de facto becomes essentially invisible to the user; it's as if the window isn't there. This basically means you can have full screen windows on your monitor without realizing it.

You can spot these "sneaky" full screen windows using specialized tools such as GuiPropView or WindowInvestigator WindowMonitor. A notable example of a sneaky full screen window is the GeForce Experience overlay window, which exists as long as the "overlay" feature is enabled, even when not actively using the overlay. WindowInvestigator also provides a TransparentFullscreenWindow tool that simulates a sneaky full screen window.

GeForce experience overlay window properties

Here's the thing: these sneaky full screen windows might be invisible to the user, but they are definitely visible to the Rude Window Manager!

Because these windows cannot be activated directly by the user, they will naturally tend to fall to the bottom of the window Z-order. The Rude Window Manager will typically not see them as top (foreground) windows. There is one notable exception, though: if all windows are minimized, i.e. the user is looking at the desktop, then a sneaky fullscreen window will become the top window, and the Rude Window Monitor will wrongly conclude the monitor is rude. At this point the taskbar has already lost its "always on top" state, but that is not yet apparent to the user because there is no opaque window sitting atop the taskbar.

If the Rude Window Manager finds itself in this state, and the user activates a minimized window by clicking on its icon in the taskbar, then the race we described previously will take place, the Rude Window Manager can miss the new top window, and fail to switch the monitor to the non-rude state.

Putting it all together

We now have all the information we need to reconstruct the sequence of events that trigger the bug:

  1. All windows are minimized and the user is looking at the desktop.
  2. Unbeknownst to the user, they are also looking at a transparent clickthrough full screen window, such as the GeForce experience overlay window.
  3. The last run of CGlobalRudeWindowManager::RecalculateRudeWindowState() concluded that the sneaky full screen window is on top, and the monitor is therefore rude. The taskbar does not have the "always on top" property, but the user is unlikely to notice since they don't have any windows open.
  4. The user activates a minimized window by clicking its taskbar icon.
  5. CGlobalRudeWindowManager::RecalculateRudeWindowState() runs. Unfortunately, the activated window dimensions have not been updated yet. The window is still located at the "dummy" minimized position (-32000, -32000), which is not on the monitor; therefore, RecalculateRudeWindowState() ignores that window, and the computed state ends up the same as (3). The monitor is still rude and the taskbar is not "always on top".
  6. The newly activated window finishes processing WM_WINDOWPOSCHANGING and the window dimensions are established on the monitor - but at this point it's too late.
  7. Because the Rude Window Manager has already run, and is not triggered by a change in window dimensions, the "always on top" property is not reinstated on the taskbar, which ends up falling behind the newly activated window.

Firefox timeline

How RudeWindowFixer works

The logic in RudeWindowFixer is quite trivial. RudeWindowFixer listens to the same shell hook messages as the Rude Window Manager. When an event is received, RudeWindowFixer sets a timer for a fixed amount of time (currently 50 milliseconds). When the timer elapses, RudeWindowFixer forces the Rude Window Manager to run again by sending a message that it is known to listen for. That's it.

The idea is that 50 ms should be more than enough time for the activated window to finish processing the WM_WINDOWPOSCHANGING message. (For example, Firefox takes less than ~20 ms.) Therefore, by the time the Rude Window Manager is forced to run a second time, the window should have settled unto its final position, and the Rude Window Manager should therefore be able to determine the correct top window.

Obviously the fixed delay is somewhat arbitrary, and it is entirely possible for a window to take more than 50 milliseconds to settle. A more robust solution would trigger the Rude Window Manager as soon as the WM_WINDOWPOSCHANGING message has been processed, regardless of how long that takes. This might be technically feasible using hooks, but such an approach would be complicated and would present higher potential for harmful side effects.

In theory, RudeWindowFixer can mitigate any issue where the Rude Window Manager is racing against any shell hook event, not necessarily the precise sequence of events described above. Therefore, RudeWindowFixer could help even if your situation does not exactly match the one RudeWindowFixer was designed to address. However, RudeWindowFixer is unlikely to help with Rude Window Manager bugs that do not involve a shell hook event race condition.

See also

  • This SuperUser question and this one discuss taskbar always on top issues.
  • This bug report is the first known public report of what looks like similar issues, going all the way back to 2002!
  • The WindowInvestigator toolbox provides useful tools if you want to investigate similar issues yourself.

Developer information

.github/workflows/continuous-integration.yml

RudeWindowFixer is designed to be built using CMake within the Microsoft Visual C++ 2019 toolchain native CMake support.

There are no dependencies besides the Windows SDK.

You might also like...
Just another
Just another "Won't Fix" Windows Privilege Escalation from User to Domain Admin.

RemotePotato0 Just another "Won't Fix" Windows Privilege Escalation from User to Domain Admin. RemotePotato0 is an exploit that allows you to escalate

Dock - Desktop Taskbar.

Dock CutefishOS application dock. Dependencies sudo pacman -S gcc cmake qt5-base qt5-quickcontrols2 kwindowsystem You also need fishui and libcutefish

Taskbar Labeler is a PoC/research/learning project.
Taskbar Labeler is a PoC/research/learning project.

Taskbar Labeler Taskbar Labeler is a PoC/research/learning project. It replaces the rendering of certain icons on the taskbar with a colored rectangle

Quick fix to iphone usb tethering with ios14 or higher for Linux kernel lower than 5.10.4

Quick fix to Linux Iphone USB tethering with IOS 14 or higher (Tested with ubuntu 18.04, kernel 5.4.0-65, if you fail in the build, please download yo

Fix some extrinsic parameter importing problems. 6-axis IMU works now. Lidar without ring works now.

LVI-SAM-MODIFIED This repository is a modified version of LVI-SAM. Modification Add function to get extrinsic parameters.The original code assumes the

Somewhat Universal Widescreen Fix

SUWSF Somewhat Universal Widescreen Fix is intended to enable widescreen aspect ratios (e.g. 21:9, 32:9, 48:9) in games where it is unsupported. WARNI

This is a library that can fix the crash on android 5.0 and 5.1 caused by modified utf8 converting.

FixModifiedUtf8ConvertError This is a library that can fix the crash on android 5.0 and 5.1 caused by modified utf8 converting. What's this On Android

TTGO GPS lock fix with platformio

TTGO_T-beam_GPS-reset converted for easy upload with platformio Based on Fork by ErikThevking https://github.com/eriktheV-king/TTGO_T-beam_GPS-reset T

Universal fix for Google SafetyNet on Android devices with hardware attestation and unlocked bootloaders.

Universal SafetyNet Fix This is a universal fix for SafetyNet on devices with hardware-backed attestation and unlocked bootloaders (or custom verified

Comments
  • Taskbar loses topmost when clicking at the same time the taskbar finishes hiding

    Taskbar loses topmost when clicking at the same time the taskbar finishes hiding

    HWND: 0x00000000000303E4
    PID: 12772 TID: 13796 "C:\Windows\explorer.exe"
    Class name: "ThumbnailDeviceHelperWnd"
    Extended styles: 0x08280088
    Styles: 0x94000000
    Window rect: (0, 0, 1, 1)
    Client rect: (0, 0, 0, 0)
    Placement: showCmd 1 minPosition (-1, -1) maxPosition (-1, -1), normalPosition (0, 0, 1, 1)
    Text: ""
    Shell managed: FALSE
    Shell frame: FALSE
    Overpanning: FALSE
    Band: 16
    Has "NonRudeHWND" property: TRUE
    Has non-rude added by RudeWindowFixer property: TRUE
    Has "LivePreviewWindow" property: FALSE
    Has "TreatAsDesktopFullscreen" property: FALSE
    Is window: TRUE
    DWM is cloaked: 0x00000001
    Is iconic: FALSE
    Is visible: TRUE
    
    HWND: 0x00000000000609FE
    PID: 16092 TID: 18064 "C:\Program Files\WindowsApps\Microsoft.WindowsTerminal_1.11.3471.0_x64__8wekyb3d8bbwe\WindowsTerminal.exe"
    Class name: "CASCADIA_HOSTING_WINDOW_CLASS"
    Extended styles: 0x00000100
    Styles: 0x14CF0000
    Window rect: (94, 101, 1262, 741)
    Client rect: (0, 0, 1153, 632)
    Placement: showCmd 1 minPosition (-1, -1) maxPosition (-1, -1), normalPosition (94, 101, 1262, 741)
    Text: "Default"
    Shell managed: FALSE
    Shell frame: FALSE
    Overpanning: FALSE
    Band: 1
    Has "NonRudeHWND" property: FALSE
    Has non-rude added by RudeWindowFixer property: FALSE
    Has "LivePreviewWindow" property: FALSE
    Has "TreatAsDesktopFullscreen" property: FALSE
    Is window: TRUE
    DWM is cloaked: 0x00000000
    Is iconic: FALSE
    Is visible: TRUE
    
    HWND: 0x000000000005061A
    PID: 7212 TID: 18388 "C:\Windows\explorer.exe"
    Class name: "CabinetWClass"
    Extended styles: 0x00000100
    Styles: 0x15CF0000
    Window rect: (3832, 1092, 5528, 2158)
    Client rect: (0, 0, 1680, 1057)
    Placement: showCmd 3 minPosition (-1, -1) maxPosition (-1, -1), normalPosition (3855, 1160, 5527, 2157)
    Text: "Downloads"
    Shell managed: FALSE
    Shell frame: FALSE
    Overpanning: FALSE
    Band: 1
    Has "NonRudeHWND" property: FALSE
    Has non-rude added by RudeWindowFixer property: FALSE
    Has "LivePreviewWindow" property: FALSE
    Has "TreatAsDesktopFullscreen" property: FALSE
    Is window: TRUE
    DWM is cloaked: 0x00000000
    Is iconic: FALSE
    Is visible: TRUE
    
    HWND: 0x00000000001104BE
    PID: 12400 TID: 9148 "C:\Program Files\Mozilla Firefox\firefox.exe"
    Class name: "MozillaWindowClass"
    Extended styles: 0x00000100
    Styles: 0x36CF0000
    Window rect: (-32000, -32000, -31763, -31961)
    Client rect: (0, 0, 221, 1)
    Placement: showCmd 2 minPosition (-21333, -21333) maxPosition (-1, -1), normalPosition (4740, 1113, 5527, 2157)
    Text: "GeForce Experience sneaky full screen window permanently at top level makes monitor rude À Issue #2 À dechamps/RudeWindowFixer - Mozilla Firefox"
    Shell managed: FALSE
    Shell frame: FALSE
    Overpanning: FALSE
    Band: 1
    Has "NonRudeHWND" property: FALSE
    Has non-rude added by RudeWindowFixer property: FALSE
    Has "LivePreviewWindow" property: FALSE
    Has "TreatAsDesktopFullscreen" property: FALSE
    Is window: TRUE
    DWM is cloaked: 0x00000000
    Is iconic: TRUE
    Is visible: TRUE
    
    HWND: 0x000000000002038C
    PID: 2092 TID: 2096 "C:\Users\PC4-User\Desktop\Privat\Discord\app-1.0.9004\Discord.exe"
    Class name: "Chrome_WidgetWin_1"
    Extended styles: 0x00000100
    Styles: 0x15C70000
    Window rect: (-7, -7, 2568, 1448)
    Client rect: (0, 0, 2560, 1438)
    Placement: showCmd 3 minPosition (-21333, -21333) maxPosition (-1, -1), normalPosition (0, 0, 1280, 1440)
    Text: "MrMystery - Discord"
    Shell managed: FALSE
    Shell frame: FALSE
    Overpanning: FALSE
    Band: 1
    Has "NonRudeHWND" property: FALSE
    Has non-rude added by RudeWindowFixer property: FALSE
    Has "LivePreviewWindow" property: FALSE
    Has "TreatAsDesktopFullscreen" property: FALSE
    Is window: TRUE
    DWM is cloaked: 0x00000000
    Is iconic: FALSE
    Is visible: TRUE
    
    HWND: 0x000000000001012A
    PID: 12772 TID: 12192 "C:\Windows\explorer.exe"
    Class name: "Shell_SecondaryTrayWnd"
    Extended styles: 0x00000088
    Styles: 0x96000000
    Window rect: (3840, 2148, 5520, 2196)
    Client rect: (0, 0, 1680, 48)
    Placement: showCmd 1 minPosition (-1, -1) maxPosition (-1, -1), normalPosition (3840, 2148, 5520, 2196)
    Text: ""
    Shell managed: FALSE
    Shell frame: FALSE
    Overpanning: FALSE
    Band: 1
    Has "NonRudeHWND" property: FALSE
    Has non-rude added by RudeWindowFixer property: FALSE
    Has "LivePreviewWindow" property: FALSE
    Has "TreatAsDesktopFullscreen" property: FALSE
    Is window: TRUE
    DWM is cloaked: 0x00000000
    Is iconic: FALSE
    Is visible: TRUE
    
    HWND: 0x00000000000D0590
    PID: 13968 TID: 18320 "C:\Windows\System32\Taskmgr.exe"
    Class name: "TaskManagerWindow"
    Extended styles: 0x00000100
    Styles: 0x14CF0000
    Window rect: (101, 167, 1393, 1308)
    Client rect: (0, 0, 1277, 1083)
    Placement: showCmd 1 minPosition (-1, -1) maxPosition (-1, -1), normalPosition (101, 167, 1393, 1308)
    Text: "Task-Manager"
    Shell managed: FALSE
    Shell frame: FALSE
    Overpanning: FALSE
    Band: 1
    Has "NonRudeHWND" property: FALSE
    Has non-rude added by RudeWindowFixer property: FALSE
    Has "LivePreviewWindow" property: FALSE
    Has "TreatAsDesktopFullscreen" property: FALSE
    Is window: TRUE
    DWM is cloaked: 0x00000000
    Is iconic: FALSE
    Is visible: TRUE
    
    HWND: 0x000000000009058A
    PID: 7212 TID: 7060 "C:\Windows\explorer.exe"
    Class name: "CabinetWClass"
    Extended styles: 0x00000100
    Styles: 0x14CF0000
    Window rect: (773, 66, 2449, 1065)
    Client rect: (0, 0, 1661, 992)
    Placement: showCmd 1 minPosition (-1, -1) maxPosition (-1, -1), normalPosition (773, 66, 2449, 1065)
    Text: "Downloads"
    Shell managed: FALSE
    Shell frame: FALSE
    Overpanning: FALSE
    Band: 1
    Has "NonRudeHWND" property: FALSE
    Has non-rude added by RudeWindowFixer property: FALSE
    Has "LivePreviewWindow" property: FALSE
    Has "TreatAsDesktopFullscreen" property: FALSE
    Is window: TRUE
    DWM is cloaked: 0x00000000
    Is iconic: FALSE
    Is visible: TRUE
    
    HWND: 0x000000000001041C
    PID: 13984 TID: 16752 "C:\Windows\SystemApps\MicrosoftWindows.Client.CBS_cw5n1h2txyewy\TextInputHost.exe"
    Class name: "Windows.UI.Core.CoreWindow"
    Extended styles: 0x00200000
    Styles: 0x94000000
    Window rect: (0, 0, 2560, 1440)
    Client rect: (0, 0, 2560, 1440)
    Placement: showCmd 1 minPosition (-1, -1) maxPosition (-1, -1), normalPosition (0, 0, 2560, 1440)
    Text: "Windows-Eingabeerfahrung"
    Shell managed: TRUE
    Shell frame: FALSE
    Overpanning: FALSE
    Band: 1
    Has "NonRudeHWND" property: FALSE
    Has non-rude added by RudeWindowFixer property: FALSE
    Has "LivePreviewWindow" property: FALSE
    Has "TreatAsDesktopFullscreen" property: FALSE
    Is window: TRUE
    DWM is cloaked: 0x00000002
    Is iconic: FALSE
    Is visible: TRUE
    
    HWND: 0x0000000000010208
    PID: 12772 TID: 13280 "C:\Windows\explorer.exe"
    Class name: "DummyDWMListenerWindow"
    Extended styles: 0x08200080
    Styles: 0x94000000
    Window rect: (0, 0, 0, 0)
    Client rect: (0, 0, 0, 0)
    Placement: showCmd 1 minPosition (-1, -1) maxPosition (-1, -1), normalPosition (0, 0, 0, 0)
    Text: ""
    Shell managed: FALSE
    Shell frame: FALSE
    Overpanning: FALSE
    Band: 1
    Has "NonRudeHWND" property: FALSE
    Has non-rude added by RudeWindowFixer property: FALSE
    Has "LivePreviewWindow" property: FALSE
    Has "TreatAsDesktopFullscreen" property: FALSE
    Is window: TRUE
    DWM is cloaked: 0x00000001
    Is iconic: FALSE
    Is visible: TRUE
    
    HWND: 0x00000000000101FE
    PID: 12772 TID: 13280 "C:\Windows\explorer.exe"
    Class name: "EdgeUiInputTopWndClass"
    Extended styles: 0x08200080
    Styles: 0x94000000
    Window rect: (3855, 1100, 5520, 1104)
    Client rect: (0, 0, 1665, 4)
    Placement: showCmd 1 minPosition (-1, -1) maxPosition (-1, -1), normalPosition (3855, 1100, 5520, 1104)
    Text: ""
    Shell managed: FALSE
    Shell frame: FALSE
    Overpanning: FALSE
    Band: 1
    Has "NonRudeHWND" property: FALSE
    Has non-rude added by RudeWindowFixer property: FALSE
    Has "LivePreviewWindow" property: FALSE
    Has "TreatAsDesktopFullscreen" property: FALSE
    Is window: TRUE
    DWM is cloaked: 0x00000001
    Is iconic: FALSE
    Is visible: TRUE
    
    HWND: 0x00000000000101EC
    PID: 12772 TID: 13280 "C:\Windows\explorer.exe"
    Class name: "EdgeUiInputTopWndClass"
    Extended styles: 0x08200080
    Styles: 0x94000000
    Window rect: (15, 0, 2560, 3)
    Client rect: (0, 0, 2544, 2)
    Placement: showCmd 1 minPosition (-1, -1) maxPosition (-1, -1), normalPosition (15, 0, 2560, 3)
    Text: ""
    Shell managed: FALSE
    Shell frame: FALSE
    Overpanning: FALSE
    Band: 1
    Has "NonRudeHWND" property: FALSE
    Has non-rude added by RudeWindowFixer property: FALSE
    Has "LivePreviewWindow" property: FALSE
    Has "TreatAsDesktopFullscreen" property: FALSE
    Is window: TRUE
    DWM is cloaked: 0x00000001
    Is iconic: FALSE
    Is visible: TRUE
    
    HWND: 0x00000000000101D8
    PID: 12772 TID: 13280 "C:\Windows\explorer.exe"
    Class name: "WorkerW"
    Extended styles: 0x00000180
    Styles: 0x14C00000
    Window rect: (0, 0, 15, 15)
    Client rect: (0, 0, 0, 0)
    Placement: showCmd 1 minPosition (-1, -1) maxPosition (-1, -1), normalPosition (0, 0, 15, 15)
    Text: ""
    Shell managed: FALSE
    Shell frame: FALSE
    Overpanning: FALSE
    Band: 1
    Has "NonRudeHWND" property: FALSE
    Has non-rude added by RudeWindowFixer property: FALSE
    Has "LivePreviewWindow" property: FALSE
    Has "TreatAsDesktopFullscreen" property: FALSE
    Is window: TRUE
    DWM is cloaked: 0x00000001
    Is iconic: FALSE
    Is visible: TRUE
    
    HWND: 0x00000000000101C8
    PID: 12772 TID: 13280 "C:\Windows\explorer.exe"
    Class name: "DummyDWMListenerWindow"
    Extended styles: 0x08200080
    Styles: 0x94000000
    Window rect: (0, 0, 0, 0)
    Client rect: (0, 0, 0, 0)
    Placement: showCmd 1 minPosition (-1, -1) maxPosition (-1, -1), normalPosition (0, 0, 0, 0)
    Text: ""
    Shell managed: FALSE
    Shell frame: FALSE
    Overpanning: FALSE
    Band: 1
    Has "NonRudeHWND" property: FALSE
    Has non-rude added by RudeWindowFixer property: FALSE
    Has "LivePreviewWindow" property: FALSE
    Has "TreatAsDesktopFullscreen" property: FALSE
    Is window: TRUE
    DWM is cloaked: 0x00000001
    Is iconic: FALSE
    Is visible: TRUE
    
    HWND: 0x00000000000101C6
    PID: 12772 TID: 13280 "C:\Windows\explorer.exe"
    Class name: "DummyDWMListenerWindow"
    Extended styles: 0x08200080
    Styles: 0x94000000
    Window rect: (0, 0, 0, 0)
    Client rect: (0, 0, 0, 0)
    Placement: showCmd 1 minPosition (-1, -1) maxPosition (-1, -1), normalPosition (0, 0, 0, 0)
    Text: ""
    Shell managed: FALSE
    Shell frame: FALSE
    Overpanning: FALSE
    Band: 1
    Has "NonRudeHWND" property: FALSE
    Has non-rude added by RudeWindowFixer property: FALSE
    Has "LivePreviewWindow" property: FALSE
    Has "TreatAsDesktopFullscreen" property: FALSE
    Is window: TRUE
    DWM is cloaked: 0x00000001
    Is iconic: FALSE
    Is visible: TRUE
    
    HWND: 0x00000000000101C4
    PID: 12772 TID: 13280 "C:\Windows\explorer.exe"
    Class name: "DummyDWMListenerWindow"
    Extended styles: 0x08200080
    Styles: 0x94000000
    Window rect: (0, 0, 0, 0)
    Client rect: (0, 0, 0, 0)
    Placement: showCmd 1 minPosition (-1, -1) maxPosition (-1, -1), normalPosition (0, 0, 0, 0)
    Text: ""
    Shell managed: FALSE
    Shell frame: FALSE
    Overpanning: FALSE
    Band: 1
    Has "NonRudeHWND" property: FALSE
    Has non-rude added by RudeWindowFixer property: FALSE
    Has "LivePreviewWindow" property: FALSE
    Has "TreatAsDesktopFullscreen" property: FALSE
    Is window: TRUE
    DWM is cloaked: 0x00000001
    Is iconic: FALSE
    Is visible: TRUE
    
    HWND: 0x00000000000101C2
    PID: 12772 TID: 13280 "C:\Windows\explorer.exe"
    Class name: "DummyDWMListenerWindow"
    Extended styles: 0x08200080
    Styles: 0x94000000
    Window rect: (0, 0, 0, 0)
    Client rect: (0, 0, 0, 0)
    Placement: showCmd 1 minPosition (-1, -1) maxPosition (-1, -1), normalPosition (0, 0, 0, 0)
    Text: ""
    Shell managed: FALSE
    Shell frame: FALSE
    Overpanning: FALSE
    Band: 1
    Has "NonRudeHWND" property: FALSE
    Has non-rude added by RudeWindowFixer property: FALSE
    Has "LivePreviewWindow" property: FALSE
    Has "TreatAsDesktopFullscreen" property: FALSE
    Is window: TRUE
    DWM is cloaked: 0x00000001
    Is iconic: FALSE
    Is visible: TRUE
    
    HWND: 0x0000000000020020
    PID: 12772 TID: 12192 "C:\Windows\explorer.exe"
    Class name: "Shell_TrayWnd"
    Extended styles: 0x00000080
    Styles: 0x96000000
    Window rect: (0, 1439, 2560, 1487)
    Client rect: (0, 0, 2560, 48)
    Placement: showCmd 1 minPosition (0, 0) maxPosition (0, 0), normalPosition (0, 1439, 2560, 1487)
    Text: ""
    Shell managed: FALSE
    Shell frame: FALSE
    Overpanning: FALSE
    Band: 1
    Has "NonRudeHWND" property: FALSE
    Has non-rude added by RudeWindowFixer property: FALSE
    Has "LivePreviewWindow" property: FALSE
    Has "TreatAsDesktopFullscreen" property: FALSE
    Is window: TRUE
    DWM is cloaked: 0x00000000
    Is iconic: FALSE
    Is visible: TRUE
    
    HWND: 0x0000000000060406
    PID: 12772 TID: 12776 "C:\Windows\explorer.exe"
    Class name: "WorkerW"
    Extended styles: 0x00000080
    Styles: 0x96000000
    Window rect: (0, 0, 3680, 1440)
    Client rect: (0, 0, 3680, 1440)
    Placement: showCmd 1 minPosition (-1, -1) maxPosition (-1, -1), normalPosition (0, 0, 5520, 2150)
    Text: ""
    Shell managed: FALSE
    Shell frame: FALSE
    Overpanning: FALSE
    Band: 1
    Has "NonRudeHWND" property: TRUE
    Has non-rude added by RudeWindowFixer property: FALSE
    Has "LivePreviewWindow" property: FALSE
    Has "TreatAsDesktopFullscreen" property: FALSE
    Is window: TRUE
    DWM is cloaked: 0x00000000
    Is iconic: FALSE
    Is visible: TRUE
    
    HWND: 0x000000000004002C
    PID: 12772 TID: 12776 "C:\Windows\explorer.exe"
    Class name: "WorkerW"
    Extended styles: 0x080000A0
    Styles: 0x9E000000
    Window rect: (0, 0, 3680, 1440)
    Client rect: (0, 0, 3680, 1440)
    Placement: showCmd 1 minPosition (-1, -1) maxPosition (-1, -1), normalPosition (0, 0, 5520, 2150)
    Text: ""
    Shell managed: FALSE
    Shell frame: FALSE
    Overpanning: FALSE
    Band: 1
    Has "NonRudeHWND" property: TRUE
    Has non-rude added by RudeWindowFixer property: FALSE
    Has "LivePreviewWindow" property: FALSE
    Has "TreatAsDesktopFullscreen" property: FALSE
    Is window: TRUE
    DWM is cloaked: 0x00000000
    Is iconic: FALSE
    Is visible: TRUE
    
    HWND: 0x0000000000020162
    PID: 12772 TID: 12776 "C:\Windows\explorer.exe"
    Class name: "Progman"
    Extended styles: 0x00000080
    Styles: 0x96000000
    Window rect: (0, 0, 3680, 1440)
    Client rect: (0, 0, 3680, 1440)
    Placement: showCmd 1 minPosition (-1, -1) maxPosition (-1, -1), normalPosition (0, 0, 5520, 2150)
    Text: "Program Manager"
    Shell managed: FALSE
    Shell frame: FALSE
    Overpanning: FALSE
    Band: 1
    Has "NonRudeHWND" property: TRUE
    Has non-rude added by RudeWindowFixer property: FALSE
    Has "LivePreviewWindow" property: FALSE
    Has "TreatAsDesktopFullscreen" property: FALSE
    Is window: TRUE
    DWM is cloaked: 0x00000000
    Is iconic: FALSE
    Is visible: TRUE
    
    opened by BlockyTheDev 40
  • GeForce Experience sneaky full screen window permanently at top level makes monitor rude

    GeForce Experience sneaky full screen window permanently at top level makes monitor rude

    I have seemingly the same problem as you originally had, and disabling the Geforce overlay fixes it, but for some reason this doesn't. According to WindowInvestigator there are 2 identical NVIDIA Share.exe windows with the only difference being the HWND, 0x00000000000102DA vs 0x00000000000102E0

    HWND: 0x00000000000102DA
    PID: 11216 TID: 11220 "C:\Program Files\NVIDIA Corporation\NVIDIA GeForce Experience\NVIDIA Share.exe"
    Class name: "CEF-OSC-WIDGET"
    Extended styles: 0x08080080
    Styles: 0x94000000
    Window rect: (0, 0, 1920, 1080)
    Client rect: (0, 0, 1920, 1080)
    Placement: showCmd 1 minPosition (-1, -1) maxPosition (-1, -1), normalPosition (0, 0, 1920, 1080)
    Text: "NVIDIA GeForce Overlay"
    Shell managed: FALSE
    Shell frame: FALSE
    Overpanning: FALSE
    Band: 1
    Has "NonRudeHWND" property: FALSE
    Has "LivePreviewWindow" property: FALSE
    Has "TreatAsDesktopFullscreen" property: FALSE
    Is window: TRUE
    DWM is cloaked: 0x00000000
    Is iconic: FALSE
    Is visible: TRUE
    
    opened by hedelmasalaatti 11
  • VirusTotal false positives

    VirusTotal false positives

    I ran the downloadable executable through VirusTotal and it doesn't look good. Four out of 68 virus scanners indicate a possible infection.

    https://www.virustotal.com/gui/file/13f30a1f74852c5c675644fbb95bb621bc8af0f58d646a3302b9fe52d0d4a438/detection

    opened by trparky 3
  • Windows sees normal windows as full screen if they exceed monitor dimensions

    Windows sees normal windows as full screen if they exceed monitor dimensions

    If a non-maximized, normal window is resized such that its borders are outside the limits of the monitor, the window seems to be seen as full screen by the Rude Window Manager. The taskbar will lose always on top when such windows are in the foreground. This is a failure mode that RudeWindowFixer does not currently mitigate.

    This is reproducible using something as simple as Notepad. It's hard to trigger it accidentally though, because resizing a window to exceed the boundaries of the monitor requires some fiddling.

    On the other hand, it's relatively easy to accidentally trigger this on the main window of Steam. It's not clear what's different about that window - it might be related to its custom border style, or maybe to its custom "snapping" behaviour when approaching the edges of a monitor.

    It also looks like changing monitor resolution and/or scaling can end up resizing windows in such a way as to end up in this situation.

    From a RudeWindowFixer perspective, the main challenge in solving this problem is that it's not entirely clear how to reliably distinguish between a window that is intended to be full screen (i.e. where the application deliberately set up the client area to cover an entire monitor), and a window that is accidentally full screen (i.e. this case). If we get this wrong, the taskbar will end up being shown on top of actual full screen applications.

    opened by dechamps 0
Releases(RudeWindowFixer-0.2a)
  • RudeWindowFixer-0.2a(Mar 12, 2022)

  • RudeWindowFixer-0.2(Feb 27, 2022)

    RudeWindowFixer 0.2 introduces additional active measures to combat more Rude Window Manager issues that were discovered in #2, in particular always on top transparent full screen windows (such as the GeForce Experience "DT" window).

    Specifically, it will search for transparent windows (where "transparent" is defined by having the WS_EX_LAYERED as well as WS_EX_TRANSPARENT or WS_EX_NOACTIVATE extended window styles) and actively prevent them from being seen as full screen windows by the Rude Window Manager.

    This is done by adding the magic "NonRudeHWND" window property that the Rude Window Manager is known to watch out for; and by delivering a "full screen exit" message to the RWM as well.

    For more details, see the updated README.

    Upgrading from RudeWindowFixer 0.1: make sure to manually terminate your currently running RudeWindowFixer.exe process before starting the new one.

    Source code(tar.gz)
    Source code(zip)
    RudeWindowFixer.exe(473.00 KB)
  • RudeWindowFixer-0.1(Feb 6, 2022)

Owner
Etienne Dechamps
Etienne Dechamps
Windows 11 Drag & Drop to the Taskbar (Fix)

Windows 11 Drag & Drop to the Taskbar (Fix) This program fixes the missing "Drag & Drop to the Taskbar" support in Windows 11. In the best case, such

null 1.3k Oct 2, 2022
Fix for various issues in the PC port of Ace Attorney Chronicles.

Hackfix for a few issues in the PC port - Animation framerate can now be set to arbitrary rate. (defaults to 60 but can be freely adjusted in the ini

Admiral H. Curtiss 79 Sep 27, 2022
Wrapper DLL for NieR Automata (PC ver.) to disable LODs & fix AO issues

NieRAutomata-LodMod An XInput/DXGI wrapper DLL that hooks into NieR Automata (Steam ver.) and disables object LODs, improving visual quality & fixing

emoose 24 Jul 9, 2022
My old heavily modified version of bigbase v1, it has an impulse-like scrollbar, ytd header loader, Vector3 fix + gamestate fix and some other misc changes!

Old Bigbase V1 UI This is my old ui for bigbase v1 but i dont need it anymore because the dev of solar mod menu stole it, and the new paragon menu (Fr

null 13 Sep 13, 2022
A updated linora source with special exploits, always be updated to latest update

Fortnite-Bulletp-Internal A working vehicle Bullettp internal, will be always updated to latest fn update! my old github got termed LMAO If i see you

NotSimcraftLOL 29 Jul 16, 2022
Flutter plugin serving utilities related to Windows taskbar. 💙

windows_taskbar Flutter plugin serving utilities related to Windows taskbar ?? Install dependencies: windows_taskbar: ^0.0.1 Demo Checkout the exam

Hitesh Kumar Saini 95 Oct 3, 2022
Windows 10 interface adjustment tool supports automatic switching of light and dark modes, automatic switching of themes and transparent setting of taskbar

win10_tools Windows 10 interface adjustment tool supports automatic switching of light and dark modes, automatic switching of themes and transparent s

Simon 1 Dec 3, 2021
Customizable Windows taskbar effects.

RainbowTaskbar Lightweight utility for Windows taskbar customization. Supports color effects, transitions, blur, images, rounded corners and transpare

ad 42 Sep 6, 2022
TaskbarXI - An application written in C++ to modify the Windows 11 Taskbar.

TaskbarXI An application written in C++ to modify the Windows 11 Taskbar. Current version turns the Windows 11 Taskbar into a dock. New features will

Chris Andriessen 881 Oct 3, 2022
A rewrite of the old legacy software "depends.exe" in C# for Windows devs to troubleshoot dll load dependencies issues.

Dependencies - An open-source modern Dependency Walker Download here (If you're running an AV, use this download instead) NB : due to limitations on /

null 5.5k Oct 3, 2022