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

时间:2009-02-02 15:40:18

标签: winapi controlpanel

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

5 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:5)

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

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

(姓名总是英文)

请参阅MSDN以获取列表

XP / 2000支持“control.exe鼠标”和其他一些关键字,请参阅相同的MSDN页面列表(您可以通过在control.exe上运行字符串找到一些未记录的文件)

答案 2 :(得分:1)

第一步:                         从机器读取系统目录。                 第2步 :                         使用Process启动ControlPanel

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

答案 3 :(得分:1)

只需使用此....

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

答案 4 :(得分:0)

正如我之前在另一个问题中提到的那样:

如果在“命令提示符”中键入“Start Control”或“Control”,它将打开“控制面板”。

因此,只需运行一个流程。

本规范(Bellow)对我来说非常有用:

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); }
    }
相关问题