C# Winforms 按钮到 Windows 中的特定屏幕

Posted

技术标签:

【中文标题】C# Winforms 按钮到 Windows 中的特定屏幕【英文标题】:C# Winforms button to specific screen in Windows 【发布时间】:2015-02-28 02:23:18 【问题描述】:

我正在编写一个应用程序来更改网络适配器 IP 地址设置。只有基本的 IP 设置是我将从应用程序中更改的内容。

我有什么方法可以使用某种“链接”或“路径”来打开“高级 TCP/IP 设置”屏幕,通常通过 TCP/IPv4 属性屏幕中的“高级”按钮访问?

上面的屏幕截图显示了通常用于打开高级 TCP/IP 设置屏幕的突出显示按钮。我需要一种方法来直接使用按钮从我的应用程序中打开这个确切的屏幕。

【问题讨论】:

我想知道你打开Advanced TCP/IP Settings的目的是什么?? 【参考方案1】:

你可以这样做:

System.Diagnostics.Process.Start("ncpa.cpl"); // opens network connections window
Thread.Sleep(500); // give time for window to open
SendKeys.Send("(^a)RIGHT(%f)r"); // select all (ctrl+a), right arrow, alt+f, r

【讨论】:

我认为这不是正确的做法。您应该使用 WMI 来实现这一点。请查看我的答案以获取执行此操作的示例。 请查看问题的编辑,因为我现在添加了我需要打开的确切屏幕的屏幕截图。问候。 我已经为您提供了如何实现快速而肮脏的解决方案的基本思路。您可以找出其余的击键。您还可以使用 .Net UI 自动化库来增加一致性。这是 UI 自动化的一个非常好的起点:***.com/questions/4665045/… @Loathing 我在哪里可以找到对命令 ncpa.cpl 的引用,可能还有其他类似的我可以在某处使用?【参考方案2】:

您可以使用以下代码设置网络适配器的IP地址

public void setIP(string IPAddress,string SubnetMask, string Gateway) 
 

ManagementClass objMC = new ManagementClass(
"Win32_NetworkAdapterConfiguration"); 
ManagementObjectCollection objMOC = objMC.GetInstances(); 


foreach(ManagementObject objMO in objMOC) 
      

  if (!(bool) objMO["IPEnabled"]) 
       continue; 



  try 
     
      ManagementBaseObject objNewIP = null; 
      ManagementBaseObject objSetIP = null; 
      ManagementBaseObject objNewGate = null; 


      objNewIP = objMO.GetMethodParameters("EnableStatic"); 
      objNewGate = objMO.GetMethodParameters("SetGateways"); 



      //Set DefaultGateway
      objNewGate["DefaultIPGateway"] = new string[] Gateway; 
      objNewGate["GatewayCostMetric"] = new int[] 1; 


      //Set IPAddress and Subnet Mask
      objNewIP["IPAddress"] = new string[] IPAddress; 
      objNewIP["SubnetMask"] = new string[] SubnetMask; 

      objSetIP = objMO.InvokeMethod("EnableStatic",objNewIP,null); 
      objSetIP = objMO.InvokeMethod("SetGateways",objNewGate,null); 



      Console.WriteLine(
         "Updated IPAddress, SubnetMask and Default Gateway!"); 



     
    catch(Exception ex) 
     
          MessageBox.Show("Unable to Set IP : " + ex.Message);  
    

【讨论】:

但这实际上不是 OP 想要的 Solx85 你可以用几个文本框和一个按钮来编写你自己的windows窗体你可以使用这个代码来更新IP......我觉得这是一个更好的方法它@mr.incognito 因为 Lothing 的答案是发送 KeyStrokes 来完成这项工作,明天如果微软更改 ncpa.cpl(网络适配器控制面板)的 UI,那么他的代码将不再工作 我使用 Win32_NetworkAdapter 类来管理所有与 IP 相关的设置。该应用程序适用于简单和基本的 IP 设置,但我现在开始更频繁地使用高级设置向适配器添加多个 IP 地址。我只想通过单击应用程序中的按钮来打开特定屏幕。我会尝试下面的代码并提供反馈。

以上是关于C# Winforms 按钮到 Windows 中的特定屏幕的主要内容,如果未能解决你的问题,请参考以下文章

C# WinForms 使用 FlashLight 内置到运行 Windows 10 Professional x64 的移动设备中

从 winForms 移植到 Windows phone 8.0 C#

c# GDI和winforms中的径向渐变画笔效果

带有按钮、组合框和文本框的 C# WinForms (.NET Framework) DataGridView:使用按钮添加新行以添加组合框项时出错

Winforms:如何使用 C# 将图片上传到 SQL Server 数据库

如何在 C# 控制台或 WinForms 应用程序中使用 Windows 安全的确认证书弹出窗口选择证书?