我想开始查看Windows 7 TaskBar API。 我创建了一个基本的MFC对话框项目,但在注册TaskbarButtonCreated消息后,它永远不会被发送到我的WindowProc。 这是我有的:
LRESULT CTaskBarAPITestDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { if(message == g_wmTBC) { AfxMessageBox(_T("Hit the message")); //This is never hit } return CDialogEx::WindowProc(message, wParam, lParam); } int CTaskBarAPITestDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CDialogEx::OnCreate(lpCreateStruct) == -1) return -1; g_wmTBC = RegisterWindowMessage(_T("TaskbarButtonCreated")); //This works fine return 0; }AfxMessageBox永远不会被击中。 我还尝试将ON_REGISTERED_MESSAGE添加到我的MESSAGE_MAP但该方法也未被调用。 有什么建议么?
I am wanting to start looking at the Windows 7 TaskBar API. I have created a basic MFC Dialog Project but after registering the TaskbarButtonCreated message, it never gets sent to my WindowProc. Here is what I have:
LRESULT CTaskBarAPITestDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { if(message == g_wmTBC) { AfxMessageBox(_T("Hit the message")); //This is never hit } return CDialogEx::WindowProc(message, wParam, lParam); } int CTaskBarAPITestDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CDialogEx::OnCreate(lpCreateStruct) == -1) return -1; g_wmTBC = RegisterWindowMessage(_T("TaskbarButtonCreated")); //This works fine return 0; }The AfxMessageBox never gets hit. I have also tried adding a ON_REGISTERED_MESSAGE to my MESSAGE_MAP but that method doesn't get called either. Any suggestions?
最满意答案
结果我需要以下内容:
ChangeWindowMessageFilterEx(AfxGetMainWnd()->GetSafeHwnd(), g_wmTBC, MSGFLT_ALLOW, NULL); ChangeWindowMessageFilterEx(AfxGetMainWnd()->GetSafeHwnd(), WM_COMMAND, MSGFLT_ALLOW, NULL);在我的OnInitDialog 。
编辑:
这是因为我使用提升的权限运行应用程序,因此默认情况下不会从较低权限的进程接收消息,除非您使用ChangeWindowMessageFilterEx 。 更多信息: ChangeWindowMessageFilterEx文档 。
微软也有一些示例代码在github上做同样的事情
Turns out I needed the following:
ChangeWindowMessageFilterEx(AfxGetMainWnd()->GetSafeHwnd(), g_wmTBC, MSGFLT_ALLOW, NULL); ChangeWindowMessageFilterEx(AfxGetMainWnd()->GetSafeHwnd(), WM_COMMAND, MSGFLT_ALLOW, NULL);in my OnInitDialog.
EDIT:
This is because I was running the application with elevated privileges and so by default messages will not be received from a lower-privileged process unless you use ChangeWindowMessageFilterEx. More info: ChangeWindowMessageFilterEx Documentation.
Microsoft also have some example code doing the same thing here on github
更多推荐
发布评论