Stack Overflow на русском Asked by Anonim on November 15, 2021
Эти программы не имеют своих .exe файлов, а являются частью explorer, потому не ясны аргументы для программ этих вызовов.
В дополнение, элементы панели управления можно запустить по их пути в Shell Namespace, например так для электропитания:
%systemroot%explorer.exe "::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{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} ::{025A5937-A6BE-4686-A844-36FE4BEC8B6D}
Панель задач и навигация ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{0DF44EAA-FF21-4412-828E-260A8728E7F1}
Диспетчер учетных данных ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{1206F5F1-0569-412C-8FEC-3204630DFB70}
Программы по умолчанию ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{17CD9488-1228-4B2F-88CE-4298E93E0966}
Подключения к удаленным рабочим столам и приложениям RemoteApp ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{241D7C96-F8BF-4F85-B01F-E2B043341A4B}
Брандмауэр Защитника Windows ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{4026492F-2F69-46B8-B9BF-5654FC07E423}
Телефон и модем ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{40419485-C444-4567-851A-2DD7BFA1684D}
Распознавание речи ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{58E3C745-D971-4081-9034-86E34B30836A}
Учетные записи пользователей ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{60632754-C523-4B62-B45C-4172DA012619}
Региональные стандарты ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{62D8ED13-C9D0-4CE8-A914-47DD628FB1B0}
Мышь ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{6C8EEC18-8D75-41B2-A177-8831D59D2D50}
Параметры Проводника ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{6DFD7C5C-2451-11D3-A299-00C04F8EF6AF}
Клавиатура ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{725BE8F7-668E-4C7B-8F90-46BDB0936430}
Диспетчер устройств ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{74246BFC-4C96-11D0-ABEF-0020AF6B0B7A}
Программы и компоненты ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{7B81BE6A-CE2B-4676-A29E-EB907A5126C5}
Параметры индексирования ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{87D66A43-7B11-4A28-9811-C86EE395ACF7}
Windows To Go ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{8E0C279D-0BD1-43C3-9EBD-31C3DC5B8A77}
Центр управления сетями и общим доступом ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{8E908FC9-BECC-40F6-915B-F4CA0E70D03D}
Автозапуск ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{9C60DE1E-E5FC-40F4-A487-460851A8D915}
Центр синхронизации ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{9C73F5E5-7AE7-4E32-A8E8-8D23B85255BF}
Восстановление ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{9FE63AFD-59CF-4419-9775-ABCC3849F861}
Свойства браузера ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{A3DD4F92-658A-410F-84FD-6FBBBEF2FFFE}
Устройства и принтеры ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{A8A91A66-3A7D-4424-8D24-04E180695C7A}
Управление цветом ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{B2C761C6-29BC-4F19-9251-E6195265BAF1}
Резервное копирование и восстановление (Windows 7) ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{B98A2BEA-7D42-4558-8BD1-832F41BAC6FD}
Система ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{BB06C0E4-D293-4F75-8A90-CB05B6477EEE}
Центр безопасности и обслуживания ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{BB64F8A7-BEE7-4E1A-AB8D-7D8273F7FDB6}
Шрифты ::{26EE0668-A00A-44D7-9371-BEB064C98683} Шрифты
Устранение неполадок ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{C58C4893-3BE0-4B45-ABB5-A63E4B8C8651}
Центр специальных возможностей ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{D555645E-D4F8-4C29-A827-D93C859C4F2A}
Шифрование диска BitLocker ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{D9EF8727-CAC2-4E60-809E-86F80A666C91}
Дата и время ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{E2E7934B-DCE5-43C4-9576-7FE4F75E7480}
Рабочие папки ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{ECDB0924-4208-451E-8EE0-373C0956DE16}
Звук ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{F2DDFC82-8F12-4CDD-B7DC-D4FE1425AA4D}
История файлов ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{F6B6E965-E9B2-444B-9286-10C9152EDBC5}
Дисковые пространства ::{26EE0668-A00A-44D7-9371-BEB064C98683} ::{F942C606-0914-47AB-BE56-1321B8035096}
Answered by MSDN.WhiteKnight on November 15, 2021
Через командную строку можно вызвать их с помощью команд powercfg.cpl
и firewall.cpl
. Программно можете попробовать вызывать их напрямую в Process.Start
, либо вызывать explorer.exe или cmd.exe, а вышеуказанные команды передать в аргументы вызова процесса.
Answered by 4per on November 15, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP