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

标签 c# .net winforms com mmc

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

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

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

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

现在,我找到了一些提示,但我被卡住了,因为总是缺少一些关键信息:

<强>1。使用所谓的 MMC 管理单元(Microsoft 管理控制台)

this relatively new answer它使用 VB 代码,但我不知道如何在 C# .NET Framework 中使用 MMC 自动化对象模型。

此外,对于如何通过使用 Microsoft.ManagementConsole 简单地调用现有的 .msc 进程/列表/窗口,没有简单明了的示例/解释。 .相反,有几个可怕的复杂教程如何将 SnapIns 实现到 C# 中。

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

<强>2。旧 API 的 COM 调用

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

最佳答案

相对简单。

例如:

注意:设置 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();
}

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

var nodes = view.ListItems;

foreach (MMC20.Node node in nodes) {
    Console.WriteLine(node.Name);
}

关于c# - 如何在管理控制台中打开所选对象的属性对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71639275/

相关文章:

c# - 如何迁移到 MVVM

c# - 无法调用采用在不同程序集中定义的类型的参数的函数

c# - Web 浏览器中的内容在 Windows 窗体应用程序中自动缩放时出现问题

c# - 如何在C#中获取USB-Stick的序列号

c# - 如何编写类库的程序集加载/初始化事件处理程序

c# - 如何将纯文本发布到 WCF 服务,即不包含在 XML 标记中?

c# - Newtonsoft.Json.Schema.JsonSchema 已过时?

c# - 优化大型 switch 语句

C# 应用求解二次虚根

c# - Entity Framework : C# Winforms bindingsource delete on datagridview, 但仅将 isDeleted 字段标记为真(不删除)