如何在管理控制台中打开所选对象的属性对话框?

tar*_*tar 2 .net c# com mmc winforms

我正在寻找为特定 Windows 对象打开默认属性对话框的可能性,例如:

  • services.msc 中特定服务的属性对话
  • taskschd.msc 中特定预定任务的属性对话
  • ETC。

我不想与该对话交互或更改任何属性。我只想打开它们,让用户直接访问单个项目属性(而不是打开列表(通过调用 *.msc 可执行文件),用户必须在其中再次搜索对象)。

顺便说一句,我已经将对话功能部分复制到自己的表单和代码中以用于其他目的,但我想为用户提供打开默认功能并直接进行任何更改的选项。

现在,我找到了一些提示,但我陷入困境,因为总是缺少一些关键信息:

1.使用所谓的MMC(Microsoft管理控制台)的SnapIn

一个相对较新的答案,它使用 VB 代码,但我不知道如何在 C# .NET Framework 中使用 MMC 自动化对象模型。

此外,对于如何通过使用Microsoft.ManagementConsole来简单地调用现有 .msc 进程/列表/窗口,没有干净且简单的示例/解释。相反,有几个令人恐惧的复杂教程如何在 C# 中实现 SnapIn。

这里需要明确的是:我想要做的是引用一个 dll,浏览一些列表(如果需要),然后调用属性对话框。

2.旧API的COM调用

一个旧的答案,有人建议在过时的 ITaskScheduler 类上使用调用,该类不能解决一般对话调用,但至少可以解决计划任务的问题。也许也可以对服务等使用类似的东西 - 但是,同样,没有明确的示例或解释如何实现这种方法。

Jim*_*imi 5

这相对简单。

例如:

注意:设置mmcApp.UserControl = 1;使控制台保持打开状态,否则它将关闭。

using MMC20; 
// [...]

MMC20.Application mmcApp = new MMC20.Application();
mmcApp.UserControl = 1;
mmcApp.Load("services.msc");

var doc = mmcApp.Document;
var view = doc.ActiveView;
var node = view.ListItems.OfType<Node>().FirstOrDefault(n => n.Name == "Base Filtering Engine");

if (node != null) {
    view.Select(node);
    view.DisplaySelectionPropertySheet();
}
Run Code Online (Sandbox Code Playgroud)

要枚举 ListItems,请使用标准循环或扩展方法,如上所示:

var nodes = view.ListItems;

foreach (MMC20.Node node in nodes) {
    Console.WriteLine(node.Name);
}
Run Code Online (Sandbox Code Playgroud)