是否可以通过 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,但是当用户通过在资源管理器中双击可执行文件来启动它时(或者当使用CreateProcess
或ShellExecute
通过任何其他应用程序启动时),这当然是不够的。
【参考方案1】:
在注册应用程序以在登录时运行时(通过注册表、资源管理器启动或您可能使用过的任何其他方法),传递命令行参数以指示以这种方式启动。
在应用启动时,检查是否使用了该参数。
您可能希望传递一个极值,以免有人意外以该模式启动您的应用,例如 CLSID。
【讨论】:
以上是关于是否可以通过 PC 重新启动或用户单击应用程序快捷方式来确定 MFC 应用程序正在启动?的主要内容,如果未能解决你的问题,请参考以下文章
检测应用程序是不是通过单击应用程序图标或推送通知启动(当应用程序被用户强制终止时)
在没有用户提示的情况下使用 RegisterApplicationRestart 重新启动崩溃的程序
用户单击 Urban Airship 通知时重新启动 android 应用程序
计算机意外地重新启动或遇到错误 Windows 安装无法继续 若要安装Windows,请单击 确定 重新启动计算机,然后