Как программно открыть панель управления? - PullRequest
4 голосов
/ 02 февраля 2009

Как мне открыть пользовательскую панель управления программно, например custom.cpl? В частности, как открыть 64-битный cpl при работе в качестве 32-битного приложения?

Ответы [ 5 ]

5 голосов
/ 16 февраля 2009

В Vista добавлена ​​поддержка канонических имен, чтобы вам не приходилось жестко кодировать имена файлов DLL и индексы табуляции

Пример: WinExec ("% systemroot% \ system32 \ control.exe / name Microsoft.WindowsUpdate", SW_NORMAL);

(имена всегда на английском)

См. MSDN для списка

XP / 2000 поддерживает «мышь control.exe» и некоторые другие ключевые слова, см. Ту же страницу MSDN для списка (вы можете найти недокументированные, запустив строки в файле control.exe)

5 голосов
/ 02 февраля 2009

Так как я не нашел хорошего ответа на SO, вот решение моего исследования:

  • Запустите новое приложение «control», которое получает имя панели управления в качестве первого параметра:
::ShellExecute(m_hWnd, NULL, _T("control.exe"), _T("access.cpl"), NULL, SW_SHOW);
1 голос
/ 08 января 2016

просто используйте это ....

ProcessStartInfo startInfo = new ProcessStartInfo("appwiz.cpl");
startInfo.UseShellExecute = true;
Process.Start(startInfo);
1 голос
/ 28 декабря 2011

Шаг 1: Считайте системный каталог с машины. Шаг 2 : Используйте Process для запуска ControlPanel

            **Process.Start(System.Environment.SystemDirectory + @"\appwiz.cpl");**
0 голосов
/ 20 марта 2015

Как я уже упоминал в другом вопросе:

Если вы введете «Запуск управления» или «Управление» в командной строке, откроется панель управления.

Поэтому просто запустите процесс.

Этот код (сильфон) отлично сработал для меня:

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