1

我有这个代码:

public void OpenInterOption()
{
    System.Diagnostics.ProcessStartInfo proc = new System.Diagnostics.ProcessStartInfo();
    proc.FileName = @"C:\\Windows\\System32\\RunDll32.exe";
    proc.Arguments = "shell32.dll,Control_RunDLL inetcpl.cpl,Internet,4";
    System.Diagnostics.Process.Start(proc);
}

结果是打开了 Internet 属性窗口。
但实际上我想在 Internet 属性选项卡中打开“局域网 (LAN) 设置窗口”。
我认为这一行的问题是:"shell32.dll,Control_RunDLL inetcpl.cpl,Internet,4";它需要更多的论据吗?

4

1 回答 1

2

我不知道打开网络设置是否是正确的方法,因为如果你有多个局域网,包括无线局域网,你想打开哪一个?因此,您最好打开网络连接设置,让用户决定打开哪个设置。因此,您可以使用下面的代码打开网络连接设置,例如:

ProcessStartInfo startInfo = new ProcessStartInfo("NCPA.cpl");
startInfo.UseShellExecute = true;

Process.Start(startInfo);

更新

您不能LAN Property Settings使用任何 .cpl 程序直接调用。但是,有一种非常规的方式可以使用您自己的代码并SendKeys像这样使用:

   System.Diagnostics.ProcessStartInfo proc = new System.Diagnostics.ProcessStartInfo();
   proc.FileName = @"C:\\Windows\\System32\\RunDll32.exe";
   proc.Arguments = "shell32.dll,Control_RunDLL inetcpl.cpl,Internet,4";
   System.Diagnostics.Process.Start(proc);
   SendKeys.Send("{TAB}{TAB}{TAB}{TAB}{ENTER}");

另一种方法是使用Alt+L而不是Tab. 现在,对我来说,这更加确定,因为Tab您永远不知道是否会立即注册所有内容,或者它会跳转到确切数量的位置,例如按钮。但是,我必须使用Timer它来确保它真的会产生这样的效果:

   tmr.Interval = 500;

   System.Diagnostics.ProcessStartInfo proc = new System.Diagnostics.ProcessStartInfo();
   proc.FileName = @"C:\\Windows\\System32\\RunDll32.exe";
   proc.Arguments = "shell32.dll,Control_RunDLL inetcpl.cpl,Internet,4";
   System.Diagnostics.Process.Start(proc);
   tmr.Tick += new EventHandler(tmr_Tick);
   tmr.Start();

而你Event handlerTimer

   void tmr_Tick(object sender, EventArgs e)
   {
       SendKeys.SendWait("%L");
       tmr.Stop();    
   }

现在,请确保Timer在您的类中声明为全局,无论是在表单内还是在其他类似的地方:

   Timer tmr = new Timer();

就像在我的情况下,我把它放在Form1类下面和里面:

  public partial class Form1 : Form
  {
    Timer tmr = new Timer();
  .....more code here not shown

不是最优雅的,但它会完成工作;-)

于 2013-06-15T06:22:22.430 回答