diff --git a/Form1.cs b/Form1.cs index b5f5d21..1ec6e9e 100644 --- a/Form1.cs +++ b/Form1.cs @@ -184,10 +184,10 @@ namespace WindowOverlayApp private void ForegroundEventProc(IntPtr hWinEventHook, uint eventType, IntPtr hwnd, int idObject, int idChild, uint dwEventThread, uint dwmsEventTime) { - if (hwnd == notepadHandle) + if (IsAnyParentMatching(hwnd, notepadHandle)) { UpdateOverlayWindow(); - } else if (!IsAnyParentMatching(hwnd,notepadHandle) && !IsWindowClass(hwnd, "ForegroundStaging") && !IsWindowClass(hwnd, "MultitaskingViewFrame")) + } else if (!IsWindowClass(hwnd, "ForegroundStaging") && !IsWindowClass(hwnd, "MultitaskingViewFrame")) { SetWindowPos(this.Handle, 1, 0, 0, 0, 0, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE); diff --git a/README.md b/README.md index 32f3316..419f236 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,10 @@ # Vivado Dark Mode +![Vivado dark mode](example_dark_mode.png) + +> [!WARNING] +> This is demo code to show dark mode for any light mode application on Windows is possible, the code is not polished for a final product and the current code does not handle all edge cases. + This will eventually become a program to make any windows application dark mode, stay tuned. This demo uses the Windows magnification API to invert a window and make it dark mode. @@ -7,6 +12,8 @@ This demo uses the Windows magnification API to invert a window and make it dark ## Bugs/Notes - When switching windows, it will momentarily flash. This is because of some latency in handling the window foreground event, I am not sure if it is possible to improve on this to make it less noticeable. +- Window title is hardcoded, meaning if the dark mode program was started after the window title does not match "Vivado 24.1" (for example after opening a project) it will fail. +- Currently it just inverts the program, but the magnification API supports transformation matrices so it is possible to use a different color mapping that might be better. - Currently this handles sub-windows (such as save dialogs) by making the magnification window have the maximum Z order. This simplifies things, but also means if another window is over the active window it too will be inverted - Creating magnification lenses for each window with the Z height 1 above the relavant window would fix this issue. diff --git a/example_dark_mode.png b/example_dark_mode.png new file mode 100644 index 0000000..0e658c7 Binary files /dev/null and b/example_dark_mode.png differ