0

我是一名 Web 开发人员,几乎没有 COM 编程背景;我想开发一个属性表以允许另一个部门通过 ADUC 更改缩略图。

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

通过研究,我发现如果我使用 C++,我需要实现 IShellExtInit 和 IShellPropSheetExt 类;我真的很想知道如何在 C# 中做到这一点,但是先学习哪个更容易会更好,然后我可以尝试自己学习另一种语言。

任何人都可以指出一些工作代码示例或教程的方向吗?我所发现的只是更多的理论,而且我从以下教程中学到了很多东西,所以这将是一个很大的帮助!

到目前为止,我制作了以下外壳,请让我知道它是否已关闭,但由于我对 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//
    /////////////////
};

PS 当我有更多内容时,我会将其拆分为 cpp 和标头,但是虽然我不知道自己在做什么,但将其全部包含在 cpp 中会更容易

4

2 回答 2

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 函数。

于 2014-08-13T15:21:35.370 回答
0

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

于 2014-08-13T21:06:43.177 回答