我是一名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中包含它
答案 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才能获取示例。我实际上认为其中一个可能会告诉你如何存储照片。