随笔 - 64, 文章 - 11, 评论 - 12, 引用 - 0
数据加载中……

一个在脚本中枚举注册表键和值的工具

           Windows的注册表实质上是一个宠大的数据库,它存储计算机的硬件、软件及用户方面的信息。在实际的日常应用和程序写作中我们经常访问注册表,恶意软件更是会在改注册表中动手脚。为了让开发人员可以方便地访问注册表,众多的编程语言都提供了注册表操作函数。许多脚本语言也提供了一些简单的操作函数,但是可能不会很丰富。这给在编写脚本带来了不便,我也曾经遇过这样的情况。下面这个工具可以弥补一些脚本语言中的不足,该工具主要是提供了枚举注册中某个键的所有子键和枚举注册表中某个键的所有值,这个工具是一个COM服务器。其中的COM对象也都是自动化的对象,所以可以在脚本中使用。相应的COM对象已实现了枚举接口,故在使用时可以采用foreach的方式。注意枚举器的Add函数并不是往注册表中写入数据。[DOWNLOAD URL]   http://www.cppblog.com/Files/Robertxiao/Regtool.rar
      下面我摘录其idl文件中内容
 1[
 2    object,
 3    uuid(FF2D77E4-6814-4BCC-B3C2-8500A300264F),
 4    dual,
 5    nonextensible,
 6    helpstring("ITob 接口"),
 7    pointer_default(unique)
 8]
 9interface ITob : IDispatch{
10    [id(1), helpstring("方法RegEnum")] HRESULT RegEnum([in] BSTR bstrKeyFullPath, [out,retval] IUnknown** ppUnknown);
11    [id(2), helpstring("method ListChildNames")] HRESULT ListChildNames([in] BSTR bstrKeyFullPath, [out,retval] IUnknown** ppUnknown);
12}
;
13[
14    object,
15    uuid(E8F0A927-DC24-402D-9437-58136E61CF5F),
16    dual,
17    nonextensible,
18    helpstring("IChildKeys 接口"),
19    pointer_default(unique)
20]
21interface IChildKeys : IDispatch{
22    [id(1), helpstring("方法Add")] HRESULT Add([in] BSTR bstrKeyName);
23    [propget, id(2), helpstring("属性 Count")] HRESULT Count([out, retval] LONG* pnCount);
24    [propget, id(DISPID_VALUE), helpstring("属性 Item")] HRESULT Item([in] LONG nIndex, [out, retval] BSTR* pbstrKeyName);
25    [propget, id(DISPID_NEWENUM), helpstring("属性 _NewEnum")] HRESULT _NewEnum([out, retval] IUnknown** ppEnum);
26}
;
27[
28    object,
29    uuid(C10ADC20-7BF3-482B-BB62-0273B5E64688),
30    dual,
31    nonextensible,
32    helpstring("IKeyValues Interface"),
33    pointer_default(unique)
34]
35interface IKeyValues : IDispatch{
36    [id(1), helpstring("method Add")] HRESULT Add([in] BSTR bstrName);
37    [propget, id(2), helpstring("property Count")] HRESULT Count([out, retval] LONG* pVal);
38    [propget, id(DISPID_VALUE), helpstring("property Item")] HRESULT Item(LONG nIndex, [out, retval] BSTR* pVal);
39    [propget, id(DISPID_NEWENUM), helpstring("property _NewEnum")] HRESULT _NewEnum([out, retval] IUnknown** pVal);
40}
;
41[
42    uuid(2990E9A8-5AFF-474A-AD45-90A705866FAF),
43    version(1.0),
44    helpstring("RegTool 1.0 类型库")
45]
46library RegToolLib
47{
48    importlib("stdole2.tlb");
49    [
50        uuid(5E2513E7-DCF9-41DC-9F2C-6D29AA079B9D),
51        helpstring("Tob Class")
52    ]
53    coclass Tob
54    {
55        [defaultinterface ITob;
56    }
;
57    [
58        uuid(D6A9C4D0-A356-4282-89D9-C9263104A006),
59        helpstring("ChildKeys Class")
60    ]
61    coclass ChildKeys
62    {
63        [defaultinterface IChildKeys;
64    }
;
65    [
66        uuid(25BB24E4-46A9-46B1-BD85-BFC7FBE7ECF2),
67        helpstring("KeyValues Class")
68    ]
69    coclass KeyValues
70    {
71        [defaultinterface IKeyValues;
72    }
;
73}
;
74

posted on 2009-08-03 16:08 Robertxiao 阅读(461) 评论(0)  编辑 收藏 引用 所属分类: RPC/COM/ATL散谈


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理