超连接的方式给应用程序传递参数方法的实现

作者在 2009-02-21 11:56:40 发布以下内容
由于项目需要,我希望我的应用程序也可以带上参数,那样我就可以随心所欲的让应用程序按照我的命令做我想做的事情。
玩过计算机的人都应该清楚CMD命令的强大,对于一小小的CMD个应用程序,带不同的参数竟然可以实现各种功能。【打个比方 shutdown –S 关机 shutdown –R 重启。】
这种功能是多么让人神往。可是怎么让应用程序带上参数呢?
编程较细心的一定注意到了
static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
这个启动项。是的,微软已经提供了一种,让我们来实现应用程序的方法。
我们重写这个启动项:
static void Main(String[] arg)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
现在,我们的应用程序已经可以传递参数了。
我们先对Form1进行重载
public Form1()
        {
            InitializeComponent();
        }
重载为:
public Form1(string str)
        {
            InitializeComponent();
        }
这样的话,我们就可以传递参数进来了
然后我们再对MAIN函数进行处理:
改写为:
  static void Main(String[] arg)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            if (arg == null || arg.Length == 0)
            {   
                Application.Run(new Form1());
             }
            else
            {
                Application.Run(new Form1(arg[0]));
            }
         }
这样就初步实现了带参数的应用程序的基本结构。
定义公共字符串:public string ArgParam=null;
在重载的方法里面赋值
public Form1(string str)
        {
            InitializeComponent();
            ArgParam = str;
        }
编写Form的Load事件:
private void Form1_Load(object sender, EventArgs e)
        {
            if (ArgParam == null)
            {
                MessageBox.Show("普通模式");
            }
            else
            {
                MessageBox.Show("特殊模式");
            }
        }

执行下看看效果,普通的执行,我们看到的提示是 【普通模式】,
当我们在CMD下面 切换到 改程序所在的活页夹时
输入 该应用程序名 参数 比如:ArgExp.exe -S
看看出现了什么:是不是提示:【特殊模式】了?

呵呵,到了这里,我们已经给我们的应用程序带上了参数。
可是,这还并不是我想要的,我不可能叫我的老大每次要到CMD 下去运行我的程序。那样做很不方便,而且老大会打我PP的。
那我该怎么办呢?带参数的应用程序是不是到这里就结束了呢?

在互联网上我们经常看到点击一个发送邮件的连接连接,系统就自动调用outlook来发送邮件了。而outlook也是一个应用程序。这样,我又看到了希望:
在网页里面,超链接的格式为: mailto:test@test.com
也就是说:系统定义了一个叫MailTo的协议,然后将参数 test@test.com传递给了outlook。      
我们从注册表找到MailTo协议:将其导出。
内容如下:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\mailto]
"EditFlags"=hex:02,00,00,00
"URL Protocol"=""
@="URL:MailTo Protocol"

[HKEY_CLASSES_ROOT\mailto\DefaultIcon]
@="\"C:\\PROGRA~1\\MICROS~2\\OFFICE11\\OUTLOOK.EXE\",7"

[HKEY_CLASSES_ROOT\mailto\shell]

[HKEY_CLASSES_ROOT\mailto\shell\open]

[HKEY_CLASSES_ROOT\mailto\shell\open\command]
@="\"C:\\PROGRA~1\\MICROS~2\\OFFICE11\\OUTLOOK.EXE\" -c IPM.Note /m \"%1\""
呵呵,看到这里,我想我应该找到了实现它的方法了。
如是,我就重写了一个注册文件:
内容如下:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Fairy4To]
@="Fairy4ToProtocol"
"URL Protocol"="D:\\ArgExp.exe"

[HKEY_CLASSES_ROOT\Fairy4To\DefaultIcon]
@="D:\ArgExp.exe,1"

[HKEY_CLASSES_ROOT\Fairy4To\shell]

[HKEY_CLASSES_ROOT\Fairy4To\shell\open]

[HKEY_CLASSES_ROOT\Fairy4To\shell\open\command]
@="\"D:\\ArgExp.exe\" \" %1\""

将这个导进注册表,然后我们编写一个Html文件
<HTML><BODY link=black alink=Purple vlink=blue>
<A HREF='Fairy4To:-S '>启动程序 </A>
</BODY>
</HTML>
呵呵,执行一下看看效果:
呵呵,看到了提示【特别模式】吗:
呵呵,我们终于完成了我的协议 Fairy4To:
然后我们在程序里面MSGBOX 参数来看下:
就发现:参数的内容是:Fairy4to:-S
但是,实际上我们传递的参数应该是-S,那就应该在程序里面进行处理了
这样我们就实现了通过网页的方式来传递我们的参数。点点一个连接,也可以导航到我们的应用程序的某个Form了
超链接不再是WEB程序的专利了。呵呵
呵呵。想想预先定义一个特别的参数命令,然后发送一封邮件给老大,当他还是像往常一样打开它时,呵呵,程序已经偷偷的执行了我预先的命令而他还不知道。呵呵 爽阿!呵呵,记得不要用这个来干坏事哦!
原文早些時候發布在論壇C#版塊
默认分类 | 阅读 5173 次
文章评论,共0条
游客请输入验证码
浏览54833次
文章分类