我已经创建了一个特定用户的桌面上显示种类启动画面的并且仅当该用户登录在(亭用户)的服务。

这启动画面中,一旦输入了有效的代码,将告诉给服务和服务进入睡眠状态的时间的x量(取决于代码的)。

在初始屏幕简单地退出。现在,当服务唤醒它看到飞溅不再存在,因此启动它。

这所有的工作,唯一的问题是启动的应用程序没有焦点,即如果我在记事本我的工作,时间一到,闪屏显示(虽然全屏幕)背后记事本。

我只担心Windows Vista中,我使用的Win32扩展编码在Python,但我相信这问题在于CreateProcessAsUser从本地系统帐户时调用。


更新

“问题”实际上是一个是有意的限制,以防止像矿“刺激性”应用程序从偷焦点。

您可以通过设置更改行为: win32gui.SystemParametersInfo(win32con.SPI_SETFOREGROUNDLOCKTIMEOUT,0,0) 这是在临时设置注册表值相当于: HKEY_CURRENT_USER \控制面板\桌面\ ForegroundLockTimeout 这是一定要做的用户本身,所以无论是建造起来你启动应用程序或建立要启动的应用程序的启动帮手。

然而,一个应用程序可能要防止获取通过使用一些API调用,我不记得了,现在偷来的焦点。

一个可能好的解决方案是要找到当前从该用户的所有窗口句柄,然后使用每个这些手柄的使用win32gui.ShowWindow(处理,命令),以最小化。

虽然此特定问题设置LOCKTIMEOUT设置就足够了。

如果有人想知道我是如何设法从服务启动一个应用程序到桌面,这里是一个的链接到代码

有帮助吗?

解决方案 2

有关各种非常合法地位的原因,微软不愿意看到一个服务启动一个应用程序,并偷焦点,但我发现下面的解决仍达到我想要的东西。

原来打算是有像应用程序通过像闪屏,其在进入8字符代码关闭启动画面一段时间如在所限定的通行码一个通行码受阻的售货亭。原本使用的实际应用被自动启动文件夹开始。

不过,我现在重写了它,它是从我的服务推出,这样我可以通过启动从只是隐藏程序,启动闪屏,在退出闪屏的程序是该服务的辅助应用程序隐藏应用程序返回到先前的状态。

其他提示

您是否尝试启动另一个进程比你自己从服务看它是否获得焦点?如记事本,看看它是否从你的浏览器窃取重点是什么?如果是这样也许是其在程序启动时,可以收回的焦点。

我否则beilive它的wShowWindow属性从STARTUPINFO结构的lpStartupInfo指向应控制它。您还需要STARTF_USESHOWWINDOW在dwFlags中使用nShowWindow。该值应该是SW_SHOW我认为,在列出的ShowWindow函数,如果你想其他的尝试。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top