【发布时间】:2023-03-05 00:11:01
【问题描述】:
我想在我的 Windows 窗体 .NET 应用程序中监听以下系统范围的事件:
注销 锁定窗口 休眠开始 睡眠开始 系统恢复
这些可能吗?
谢谢
【问题讨论】:
-
SystemEvents 类涵盖了大部分内容。
标签: c# .net vb.net winforms events
我想在我的 Windows 窗体 .NET 应用程序中监听以下系统范围的事件:
注销 锁定窗口 休眠开始 睡眠开始 系统恢复
这些可能吗?
谢谢
【问题讨论】:
标签: c# .net vb.net winforms events
您需要查看 WMI(Windows 媒体工具)。您需要为上述事件创建事件观察器。
http://msdn.microsoft.com/en-us/library/ms257340%28VS.80%29.aspx
有用的链接:
如何为用户注销事件创建 WMI 事件观察器?
http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/0c1bded8-0cce-4260-bd28-4b4ffce0d27d
http://www.aspfree.com/c/a/VB.NET/WMI-Programming-with-Visual-BasicNET-Trapping-System-Events/1/
【讨论】:
如上所述,您可以使用 WMI 来捕获事件。
我正在添加一些我几年前写的代码示例(希望它仍然可以工作,因为它是在 VS2010 上使用 .Net3.5 编写的)
这是一个收集所有事件的类
Imports Microsoft.Win32
Imports System.Windows.Forms
Public Class PowerMessageFilter
Implements IMessageFilter
Const WM_POWERBROADCAST As Integer = &H218
Const PBT_APMSUSPEND As Integer = &H4
Const PBT_APMSTANDBY As Integer = &H5
Const PBT_APMRESUMESUSPEND As Integer = &H7
Const PBT_APMRESUMESTANDBY As Integer = &H8
Protected Sub reportpowerchange(ByVal reason As Integer)
Dim report As String = String.Empty
Select Case (reason)
Case PBT_APMSUSPEND
report = "system is suspending operation "
suspend_service()
Exit Select
Case PBT_APMSTANDBY
report = "system is standing by "
suspend_service()
Exit Select
Case PBT_APMRESUMESUSPEND
report = "operation resuming after suspension."
suspend_service()
Exit Select
Case PBT_APMRESUMESTANDBY
report = "operation resuming after stand by."
suspend_service()
Exit Select
End Select
End Sub
Public Function PreFilterMessage(ByRef m As Message) As Boolean Implements IMessageFilter.PreFilterMessage
If WM_POWERBROADCAST = m.Msg Then
Console.Out.WriteLine("Power Broadcast recieved.")
Dim reason As Integer = m.WParam.ToInt32()
reportpowerchange(reason)
End If
Return False
End Function
Private Sub suspend_service()
' Your suspend code
End Sub
End Class
现在,对于监听器,我有一个 Win32 服务在后台运行并完成监听工作
Dim Filter As New PowerMessageFilter 'The Standby/Hibernation Filter catch;
Application.AddMessageFilter(Filter)
很抱歉,我没有任何关于我从中获取示例的网站的参考资料,我猜它可能来自上面的 MSDN 链接。
希望对你有帮助,
利隆
【讨论】: