我想开始研究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
从来没有被击中。我也曾尝试将a添加ON_REGISTERED_MESSAGE
到我的MESSAGE_MAP
方法中,但是该方法也没有被调用。有什么建议?
原来我需要以下内容:
ChangeWindowMessageFilterEx(AfxGetMainWnd()->GetSafeHwnd(), g_wmTBC, MSGFLT_ALLOW, NULL);
ChangeWindowMessageFilterEx(AfxGetMainWnd()->GetSafeHwnd(), WM_COMMAND, MSGFLT_ALLOW, NULL);
在我的OnInitDialog
。
编辑:
这是因为我使用提升的特权运行该应用程序,因此默认情况下,除非您使用,否则不会从特权较低的进程接收消息ChangeWindowMessageFilterEx
。更多信息:ChangeWindowMessageFilterEx文档。
微软在github上也有一些示例代码在做同样的事情
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句