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

2024-04-09

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

  • services.msc 中特定服务的属性对话
  • taskschd.msc 中特定计划任务的属性对话
  • etc.

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

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

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

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

这个相对较新的答案 https://stackoverflow.com/a/60697695/12622162它使用 VB 代码,但我不知道如何在 C# .NET Framework 中使用 MMC 自动化对象模型。

此外,没有简单明了的示例/说明如何通过使用来简单地调用现有的 .msc 进程/列表/窗口微软管理控制台 https://learn.microsoft.com/en-us/previous-versions/windows/desktop/mmc/reference/ms694632(v=vs.85)。相反,有几个令人恐惧的复杂教程如何在 C# 中实现 SnapIn。

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

2.旧API的COM调用

这个旧答案 https://social.msdn.microsoft.com/Forums/vstudio/en-US/0928fe2f-d4dc-474e-812b-28590ff8a190/open-the-properties-dialog-of-a-scheduled-task有人建议在过时的 ITaskScheduler 类上使用 invoke ,该类不能解决一般对话调用,但至少可以解决计划任务的问题。也许也可以对服务等使用类似的东西 - 但是,同样,没有明确的示例或解释如何实现这种方法。


这相对简单。

  • 添加 COM 引用Microsoft Management Console 2.0.
  • Add the using MMC20指示。
  • 创建一个新的MMC20.应用 https://learn.microsoft.com/en-us/previous-versions/windows/desktop/mmc/application-object object
  • Use the 应用程序.Load() https://learn.microsoft.com/en-us/previous-versions/windows/desktop/mmc/application-load加载管理单元的方法(services.msc here)
  • The 活动视图 https://learn.microsoft.com/en-us/previous-versions/windows/desktop/mmc/document-activeview of the 申请文件 https://learn.microsoft.com/en-us/previous-versions/windows/desktop/mmc/application-document包含项目列表:ListItems 属性 https://learn.microsoft.com/en-us/previous-versions/windows/desktop/mmc/view-listitems
  • 按名称或索引选择节点并调用显示选择属性表() https://learn.microsoft.com/en-us/previous-versions/windows/desktop/mmc/view-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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 从 proc/pid/cmdline 解析命令行参数

    我正在尝试解析命令行参数另一个程序 这是一个模拟器 在我的程序中使用system 命令和模拟器的pid 不幸的是同时使用文件读取和cat 输出格式不正确 所以我无法真正获取数据 cat在命令行上显示删除了空格的文件内容 整个字符串粘在一起
  • 从文本文件中读取所有内容 - C

    我正在尝试从文本文件中读取所有内容 这是我写的代码 include
  • LockBits 性能关键代码

    我有一个方法需要尽可能快 它使用不安全的内存指针 这是我第一次尝试这种类型的编码 所以我知道它可能会更快
  • “上下文模式”的这种实现看起来不错吗? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我有多个处理单元可能存在于一个数组中 每个处理单元都有自己的参数 我想使用以下方式传达每个处理单元的参数上下文模式在它被建议作为另一个问题的解答 ht
  • 如何从 UNC 中提取服务器名称

    谁能告诉我如何从 UNC 中提取服务器名称 ex 服务器名称 目录 目录 编辑 我很抱歉 但看起来我需要澄清一个错误 路径实际上更像是 服务器名 d 目录 我知道这可能会改变一些事情 怎么样Uri Uri uri new Uri serve
  • Python NET 调用具有返回值和输出参数的 C# 方法

    我有以下静态 C 方法 public static bool TryParse string s out double result 我想使用 Python NET 包从 Python 调用它 import clr from System
  • C 或 C++ 中是否有轻量级的多部分/表单数据解析器? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在考虑将多部分表单数据解析集成到 Web 服务器模块中 以便可以减轻后端 Web 应用程序 通常用动
  • FileStream - “不支持给定路径的格式”

    我正在尝试使用EPPlus http epplus codeplex com 在我们的 LAN 上保存电子表格 我正在使用一个FileStream对象执行此操作 但是每当我尝试实例化该对象时 我都会收到错误 The given path s
  • 在 Visual Studio 中调试时向后拖动指令指针

    如需演示 请查看 基本上 我知道这在 Visual Studio Community Edition 2015 中是可能的 我想知道 a 这与 Intellitrace 和 历史调试 有关吗 b 这样做会有副作用吗 或者这只是将指令向后移动
  • 我应该在查询时调用 ToListAsync()

    不久前 我开始接触 C 并正在寻找一些如何编写代码的最佳实践 现在 我正在使用 EF Core 并具有以下代码 var details dbContext Details Where x gt x Name Button foreach v
  • .NET 配置(app.config/web.config/settings.settings)

    我有一个 NET 应用程序 它具有用于调试和发布版本的不同配置文件 例如 调试 app config 文件指向开发SQL服务器 http en wikipedia org wiki Microsoft SQL Server它启用了调试并且发
  • 从 WMI 运行 exe 时的网络身份验证

    我有一个 C exe 需要使用 WMI 运行并访问网络共享 但是 当我访问共享时 我收到 UnauthorizedAccessException 如果我直接运行 exe 则可以访问共享 我在这两种情况下都使用相同的用户帐户 我的应用程序有两
  • 为什么这些双精度数的返回值为-1.#IND?

    I have double score cvMatchContourTrees CT1 CT2 CV CONTOUR TREES MATCH I1 0 0 cout lt
  • SoapHttpClientProtocol:以流而不是字符串的形式获取响应?

    我正在使用一种网络服务 它可以一次性输出大量数据 响应字符串可能约为 8MB 虽然在台式电脑上这不是问题 但嵌入式设备在处理 8MB 字符串对象时会发疯 我想知道是否有办法以流的形式获取响应 目前我正在使用如下方法 我尝试使用 POST 请
  • 使用 STL 迭代器而不初始化它

    我想做这样的事情 container iterator it NULL switch eSomeEnum case Container1 it vecContainer1 begin break case Container2 it vec
  • 有没有 C# 到 C 的转换工具? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我知道 C 与 NET Framework 不同 C 是一种符合 ECMA ECMA 334 和 ISO
  • 通过 boost::python 将 C++ 对象传递给 python 函数

    我想在 C 应用程序中使用嵌入 python 并调用 python 脚本中定义的函数 该函数的参数是一个 C 对象 看我的代码 class Test public void f std cout lt lt sss lt
  • 如果 foreach 是一个结构数组,它会复制每个元素吗?

    我有一个结构数组 做foreach运算符在迭代数组时复制每个元素 据我所理解foreach只是底层的语法糖转换为for 所以看来答案是否定的 但我很想得到一些确认 PS 看来应该有人已经问过了 但我无法轻易找到任何东西 因此 请以提供的参考
  • C 警告函数调用中缺少标记

    这是我的警告 Missing sentinel in function call 我怎样才能删除它 我正在使用 linux 和 gcc 编译器 看来您可能没有终止数组声明NULL 如果没有 null 您可能会遇到一些内存怪异 因为运行时将不
  • 如何注销多个非当前用户的会员用户?

    我正在使用属于 MVC2 默认项目一部分的 MembershipProvider 我希望能够获取用户名列表 注销用户 并在需要时销毁他们的会话 我能想到的最接近的是 foreach string userName in UserNames

随机推荐