visual-c++ - 未收到已注册的窗口消息 TaskbarButtonCreated

标签 visual-c++ mfc wndproc

我想开始研究 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 但该方法也没有被调用。有什么建议吗?

最佳答案

原来我需要以下内容:

ChangeWindowMessageFilterEx(AfxGetMainWnd()->GetSafeHwnd(), g_wmTBC, MSGFLT_ALLOW, NULL);
ChangeWindowMessageFilterEx(AfxGetMainWnd()->GetSafeHwnd(), WM_COMMAND, MSGFLT_ALLOW, NULL);

在我的 OnInitDialog 中。

编辑:

这是因为我以提升的权限运行应用程序,因此默认情况下不会从较低权限的进程接收消息,除非您使用 ChangeWindowMessageFilterEx。更多信息:ChangeWindowMessageFilterEx Documentation .

Microsoft 也有一些示例代码做同样的事情 here on github

关于visual-c++ - 未收到已注册的窗口消息 TaskbarButtonCreated,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28697559/

相关文章:

c++ - 如何初始化模态对话框? (C++/MFC)

winforms - 如何使用 Windows 窗体在窗口标题栏中绘制自定义按钮?

multithreading - 单/多线程 (OpenMP) 模式下计算精度的差异

c++ - 在不触发事件的情况下更新 UI 状态的模式

c++ - Windows 有默认的单词词典吗?

c++ - WM_DESTROY 未在包装的 WndProc 中调用

c# - "Error creating window handle"定义覆盖的 WndProc 方法后

c++ - 在安装 VS 2015 安装程序项目时安装 vcredist_x64.exe

c++ - 获取套接字功能的连接超时

尽管对象是派生类型,但 C++ dynamic_cast 返回 NULL