如何在管理控制台中打开所选对象的属性对话框?
How to open the Property dialog of selected objects in Management Console?
我正在寻找为特定 Windows 对象打开默认 属性 对话的可能性,例如:
- services.msc
中特定服务的属性对话
- 属性 taskschd.msc
中特定预定任务的对话
- 等等
我不想与该对话交互或更改任何属性。我只想打开它们让用户直接访问单个项目属性(而不是打开列表(通过调用 *.msc 可执行文件),用户必须在其中再次搜索对象)。
顺便说一句,我已经将对话功能部分复制到自己的表单和代码中以用于其他目的,但我想让用户可以选择打开默认功能并直接进行任何更改。
现在,我找到了一些提示,但我卡住了,因为总是缺少一些关键信息:
1.使用所谓的 MMC 管理单元(Microsoft 管理控制台)
this relatively new answer 使用 VB 代码,但我不知道如何在 C# .NET Framework 中使用 MMC 自动化对象模型。
此外,对于如何通过使用 Microsoft.ManagementConsole 简单地调用现有的 .msc process/list/window,没有简单明了的 example/explanation。相反,有几个可怕的复杂教程如何将 SnapIns 实现到 C# 中。
这里要明确一点:我想做的是引用一个 dll,浏览一些列表(如果需要),然后调用属性对话框。
2。旧 API
的 COM 调用
this old answer 有人建议在过时的 ITaskScheduler class 上使用 invoke,它不能解决一般的对话调用,但至少可以解决计划任务的问题。也许也可以对服务等使用类似的东西 - 但是,同样,没有明确的例子或解释如何实现这种方法。
这是关于如何使用 MMC SDK 的文档。它是 Win32 API,因此您必须使用 COM、PInvoke 或其他互操作才能使用它。
C++ 示例可能比 VB 示例提供更多信息。 .h 文件是 windows sdk 的一部分,因此您应该能够在其中找到所需的 clsid 和其他常量:https://docs.microsoft.com/en-us/previous-versions/windows/desktop/mmc/using-c-with-the-mmc-2-0-automation-object-model
比较简单
- 添加对
Microsoft Management Console 2.0
的 COM 引用。
- 添加
using MMC20
指令。
- 创建一个新的 MMC20.Application 对象
- 使用Application.Load()方法加载一个Snap-In(这里是
services.msc
)
- ActiveView of the Application Document contains the list of items: ListItems Property
- Select 按名称或索引的节点并调用 DisplaySelectionPropertySheet() 方法以显示其 属性 窗格
例如:
注意:设置 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);
}
我正在寻找为特定 Windows 对象打开默认 属性 对话的可能性,例如:
- services.msc 中特定服务的属性对话
- 属性 taskschd.msc 中特定预定任务的对话
- 等等
我不想与该对话交互或更改任何属性。我只想打开它们让用户直接访问单个项目属性(而不是打开列表(通过调用 *.msc 可执行文件),用户必须在其中再次搜索对象)。
顺便说一句,我已经将对话功能部分复制到自己的表单和代码中以用于其他目的,但我想让用户可以选择打开默认功能并直接进行任何更改。
现在,我找到了一些提示,但我卡住了,因为总是缺少一些关键信息:
1.使用所谓的 MMC 管理单元(Microsoft 管理控制台)
this relatively new answer 使用 VB 代码,但我不知道如何在 C# .NET Framework 中使用 MMC 自动化对象模型。
此外,对于如何通过使用 Microsoft.ManagementConsole 简单地调用现有的 .msc process/list/window,没有简单明了的 example/explanation。相反,有几个可怕的复杂教程如何将 SnapIns 实现到 C# 中。
这里要明确一点:我想做的是引用一个 dll,浏览一些列表(如果需要),然后调用属性对话框。
2。旧 API
的 COM 调用this old answer 有人建议在过时的 ITaskScheduler class 上使用 invoke,它不能解决一般的对话调用,但至少可以解决计划任务的问题。也许也可以对服务等使用类似的东西 - 但是,同样,没有明确的例子或解释如何实现这种方法。
这是关于如何使用 MMC SDK 的文档。它是 Win32 API,因此您必须使用 COM、PInvoke 或其他互操作才能使用它。
C++ 示例可能比 VB 示例提供更多信息。 .h 文件是 windows sdk 的一部分,因此您应该能够在其中找到所需的 clsid 和其他常量:https://docs.microsoft.com/en-us/previous-versions/windows/desktop/mmc/using-c-with-the-mmc-2-0-automation-object-model
比较简单
- 添加对
Microsoft Management Console 2.0
的 COM 引用。 - 添加
using MMC20
指令。 - 创建一个新的 MMC20.Application 对象
- 使用Application.Load()方法加载一个Snap-In(这里是
services.msc
) - ActiveView of the Application Document contains the list of items: ListItems Property
- Select 按名称或索引的节点并调用 DisplaySelectionPropertySheet() 方法以显示其 属性 窗格
例如:
注意:设置 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);
}