我有一个C#应用程序,我希望我的应用程序通过MessageBox延迟Windows用户并等待来自MessageBox的响应。如果我的应用程序尚未准备好切换用户,则取消Windows交换机用户。
我尝试过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 sessionsprotected 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交换机用户的解决方案?
谢谢你,川
发布于 2010-10-25 08:02:37
如MSDN所述,此消息是在操作后发送的通知消息,目的是为了您的方便,而不是为了防止其发生而提前发送。
在我看来,阻止用户进行切换显然是恶意的,我会惊讶于Windows以一种不同于组策略的形式支持这种切换。Windows团队以艰难的方式吸取了他们的教训。你甚至不能取消系统待命模式不再是因为这个特性被滥用了很多。
https://stackoverflow.com/questions/4012364
复制相似问题