如何在C# Windows应用程序中获取Windows解锁事件?

10

我想在Windows应用程序中跟踪窗口解锁事件。如何完成?使用了什么事件?需要导入任何命名空间吗?

当用户解锁Windows时,应用程序需要执行一些任务。


可能是重复的问题:https://dev59.com/lHRB5IYBdhLWcg3wgHar 或者 https://dev59.com/g3VD5IYBdhLWcg3wO5AD - Lasse Christiansen
那个链接中的答案不够好。:( - Anish V
我添加了一个链接 - 在StackOverflow上似乎有许多这种类型的问题。然而,我将其中一个作为我的答案发布,因为它包含了你可能会发现有用的示例代码。 - Lasse Christiansen
1个回答

28

如此StackOverflow回答中所述: https://dev59.com/g3VD5IYBdhLWcg3wO5AD#604042,您应该查看SystemEvents.SessionSwitch Event

在提到的答案中还可以找到示例代码。

我刚刚尝试了提到的StackOverflow答案中显示的代码,并且似乎可以在带有.NET框架4.5的Windows 8 RTM上运行。

供参考,我包括了我刚刚组装的控制台应用程序的完整示例代码。

using System;
using Microsoft.Win32;

// Based on: https://dev59.com/g3VD5IYBdhLWcg3wO5AD#604042
namespace WinLockMonitor
{
    class Program
    {
        static void Main(string[] args)
        {
            Microsoft.Win32.SystemEvents.SessionSwitch += new Microsoft.Win32.SessionSwitchEventHandler(SystemEvents_SessionSwitch);
            Console.ReadLine();
        }

        static void SystemEvents_SessionSwitch(object sender, Microsoft.Win32.SessionSwitchEventArgs e)
        {
            if (e.Reason == SessionSwitchReason.SessionLock)
            {
                //I left my desk
                Console.WriteLine("I left my desk");
            }
            else if (e.Reason == SessionSwitchReason.SessionUnlock)
            {
                //I returned to my desk
                Console.WriteLine("I returned to my desk");
            }
        }
    }
}

我正在使用一个Windows应用程序。我需要在哪里添加 Microsoft.Win32.SystemEvents.SessionSwitch += new Microsoft.Win32.SessionSwitchEventHandler(SystemEvents_SessionSwitch); - Anish V
这个运行良好。我已经将上述代码添加到表单的初始化事件中。 - Anish V

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接