c # - Hvordan abonnerer jeg på en OS-niveau hændelse hævet, når DWM komposition/Aero Glass er deaktiveret?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg udvikler en C # -applikation, der understøtter Windows Aero i hovedformularen.


Nogle programmer, der ikke understøtter visuelle stilarter, f.eks. GoToMeeting, deaktiverer visuelle stilarter, og min formular er fejlagtigt trukket, mens GoToMeeting kører (Aero-klientområdet er tegnet sort). [2]


Hvordan kunne jeg abonnere på en OS-begivenhed, der fyres, når visuelle stilarter er deaktiveret? Derefter kunne jeg justere klientområdet i mit vindue for at blive korrekt tegnet.


Administrerede og ustyrede løsninger gælder for mig.


Tak på forhånd.





REDIGER : Ifølge Hanss svar er her koden til at styre denne begivenhed:


private const int WM\_DWMCOMPOSITIONCHANGED = 0x31e;

[DllImport("dwmapi.dll")]
private static extern void DwmIsCompositionEnabled(ref bool pfEnabled);

protected override void WndProc(ref Message m)
{
    if (m.Msg == WM\_DWMCOMPOSITIONCHANGED)
    {
        bool compositionEnabled = false;
        DwmIsCompositionEnabled(ref compositionEnabled);

        if (compositionEnabled)
        {
           // composition has been enabled
        }
        else
        {
           // composition has been disabled
        }
    }

    base.WndProc (ref m);
}

Bedste reference


Windows sender en besked til dit toplevel vindue. Du fælder det, siger en WndProc-tilsidesættelse for en Winforms-form. Lyt efter WM\_DWMCOMPOSITIONCHANGED, meddelelsesnummer 0x31e.