如何制作ADUC Propertities表DLL

时间:2014-08-12 17:36:06

标签: c++ com active-directory propertysheet

我是一名Web开发人员,在COM编程方面的背景很少;我想开发一个属性表,允许其他部门通过ADUC更改缩略图照片。

到目前为止,我已经制作了所有脚本来注册DLL并将其添加到ADUC,我使用我发现的预编译DLL测试了它,所以唯一剩下的就是实际制作DLL本身。

通过研究我发现如果我使用C ++,我需要实现IShellExtInit和IShellPropSheetExt类;我真的很想知道如何在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//
    /////////////////
};

P.S。当我有更多时,我会把它分成一个cpp和标题但是我不知道我在做什么它更容易在cpp中包含它

2 个答案:

答案 0 :(得分:1)

The Complete Idiot's Guide to Writing Shell Extensions - Part V解释了添加页面,如何将所有页面放在一起并提供参考源代码。

  

添加属性页

     

如果Initialize()返回S_OK,Explorer将查询新接口IShellPropSheetExt。 IShellPropSheetExt非常简单,只有一个方法需要实现。 [...]

     

AddPages()方法是我们要实现的方法。 ReplacePage()仅用于替换控制面板小程序中的页面的扩展,因此我们不需要在此处实现它。 Explorer调用我们的AddPages()函数让我们将页面添加到Explorer设置的属性表中。

     

AddPages()的参数是一个函数指针和一个LPARAM,两者都只由shell使用。 lpfnAddPageProc指向我们调用实际添加页面的shell内部的函数。 lParam是一些对shell很重要的神秘价值。我们不会乱用它,我们只是将它传递回lpfnAddPageProc函数。

答案 1 :(得分:0)

Platform SDK示例中有示例ADUC属性页。我不确定它们是否仍然存在于Windows 7+ SDK中。您可能需要下载旧版(例如Windows 2003)SDK才能获取示例。我实际上认为其中一个可能会告诉你如何存储照片。