tar*_*tar 2 .net c# com mmc winforms
我正在寻找为特定 Windows 对象打开默认属性对话框的可能性,例如:
我不想与该对话交互或更改任何属性。我只想打开它们,让用户直接访问单个项目属性(而不是打开列表(通过调用 *.msc 可执行文件),用户必须在其中再次搜索对象)。
顺便说一句,我已经将对话功能部分复制到自己的表单和代码中以用于其他目的,但我想为用户提供打开默认功能并直接进行任何更改的选项。
现在,我找到了一些提示,但我陷入困境,因为总是缺少一些关键信息:
1.使用所谓的MMC(Microsoft管理控制台)的SnapIn
有一个相对较新的答案,它使用 VB 代码,但我不知道如何在 C# .NET Framework 中使用 MMC 自动化对象模型。
此外,对于如何通过使用Microsoft.ManagementConsole来简单地调用现有 .msc 进程/列表/窗口,没有干净且简单的示例/解释。相反,有几个令人恐惧的复杂教程如何在 C# 中实现 SnapIn。
这里需要明确的是:我想要做的是引用一个 dll,浏览一些列表(如果需要),然后调用属性对话框。
2.旧API的COM调用
有一个旧的答案,有人建议在过时的 ITaskScheduler 类上使用调用,该类不能解决一般对话调用,但至少可以解决计划任务的问题。也许也可以对服务等使用类似的东西 - 但是,同样,没有明确的示例或解释如何实现这种方法。
这相对简单。
Microsoft Management Console 2.0.using MMC20指令。services.msc此处)例如:
注意:设置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)