@Thaddy: as I wrote, it's a first workaround, nothing I would recommend as a fix.
And I meant it the way I wrote it

These two lines need to get called. Otherwise Screen.MonitorFromWindow would access invalid monitor handles, causing an app crash.
If your multimonitor setup relies on temporarily having monitors with invalid handles in this object, I'ld take that as a challenge to improve my design.
Thanks for hinting me at the option of temporarily disconnected monitors, will check if that would cause the same issues as well.
@GetMem: thanks for the code example! Contrary to my old code I ported from Delphi, this works

I wrapped it up in a separate unit with just two calls to register and unregister the main form.
Instead of the new window procedure, a message handler could be also added to the form instead, which I'll do once adding it to the custom form class all my forms inherit from:
procedure DoSesssionChange(var Message: TMessage); message WM_WTSSESSION_CHANGE;
Btw, you mixed use and fix, in the handler, Screen.Upda]"]>Blockednitors and Screen.UpdateScreen need to be called.
Again, many thanks

I'll see if I can convert this into a fix for the IDE as well, and report back (plus report on the bugtracker)!