내 앱을 종료하는 데 시간이 얼마나 오래 걸릴 수 있습니까? example을 찾았지만 Delphi 용입니다. C++로 변환 할 수 없습니다. 여기Windows 종료 일시 중지
답변
는 델파이 코드의 C++ 빌더 VCL 번역입니다 :
class TForm1 : public TForm
{
..
protected:
void __fastcall WMQueryEndSession(TWMQueryEndSession &Message);
..
public:
..
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_QUERYENDSESSION, TWMQueryEndSession, WMQueryEndSession)
END_MESSAGE_MAP(TForm)
};
...
void __fastcall TForm1::WMQueryEndSession(TWMQueryEndSession &Message)
{
Message.Result = TRUE;
if ((Message.Unused & ENDSESSION_CRITICAL) == 0)
{
ShutdownBlockReasonCreate(Handle, L"please wait while muting...");
Sleep(45000); // do your work here
ShutdownBlockReasonDestroy(Handle);
}
}
무엇이 Message.Unused & ENDSESSION_CRITICAL을위한 것인가? 어디서나 문서를 찾을 수 없었습니다. 매우 고마워요. – kizeloo
'Unused' 필드는 ['WM_QUERYENDSESSION']의'lParam' 값에 해당합니다 (https://msdn.microsoft .com/en-us/library/windows/desktop/aa376890.aspx) 메시지입니다.이 필드는 VCL에 의해 * 사용되지 않습니다 *하지만 실제로 종료가 발생하는 이유를 설명하는 플래그를 포함합니다. 여기서 'ENDSESSION_CRITICAL'은 "* 응용 프로그램이 강제 종료됩니다 * ". 따라서 응용 프로그램이 OS에 의해 강제 종료되지 않는 경우 코드가 종료됩니다. –
[Windows Vista의 응용 프로그램 종료 변경 사항] (https://msdn.microsoft.com)을 참조하십시오. /en-us/library/ms700677.aspx), 왜'ENDSESSION _CRITICAL'이 (가) 존재합니다. Vista에서 새 종료 API의 일부로 추가되었습니다. –
당신이 C++ 무엇을 의미합니까? WinAPI를 사용하여 건물에 창문이 있습니까? – Ajay
@Ajay : C++ Builder는 Embarcadero (이전 Borland) C++ 컴파일러/IDE입니다. 구글 그것. –
@KenWhite, 나는 그것을 묻지 않았다. 만약 그들이 WM_QUERYENDSESSION을 처리 할 수 있도록 OP의 프로그램에 메시지 루프가 있다는 것을 의미했습니다. – Ajay