为关闭的应用程序创建“关闭”窗口

时间:2014-12-17 14:40:31

标签: c++ winapi

我对C ++编程相对较新,目前正在使用Visual Studio 2012 API。我的操作系统是Windows 7 64位。我想用C ++编写一个程序,它显示一个带有简单关闭消息的消息框或窗口,例如: '关闭.....'或者当我关闭特定应用程序时类似的东西。我希望这个窗口会在应用程序退出时间内显示,然后关闭。

是否可以创建一个句柄,该句柄将在突然关闭时检索正在运行的应用程序的退出时间?如果是这样,我怎么能在显示消息框的语句中使用此退出时间?

我很欣赏建设性的批评,因为我对这门语言不熟悉。真诚地感谢您提供的任何建议。如果需要,我将显示所有源代码。

我不认为这是解决此问题的正确方法,但无论如何,下面是我一直在玩的代码片段,作为更大的VS Win32应用程序项目的一部分:

LPTSTR  lpchText(_T("Shutting down...."));
   LPFILETIME lpExitTime = 0; //Initialise
   TCHAR Buffer[_MAX_PATH];
   DWORD size = _MAX_PATH;
   LPCTSTR lpStr(_T("C:\Program Files\Common Files\ExampleApp.exe")); // Path to executable app.



   AssocQueryString(    ASSOCF_OPEN_BYEXENAME,
                        ASSOCSTR_EXECUTABLE,
                        lpStr,
                        NULL,
                        Buffer,
                        &size
                        );

   GetProcessTimes(
                        AssocQueryString,
                        NULL,
                        lpExitTime,
                        NULL,
                        NULL
                 );

   while(lpExitTime){


                        MessageBoxEx(
                        _In_opt_  hWnd,
                        _In_opt_  lpchText,
                        _In_opt_  lpCaption,
                        _In_opt_  MB_ICONEXCLAMATION
                        ,0
                        ); 

                   };
  return TRUE; 

    enter code here

1 个答案:

答案 0 :(得分:1)

我想关闭应用程序是一项冗长的操作,否则普通应用程序将被关闭得如此之快,以至于用户将无法真正看到窗口。

但当然有可能,在元代码中这就是步骤。

  1. 附加到正在运行的进程。您可以从可执行文件的名称中枚举正在运行的进程,以找到正确的进程。
  2. 获得流程的句柄后,您可以附加到流程消息循环。
  3. 侦听WM_QUIT(假设它是Windows应用程序)消息,然后显示窗口。
  4. 使用MsgWaitForMultipleObject等待进程句柄,该函数将在进程终止时发出信号。
  5. 附加到其他进程存在一些安全问题,因此它可能不适用于普通用户。

    要探索的其他选项是在电源Shell脚本中处理它,或者创建一个小型启动器应用程序,然后启动实际的应用程序。

    是否可以选择修改应用程序本身以获得此功能?