C#对电脑登录、锁屏事件进行监听并执行代码
C#对电脑登录、锁屏事件进行监听并执行指定代码
//引用Microsoft.Win32
using Microsoft.Win32;
private void Form1_Load(object sender, EventArgs e)
{
//程序加载时执行监听,并最小化程序、隐藏图标。可将程序设为开机自启动
Microsoft.Win32.SystemEvents.SessionSwitch += new Microsoft.Win32.SessionSwitchEventHandler(SystemEvents_SessionSwitch);
WindowState = FormWindowState.Minimized;
ShowInTaskbar = false;
}
//监听锁屏、登录事件
void SystemEvents_SessionSwitch(object sender, Microsoft.Win32.SessionSwitchEventArgs e)
{
if (e.Reason == Microsoft.Win32.SessionSwitchReason.SessionLock||e.Reason==Microsoft.Win32.SessionSwitchReason.SessionLogoff)
{
// 屏幕锁定
//锁屏后执行
//MessageBox.Show("Screen Lock" + DateTime.Now);
}
else if (e.Reason == Microsoft.Win32.SessionSwitchReason.SessionUnlock||e.Reason==Microsoft.Win32.SessionSwitchReason.SessionLogon)
{
// 屏幕解锁
//解屏、登录后执行
// MessageBox.Show("Screen Unlock" + DateTime.Now);
}
}
2024-06-28 16:42:10【出处】:https://blog.csdn.net/qq_33790894/article/details/130239015
=======================================================================================
个人建议以上做出服务开机运行。
=======================================================================================
C#对电脑登录、锁屏事件进行监听
在C#中监听电脑登录和锁屏事件,可通过以下方式实现:
一、核心实现方法
-
使用
SessionSwitch
事件
通过Microsoft.Win32.SystemEvents.SessionSwitch
事件监听系统会话状态变化,包括锁屏、解锁、登录、注销等操作16。
示例代码:csharpCopy Codeusing Microsoft.Win32; // 注册事件 SystemEvents.SessionSwitch += SystemEvents_SessionSwitch; private void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e) { switch (e.Reason) { case SessionSwitchReason.SessionLock: // 锁屏事件处理 break; case SessionSwitchReason.SessionUnlock: // 解锁事件处理 break; case SessionSwitchReason.SessionLogon: // 登录事件处理 break; case SessionSwitchReason.SessionLogoff: // 注销事件处理 break; } }
-
资源管理
- 在程序初始化时注册事件(如窗体加载事件
Form_Load
)1。 - 在程序退出时注销事件,避免内存泄漏6:
csharpCopy Code
SystemEvents.SessionSwitch -= SystemEvents_SessionSwitch;
- 在程序初始化时注册事件(如窗体加载事件
二、辅助功能实现
-
判断当前锁屏状态
可通过标志位跟踪状态(如_IsSleeping
)6,或调用系统API检测屏保是否运行7:csharpCopy Code[DllImport("user32.dll")] private static extern bool SystemParametersInfo(int uAction, int uParam, ref bool lpvParam, int flags); private const int SPI_GETSCREENSAVERRUNNING = 114; public static bool IsScreenLocked() { bool isRunning = false; SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, 0, ref isRunning, 0); return isRunning; }
-
窗体应用程序优化
- 程序启动时最小化窗体并隐藏托盘图标1:
csharpCopy Code
WindowState = FormWindowState.Minimized; ShowInTaskbar = false;
- 程序启动时最小化窗体并隐藏托盘图标1:
三、注意事项
-
依赖项
- 需引用
Microsoft.Win32
命名空间。 - 若使用屏保检测API,需添加
System.Runtime.InteropServices
命名空间7。
- 需引用
-
兼容性
SessionSwitch
事件在Windows XP及以上系统有效8。
-
权限要求
- 程序需以管理员权限运行,确保能捕获系统级事件。
通过上述方法,可高效监听并响应系统登录、锁屏等事件。完整示例可参考[1][6][8]中的代码实现。
出处:BaiDu AI搜索R1满血版
=======================================================================================
使用C#以编程方式检测windows登录尝试
我想开发一个windows窗体应用程序来监视我的网络计算机登录、注销和登录尝试详细信息,并根据检测做一些事情。(例如,向管理员发送一些通知)
我试过的是:
我读过关于使用任务计划程序的windows服务、Windows任务计划程序和事件审核的文章,但我想以务实的方式进行。因此,我的问题是如何使用C#以编程方式检测windows登录尝试?
回答 1
若要检测登录尝试,可以依赖windows安全事件。这里您可以看到安全事件的列表及其含义。您可能感兴趣的常见事件是:
使用应用程序/服务检测事件
您可以通过使用EventLog类并处理其EntryWritten事件的代码检测登录尝试。下面的代码示例只是将事件记录在一个文件中,以显示您可以了解并使用该事件。您可以通过电子邮件发送通知、运行应用程序或做其他事情,而不是在文件中写入。
要测试代码,您应该以管理员身份运行。另外,在实际环境中,您应该让它像服务一样,或者在用户登录之前将其配置为运行。
private void Form1_Load(object sender, EventArgs e) { EventLog logListener = new EventLog("Security"); logListener.EntryWritten += logListener_EntryWritten; logListener.EnableRaisingEvents = true; } void logListener_EntryWritten(object sender, EntryWrittenEventArgs e) { //4624: An account was successfully logged on. //4625: An account failed to log on. //4648: A logon was attempted using explicit credentials. //4675: SIDs were filtered. var events = new int[] { 4624, 4625, 4648, 4675 }; if (events.Contains(e.Entry.EventID)) System.IO.File.AppendAllLines(@"d:\log.txt", new string[] { string.Format("{0}:{1}", e.Entry.EventID, e.Entry.Message) }); }
注意:正如您在问题中所说的,可以在事件发生时使用Windows来做一些事情。
当检测到不成功的登录尝试时,您可以要求Windows为您做一些事情,例如运行应用程序(发送电子邮件或其他东西)。为此,请使用Windows任务计划程序,并在发生特定事件时运行该任务,并指定合适的事件源和Id。另外,要查看完整步骤的示例,请参阅通过电子邮件获取事件日志触发器上的事件日志内容。
出处:https://cloud.tencent.com/developer/ask/sof/113704380
=======================================================================================
c#监听系统用户登录成功和失败
在C#中监听系统用户登录成功和失败的事件通常涉及到Windows事件日志(Event Log)的读取和监听。Windows事件日志记录了系统、安全以及其他组件的事件,包括用户登录的成功和失败。要实现这一功能,你可以使用System.Diagnostics.EventLog
类来查询和订阅事件日志。
以下是一些步骤和示例代码,帮助你实现监听系统用户登录成功和失败的功能:
1: 添加必要的命名空间
首先,确保你的C#项目中包含了必要的命名空间:
2: 查询和订阅事件日志
你可以使用EventLog
类的EnableRaisingEvents
属性来订阅事件。当有新事件写入日志时,OnEntryWritten
事件将被触发。
以下是一个示例代码,用于监听安全日志中与登录相关的条目:
class Program { static void Main(string[] args) { EventLog securityLog = new EventLog(); securityLog.Log = "Security"; // 安全日志名称 securityLog.Source = "Microsoft-Windows-Security-Auditing"; // 安全审计提供程序的名称 securityLog.EnableRaisingEvents = true; // 启用事件监听 // 订阅事件 securityLog.EntryWritten += new EntryWrittenEventHandler(SecurityLog_EntryWritten); Console.WriteLine("Press any key to stop listening..."); Console.ReadKey(); // 等待用户按键停止程序 securityLog.Dispose(); // 清理资源 } private static void SecurityLog_EntryWritten(object sender, EntryWrittenEventArgs e) { EventLogEntry entry = e.Entry; if (entry.InstanceId == 4624 || entry.InstanceId == 4625) // 4624 是登录成功,4625 是登录失败 { Console.WriteLine($"Event ID: {entry.InstanceId}, {entry.Message}"); } } }
解释:
-
Event ID 4624: 表示用户登录成功。
-
Event ID 4625: 表示用户登录失败。
注意:
-
确保你的应用程序有足够的权限去读取安全日志。通常,这需要管理员权限。
-
你可能需要在应用程序清单文件中添加对安全日志的访问权限,例如在
.csproj
文件的<PropertyGroup>
中添加:<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects><GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>并在
.exe.config
中添加:<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>或者在应用程序的manifest中明确请求这些权限。
通过上述步骤,你可以在C#中监听并处理Windows系统中的用户登录成功和失败事件。
关键注意事项
- 权限要求:程序需以管理员权限运行,否则无法访问安全日志7。
- 部署方式:建议封装为Windows服务或后台进程,确保持续监控7。
- 消息解析:事件消息的文本可能因系统语言不同而格式不同,建议通过事件XML结构获取稳定字段7。
3: 扩展功能
- 记录到数据库:可将事件信息写入数据库,参考全局变量记录用户ID和时间的逻辑6。
- 实时通知:通过邮件或API发送警报,增强监控的实时性7。
代码优化建议
- 使用
EventLogReader
替代EventLog
:通过System.Diagnostics.Eventing.Reader
命名空间下的类,可更高效解析结构化事件数据,避免文本解析的复杂性。 - 异步处理:在事件处理函数中使用异步方法,避免阻塞主线程7。
4: 总结
通过上述方法,可实现对Windows系统用户登录行为的实时监控。核心逻辑围绕事件日志的订阅与解析展开,结合权限管理和部署方式优化,确保功能的稳定性和可靠性。
=======================================================================================
关注我】。(●'◡'●)
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的【因为,我的写作热情也离不开您的肯定与支持,感谢您的阅读,我是【Jack_孟】!
本文来自博客园,作者:jack_Meng,转载请注明原文链接:https://www.cnblogs.com/mq0036/p/18273856
【免责声明】本文来自源于网络,如涉及版权或侵权问题,请及时联系我们,我们将第一时间删除或更改!