是否可以通过 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 应用程序正在启动?的主要内容,如果未能解决你的问题,请参考以下文章