MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Как запустить из Net Framework программы типа брандмауэр, электропитание?"
Answer 1171536
В дополнение, элементы панели управления можно запустить по их пути в Shell Namespace, например так для электропитания:
%systemroot%\explorer.exe "::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{025A5937-A6BE-4686-A844-36FE4BEC8B6D}"
Путь можно получить с помощью Shell API:
using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; namespace ConsoleApp1 { public struct ShellItem { public string DisplayName { get; set; } public string Path { get; set; } } class Program { public const uint SHGFI_DISPLAYNAME = 0x000000200; public const uint SHGFI_ICON = 0x000000100; public const uint SHGFI_PIDL = 0x000000008; public const uint GIL_FORSHELL = 0x0002; public const int SHGDN_NORMAL = 0x0000; public const int SHGDN_FORPARSING = 0x8000; public const int SHCONTF_FOLDERS = 0x0020; public const int SHCONTF_NONFOLDERS = 0x0040; [DllImport("shell32.dll")] public static extern int SHGetKnownFolderIDList(ref Guid rfid, int dwFlags, IntPtr hToken, out IntPtr ppidl); [DllImport("ole32.dll")] public static extern void CoTaskMemFree(IntPtr pv); [DllImport("shell32.dll")] public static extern int SHBindToObject( IShellFolder psf, IntPtr pidl, [MarshalAs(UnmanagedType.IUnknown)] object pbc, ref Guid riid, out IShellFolder ppv); [DllImport("Shlwapi.dll", CharSet = CharSet.Unicode)] public static extern int StrRetToStr(ref STRRET pstr, IntPtr pidl, out IntPtr ppsz); [DllImport("user32.dll")] public static extern bool DestroyIcon(IntPtr hIcon); /* COM Interfaces */ [ComImport] [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] [Guid("000214E6-0000-0000-C000-000000000046")] public interface IShellFolder { void ParseDisplayName(IntPtr hwnd, IntPtr pbc, String pszDisplayName, UInt32 pchEaten, out IntPtr ppidl, UInt32 pdwAttributes); void EnumObjects(IntPtr hwnd, int grfFlags, out IEnumIDList ppenumIDList); void BindToObject(IntPtr pidl, IntPtr pbc, [In]ref Guid riid, out IntPtr ppv); void BindToStorage(IntPtr pidl, IntPtr pbc, [In]ref Guid riid, out IntPtr ppv); [PreserveSig] Int32 CompareIDs(Int32 lParam, IntPtr pidl1, IntPtr pidl2); void CreateViewObject(IntPtr hwndOwner, [In] ref Guid riid, out IntPtr ppv); void GetAttributesOf(UInt32 cidl, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)]IntPtr[] apidl, ref uint rgfInOut); void GetUIObjectOf(IntPtr hwndOwner, UInt32 cidl, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)]IntPtr[] apidl, [In] ref Guid riid, UInt32 rgfReserved, out IExtractIcon ppv); void GetDisplayNameOf(IntPtr pidl, int uFlags, out STRRET pName); void SetNameOf(IntPtr hwnd, IntPtr pidl, String pszName, int uFlags, out IntPtr ppidlOut); } [StructLayout(LayoutKind.Explicit, Size = 520)] public struct STRRETinternal { [FieldOffset(0)] public IntPtr pOleStr; [FieldOffset(0)] public IntPtr pStr; [FieldOffset(0)] public uint uOffset; } [StructLayout(LayoutKind.Sequential)] public struct STRRET { public uint uType; public STRRETinternal data; } [ComImport] [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] [Guid("000214F2-0000-0000-C000-000000000046")] public interface IEnumIDList { [PreserveSig()] uint Next(uint celt, out IntPtr rgelt, IntPtr pceltFetched); [PreserveSig()] uint Skip(uint celt); [PreserveSig()] uint Reset(); [PreserveSig()] uint Clone(out IEnumIDList ppenum); } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public struct SHFILEINFO { public IntPtr hIcon; public int iIcon; public uint dwAttributes; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string szDisplayName; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)] public string szTypeName; } [ComImport()] [Guid("000214fa-0000-0000-c000-000000000046")] [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] public interface IExtractIcon { [PreserveSig] int GetIconLocation( uint uFlags, [Out, MarshalAs(UnmanagedType.LPWStr, SizeParamIndex = 2)] StringBuilder szIconFile, int cchMax, out int piIndex, out uint pwFlags); [PreserveSig] int Extract( [MarshalAs(UnmanagedType.LPWStr)] string pszFile, uint nIconIndex, out IntPtr phiconLarge, out IntPtr phiconSmall, uint nIconSize); } public static List<ShellItem> GetItems(Guid FolderID) //Получает список элементов каталога по GUID { IntPtr p = IntPtr.Zero; IShellFolder pFolder = null; IEnumIDList pEnum = null; IntPtr pItem = IntPtr.Zero; IntPtr lpStr = IntPtr.Zero; STRRET strret; Guid guid = typeof(IShellFolder).GUID; List<ShellItem> items = new List<ShellItem>(); ShellItem si; try { int hr = SHGetKnownFolderIDList(ref FolderID, 0, IntPtr.Zero, out p); if (hr != 0) throw Marshal.GetExceptionForHR(hr); hr = SHBindToObject(null, p, null, ref guid, out pFolder); if (hr != 0) throw Marshal.GetExceptionForHR(hr); pFolder.EnumObjects(IntPtr.Zero, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS, out pEnum); while (true) { string s; pItem = IntPtr.Zero; uint res = pEnum.Next(1, out pItem, IntPtr.Zero); if (res != 0) break; si = new ShellItem(); //display name try { lpStr = IntPtr.Zero; strret = new STRRET(); pFolder.GetDisplayNameOf(pItem, SHGDN_NORMAL, out strret); hr = StrRetToStr(ref strret, pItem, out lpStr); if (hr != 0) throw Marshal.GetExceptionForHR(hr); s = Marshal.PtrToStringUni(lpStr); si.DisplayName = s; CoTaskMemFree(lpStr); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } //path lpStr = IntPtr.Zero; strret = new STRRET(); pFolder.GetDisplayNameOf(pItem, SHGDN_FORPARSING, out strret); hr = StrRetToStr(ref strret, pItem, out lpStr); if (hr != 0) throw Marshal.GetExceptionForHR(hr); s = Marshal.PtrToStringUni(lpStr); si.Path = s; CoTaskMemFree(lpStr); items.Add(si); CoTaskMemFree(pItem); } } finally { if (p != IntPtr.Zero) CoTaskMemFree(p); if (pFolder != null) Marshal.ReleaseComObject(pFolder); if (pEnum != null) Marshal.ReleaseComObject(pEnum); } return items; } static void Main(string[] args) { var list = GetItems(Guid.Parse("82A74AEB-AEB4-465C-A014-D097EE346D63"));//Панель управления for (int i = 0; i < list.Count; i++) { Console.WriteLine("{0} {1}", list[i].DisplayName, list[i].Path); } Console.ReadKey(); } } }
Результат:
Электропитание ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{025A5937-A6BE-4686-A844-36FE4BEC8B6D} Панель задач и навигация ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{0DF44EAA-FF21-4412-828E-260A8728E7F1} Диспетчер учетных данных ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{1206F5F1-0569-412C-8FEC-3204630DFB70} Программы по умолчанию ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{17CD9488-1228-4B2F-88CE-4298E93E0966} Подключения к удаленным рабочим столам и приложениям RemoteApp ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{241D7C96-F8BF-4F85-B01F-E2B043341A4B} Брандмауэр Защитника Windows ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{4026492F-2F69-46B8-B9BF-5654FC07E423} Телефон и модем ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{40419485-C444-4567-851A-2DD7BFA1684D} Распознавание речи ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{58E3C745-D971-4081-9034-86E34B30836A} Учетные записи пользователей ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{60632754-C523-4B62-B45C-4172DA012619} Региональные стандарты ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{62D8ED13-C9D0-4CE8-A914-47DD628FB1B0} Мышь ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{6C8EEC18-8D75-41B2-A177-8831D59D2D50} Параметры Проводника ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{6DFD7C5C-2451-11D3-A299-00C04F8EF6AF} Клавиатура ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{725BE8F7-668E-4C7B-8F90-46BDB0936430} Диспетчер устройств ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{74246BFC-4C96-11D0-ABEF-0020AF6B0B7A} Программы и компоненты ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{7B81BE6A-CE2B-4676-A29E-EB907A5126C5} Параметры индексирования ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{87D66A43-7B11-4A28-9811-C86EE395ACF7} Windows To Go ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{8E0C279D-0BD1-43C3-9EBD-31C3DC5B8A77} Центр управления сетями и общим доступом ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{8E908FC9-BECC-40F6-915B-F4CA0E70D03D} Автозапуск ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{9C60DE1E-E5FC-40F4-A487-460851A8D915} Центр синхронизации ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{9C73F5E5-7AE7-4E32-A8E8-8D23B85255BF} Восстановление ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{9FE63AFD-59CF-4419-9775-ABCC3849F861} Свойства браузера ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{A3DD4F92-658A-410F-84FD-6FBBBEF2FFFE} Устройства и принтеры ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{A8A91A66-3A7D-4424-8D24-04E180695C7A} Управление цветом ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{B2C761C6-29BC-4F19-9251-E6195265BAF1} Резервное копирование и восстановление (Windows 7) ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{B98A2BEA-7D42-4558-8BD1-832F41BAC6FD} Система ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{BB06C0E4-D293-4F75-8A90-CB05B6477EEE} Центр безопасности и обслуживания ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{BB64F8A7-BEE7-4E1A-AB8D-7D8273F7FDB6} Шрифты ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\Шрифты Устранение неполадок ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{C58C4893-3BE0-4B45-ABB5-A63E4B8C8651} Центр специальных возможностей ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{D555645E-D4F8-4C29-A827-D93C859C4F2A} Шифрование диска BitLocker ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{D9EF8727-CAC2-4E60-809E-86F80A666C91} Дата и время ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{E2E7934B-DCE5-43C4-9576-7FE4F75E7480} Рабочие папки ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{ECDB0924-4208-451E-8EE0-373C0956DE16} Звук ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{F2DDFC82-8F12-4CDD-B7DC-D4FE1425AA4D} История файлов ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{F6B6E965-E9B2-444B-9286-10C9152EDBC5} Дисковые пространства ::{26EE0668-A00A-44D7-9371-BEB064C98683}\0\::{F942C606-0914-47AB-BE56-1321B8035096}
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.