订阅windows系统事件本机c++

Posted

技术标签:

【中文标题】订阅windows系统事件本机c++【英文标题】:subscribe to windows system events native c++ 【发布时间】:2012-07-19 10:17:15 【问题描述】:

我希望我的 c++ 应用程序能够监听 Windows 系统事件,例如登录、注销、锁定... 类似于:http://www.dotnetspider.com/resources/30389-To-detect-when-system-gets.aspx,用 C# 编写。 我找到了http://msdn.microsoft.com/en-us/library/microsoft.win32.systemevents.aspx#Y0m,但它是一个 CLR 代码。另外,我看到 SubscribeToSystemEvent 函数是用 Visual C++ 编写的。

有谁知道在原生 c++ 中使用哪些方法?

请指教,

利隆

【问题讨论】:

【参考方案1】:

当会话状态改变时,调用WTSRegisterSessionNotification 接收WM_WTSSESSION_CHANGE 窗口消息。这包括登录、注销、锁定、解锁等。确保在程序退出之前对 WTSUnRegisterSessionNotification 进行了相应的调用。

或者,您可以收听WM_QUERYENDSESSION 或WM_ENDSESSION 窗口消息。第一个允许您阻止用户注销;第二个告诉你它是否会发生。

【讨论】:

【参考方案2】:

你可以试试 krabset https://github.com/Microsoft/krabsetw 这是包装器。 你也可以看看这个https://docs.microsoft.com/en-us/dotnet/api/system.security.accesscontrol?view=netframework-4.7.2

还可以通过 PowerShell 查看 New-WinEvent 和 Get-WinEvent

【讨论】:

以上是关于订阅windows系统事件本机c++的主要内容,如果未能解决你的问题,请参考以下文章

windows 2008下查看通过远程桌面(mstsc)的连接到本机的连接记录

订阅表单中所有控件的鼠标事件

C# 事件

Windows和本机API中的系统调用?

WPF事件内置路由事件

windows本机域名配置