[开发手记] 使用.NET实现你的IP切换器

发布日期:2007.4.17 作者:Anytao

©2007 Anytao.com 转贴请注明出处,留此信息。

 下载:[Anytao.IPHelper][代码下载,近期上传]  

本文将介绍以下内容:
• 批处理文件应用
• 调用外部应用
• 文件处理

1. 引言

经常在公司、客户和家里奔波,切换IP是天天要做的事情,所以有心开发一个小的应用程序,来实现IP地址的快捷切换。既然有了思路就着手来做,我首先想到的是应用netsh.exe工具来实现,所以配置一个批处理文件来实现netsh.exe命令的执行,然后使用.NET框架来调用bat文件即可大功告成。话已至此,马上行动。

2. 基本原理

根据上述解决思路,我的小系统,定名为《Anytao.IpHelper》的解决方案如下:

  • 以批处理文件加载netsh.exe命令,实现IP加载;
  • 以.NET的Process方法,实现对外部应用的调用;
  • 附带进度控制和文件检索功能。

因此,有必要对系统运行的原理进行简单的梳理,来龙去脉,揭开本质。

2.1. netsh工具简介

长篇大论的netsh命令介绍,在此就不特别介绍了,百度上随便就可以找到更加详细的netsh命令手册,可以耗你一天的功夫来研究,本文既然着眼于应用,就从实际的招式来阐述,详细的武功秘籍留待看官量身定做,此处只提供参考:netsh命令详解netsh命令使用

在本文中,请参考以下步骤来实现你的netsh命令处理器:

  1. 打开记事本,输入以下信息: 
    @echo Anytao is switching your ip now.
    @echo off
    netsh 
    interface ip set address 本地连接 static 172.1.1.226 255.0.0.0 172.30.7.254 1 
    netsh 
    interface ip set dns 本地连接 static 200.121.5.1 

    echo dot.gifwww.anytao.comdot.gif
    Echo Congratulations, done.
    pause

     注意:按照以上格式输入您的IP、子网掩码、默认网关和DNS服务器地址;如果是英文版操作系统,将“本地连接”改为“local Area Connection ”。

  2. 另存该文本为批处理文件,在此另存为:home.bat。

  3. 点击该批处理文件,即可将您的IP更新为上述值。

2.2. Process方法简介

Process方法,位于System.Diagnostics命名空间。MSDN的定义为:Process 组件提供对正在计算机上运行的进程的访问。对于启动、停止、控制和监视应用程序等任务,Process 组件是很有用的工具。使用 Process 组件,可以获取正在运行的进程的列表,或者可以启动新的进程。Process 组件用于访问系统进程。初始化 Process 组件后,可使用该组件来获取有关当前运行的进程的信息。此类信息包括线程集、加载的模块(.dll 和 .exe 文件)和性能信息(如进程当前使用的内存量)。因此,以Process方法来打开外部批处理文件是托管环境下值得推荐的方法。

当然,以Process方法来打开外部程序,并不是唯一的办法,最简单的莫过于调用WinAPI程序来实现,当然这又牵扯到非托管代码的范畴,我们就不再多罗嗦了。

我的另一篇拙作《在WinForm应用程序中打开Url》中,也有相关的论述,具体的实现见代码部分的分析。 

2.3. 基本的系统结构如下:

121.JPG 

3. 实现方法:

 3.1 创建Windows Form 应用程序,设置程序名称为Anytao.IPHelper,并向窗体文件中拖入一个ComboBox和一个按钮控件,分别命名为:cbbIP和btnIPConfig,如下图所示:

122.JPG 

3.2 双击btnIpConfig按钮,实现其Click事件,如下,具体代码见注释:

        private void btnIpconfig_Click(object sender, EventArgs e)
        {
            
try
            {
                
//使用Process方法加载外部应用
                Process myProcess = new Process();
                myProcess.StartInfo.FileName 
= Application.StartupPath + @"\config\" + cbbIP.SelectedItem.ToString() + ".bat";
                MessageBox.Show(myProcess.StartInfo.FileName);
                myProcess.StartInfo.UseShellExecute 
= false;
                myProcess.StartInfo.RedirectStandardOutput 
= true;
                myProcess.Start();
                myProcess.WaitForExit();
            }
            
catch (FileNotFoundException ex)
            {
                MessageBox.Show(ex.Message);
            }
            
catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

3.3 当然我们还要实现程序加载时的获取文件目录的操作,如下:

        private void frmMain_Load(object sender, EventArgs e)
        {
            
//将配置文件加载到下拉框中
            string path = Application.StartupPath + @"\config\";
            
if (Directory.Exists(path))
            {
                DirectoryInfo dirinfo 
= new DirectoryInfo(path);
                
foreach (FileInfo fi in dirinfo.GetFiles())
                {
                    cbbIP.Items.Add(Path.GetFileNameWithoutExtension(fi.FullName));
                }
            }                     
        }

 3.4 当然,按照上述方法,将配置好的netsh.exe批处理文件,放在目标位置后,你就可以实现自己的IpHelper了。

3.5 恭喜你,简单的IPHelper已经实现,运行你的程序,享受快速配置IP带来的便捷吧。

123.JPG 

4. 系统展望

 Anytao.IpHelper,只是点燃了一个快速应用的火苗,我在平时的工作中也享受了这种方便的痛快,我的Emma的机子里也必备了IpHelper,就好像是我每天带给她的爱护和关心。嘿嘿,写代码的也可以用这种方式,哄哄家里的娘子军嘛,让我们的程序人生更加和谐。

言归正传,IpHelper只是个代步的工具,还有更多的思想和设计可以融会到里面做为充实,我将会再以后的时间逐渐完善以下几个方面:

  • 设计Ip、IpConfig类,来以面向对象方式完善系统架构;
  • 增加Ip录入功能,实现动态增加Ip选项的能力,而不需要手工实现;
  • 更多桌面网络管理平台融合。

5. 结语后下载

本文的主要目的是,以一个示例为切入点,讲明白如何在托管环境中以Process方法来加载外部应用,使用Process可以方便的在你的应用中打开网站、邮件、外部程序、脚本等,因此是值得学习的东西。
因为,以开发为基础的文章是第一次尝试,不知请大家见笑,小小工具希望给您的生活带来方便。
代码部分还要部分完善,今日先提供程序部分,代码部分我将于近日尽快上传,请大家见谅,希望这个小工具能给你带来方便。

下载:[Anytao.IPHelper][代码下载,近期上传]

 

©2007 Anytao.com 转贴请注明出处,留此信息。

本贴子以现状提供且没有任何担保,同时也没有授予任何权利。
This posting is provided "AS IS" with no warranties, and confers no rights.

转载于:https://www.cnblogs.com/anytao/archive/2007/04/17/anytao_dev_01.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263134.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux文件读写改权限详解

Linux文件读写改权限详解文件的rwx权限 [ r ][ w ][ x ]该文件可读(read)该文件可修改(write)该文件可执行(execute) 注意:只有当该文件所在目录有写权限,并且该文件有[w]权限,才可以进行删除操作 目录的rwx权限 [ r ][ w ][ x ]可查看目录…

实战剖析三层架构

引言:本文不是从理论的角度来探讨三层架构,而是用一个示例来介绍如何建设一个三层架构的项目,并说明项目中各个文件所处的层次与作用。写本文的目的,不是为了说明自己的这个方法有多对,别人的肯定不对,而是…

动态代理的事务封装

在上篇博客中介绍了使用ThreadLocal维护Connection的方法,这样做的最大的优点就是不用来回的传递Connection了,可是我们有会发如今我们使用事务的时候不可避免的会写很多反复的代码,这些都是与业务逻辑无关的: Connecti…

EF 从sqlserver2008 迁移到 2005出现的BUG

在VS10Server08中使用EF4.4,发布数据库为SQL05,发生错误的问题 问题描述环境描述:工具为VS2010SQL08 R2,EntityFramework版本为4.4(在Framework4.5中为5.0),在本机完全测试完成后,发…

[新闻]Ubuntu7.04于4月19日全球同步发布

[新闻]Ubuntu7.04于4月19日全球同步发布!!!鼓掌欢迎,准备更新!!!http://www.ubuntu.com/转载于:https://www.cnblogs.com/cime63/archive/2007/04/19/720131.html

解决Docker构建时出现的 WARNING: Ignoring https://dl-cdn.alpinelinux.org/alpine/v3.13/main: Permission denied

解决Docker构建时出现的 WARNING: Ignoring https://dl-cdn.alpinelinux.org/alpine/v3.13/main: Permission denied在根据官网的Docker-compose构建示例项目时遇到的问题,原因是因为无法访问官网给出的外网镜像,可能还会出现WARNING: Ignoring https://…

可耻的客户端,可怕的征兆,必须趁早消灭它

最近在我的Android手机上安装一个小软件,不知为何,顶部的消息提示有软件推荐,最开始还以为是某些软件的更新提示,于是点击一次,却发现直接安装该软件。当时我感到非常愤怒。真是一个可耻的程序员做了一个可耻的客户端&…

Table还是CSS,请您说说您的见解

这两天在对网页进行排版,可是觉得Table总是很烦,后来使用CSS,可是CSS也有CSS的问题,无论是什么好像都不能十全十美。请朋友们发现您的意见,您觉得如何? 转载于:https://www.cnblogs.com/edrp/archive/2007/…

Google Android开发精华教程

Android是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。本文汇总整理了时下关于Google Android技术教程的下载资源&…

转盘不转动的问题

2019独角兽企业重金招聘Python工程师标准>>> Stack Overflow is a question and answer site for professional and enthusiast programmers. Its 100% free, no registration required. jQuery Rotate - IE7 & IE8 Issues up vote 11 down vote favorite 3 I a…

主机无法连接虚拟机中的redis服务

解决&#xff1a;主机<本地>无法连接虚拟机中的redis服务首先保证虚拟机网络已经和主机网络互通&#xff0c;即相互ping对方IP&#xff0c;能ping通但是仍然连不上redis服务&#xff0c;可能是以下问题。redis服务配置问题 配置redis.conf如下 protected-mode no #关闭…

重构机房收费系统(二)

接上篇《机房收费系统重构&#xff08;一&#xff09;》 二、概要设计 完成了用例图&#xff0c;并用结合用例图完善了一下需求分析说明书&#xff0c;忘记是第几次修订需求分析说明书。有了用例图&#xff0c;很自然就进入了概要设计阶段。我认为这一阶段就是结合包图解决系统…

VS 2005 安装一个的小问题

今天通过 添加/删除 安装了VC的部分功能之后&#xff0c;在 程序》Visual Studio 2005 》Visual Studio 2005 Tools 里面竟然找不到 ActiveX Control Test Container 了&#xff0c;但是却有 Spy和 MFC-ATL Trace Tool&#xff0c;建了MFC ActiveX功能在IDE里面 工具 菜单中也找…

《Windows核心编程》学习笔记(9)– 在win7或者vista系统下提升一个进程的运行权限...

win7或者vista默认运行程序是在受限制的环境下运行的&#xff0c;以减轻病毒对于系统的破坏。那么我们怎样才能提升一个进程的权限以至让它在 管理员模式下运行。当然CreateProcess函数没有提供这个功能。相反我们需要调用的是ShellExecuteEx函数&#xff1a; BOOL ShellExecu…

2015第29周二AOP

1、问题&#xff1a;想要添加日志记录、性能监控、安全监测 2、最初解决方案2.1、最初解决方案&#xff1a;在每个需要的类函数中重复写上面处理代。 缺点&#xff1a;太多重复代码&#xff0c;且紧耦合2.2、抽象类进行共性设计&#xff0c;子类进行个性设计&#xff0c;此处不…

Docker-compose配置Mysql,Redis,MongoDB

Docker-compose下配置Mysql&#xff0c;Redis&#xff0c;MongoDB详解一、docker-compose简介二、构建一个实例项目1.前后端实现2.Dockerfile及docker-compose.yml3. 生成镜像三、实例程序源码一、docker-compose简介 Compose是用于定义和运行多容器Docker应用程序的工具。通过…

初学者应该了解的一些SQL语句及hr 用户解锁相关

初学者应该了解的一些SQL语句 1.显示当前连接用户SQL> show user&#xff1b; 2.查看系统拥有哪些用户SQL> select * from all_users; 3.连接到新用户SQL> conn 用户名/密码 4.查询当前用户下所有对象SQL> select * from tab; 5.建立第一个表SQL> create table …

用Delphi 6开发ASP上传组件详解

文件上传是WEB开发中经常要用到的功能&#xff0c;但ASP本身和内置的组件都不支持文件上传功能。网上流传的一些第三方组件虽然能够解决这个问题&#xff0c;但大多是要收费的&#xff0c;更别说Open Source了。本文将详细剖析WEB文件上传的原理&#xff0c;以及一步步指导读者…

使用WebDeployment Project改善VS2005发布网站问题

VS2005发布网站时不会像VS2003一样生成规则的DLL文件、而生成的DLL文件名含有随机数且不能一个项目生成一个DLL文件、让人有一些遗憾、为了做到像vs2003一样&#xff0c;微软发布了WebDeployment Project插件可解决此问题&#xff1a;下载地址1、下载后安装、右键选择vs2005中的…

03 - const static extern

const是一个C语言的关键字&#xff0c;它限定一个变量不允许被改变。使用const可以在一定程度上提高程序的安全性和可靠性&#xff0c;再者在看别人的代码作品的时候也可以有助于清晰理解const所起的作用。 1、const和#define的区别 &#xff08;1&#xff09;编译器处理的方式…