Posts by ajs

    Therefore, on Windows the screensaver scenario is not identified by Hyperion and Hyperion continues grabbing the screen painted by the screensaver.

    For some reason it doesn't grab the screensaver image, grab the contents of the screen that was there before the screensaver was called up. The screensaver is in normal mode, without locking. The screensaver is out of the box, showing a photo on the screen from a folder.

    How can you check what is happening when the screensaver is called?

    I was not able to find an easy way to identify screensaver events on Windows without polling (maybe due to my lack of knowledge and/or understanding).

    I couldn't find it either, just check in a loop to see if the screensaver is working or not. Maybe Hyperion has some process that runs at least once every couple of seconds? And add a check there? Of course, you could run a timer in the next thread and check it ... But I'm not an expert here.

    and do a emit lock(true) to trigger Hyperion's behaviour on screensaver/locking.

    I probably don't understand how Hyperion works, but if we have Lock, as in your example, Hyperion stops working and just waits for Unlock.

    But in case of screensaver we don't get WM_POWERBROADCAST or WM_WTSSESSION_CHANGE event and Hyperion continues to work. It is supposed to continue capturing screen content (in our case the screensaver image) and should synchronize it with the LED strip. But it does not.

    Or am I wrong again?



    Determines whether a screen saver is currently running on the window station of the calling process. The pvParam parameter must point to a BOOL variable that receives TRUE if a screen saver is currently running, or FALSE otherwise. Note that only the interactive window station, WinSta0, can have a screen saver running.

    SystemParametersInfoW function (winuser.h) - Win32 apps
    Retrieves or sets the value of one of the system-wide parameters. (Unicode)

    Until now, I avoided to do active polling, if there is an active Screengrabber.

    The current code is event driven.

    Got it, i.e. we need to find an event that occurs when the screensaver starts. I'll keep looking. :)

    At first glance, does this solution look like the right one?

    Screen Saver notifications

    I'll try this option if I can build Hyperion from the source code :)

    private const int WM_SYSCOMMAND = 0x0112;
    private const int SC_SCREENSAVE = 0xF140;
    if (m.Msg == WM_SYSCOMMAND && (m.WParam.ToInt32() & 0xfff0) == SC_SCREENSAVE) ScreenSaverActive();

    You need to look for how to identify the event that the screensaver kicked in while the application (Hyperion) has no window.

    If there is an active screensaver window, then the screensaver is enabled. In Windows the screensaver window has its own name. And there is a HWID. But I'll have a look, I think we did something similar in Mediaportal.

    There is no window (if I'm not mistaken) at the services. But the events they receive ... have to look at the documentation.

    This not Help?

    Windows.UI.Composition-Win32-Samples/cpp/ScreenCaptureforHWND at master · microsoft/Windows.UI.Composition-Win32-Samples
    Windows.UI.Composition Win32 Samples. Contribute to microsoft/Windows.UI.Composition-Win32-Samples development by creating an account on GitHub.

    Screen Capture Specific Window
    Is it possible to screen capture a specific window (also possibly of another process)? Currently I am capturing the entire desktop of a specific monitor,…

    PS: I've looked at the source code, so far it's hard to understand the structure and how it all works...

    I checked it by changing the wallpaper on the desktop, waiting, the screensaver came on, when the wallpaper was changed the display changed to LEDs. So I understand Hyperion is working, but it's grabbing the image on the desktop.

    The screensaver is not in locking mode, i.e. wiggle the mouse or keyboard and go straight to the desktop.

    In the Windows interface everything works fine, when watching Videos, the same. But when the screensaver is activated (e.g. photo display), Hyperion still transmits colours from the desktop and not from the screensaver, is there any way to fix this?

    Windows 10 + Hyperion 2.0.15 + Direct X Screen grabber + WLED


    I agree, the transition is needed only for wide segments. Let's say if the segment occupies 5 LEDs, then the side ones, i.e. 1 and 5 output a mixed color with neighbors, and 2 to 4 output a pure color. Then it works out well.

    Is it possible to add a segment width setting in the LEDs? To not copy JSON blocks?

    We put up 100 diodes on the led strip, put up 20 segments, indicated a width of 5, and you're done. Convenient and simple.


    Thank you, this seems to be what i need, only I had to copy each block separately 5 times, and not all blocks together 5 times. But the result is similar to what I expected.

    One thing is bad, the average color is displayed and not the predominant one, and there is no color transition between sectors.


    How to reduce the number of displayed sectors?

    Those. I have a tape of 100 LEDs (WLED), attached to the top of the TV, made an LED layout for 100 sectors along the top.

    Is it possible to reduce the number of sectors to 20, let's say. so that each sector in the layout is displayed on 5 LEDs.

    This will reduce traffic, and there will be a smoother display (approximately as it is done on Philips TVs).