Я недавно начал использовать Windows API нижнего уровня с C # для прототипа приложения, и наткнулся на проблему, с которой не могу разобраться: рассмотрим следующий фрагмент кода:
public class dW
{
[DllImport("dwmapi.dll")]
public static extern int DwmSetWindowAttribute(IntPtr hwnd, DwmWindowAttribute dwAttribute, ref int pvAttribute, int cbAttribute);
[Flags]
public enum DwmWindowAttribute : uint
{
DWMWA_NCRENDERING_ENABLED = 1,
DWMWA_NCRENDERING_POLICY,
DWMWA_TRANSITIONS_FORCEDISABLED,
DWMWA_ALLOW_NCPAINT,
DWMWA_CAPTION_BUTTON_BOUNDS,
DWMWA_NONCLIENT_RTL_LAYOUT,
DWMWA_FORCE_ICONIC_REPRESENTATION,
DWMWA_FLIP3D_POLICY,
DWMWA_EXTENDED_FRAME_BOUNDS,
DWMWA_HAS_ICONIC_BITMAP,
DWMWA_DISALLOW_PEEK,
DWMWA_EXCLUDED_FROM_PEEK,
DWMWA_CLOAK,
DWMWA_CLOAKED,
DWMWA_FREEZE_REPRESENTATION,
DWMWA_LAST
}
public IntPtr Handle { get; private set; }
public void HideWindow()
{
int value = 0x01;
int hr = DwmSetWindowAttribute(Handle, DwmWindowAttribute.DWMWA_CLOAK, ref value, Marshal.SizeOf(typeof(int)));
}
}
Учтите, что дескриптор четко определен IntPtr
. Я пытаюсь скрыть окно, используя DwmSetWindowAttribute
, но по какой-то странной причине оно никогда не работает (окно остается видимым все время), и результат (сохраненный в hr
) всегда равен -2147024891. Я просто не понимаю, почему это происходит, так как код кажется правильным (imho).
У тебя есть какие-нибудь подсказки?
Спасибо