gpt4 book ai didi

c++ - 当用户启动注销/关机操作时停止应用程序

转载 作者:可可西里 更新时间:2023-11-01 12:03:07 28 4
gpt4 key购买 nike

我有一个同事提供的这个应用程序(用 Visual C++ 编写的 Windows 窗体应用程序),我遇到了一些严重的问题。该应用程序既不是服务也不是普通应用程序,我的意思是它有一个 GUI,但大多数时候它在后台运行(它应该作为服务使用react,但事实并非如此)。此应用程序正在阻止用户注销,我需要能够做到这一点。

我知道当用户尝试注销时,Windows 会向所有正在运行的应用程序发送 WM_QUERYENDSESSION 消息。我试图在我的 WndProc() 函数上捕获此消息并强制终止该应用程序,但它只能运行一次。当我再次登录并尝试注销时,操作并未终止,因为我的应用程序不会关闭。

如果我尝试使用 SessionEnding 事件,应用程序只会被放入系统托盘并保留在那里而不会注销,但我相信这是因为 Form_Closing 方法执行此操作而不是关闭程序(这是要求,我无法更改)。

也许另一个有用的信息是该应用程序自动启动,因为它在 HKLM 注册表中有一个条目,并且始终有 2 个该应用程序的实例在运行(一个应该监督另一个并在崩溃的情况,但不是“手动”关闭的情况。

任何建议都会受到欢迎。

谢谢。

最佳答案

是的,这个问题是由窗体的 FormClosing 事件处理程序引起的。您必须注意关闭原因并且在用户关闭窗口时取消它。像这样:

    System::Void Form1_FormClosing(System::Object^  sender, System::Windows::Forms::FormClosingEventArgs^  e) {
// Do this *only* when the user closes the window
if (e->CloseReason == CloseReason::UserClosing) {
e->Cancel = true;
this->Hide();
// etc...
}
}

关于c++ - 当用户启动注销/关机操作时停止应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8050326/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com