【问题标题】:How to prevent fullscreen/halfscreen on Windows如何在 Windows 上防止全屏/半屏
【发布时间】:2021-06-22 09:32:13
【问题描述】:

我正在使用 Unity 在 Windows 上开发单窗口应用程序。
我允许用户调整窗口大小,但必须保持纵横比。
我想阻止全屏和半屏,因为它们会破坏纵横比。

我发现以下操作可以使应用全屏或半屏。

  • 全屏:
    • 单击标题栏上的最大化按钮
    • 将窗口拖到屏幕顶部
    • 按 Alt + Enter 键
    • 按 Windows + 向上箭头键
  • 半屏:
    • 将窗口拖动到屏幕的左/右
    • 按 Windows + 左/右箭头键

我想全部禁用。

这可以禁用标题栏上的最大化按钮。

HandleRef hWnd = new HandleRef(null, GetActiveWindow());
long style = GetWindowLong(hWnd, GWL_STYLE);
style &= ~WS_MAXIMIZEBOX;
SetWindowLong(hWnd, GWL_STYLE, style);

这可以禁用 Windows + 向上箭头键。

private static IntPtr WndProc(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam)
{
    switch (msg)
    {
        case WM_SYSCOMMAND:
            if (wParam.ToInt32() == SC_MAXIMIZE) {
                return IntPtr.Zero;
            }
            break;
    }

    return CallWindowProc(oldWndProcPtr, hWnd, msg, wParam, lParam);
}

但其他操作仍然有效。
如何禁用其他操作?

【问题讨论】:

    标签: c# windows unity3d fullscreen wndproc


    【解决方案1】:
    private static IntPtr WndProc(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam)
    {
        switch (msg)
        {
            case WM_SYSCOMMAND:
                if (wParam.ToInt32() == SC_MAXIMIZE) {
                    return IntPtr.Zero;
                }
                break;
            // BY PASS *** Alt + Enter ***
            case WM_KEYDOWN:
            case WM_SYSKEYDOWN:
                if (wParam == VK_RETURN)
                    if ((HIWORD(lParam) & KF_ALTDOWN))
                        return 0;
                break;  
        }
    
        return CallWindowProc(oldWndProcPtr, hWnd, msg, wParam, lParam);
    }
    

    【讨论】:

    • 虽然这段代码 sn-p 可以解决问题,including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
    • 也就是说,这是一个回答问题的尝试,所以isn't 'low quality' - 可以想象有人会在回答他们的问题时接受它:它是独立的,包含一些(可能工作的)代码,对于一个有很多其他答案等的问题,这不是一个迟到的答案——它所缺少的只是对它的作用的解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多