WM_QUERYENDSESSION에 응답하지 않는 이유를 확인하기 위해 작성한 Windows C++ 응용 프로그램을 디버깅하고 싶습니다. 분명히 시스템을 종료하여이 작업을 수행하는 것은 약간 까다 롭습니다. 가짜 WM_QUERYENDSESSION을 내 응용 프로그램 창에 직접 보내는데 사용할 수있는 유틸리티 나 코드가 있습니까?WM_QUERYENDSESSION 메시지를 다른 프로세스의 창에 보낼 수 있습니까?
답변
나는이 종류의 일을하기 위해 과거에 Win32::GuiTest Perl 모듈을 사용 해왔다.
예. WPARAM & LPARAM이 포인터가 아닌 한 창 핸들 (FindWindow() 사용)을 얻을 수 있다면 WPARAM & 포인터가 아닌 한 메시지를 보내거나 게시 할 수 있습니다.
Windows API SendMessage를 사용하여이 작업을 수행 할 수 있습니다. http://msdn.microsoft.com/en-us/library/ms644950(VS.85).aspx
는 다른 실행중인 프로세스가 0으로 대응하고 있기 때문에 가능한이 응답하지 않는 것 TI IS (시스템이 기다려야하고.)
예 물론, 그것은 가능합니다. 몇 달 전에 비슷한 문제가 발생하여 EnumWindows를 사용하여 모든 최상위 창을 열거하고 WM_QUERYENDSESSION 메시지를 하나씩 보낸 빠른 코드를 작성했습니다. 누군가가 FALSE를 반환하면 SendMessage의 값이 열거를 중지하고 중지했습니다. C++/MFC에서 약 10 분이 걸렸습니다. 이것은 그것의 배짱이었다 도우미 콜백이 액세스 할 수 있도록
void CQes_testDlg::OnBtnTest()
{
// enumerate all the top-level windows.
m_ctrl_ListMsgs.ResetContent();
EnumWindows (EnumProc, 0);
}
BOOL CALLBACK EnumProc (HWND hTarget, LPARAM lParam)
{
CString csTitle;
CString csMsg;
CWnd * pWnd = CWnd::FromHandle (hTarget);
BOOL bRetVal = TRUE;
DWORD dwPID;
if (pWnd)
{
pWnd->GetWindowText (csTitle);
if (csTitle.GetLength() == 0)
{
GetWindowThreadProcessId (hTarget, &dwPID);
csTitle.Format ("<PID=%d>", dwPID);
}
if (pWnd->SendMessage (WM_QUERYENDSESSION, 0, ENDSESSION_LOGOFF))
{
csMsg.Format ("window 0x%X (%s) returned TRUE", hTarget, csTitle);
}
else
{
csMsg.Format ("window 0x%X (%s) returned FALSE", hTarget, csTitle);
bRetVal = FALSE;
}
mg_pThis->m_ctrl_ListMsgs.AddString (csMsg);
}
else
{
csMsg.Format ("Unable to resolve HWND 0x%X to a CWnd", hTarget);
mg_pThis->m_ctrl_ListMsgs.AddString (csMsg);
}
return bRetVal;
}
mg_pThis는 대화 상자의이 포인터의 단지 로컬 복사본이었다. 나는 그것이 빠르고 빠르다고 말했다 :-)
각 줄을 들여 쓰는 코드 샘플을 시도해보십시오. 4 칸. – ChrisN
- 1. JNA로 WM_QUERYENDSESSION 메시지를 처리하는 방법
- 2. 어떻게 메시지를 보낼 수 있습니까?
- 3. 다른 프로세스의 STDIO로 "telnet"할 수 있습니까?
- 4. 작업 (OmniThreadLibrary)간에 메시지를 보낼 수 있습니까?
- 5. OSX에서 동일한 컴퓨터의 다른 사용자에게 으르렁 메시지를 보낼 수 있습니까?
- 6. 한 얼굴 컨텍스트에서 다른 JSF 컨텍스트로 메시지를 보낼 수 있습니까?
- 7. webservice가 서버에서 클라이언트로 메시지를 보낼 수 있습니까?
- 8. 모든 스레드에 메시지를 보낼 수 있습니까?
- 9. iPhone/iPad에서 팩스로 메시지를 보낼 수 있습니까?
- 10. 구독자는 NServiceBus에서도 메시지를 게시하거나 보낼 수 있습니까?
- 11. 어떻게 프로그래밍 방식으로 메시지를 보낼 수 있습니까?
- 12. 메시지를 창에 보내려면 어떻게해야합니까?
- 13. 다른 프로세스의 UID를 수정할 수 있습니까?
- 14. 진행중인 메시지를 창에 표시
- 15. CTRL-S 메시지를 창에 보냅니다.
- 16. WCF를 통해 큰 메시지를 보낼 수 없습니다.
- 17. PHPMAILER에서 다른 본문 내용을 보낼 수 있습니까?
- 18. 어떻게 다른 사람에게 이메일을 보낼 수 있습니까
- 19. 클라이언트에서 서버로 메시지를 보낼 수 없습니다.
- 20. 긴 메시지를 보낼 수있는 Twitter API가 있습니까?
- 21. SQL 명령을 실행하고 TransactionScope에서 MSMQ 메시지를 보낼 수 있습니까?
- 22. 안드로이드 서비스를 작성하여 문자 메시지를 보낼 수 있습니까?
- 23. 어떻게 반복적으로 파이썬에서 서버 소켓을 통해 메시지를 보낼 수 있습니까?
- 24. 경고 메시지없이 APNS 메시지를 보낼 수 있습니까? (데이터 전용)
- 25. 개인 웹 사이트에서 Facebook 메시지를 보낼 수 있습니까?
- 26. Github : 프로젝트를 시청하는 모든 사람들에게 메시지를 보낼 수 있습니까?
- 27. 내 컴퓨터에서 휴대폰으로 문자 메시지를 보낼 수 있습니까?
- 28. iPhone SDK를 사용하여 사진 메시지를 보낼 수 있습니까?
- 29. CodeIgniter에서 PHP 오류 메시지를 나에게 이메일로 보낼 수 있습니까?
- 30. 응용 프로그램 서버 외부에서 JMS 대기열로 메시지를 보낼 수 있습니까?
rmtool.exe에 대한 링크가있는 중복 질문 http://stackoverflow.com/a/2673800/126229를 참조하십시오. – EricLaw