我如何使ADUC属性表DLL
How do I make a ADUC Propertysheet DLL
我是一个web开发人员,很少有COM编程背景;我想开发一个属性表,允许其他部门通过ADUC更改缩略图。
到目前为止,我已经制作了所有的脚本来注册DLL并将其添加到ADUC中,我用我发现的预编译DLL进行了测试,所以唯一剩下的就是实际制作DLL本身。
通过研究,我发现如果我使用c++,我需要实现IShellExtInit和ishelpropsheetext类;我真的很想知道如何在c#中做到这一点,但哪一个更容易先学习,然后我可以尝试自己学习其他语言。
谁能指出我在一些工作的代码样本或教程的方向?我所发现的是更多的理论,我学到了很多更好的以下教程,所以这将是一个很大的帮助!
到目前为止,我做了下面的shell,如果它关闭了,请告诉我,但由于我有限的COM知识,这是我现在所写的全部。
#include "stdafx.h"
#include <ShObjIdl.h>
class PropPage : IShellExtInit, IShellPropSheetExt
{
/////////////////////////
//IShellExtInit methods//
/////////////////////////
HRESULT Initialize(PCIDLIST_ABSOLUTE pidlFolder, IDataObject *pdtobj, HKEY hkeyProgID)
{
return S_OK;
}
//////////////////////////////
//IShellPropSheetExt methods//
//////////////////////////////
HRESULT AddPages(LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lParam)
{
return S_OK;
}
HRESULT ReplacePage(UINT uPageID, LPFNADDPROPSHEETPAGE pfnReplacePage, LPARAM lParam)
{
return S_OK;
}
/////////////////
//Misc. methods//
/////////////////
};
注:当我有更多的内容时,我会将其拆分为cpp和header但是当我不知道我在做什么时更容易将它们全部包含在cpp
编写Shell扩展的完全傻瓜指南-第五部分解释了添加页面,如何将所有内容组合在一起,并提供了参考源代码。
添加属性页
如果Initialize()返回S_OK,资源管理器查询一个新的接口,IShellPropSheetExt。ishelpropsheetext非常简单,只有一个方法需要实现。[…]
我们将实现AddPages()方法。ReplacePage()仅由替换Control Panel小程序中的页面的扩展使用,因此我们不需要在这里实现它。浏览器调用我们的AddPages()函数,让我们向浏览器设置的属性表添加页面。
AddPages()的参数是一个函数指针和一个LPARAM,这两个参数都只由shell使用。lpfnAddPageProc指向shell内部的一个函数,我们调用该函数来实际添加页面。lParam是一个对shell很重要的神秘值。我们不乱动它,我们只是把它传递回lpfnAddPageProc函数。
在平台SDK示例中有示例ADUC属性页。我不确定它们是否还在Windows 7+ sdk中。您可能需要下载旧的SDK(例如Windows 2003)来获取示例。我想其中一个可能会告诉你如何存储照片
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 挂起和取消挂起一个文件DLL
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 导入库可以跨dll版本工作吗
- 从C++dll访问C#中的一行主要参数
- 链接到自行创建的dll失败
- C++概念:如何使用'concept'检查模板化结构的属性?
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 通过指向指针数组的指针访问子类的属性
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 如何在自定义操作DLL(MSI / Wix)中获取"INSTALLED"属性?
- 删除/编辑 ATL COM DLL 属性/方法
- 如何将 const int 从托管 C++DLL 传递到 C#,以用作属性中的字段值
- 从DLL加载派生类时不包含派生属性
- Windows(dll)中动态链接库的属性
- 我如何使ADUC属性表DLL
- 将属性更改应用于解决方案中的所有DLL项目
- 通过.rc文件设置dll属性:Windows 7显示哪些属性
- 无法运行在 DLL 项目属性中更改 DLL 名称后使用 DLL 文件的.exe