我如何使ADUC属性表DLL

How do I make a ADUC Propertysheet DLL

本文关键字:DLL 属性 ADUC 何使      更新时间:2023-10-16

我是一个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)来获取示例。我想其中一个可能会告诉你如何存储照片