已收到已注册的窗口消息TaskbarButtonCreated(Registered Window Message TaskbarButtonCreated not received)

编程入门 行业动态 更新时间:2024-10-04 03:25:10
已收到已注册的窗口消息TaskbarButtonCreated(Registered Window Message TaskbarButtonCreated not received)

我想开始查看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

更多推荐

本文发布于:2023-07-09 10:14:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1085573.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:窗口   消息   TaskbarButtonCreated   Registered   Message

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!