如何在连接网络时以及用户登录时接收事件
我有一个运行的服务,我希望在以下情况下收到通知:
a)网络已连接。
b)当用户登录机器时。
我怎样才能做到这一点? (C#.NET 2.0)
要在任何用户登录计算机时收到通知,请调用WTSRegisterSessionNotification
,传递NOTIFY_FOR_ALL_SESSIONS
,并在消息循环中侦听WM_WTSSESSION_CHANGE
消息。
在消息中,将wParam
转换为Microsoft.Win32.SessionSwitchReason
枚举以找出发生的情况,并将lParam
传递给WTSQuerySessionInformation
以查找用户名。
[DllImport("Wtsapi32.dll", CharSet=.CharSet.Auto)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool WTSRegisterSessionNotification(IntPtr hWnd, int dwFlags); //Pass this value in dwFlags public const int NOTIFY_FOR_ALL_SESSIONS = 0x1; //Listen for this message public const int WM_WTSSESSION_CHANGE = 0x02B1; //Call this method before exiting your program [DllImport("Wtsapi32.dll", CharSet=.CharSet.Auto)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool WTSUnRegisterSessionNotification(IntPtr hWnd);
要找出网络何时连接,请在System.Net.NetworkInformation.NetworkChange
类中为NetworkAvailabilityChanged
添加处理程序。
找出用户登录时间的一个简单方法是创建一个单独的exe并将其置于常见启动中。 它会在任何用户登录时执行,然后可以与您的服务通信并提供用户名。 如果您希望您的服务与用户的桌面交互,这是(我相信)唯一的方法。 但是,如果你不这样做,这可能不是一个好主意。
请记住,一次可以登录多个用户,尤其是通过远程桌面或终端服务(在Windows Server上)
你不能用b)使用.NET 2.0。 对于XP及之前,您需要创建一个GINA替换,这是一个非托管DLL,它导出一组指定的函数。
在Vista中,有一个不同的基于COM的模型,你必须使用它,你可能可以使用.NET 2.0,但如果你不能,我不会感到惊讶。
我要做的是让您的GINA替换(或Vista上的等效物)向您的服务发送某种信号。
对于a)这两个链接应该能够帮助:
Windows XP中的网络意识
https://msdn.microsoft.com/en-us/library/ms700657(VS.85).aspx
Windows Vista上的网络意识
https://msdn.microsoft.com/en-us/library/ms697388(VS.85).aspx
您可以编写WinLogin通知包 。 但是,我不确定是否可以在C#中进行。 (我没有理由相信它不是,但我只用C ++和非托管代码完成它。)
这是CodeProject 链接
我不知道在网络连接时如何监听。
SENS可以做到这一点。 https://msdn.microsoft.com/en-us/magazine/cc301850.aspx
检查ISensNetwork和ISensLogon。
适应C#,你就完成了。
上述就是C#学习教程:如何在连接网络时以及用户登录时接收事件分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1010020.html