【问题标题】:Programmatically prevent Windows to shutdown以编程方式防止 Windows 关机
【发布时间】:2010-11-14 04:06:42
【问题描述】:

只要我的 Delphi 应用程序正在运行,我想防止 Windows XP 关机,我尝试了以下操作:

procedure TForm1.FormCreate(Sender: TObject);
begin
  SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 0, nil, 0);
  SystemParametersInfo(SPI_SETPOWEROFFACTIVE, 0, nil, 0);
  SystemParametersInfo(SPI_SETLOWPOWERACTIVE, 0, nil, 0);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 1, nil, 0);
  SystemParametersInfo(SPI_SETPOWEROFFACTIVE, 1, nil, 0);
  SystemParametersInfo(SPI_SETLOWPOWERACTIVE, 1, nil, 0);
end;

但这似乎不起作用。还有其他建议吗?
TIA
史蒂文

【问题讨论】:

    标签: delphi windows-xp


    【解决方案1】:

    我完全没有 Delphi 知识,只是从用户的角度来看:我不希望程序能够做到这一点,如果微软允许,我会非常生气。

    想一想,有了这种能力,任何恶意软件都会在运行时不允许您关闭,而且它不会关闭 - 哎呀。从今以后我们再也不会关闭windows了,我们总是要关闭电脑,这对硬件和软件都不好。

    我并不是说这是不可能的,但如果我正在制作一个操作系统,我会积极地让你很难甚至不可能这样做,因为它有太多被滥用的可能性。因此,您很可能会发现,即使是 microsoft 也有这种观点,并且确实没有实现。

    【讨论】:

    • 我不确定这是一个完全合理的观点...已经有许多 Microsoft 程序在关机时弹出对话框,询问您是否要保存。如果单击取消,则会取消关机。
    • 据我所知,情况并非如此。基本上,Windows 首先告诉程序(让我们说单词)关闭。然后 Word 会询问用户是否要保存。当您单击取消时,单词的关闭将被取消,这意味着它实际上忽略了它得到的命令。但是,在下一阶段开始之前您还有一段时间,但是到了它开始的时候,如果 Windows 忽略了关闭命令,它们就会开始杀死进程。因此,Windows 将关闭。至少,我从未见过有什么不同,尽管我当然可能错了。
    • 我很确定运行 MSSQL 进程实际上可以防止 Windows 关闭...不是 100% 肯定,但非常肯定...
    • 嗯,正如我所说,我从未见过它,并且认为它不可能是合乎逻辑的,但这绝不是不能做到的;我从来没有声称过。
    • 阻止 Windows 关闭的任务并不能阻止从任务管理器中杀死有问题的任务。
    【解决方案2】:

    这是您问题的答案:

    检测和防止 Windows 关闭 http://delphi.about.com/cs/adptips2000/a/bltip0500_4.htm

    【讨论】:

    • +1 for that link - 你链接到的代码看起来与我很长时间以来的做法非常相似,让旧版 Windows 机器在我不工作时不会进入睡眠状态或关闭不希望他们这样做。
    猜你喜欢
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 2016-08-29
    • 2011-01-15
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    相关资源
    最近更新 更多