windows 7上的IContextMenu: InvokeCommand错误码0x80270000
IContextMenu::InvokeCommand error Code 0x80270000 on windows 7
我有以下代码来删除文件。这段代码在winXP上运行良好。但是当我在Windows 7上运行时,它不会删除文件。当执行InvokeCommand语句时,我得到错误代码0x80270000。
HRESULT hr = m_psfCurFolder->GetUIObjectOf(AfxGetMainWnd()->m_hWnd,
uiCount,
(LPCITEMIDLIST*)aPidls,
IID_IContextMenu,
NULL,
(LPVOID*)&pcm);
if (SUCCEEDED (hr))
{
HMENU hPopup = CreatePopupMenu();
hr = pcm->QueryContextMenu(hPopup, 0, 1, 0x7fff, CMF_NORMAL);
if (SUCCEEDED (hr))
{
CMINVOKECOMMANDINFO cmi;
cmi.cbSize = sizeof(CMINVOKECOMMANDINFO);
cmi.fMask = CMIC_MASK_ASYNCOK;
cmi.hwnd = (HWND) GetParent();
cmi.lpVerb = (LPCSTR)(INT_PTR)(ID_MENU_DELETE - 1);
cmi.lpParameters = NULL;
cmi.lpDirectory = NULL;
cmi.nShow = SW_SHOWNORMAL;
cmi.dwHotKey = 0;
cmi.hIcon = NULL;
BOOL bUndoDel = FALSE;
if (!(GetKeyState(VK_SHIFT) & SHIFTED))
{
bUndoDel = TRUE;
}
hr = pcm->InvokeCommand (&cmi);
if (FAILED(hr))
{
_com_error error(hr);
LPCTSTR errorText = error.ErrorMessage();
AfxMessageBox(_T("Unable to perform action"));
}
}
我发现了同样的问题,并在Microsoft Visual Studio语言论坛和Microsoft Connect上发布了详细信息和解决方案。
简而言之,这一行…
cmi.hwnd = (HWND) GetParent();
…应该替换为:
cmi.hwnd = GetParent()->GetSafeHwnd();
即使将CWnd*转换为HWND产生相同的数值,但是由于某些未知的原因,它在Windows XP(它工作)和Windows 7(它不工作)之间产生不同的结果。使用GetSafeHwnd()修复了这个问题,现在显示"删除文件"确认对话框。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 误码率解码错误