Windows XP 中的屏幕保护程序无法启动外部程序

发布于 2024-09-28 21:13:04 字数 462 浏览 7 评论 0原文

我正在用 C# 编写一个屏幕保护程序,它应该启动一个应用程序,然后在用户按下“A”键时终止。

当前,当您双击 .scr 文件或等待其启动时,Windows 7 上确实会发生这种情况。在 Windows XP 上,仅当您双击 .scr 文件时,外部应用程序才能正常启动。当操作系统启动屏幕保护程序时,按“A”确实会终止屏幕保护程序,但外部应用程序会立即启动然后关闭。任务管理器显示外部应用程序在屏幕保护程序之前关闭一瞬间,因此我想这也会由于某种原因终止外部应用程序。无论您将外部应用程序设置为什么,这都是行为。

当从操作系统启动屏幕保护程序而不是用户双击屏幕保护程序时,是否会发生内部情况?

我使用 System.Diagnostics.Process.Start() 来运行外部应用程序,但使用 Process 和 ProcessStartInfo 具有相同的效果。

我正在使用 .NET Framework 3.5

问候, 坦率

I'm writing a screensaver in C# which should launch an application and then terminate when the user presses the "A" key.

This currently does happen on Windows 7 when you double click the .scr file or wait until it launches. On Windows XP the external application launches normally only when you double click the .scr file. When the screensaver is launched by the OS, then pressing "A" does terminate the screensaver but the external application is launched momentarily then closes. The Task Manager shows that the external application closes a split second before the Screensaverso I would imagine that this terminates the external application too for some reason. This is the behaviour with whatever you set the external application to be.

Is there something internal that happens when a Screensaver is launched from the OS rather than double clicked by the user?

I'm using System.Diagnostics.Process.Start() to run the external application but using Process and ProcessStartInfo has the same effect.

I'm using .NET Framework 3.5

Regards,
Frank

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

想你只要分分秒秒 2024-10-05 21:13:05

是的,屏幕保护程序在其自己的桌面上运行。常见的有三种,登录桌面、现在看到的桌面和屏保桌面。进程通过传递给 CreateProcess 的 STARTUPINFO.lpDesktop 成员与桌面关联。当为 NULL 时,它在当前桌面中运行。

在关闭桌面上运行的所有进程之前,无法关闭桌面。这就是您所看到的自动完成的事情。不知道为什么你要尝试这样做,但你正在考虑 pinvoking CreateProcess 以避免杀死这个进程。我确实怀疑 Windows 是否允许这样做,屏幕保护程序是臭名昭著的恶意软件载体。

Yes, a screen saver runs in its own desktop. There are three common ones, the login desktop, the one you are looking at now and the screen saver desktop. A process is associated to a desktop through the STARTUPINFO.lpDesktop member passed to CreateProcess. When NULL, it runs in the current desktop.

a desktop cannot be closed until all processes that run on it are closed. Which is what you see happening done automatically. Not sure why you are trying to do this but you're looking at pinvoking CreateProcess to avoid getting this process killed. I do rather doubt that Windows allows this, screen savers were a notorious vector for malware.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文