ChangeWindowMessageFilterEx (user32)
Last changed: jpsanders-12.190.158.6

.
Summary
Modifies the User Interface Privilege Isolation (UIPI) message filter for a specified window.

C# Signature:

[DllImport("user32.dll", SetLastError=true)]
public static extern bool ChangeWindowMessageFilterEx(IntPtr hWnd, uint msg, ChangeWindowMessageFilterExAction action,ref CHANGEFILTERSTRUCT changeInfo);

VB Signature:

<DllImport("user32.dll")> _
Private Shared Function ChangeWindowMessageFilterEx(hWnd As IntPtr, msg As UInteger, action As ChangeWindowMessageFilterExAction, ByRef changeInfo As CHANGEFILTERSTRUCT) As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function

User-Defined Field Types C#:

    public enum MessageFilterInfo : uint
    {
        None=0, AlreadyAllowed=1, AlreadyDisAllowed=2, AllowedHigher=3
    };

    public enum ChangeWindowMessageFilterExAction : uint
    {
        Reset = 0, Allow = 1, DisAllow = 2
    };

    [StructLayout(LayoutKind.Sequential)]
    public struct CHANGEFILTERSTRUCT
    {
        public uint size;
        public MessageFilterInfo info;
    }

User-Defined Field Types VB:

    Private Enum MessageFilterInfo As UInteger
        None
        AlreadyAllowed
        AlreadyDisAllowed
        AllowedHigher
    End Enum

    Private Enum ChangeWindowMessageFilterExAction As UInteger
        Reset
        Allow
        Disallow
    End Enum

    Private Enum ChangeWindowMessageFilterFlags As UInteger
        Add = 1
        Remove = 2
    End Enum

    <StructLayout(LayoutKind.Sequential)> _
    Private Structure CHANGEFILTERSTRUCT
        Public cbSize As UInteger
        Public ExtStatus As MessageFilterInfo
    End Structure

Alternative Managed API:

Do you know one? Please contribute it!

Notes:

See documentation for full use and return values

Tips & Tricks:

Can use this too:

ChangeWindowMessageFilterEx(Handle,_message,ChangeWindowMessageFilterExAction.Allow, IntPtr.Zero);

If you do not care about the filterStatus

Sample Code:

    CHANGEFILTERSTRUCT filterStatus = new CHANGEFILTERSTRUCT();
        filterStatus.size= (uint) Marshal.SizeOf(filterStatus);
        filterStatus.info = 0;
        ChangeWindowMessageFilterEx(Handle,_message,ChangeWindowMessageFilterExAction.Allow, ref filterStatus);

Note
Documentation