我正在尋找為特定 Windows 物件打開默認屬性對話框的可能性,例如:
- services.msc 中特定服務的屬性對話
- taskchd.msc 中特定計劃任務的屬性對話
- 等等。
我不想與該對話進行互動或更改任何屬性。我只想打開它們讓用戶直接訪問單個專案的屬性(而不是打開串列(通過呼叫 *.msc 可執行檔案),用戶必須在其中再次搜索物件)。
順便說一句,我已經將對話功能部分復制到自己的表單和代碼中以用于其他目的,但我想讓用戶選擇打開默認功能并直接進行任何更改。
現在,我找到了一些提示,但我被卡住了,因為總是缺少一些關鍵資訊:
1.使用所謂的MMC(微軟管理控制臺)的SnapIns
有一個使用 VB 代碼的相對較新的答案,但我不知道如何在 C# .NET Framework 中使用 MMC 自動化物件模型。
此外,對于如何通過使用Microsoft.ManagementConsole來簡單地呼叫現有的 .msc 行程/串列/視窗,沒有簡單明了的示例/說明。相反,有幾個可怕的復雜教程如何在 C# 中實作 SnapIn。
在這里要清楚:我想做的是參考一個 dll,瀏覽一些串列(如果需要),然后呼叫屬性對話框。
2.舊API的COM呼叫
有一個舊的答案,有人建議在過時的 ITaskScheduler 類上使用呼叫,它不能解決一般對話呼叫,但至少是用于計劃任務的呼叫。也許也可以對服務等使用類似的東西 - 但是,同樣,沒有明確的例子或解釋如何實作這種方法。
uj5u.com熱心網友回復:
這是有關如何使用 MMC SDK 的檔案。它是一個 Win32 API,因此您必須使用 COM、PInvoke 或其他互操作來使用它。
https://docs.microsoft.com/en-us/previous-versions/windows/desktop/mmc/microsoft-management-console-start-page#developer-audience
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
uj5u.com熱心網友回復:
它相對簡單。
- 將 COM 參考添加到
Microsoft Management Console 2.0. - 添加
using MMC20指令。 - 創建一個新的MMC20.Application物件
- 使用Application.Load()方法加載管理單元(
services.msc此處) - Application Document的ActiveView包含 專案串列:ListItems 屬性
- 按名稱或索引選擇節點并呼叫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");
view.Select(node);
view.DisplaySelectionPropertySheet();
要列舉 ListItems,請使用標準回圈或擴展方法,如上所示:
var nodes = view.ListItems;
foreach (MMC20.Node node in nodes) {
Console.WriteLine(node.Name);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/450315.html
