需要在一个服务里面判断desktop是winlogon还是default,在XP里面可以用OpenInputDesktop,和GetUserObjectInformation得到返回的是Winlogon或者Default。但在Win7里面,得到的都是Default。应该有方法判断的啊,他们都在WinSta0,就是没找到方法!
一个办法貌似可行,在进程中寻找LogonUI.exe,如果发现应该就是Winlogon。

解决方案 »

  1.   

    Win7?都是Default,Session一样吗?
      

  2.   


    我得到的怎么都是default啊,难道是在虚拟机中的原因,但下面这个也是都Default
    http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/009fa335-f6bf-4372-a76d-d59b6c2daf5a/
      

  3.   

    我没有管桌面的名字,总是把自己的桌面设为input desktop,结果是总可以看到自己的窗口
      

  4.   

    Winlogon桌面是什么东西啊?每个session都有吗?
    是首次登录前,或者在使用过程中按下"Win+L"键后切换至的桌面吗?如果每个session都有,那要显示的时候,系统如何决策要显示的是哪一个session的winlogon桌面?
      

  5.   

    本机显示active console session的
      

  6.   


    那当多用户同时登陆(fast user switch),其中某当前用户(active console session)注销后,此时显示的是哪一个session的winlogon桌面?是不是从default到winlogon桌面的切换时,产生 session lock事件(也就是按下win+L)。反之 session unlock事件?
      

  7.   

    注销后回到session 0,如果之前的session不是0,会黑屏一秒
      

  8.   

    黑屏一秒 时 这个状态是session几?是不是就是说:默认情况下,除了session 0, 其他session不会有 名为"winlogon"的桌面?
      

  9.   

    每个会话都有winlogon
    黑屏的时候是正在切换的状态
      

  10.   

    Win+L的时候,是“session N 的 default切换至 session N 的 winlogon ”?
    注销的时候,是直接 从 session N 的default 切换至 session 0 的winlogon ?这样?
      

  11.   

    注销时先到自己的winlogon再到seszion0
      

  12.   

    终于baidu到一个中文的讲述什么是 登录窗口 是怎么来的,和什么情况下会切换到登录窗口。
    说是翻译自MSDN,我在MSDN2008中却没找到在哪里。。1. 用户登录的过程被激活
    2. 在用户会话过程中当用户按下CTRL+ALT+DEL
    3. UAC对话框被打开的情况下不知道对不对.
      

  13.   

    (我在5楼开始就问:Winlogon桌面是什么。)我想 Win7下,在2种情况下显示winlogon桌面(至于注销的时候,估计看不到了)
    win2k3以前的系统就是1种了(SAS三键)。
    过滤驱动代码?哪个层的?去哪看啊?
      

  14.   

    winlogon桌面就是一个桌面,一般你不在default就在winlogontopic.csdn.net/u/20120321/15/f556b5a8-ef67-4ee6-8fbc-ded587e56a44.html
      

  15.   

    关于桌面的切换我也有几个问题,下面是我在HandlerEx的SERVICE_CONTROL_SESSIONCHANGE事件中打印WTSSESSION_NOTIFICATION的dwSessionId的情况。
    (1)由用户A选择切换用户进入winlogon界面,然后选择用户B:DISCONNECT sessionid=1,CONNECT sessionid=2,LOGON sessionid=2(此前用户B未登录,那么这个2应该就是用户B的session了)
    (2)再由B切换到A:DISCONNECT sessionid=2,CONNECT sessionid=3,DISCONNECT sessionid=3,CONNECT id=1【这里的3是谁的session,session0?如果是,是不是(1)中CONNECT sessionid=2的2也是session0,当用户B登录的时候,B的sessionid变成了2,session0的id变成了3?】
      

  16.   

    Win7不知道.03,XP,可以用查找桌面窗口来判断
    FindWindow(TEXT("Progman"), NULL)
      

  17.   

    session 0 永远是session 0第一个登陆的是 session 1
    session 1不注销,第二个登录的是session 2
    session 2不注销,第三个登录的是session 3我还真没注意,session id 是一直递增,还是重利用。。
      

  18.   

    楼主,可以上网下一个VNC的源码,看看吧判断很简单~~~
      

  19.   


    那么,现在只有两个用户,id=3是谁的?当B注销后,再次登录,我发现B的sessionid变成了2。
    再切换到用户A(id=1),中间也有个id=3的session,是不是有个session专门处理用户切换了
      

  20.   

    搜了下TightVNC的代码,好像没有直接去判断桌面是winlogon还是default吧,或者我没找到,它有个DesktopSelector类,用的也是我上面说的OpenInputDesktop,和GetUserObjectInformation。
      

  21.   

    我需要在不同桌面用CreateProcessAsUser创建不同的程序,参数STARTUPINFO需要指定桌面是Winlogon还是Default。
      

  22.   

    刚注意到你是服务
    要OpenInputDesktop首先要把进程的窗口站设置为WinSta0,而服务一开始的窗口站不是WinSta0
      

  23.   

    设置过了,一样都是default,如下:
    OpenWindowStation("Winsta0",...)
    SetProcessWindowStation()