【问题标题】:Using SetWaitableTimer in Universal Windows Platform在通用 Windows 平台中使用 SetWaitableTimer
【发布时间】:2016-07-08 20:53:16
【问题描述】:

我在我的 UWP 应用程序中使用来自“kernel32.dll”的 SetWaitableTimer。由于我的应用程序,我希望计算机从睡眠中唤醒。如果我在调试模式下运行应用程序,它就可以工作。如果我在释放模式下运行它,则计算机不会唤醒。

如何让我的应用程序在实现模式下唤醒计算机?

private void Button_Click(object sender, RoutedEventArgs e)
    {
        Task.Factory.StartNew(SetWaitForWakeUpTime);
    }

    [DllImport("kernel32.dll")]
    public static extern IntPtr CreateWaitableTimer(IntPtr lpTimerAttributes, bool bManualReset, string lpTimerName);

    [DllImport("kernel32.dll")]
    public static extern bool SetWaitableTimer(IntPtr hTimer, [In] ref long pDueTime, int lPeriod,
                                                IntPtr pfnCompletionRoutine, IntPtr lpArgToCompletionRoutine, bool fResume);

    [DllImport("kernel32.dll", SetLastError = true)]
    public static extern Int32 WaitForSingleObject(IntPtr handle, uint milliseconds);

    static IntPtr handle;

    static void SetWaitForWakeUpTime()
    {
        long duetime = -600000000;

        handle = CreateWaitableTimer(IntPtr.Zero, true, "MyWaitabletimer");
        SetWaitableTimer(handle, ref duetime, 0, IntPtr.Zero, IntPtr.Zero, true);
        uint INFINITE = 0xFFFFFFFF;
        int ret = WaitForSingleObject(handle, INFINITE);
    }

【问题讨论】:

    标签: c# dll uwp dllimport kernel32


    【解决方案1】:

    Windows 10 通用 Windows 平台 (UWP) 应用可以使用 Win32 和 COM API 的子集。选择该 API 子集是为了支持 Windows 运行时、HTML/CSS 或其他受支持的语言或标准尚未涵盖的 Windows 运行时应用的关键方案。 Windows 应用认证工具包可确保您的应用仅使用 Win32 和 COM API 的这个子集。 UWP中可以使用的Win32 API请见Win32 and COM APIs for UWP apps。

    很遗憾,CreateWaitableTimer 和 SetWaitableTimer 不在受支持的 API 中。我们不能在 UWP 应用程序中使用它们。对于 UWP 应用,它应该无法将系统从睡眠中唤醒。但是我们可以通过DisplayRequest class来阻止系统休眠。

    在没有用户输入的情况下显示视频或长时间运行的应用程序可以通过调用DisplayRequest::RequestActive 请求保持显示。激活显示请求后,设备的显示屏会在应用可见时保持打开状态。

    更多信息,请参阅DisplayRequest class的备注。

    但如果您正在为企业开发应用程序,您可以尝试使用Brokered Windows Runtime Components。有了这个,你可以在一个进程(桌面组件)中运行现有的桌面软件资产,同时在 UWP 应用程序中与此代码进行交互。更多信息,请查看this blog。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-14
      • 2016-04-25
      • 1970-01-01
      • 2017-02-01
      • 1970-01-01
      • 2021-09-28
      • 2016-11-06
      相关资源
      最近更新 更多