我把我的DLL插入到WINLOGON后,用CreateProcess创建了一个新的进程,为什么这个进程没有界面,但是用任务管理器可以看到这个进程正在运行.而我把这个DLL插入到EXPLORER.EXE里边就一切正常.
这是为什么?

解决方案 »

  1.   

    将窗口设为最前端,因为winlogon是最前端显示,会将你的窗口界面遮蔽
      

  2.   

    进程要想显示(与用户交互),它拥有的windows station和desktop必须是可交互的。
    一般系统程序(比如winlogon)运行在LocalSystem帐户下,它拥有的windows station和desktop不具有交互能力。也就是说:不能显示窗口、菜单,不能接受鼠标、键盘等。WinLogon.exe产生3个桌面:
    WinLogon桌面:就是那个登录的对话框所在的桌面。当用户登录以后,切换到default桌面
    Default桌面:Explorer.exe 和所有用户程序运行的桌面。我们最经常用到的桌面.
    Screen saver桌面:系统空闲时,运行的屏保桌面。你把dll插入到WINLOGON后,产生的新进程,仍然是系统进程,没有交互能力。你可以通过指定该进程的windows station(WinSta0)和desktop(default),它就能与你交互了。
    当你把dll插入到EXPLORER.EXE,它是运行在登录的帐户下的,拥有交互能力。因此,就一切正常了。
      

  3.   

    参见该贴:
    http://community.csdn.net/Expert/topic/4117/4117272.xml?temp=.6930353
    感谢kuangjingbo!
      

  4.   

    能否说得再详细点,我该用哪个API? SetProcessWindowStation和SetThreadDesktop只能设置当前进程或者线程,我该怎么样在DLL里边设置别的进程的windows station呢?
      

  5.   

    api方面,msdn上都有,有个主题是关于windows station和desktop的,自己查啦!
    另外,windows station和desktop的主要作用,主要就出于安全的目的。如果,还能随意的设定别的进程的windows station和desktop,那么安全的目的就不在了。所以,我认为没有这种api。
      

  6.   

    因为逻辑桌面不一样,所以不能显示了,
    在window2000以上,主要有三个桌面:default,winlogon,还有一个动态创建的屏保。
    楼主要试下的话,在启动了程序后,你可以接下:alt_ctrl_del键,切换到winlogon桌面,看下有没有。???
      

  7.   

    那到底用什么办法可以让我插入WINLOGON的DLL运行一个新的进程时,新进程可以显示交互界面呢?
    急啊