我有一个C#应用程序,我希望我的应用程序通过MessageBox推迟Windows Switch用户并等待来自MessageBox的响应。如果我的应用程序还没有为Switch User做好准备,那么我取消Windows Switch用户。
我尝试过WTSRegisterSessionNotification()并在方法WndProc()中接收WM_WTSSESSION_CHANGE消息,如下所示:
[DllImport("WtsApi32.dll")]
public static extern bool WTSRegisterSessionNotification(IntPtr hWnd, [MarshalAs(UnmanagedType.U4)]int dwFlags);
[DllImport("WtsApi32.dll")]
public static extern bool WTSUnRegisterSessionNotification(IntPtr hWnd);
WTSRegisterSessionNotification(this.Handle, 1); // all sessions
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case Unmanaged.Constants.WM_WTSSESSION_CHANGE: // 0x02B1
{
try
{
int wParamValue = m.WParam.ToInt32();
File.AppendAllText(@"d:\temp\logoff.txt", wParamValue.ToString());
if (wParamValue == Unmanaged.Constants.SESSION_LOCK)// SESSION_LOCK = 0x7;
{
DialogResult dialogResult = MessageBox.Show(this,
"Do you really want to switch user?",
"title", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (dialogResult == DialogResult.No)
{
// cancel switch user
return;
}
}
}
catch (Exception exc)
{
break;
}
break;
}
}
base.WndProc(ref m);
}
我的问题:
是否有推迟和取消Windows Switch用户的解决方案?
谢谢, 顺
答案 0 :(得分:1)
正如MSDN所提到的,此消息是为方便起见而在操作后发送的通知消息,而不是提前发送,以防止它发生。
阻止用户进行切换对我来说似乎是明显的恶意,我会惊讶地知道Windows支持的形式不是组策略。 Windows团队以艰难的方式吸取了教训。 You can't even cancel system stand by mode因为该功能被滥用了很多。