首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#应用程序延迟Win7交换机用户

C#应用程序延迟Win7交换机用户
EN

Stack Overflow用户
提问于 2010-10-25 06:47:22
回答 1查看 657关注 0票数 0

我有一个C#应用程序,我希望我的应用程序通过MessageBox延迟Windows用户并等待来自MessageBox的响应。如果我的应用程序尚未准备好切换用户,则取消Windows交换机用户。

我尝试过WTSRegisterSessionNotification()并在方法WndProc()中接收WM_WTSSESSION_CHANGE消息,如下所示:

代码语言:javascript
复制
[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);
代码语言:javascript
复制
WTSRegisterSessionNotification(this.Handle, 1); // all sessions
代码语言:javascript
复制
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);
}

我的问题:

  1. 在WndProc()中:当我切换用户时,wParamValue的值仅为1或2。正如MSDN所提到的,应该是0x7。
  2. 我收到了WM_WTSSESSION_CHANGE消息,但是Windows用户(没有显示MessageBox)。WM_WTSSESSION_CHANGE似乎是在Windows交换用户之后发送的。

是否有任何推迟和取消Windows交换机用户的解决方案?

谢谢你,川

EN

回答 1

Stack Overflow用户

发布于 2010-10-25 08:02:37

如MSDN所述,此消息是在操作后发送的通知消息,目的是为了您的方便,而不是为了防止其发生而提前发送。

在我看来,阻止用户进行切换显然是恶意的,我会惊讶于Windows以一种不同于组策略的形式支持这种切换。Windows团队以艰难的方式吸取了他们的教训。你甚至不能取消系统待命模式不再是因为这个特性被滥用了很多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4012364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档