怎么从IUnknown里获取到删除文件的完整路径?
参考的是这篇文章 WIN7 下 explorer 进行的文件移动COPY HOOK
在win7下我Hook到了的删除操作,回调函数里只有一个IUnknown类型的参数,怎么从这个参数里能解析出被删除文件的路径?
我打印了uFileCount值是正确的,就是获取不到路径。。
在win7下我Hook到了的删除操作,回调函数里只有一个IUnknown类型的参数,怎么从这个参数里能解析出被删除文件的路径?
我打印了uFileCount值是正确的,就是获取不到路径。。
LPWSTR __stdcall GetDeleteFileName(IUnknown* iUnknown)
{
UINT uFileCount = 0;
IDataObject* iDataObject = NULL;
HRESULT hr = iUnknown->QueryInterface(IID_IDataObject, (void**)& iDataObject); //通过iUnknown接口查找IDataObject接口
do
{
if (!SUCCEEDED(hr))
{
break;
}
FORMATETC fmt = { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
STGMEDIUM stg = { TYMED_HGLOBAL };
if (!SUCCEEDED(iDataObject->GetData(&fmt, &stg)))
{
break;
}
HDROP hDrop = (HDROP)GlobalLock(stg.hGlobal);
if (hDrop == NULL)
{
break;
}
uFileCount = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0);
if (uFileCount <= 0)
{
break;
}
WPATH** ppPath = NULL;
*ppPath = new WPATH[uFileCount];
if (*ppPath != NULL)
{
for (UINT uIndex = 0; uIndex < uFileCount; uIndex++)
{
DragQueryFile(hDrop, uIndex, (*ppPath)[uIndex], MAX_PATH);
}
}
else
{
uFileCount = 0;
}
GlobalUnlock(stg.hGlobal);
ReleaseStgMedium(&stg);
return stg.lpszFileName;
} while (FALSE);
return NULL;
}
...全文
相关推荐
COM编程入门
**设置Shell链接属性**:通过`IShellLink`接口设置链接的目标路径、描述等信息。3. **保存Shell链接**:使用`IPersistFile`接口保存Shell链接到文件。
com编程入门
**设置属性**: 调用接口方法设置快捷方式的目标路径、图标等。3. **保存快捷方式**: 使用`IPersistFile`接口保存创建的快捷方式到磁盘。
COM编程入门.doc
- **QueryInterface**:获取对象支持的接口。- **Release**:释放对象。**2. IUnknown接口**- **AddRef**:增加对象引用计数。
(C#)Windows Shell 外壳编程系列
具体而言,我们学习了如何获取桌面的IShellFolder接口,以及如何通过该接口获取任意路径的PIDL和IShellFolder接口。这些基础知识对于进一步开发基于Shell的应用程序至关重要。
C++如何用arx在AutoCAD2004中加载动态菜单
获取菜单组对象。2. 遍历菜单项并逐个移除。3. 最后删除菜单组本身。#### 四、总结通过上述步骤,我们可以实现在AutoCAD 2004中动态地添加和移除自定义菜单。


