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

问题描述:

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

+0

为什么社会维基? – 2009-02-12 12:58:09

Vista中增加了对规范名称支持,所以您不必硬编码的DLL文件名和标签指数法

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

(名称始终为英文)

的列表,请参阅MSDN

XP/2000支持“CONTROL.EXE鼠标”和其他几个关键字,看到相同的MSDN页面列表(您可以通过在control.exe上运行字符串来找到一些未公开的文件)

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

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

Step1: 从机器读取系统目录。 第二步:正如我在另一个问题,前面提到的 使用过程中启动ControlPanel控制

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

如果你输入“启动控制”或“控制”到命令提示符就会打开控制面板。

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

代码(波纹管)完美地工作对我来说:

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); } 
    } 

只是用这个....

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