RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1155750
Accepted
Anonim
Anonim
Asked:2020-07-22 05:17:43 +0000 UTC2020-07-22 05:17:43 +0000 UTC 2020-07-22 05:17:43 +0000 UTC

如何从 Net Framework 启动防火墙、电源等程序?

  • 772

这些程序没有自己的 .exe 文件,而是资源管理器的一部分,因此这些调用的程序的参数不清楚。

.net
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    4per
    2020-07-22T10:49:29Z2020-07-22T10:49:29Z

    通过命令行,您可以使用命令powercfg.cpl和firewall.cpl. 您可以通过编程方式尝试直接在 中调用它们Process.Start,或者调用 explorer.exe 或 cmd.exe,并将上述命令传递给进程调用的参数。

    • 2
  2. MSDN.WhiteKnight
    2020-08-28T16:54:10Z2020-08-28T16:54:10Z

    此外,控制面板项可以通过它们在 Shell 命名空间中的路径来启动,例如电源选项:

    %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}
    
    • 1

相关问题

  • 静态常量

  • .NET 规范

  • 如何在 Windows 资源管理器中查找和打开路径

  • 在 EF Core 中创建迁移

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5