是否可以通过 PC 重新启动或用户单击应用程序快捷方式来确定 MFC 应用程序正在启动?

Posted

技术标签:

【中文标题】是否可以通过 PC 重新启动或用户单击应用程序快捷方式来确定 MFC 应用程序正在启动?【英文标题】:Is there anyway to identify that an MFC application is starting by PC rebooting or by user click on application shortcut? 【发布时间】:2019-06-27 06:15:01 【问题描述】:

我有一个 MFC 应用程序。此应用程序在 PC 重新启动时运行,显然是通过用户单击应用程序图标来运行的。当用户单击应用程序图标时,应用程序将启动这是正常情况。但如果应用程序从 PC 重新启动运行,我想最小化应用程序系统托盘。系统已经实现,但我不知道如何检测应用程序是由 PC 启动还是由用户单击启动。有没有办法在 MFC 应用程序中检测这些场景?

每一个帮助都是非常可观的。谢谢。

/////////////////////////////////////// ////////////////////////////

更新: 您好@michael-chourdakis 先生,非常感谢您的宝贵建议。我正在下面更新我的解决方案。有人可能会从中得到帮助。

命令行参数值已设置为 "autorun" 并在注册表中使用我的应用程序名称注册了此值,如下所示:

CString strFilePath = ApplicationFilePath + _T(" ") + _T("--autorun");

下面是从MFC应用InitInstance获取命令行参数的过程:

CString strAutoRun = _T("");

if(AfxGetApp()->m_lpCmdLine != NULL && AfxGetApp()->m_lpCmdLine[0] == _T('\0'))

     strAutoRun = AfxGetApp()->m_lpCmdLine;


if(strAutoRun.CompareNoCase(_T("--autorun")) == 0)

    // Application start from PC Rebooting....  

【问题讨论】:

There is a way to detect if an application was launched from a shortcut,但是当用户通过在资源管理器中双击可执行文件来启动它时(或者当使用CreateProcessShellExecute 通过任何其他应用程序启动时),这当然是不够的。 【参考方案1】:

在注册应用程序以在登录时运行时(通过注册表、资源管理器启动或您可能使用过的任何其他方法),传递命令行参数以指示以这种方式启动。

在应用启动时,检查是否使用了该参数。

您可能希望传递一个极值,以免有人意外以该模式启动您的应用,例如 CLSID。

【讨论】:

以上是关于是否可以通过 PC 重新启动或用户单击应用程序快捷方式来确定 MFC 应用程序正在启动?的主要内容,如果未能解决你的问题,请参考以下文章

如何从按钮上的网页重新启动iDevice单击

检测应用程序是不是通过单击应用程序图标或推送通知启动(当应用程序被用户强制终止时)

在没有用户提示的情况下使用 RegisterApplicationRestart 重新启动崩溃的程序

用户单击 Urban Airship 通知时重新启动 android 应用程序

计算机意外地重新启动或遇到错误 Windows 安装无法继续 若要安装Windows,请单击 确定 重新启动计算机,然后

在后台应用程序时重新启动没有用户界面的iOS应用程序?