如何以编程方式打开控制面板?

6

如何以编程方式打开自定义控制面板,例如custom.cpl?具体而言,当作为32位应用程序运行时,如何打开64位cpl?


1
我决定将其设为社区wiki,因为我基本上自己回答了这个问题,但仅适用于32位控制面板。 - vividos
5个回答

5

由于我在SO上没有找到一个好的答案,以下是我的研究解决方案:

  • 启动一个新的应用程序“控制”,将控制面板的名称作为其第一个参数:
::ShellExecute(m_hWnd, NULL, _T("control.exe"), _T("access.cpl"), NULL, SW_SHOW);

5

Vista增加了对规范名称的支持,因此您无需硬编码dll文件名和选项卡索引

例如:WinExec(“%systemroot%\ system32 \ control.exe /name Microsoft.WindowsUpdate”,SW_NORMAL);

(名称始终为英语)

请参见MSDN以获取列表

XP / 2000支持“control.exe mouse”和其他一些关键字,请参见同一MSDN页面以获取列表(您可以通过在control.exe上运行strings来找到一些未记录的内容)


4

只需使用以下方法...

ProcessStartInfo startInfo = new ProcessStartInfo("appwiz.cpl");
startInfo.UseShellExecute = true;
Process.Start(startInfo);

谢谢,UseShellExecute 部分很重要。我需要将一个旧的 .NET 项目更新到 .NET 6,这个更改对我来说是必需的,而以前并不需要。 - Brad

1
如我之前在另一个问题中提到的:
如果您在命令提示符中键入“开始控制”或“控制”,它将打开控制面板。
因此只需运行进程即可。
以下代码完美地运行:
(下面的代码)
public Form1()
{
     InitializeComponent();
}

    #region Variables
    Process p;
    #endregion Variables

    [...]

    void myMethod()
    {
            try
            {
                p = new Process();
                p.StartInfo.FileName = "cmd.exe";
                p.StartInfo.RedirectStandardInput = true;
                p.StartInfo.RedirectStandardOutput = true;
                p.StartInfo.CreateNoWindow = true;
                p.StartInfo.UseShellExecute = false;
                p.Start();

                p.StandardInput.WriteLine("start control"); 
                p.StandardInput.Flush();
                p.StandardInput.Close();
                Console.WriteLine(p.StandardOutput.ReadToEnd());
            }
            catch (Exception ex) { MessageBox.Show(ex.Message); }
    }

1

步骤1: 从计算机中读取系统目录。 步骤2: 使用进程启动控制面板。

            **Process.Start(System.Environment.SystemDirectory + @"\appwiz.cpl");**

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接