怎么用c++调用wmi的方法,获得vista的启动项

zgcbj 2013-06-17 01:58:41
怎么用c++ 调用wmi的方法?获取win7和vista的启动项。已知:wmi的bcdobject类,用getelement
谢谢
相关c#代码如下
 public void LoadAllOS()
{
List<string> lstOsName = new List<string>();
ConnectionOptions connectionOptions = new ConnectionOptions();
connectionOptions.Impersonation = ImpersonationLevel.Impersonate;
connectionOptions.EnablePrivileges = true;

ManagementScope managementScope = new ManagementScope(@"root\WMI", connectionOptions);

// SYSTEM STORE GUID = {9dea862c-5cdd-4e70-acc1-f32b344d4795}
systemObject = new BcdObject(managementScope, "{9dea862c-5cdd-4e70-acc1-f32b344d4795}", "");

ManagementBaseObject mboOut;
bool success = systemObject.GetElement((uint)BCDConstants.BcdBootMgrElementTypes.BcdBootMgrObjectList_DisplayOrder, out mboOut);

if (success)
{
string[] osIdList = (string[])mboOut.GetPropertyValue("Ids");
foreach (string osGuid in osIdList)
{
BcdObject osObj = new BcdObject(managementScope, osGuid, "");
success = osObj.GetElement((uint)BCDConstants.BcdLibraryElementTypes.BcdLibraryString_Description, out mboOut);

if (success)
{
OS myOS = new OS();
myOS.Name = mboOut.GetPropertyValue("String").ToString();
myOS.GUID = osGuid;
myOS.osObj = osObj;
// lstOS.Items.Add(myOS);
lstOsName.Add(myOS.Name.ToString());
Console.WriteLine(myOS.Name);
}
}
strOsName = lstOsName.ToArray();
}
...全文
326 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wokaodouyoule 2013-06-21
  • 打赏
  • 举报
回复
用com调用太麻烦。 步骤如下: OpenBcdStore OpenBcdObject GetElement传参数 0x24000001 根据返回的Guid,再用OpenBcdObject 然后GetElement,传参数0x12000004 参考资料BcdElement BcdObject BcdStore
oyljerry 2013-06-18
  • 打赏
  • 举报
回复
VC一样的支持WMI,把你C#中的namespace,classname,function设置过去就差不多了
zgcbj 2013-06-18
  • 打赏
  • 举报
回复
还是0回复?高手在哪里?

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧