2016-02-18 5 views
4

есть ли возможность открыть диалог модема из центра управления Windows с помощью программы C#?Открыть диалог конфигурации модема из окон (C#)

Конкретный диалог: Windows -> Центр управления -> Телефон и модем -> вкладка Дополнительно -> выберите поставщика -> кнопка конфигурации

Процесс, который начинается это шоу в диспетчере задач как Dllhost. Exe.

спасибо и добрые пожелания Bine

ответ

0

Вы можете открыть телефон и управления Modem панели пункт на «работает» в «программу» telephon.cpl. Вы можете сделать это, используя функцию SHELL32 напрямую с помощью p/invoke или с помощью RunDll32.

RunDll32 - это программа, включающая в себя окна, которые загружают DLL и запускают внутри нее функцию, как указано аргументами командной строки. Как правило, оболочка (проводник) запускает апплеты панели управления.

Вы также можете загрузить CPL напрямую, используя функцию shell32.

Вот пример кода:

[System.Runtime.InteropServices.DllImport("shell32", EntryPoint = "Control_RunDLLW", CharSet = System.Runtime.InteropServices.CharSet.Unicode, SetLastError = true, ExactSpelling = true)] 
private static extern bool Control_RunDLL(IntPtr hwnd, IntPtr hinst, [System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPWStr)] string lpszCmdLine, int nCmdShow); 

private void showOnMainThread_Click(object sender, EventArgs e) 
{ 
    const int SW_SHOW = 1; 
    // this does not work very well, the parent form locks up while the control panel window is open 
    Control_RunDLL(this.Handle, IntPtr.Zero, @"telephon.cpl", SW_SHOW); 
} 

private void showOnWorkerThread_Click(object sender, EventArgs e) 
{ 
    Action hasCompleted = delegate 
    { 
     MessageBox.Show(this, "Phone and Modem panel has been closed", "Notification", MessageBoxButtons.OK, MessageBoxIcon.Information); 
    }; 

    Action runAsync = delegate 
    { 
     const int SW_SHOW = 1; 
     Control_RunDLL(IntPtr.Zero, IntPtr.Zero, @"telephon.cpl", SW_SHOW); 
     this.BeginInvoke(hasCompleted); 
    }; 

    // the parent form continues to be normally operational while the control panel window is open 
    runAsync.BeginInvoke(null, null); 
} 

private void runOutOfProcess_Click(object sender, EventArgs e) 
{ 
    // the control panel window is hosted in its own process (rundll32) 
    System.Diagnostics.Process.Start(@"rundll32.exe", @"shell32,Control_RunDLL telephon.cpl"); 
}