You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UWP应用(Kiosk模式)实现屏幕开关功能的技术问询

UWP自助终端模式下实现屏幕开关的问题及解决方案

问题描述

我正在开发一款运行于Kiosk Mode(自助服务终端模式)的UWP应用,希望通过TCP/IP通信接收的特定消息,实现屏幕的关闭与开启操作。尝试使用SendMessage方法未能成功,想知道是遗漏了配置,还是有其他可行方案?

尝试的代码

public class MyClass
{
    [DllImport("user32.dll")]
    private static extern int SendMessage(IntPtr hWnd, int hMsg, int wParam, int lParam);
    public void DisplaySettingChange(bool flag)
    {
       if(flag)
           SendMessage(IntPtr.Zero, 0x112, 0xF170, 1);
       else
           SendMessage(IntPtr.Zero, 0x112, 0xF170, 2);
    }
}

问题原因

UWP应用运行在沙箱环境中,Kiosk模式下权限进一步受限,直接调用user32.dll的SendMessage执行系统级屏幕控制操作是不被允许的——这类操作需要超出UWP沙箱的系统权限,因此你的代码无法生效。

可行解决方案

1. 使用DisplayRequest API(仅维持屏幕开启)

如果只需要阻止屏幕自动关闭,可使用UWP原生的Windows.System.Display.DisplayRequest API,它能请求系统保持屏幕常亮,但无法主动关闭屏幕:

using Windows.System.Display;

private DisplayRequest _displayRequest;

// 请求屏幕保持常亮
public void KeepScreenActive()
{
    _displayRequest = new DisplayRequest();
    _displayRequest.RequestActive();
}

// 取消常亮请求(系统将按原有设置自动管理屏幕)
public void ReleaseScreenControl()
{
    _displayRequest.RequestRelease();
}

2. 通过桌面桥(Desktop Bridge)获取系统权限

若需要主动控制屏幕开关,可将UWP应用打包为桌面桥应用,以此获得访问Win32 API的权限。修改后的代码示例:

using System.Runtime.InteropServices;

public class DisplayController
{
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    private static extern bool SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

    private const uint WM_SYSCOMMAND = 0x0112;
    private const int SC_MONITORPOWER = 0xF170;
    private const int MONITOR_OFF = 2;
    private const int MONITOR_ON = -1;

    public void ToggleScreen(bool turnOn)
    {
        SendMessage(IntPtr.Zero, WM_SYSCOMMAND, (IntPtr)SC_MONITORPOWER, (IntPtr)(turnOn ? MONITOR_ON : MONITOR_OFF));
    }
}

配置注意:需在Package.appxmanifest中添加全信任权限:

<Capabilities>
    <rescap:Capability Name="runFullTrust" />
</Capabilities>

打包时选择桌面桥模式,确保应用拥有足够权限执行系统操作。

3. 搭配Win32后台服务

在严格的Kiosk环境下,可单独编写一个Win32后台服务,负责监听TCP消息并执行屏幕控制;UWP应用仅需接收TCP指令,再通过进程间通信通知后台服务完成操作。这种方式能规避UWP的权限限制,同时保证Kiosk模式的安全性。

内容的提问来源于stack exchange,提问作者Hardik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 15:42:33