以编程方式确定锁定工作站的持续时间?如何在代码中确定机器锁定的时间?C#之外的其他想法也是受欢迎的。我喜欢Windows服务理念(并已接受它)以简化和清洁,但遗憾的是我不认为它在这种特殊情况下对我有用。我想在我的工作站上运行这个,而不是在家里(或者除了家庭之外,我想),但它被国防部严格控制了。实际上,这就是我自己滚动的部分原因。无论如何我会写下来看看它是否有效。感谢大家!
3 回答
![?](http://img1.sycdn.imooc.com/5458463b0001358f02200220-100-100.jpg)
湖上湖
TA贡献2003条经验 获得超2个赞
我之前没有找到过这个,但是从任何应用程序都可以连接SessionSwitchEventHandler。显然你的应用程序需要运行,但只要它是:
Microsoft.Win32.SystemEvents.SessionSwitch += new Microsoft.Win32.SessionSwitchEventHandler(SystemEvents_SessionSwitch);void SystemEvents_SessionSwitch(object sender, Microsoft.Win32.SessionSwitchEventArgs e){ if (e.Reason == SessionSwitchReason.SessionLock) { //I left my desk } else if (e.Reason == SessionSwitchReason.SessionUnlock) { //I returned to my desk }}
![?](http://img1.sycdn.imooc.com/5333a1660001394602000200-100-100.jpg)
阿波罗的战车
TA贡献1862条经验 获得超6个赞
我将创建一个处理OnSessionChange事件的Windows服务(visual studio 2005项目类型),如下所示:
protected override void OnSessionChange(SessionChangeDescription changeDescription){ if (changeDescription.Reason == SessionChangeReason.SessionLock) { //I left my desk } else if (changeDescription.Reason == SessionChangeReason.SessionUnlock) { //I returned to my desk }}
您在此时记录活动的内容和方式取决于您,但Windows服务可以快速方便地访问Windows事件,如启动,关闭,登录/退出以及锁定和解锁事件。
![?](http://img1.sycdn.imooc.com/5458626a0001503602200220-100-100.jpg)
HUH函数
TA贡献1836条经验 获得超4个赞
下面的解决方案使用Win32 API。在工作站被锁定时调用OnSessionLock,并在解锁时调用OnSessionUnlock。
[DllImport("wtsapi32.dll")]private static extern bool WTSRegisterSessionNotification(IntPtr hWnd,int dwFlags);[DllImport("wtsapi32.dll")]private static extern bool WTSUnRegisterSessionNotification(IntPtrhWnd);private const int NotifyForThisSession = 0; // This session onlyprivate const int SessionChangeMessage = 0x02B1;private const int SessionLockParam = 0x7;private const int SessionUnlockParam = 0x8;protected override void WndProc(ref Message m){ // check for session change notifications if (m.Msg == SessionChangeMessage) { if (m.WParam.ToInt32() == SessionLockParam) OnSessionLock(); // Do something when locked else if (m.WParam.ToInt32() == SessionUnlockParam) OnSessionUnlock(); // Do something when unlocked } base.WndProc(ref m); return;}void OnSessionLock() { Debug.WriteLine("Locked...");}void OnSessionUnlock() { Debug.WriteLine("Unlocked...");}private void Form1Load(object sender, EventArgs e){ WTSRegisterSessionNotification(this.Handle, NotifyForThisSession);} // and then when we are done, we should unregister for the notification // WTSUnRegisterSessionNotification(this.Handle);
- 3 回答
- 0 关注
- 751 浏览
添加回答
举报
0/150
提交
取消