【发布时间】:2014-08-24 18:19:08
【问题描述】:
我有一个 .NET 程序(针对 3.5 客户端配置文件),它创建一个新的管理员帐户,重新启动,然后使用 AutoAdminLogon 注册表值自动以该帐户登录。在重新启动之前,它将 RunOnce 设置为在启动时再次运行。一旦计算机重新启动并登录,该程序应该隐藏 Start Orb 和任务栏并进入全屏模式。
问题是在重新启动时出现“正在准备您的桌面”的消息,据说是针对新创建的管理员帐户。我的程序继续在后台运行,但是当“准备桌面”屏幕完成时,任务栏和 Start Orb 并未隐藏。为什么会这样?以后每次重新启动时,任务栏和 Start Orb 都会正确隐藏,但“正在准备您的桌面”屏幕不会再次出现。
我正在使用这种方法隐藏任务栏并启动Orb:
IntPtr hwnd = FindWindow("Shell_TrayWnd", "");
ShowWindow(hwnd, SW_HIDE);
IntPtr orb = FindWindowEx(IntPtr.Zero, IntPtr.Zero, (IntPtr)0xC017, null);
ShowWindow(orb, SW_HIDE);
FindWindow、ShowWindow 和 FindWindowEx 方法在 win32.dll 中。
所以我想我的最后一个问题是:“准备桌面”屏幕是否会以某种方式阻止显示或隐藏 Windows UI 元素?例如,如果 UI 甚至没有被创建以便显示或隐藏,我怎么能等到加载屏幕完成然后运行我的程序?
【问题讨论】:
-
如果您不想要任务栏或开始按钮,那您为什么还要费心运行资源管理器呢?这就像买了一个芝士汉堡,然后抱怨很难把所有的奶酪都摘下来。
-
不允许 Explorer 运行会对需要显示的 .NET GUI 产生任何不利影响吗?如果不是这样可以解决我的问题。
-
只有你可以说你的程序是否依赖于 Explorer。从描述中听起来你有一个信息亭程序,在这种情况下你应该做类似信息亭的事情。 Explorer 不支持以这种方式操作其窗口。
-
好的。看来我必须研究如何在 Explorer 之外做一些事情才能做到这一点。
标签: .net winapi windows-7 startup