我想调试我写的一个Windows C++应用程序,以了解它为什么没有响应WM_QUERYENDSESSION我的期望值。显然,通过关闭系统来做到这一点有点棘手。是否有任何实用程序或代码可用于将我自己的应用程序窗口发送给我的应用程序窗口?是否可以将WM_QUERYENDSESSION消息发送到不同进程中的窗口?
4
A
回答
1
我已经使用了Win32::GuiTest Perl模块来做这种事情。
0
是的。如果你可以得到窗口句柄(可能使用FindWindow()),只要WPARAM不是指针,就可以发送/发送任何消息给它。
1
Windows API SendMessage可用于执行此操作。 http://msdn.microsoft.com/en-us/library/ms644950(VS.85).aspx
是TI可能它不响应,因为一些其他正在运行的进程已与零回应(使系统等待就可以了。)
1
当然是的,有可能。几个月前我遇到过类似的问题,那里有一些(未知的,但可能是我的)应用程序阻止关机,所以我编写了一些快速代码,使用EnumWindows枚举所有顶级窗口,向每个窗口发送WM_QUERYENDSESSION消息,注意返回来自SendMessage的值是,如果有人返回FALSE,则停止枚举。在C++/MFC中花了大约十分钟。这是它的胆量:
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是对话的this指针只是一个本地副本,所以助手回调可以访问它。我告诉你这是快速和肮脏的:-)
+0
请尝试格式化您的代码示例 - 缩进每一行有4个空间。 – ChrisN 2008-09-16 22:00:13
相关问题
- 1. Windows:将消息发送到父窗口?
- 2. 将消息发送到不同线程
- 3. 我可以确定哪个进程向我的窗口发送了消息吗?
- 4. 如何通过进程ID而不是窗口句柄将消息发送到特定进程?
- 5. 是否可以将命令发送到现有的xterm进程?
- 6. 是否可以向Erlang的未注册流程发送消息?
- 7. 用户是否也可以在NServiceBus中发布/发送消息?
- 8. 发送消息(F4)发送到窗口时失败
- 9. Debug.WriteLine如何将消息发送到输出窗口
- 10. 有没有一种工具可以侦测发送到窗口的消息
- 11. 从工作非gui线程发送消息到主窗口
- 12. 发送消息到WCF主机进程
- 13. 是否可以使用pywinauto将数据发送到最小化窗口?
- 14. 是否可以使用STOMP将消息发送到多个队列?
- 15. 远程窗口不会收到消息
- 16. 检查窗口是否是消息框
- 17. 我是否可以使用Android中的套接字编程将某些消息发送到远程电话?
- 18. 将消息发送到由不同窗口的用户会话启动的应用程序
- 19. 将消息发送到erlang的远程节点端口
- 20. 在用户发送消息之前填充Facebook消息窗口
- 21. ios是否可以发送Facebook消息给Facebook好友?
- 22. 是否可以向所有主题发送消息?
- 23. 是否可以在任务(OmniThreadLibrary)之间发送消息?
- 24. 是否可以从sql server发送任何alert()消息?
- 25. 是否可以从网页发送Office传播者消息?
- 26. 是否可以通过GTalk Intent发送消息?
- 27. 我可以过滤来自不同线程窗口的消息吗?
- 28. ,消息收到消息,但确认是由其他进程发送的?
- 29. 是否可以在不同的窗口中调试eclipse中的多个线程?
- 30. HTML5是否支持跨窗口消息?
看到重复的问题http://stackoverflow.com/a/2673800/126229其中有一个链接rmtool.exe – EricLaw 2013-07-01 16:28:24