SetTheisHome

08年的文章~

看好多人都在写工具设置THEIS_HOME和THEIS_Config,那天看到白同学说嫌输入路径烦,我就突然想到可以做个绑定到右键菜单的东西。这不,昨天晚上给弄完了...

主要思想:选中某个文件夹,点右键,会出现SetTheisHome字样,选择SetTheisHome会将选中文件夹设成Theis_home的值,其下级目录Config为Theis_Config的值
用到的技术:
1.操作注册表
修改右键菜单,昨天在网上找到几个方法,这里列两个,一个是文件的右键菜单,一个是文件夹的右键菜单
文件的右键菜单注册表位置: /HKEY_CLASSES_ROOT/*/shell
示例代码
  1. RegistryKey reg;
  2. reg = Registry.ClassesRoot;
  3. reg=reg.CreateSubKey(@"*/shell/myApp");
  4. //创建新项myApp
  5. reg.SetValue("","我的程序");
  6. //设置项值
  7. reg = Registry.ClassesRoot;
  8. reg.CreateSubKey(@"*/shell/myApp/command");
  9. //创建新项command
  10. reg.SetValue("",Application.ExecutablePath+" %1");
  11. //设置command的值
  12. reg.Close();
文件夹的右键菜单注册表位置:HKEY_CLASSES_ROOT/Directory/shell
                            HKEY_CLASSES_ROOT/Directory/shellex/ContextMenuHandlers
  1. [HKEY_LOCAL_MACHINE/SOFTWARE/Classes/Directory/shell/SetTheisHome]
  2. @="SetTheisHome"
  3. [HKEY_LOCAL_MACHINE/SOFTWARE/Classes/Directory/shell/SetTheisHome/command]
  4. @="D://ChangeEnvironmentVar.exe %1"
不知为何,我在程序中始终没改掉command的值,有待研究,最后我无奈之下,就把注册表导出了。

2.还是操作注册表
右键菜单有了,下一步就得是执行程序,改变环境变量的值了。据说可以用Registry和RegistryKey来实现,两者的区别有待研究。
  1. //获得环境变量路径
  2.                 RegistryKey pregkey =
  3.                     Registry.LocalMachine.OpenSubKey(@"SYSTEM/CurrentControlSet/Control/Session Manager/Environment"true);
  4.                 try
  5.                 {
  6.                     if (pregkey == null)
  7.                     {
  8.                         MessageBox.Show("键值不存在");
  9.                     }
  10.                     else
  11.                     {
  12.                         if (pregkey.GetValue("THEIS_HOME") == null)
  13.                         {
  14.                             pregkey.CreateSubKey("THEIS_HOME");
  15.                         }
  16.                         pregkey.SetValue("THEIS_HOME", directory);
  17.                         
  18.                         if (pregkey.GetValue("THEIS_Config") == null)
  19.                         {
  20.                             pregkey.CreateSubKey("THEIS_Config");
  21.                         }
  22.                         pregkey.SetValue("THEIS_Config", directory + @"/Config");
  23.                     }
  24.                 }
  25.                 catch(Exception ex)
  26.                 {
  27.                     MessageBox.Show("Change environment had been failed." + ex.ErrorMessage);
  28.                 }
  29.                 finally
  30.                 {
  31.                     if (pregkey != null) pregkey.Close();
  32.                 }

后记:调查了一下,发现用修改注册表的方法来修改环境变量还差了一步,需要用SendMessage广播一下环境变量的改变,不然就得重启机器或者注销,反正就是不好用了。(google上搜 注册表+环境变量+生效可以查到相应原因)
还是乖乖用Enviroment.SetEnviromentVariable吧,本想的是,既然这个方法好使,可以先看看.net源码是怎么写的,是不是也是改了注册表然后用什么广播,不幸的是,不是,.net是用 Win32Native.SetEnviroment...什么设的。我不能用。。。

不过,看到.net源码了,不错的说,一行注释没有,看的很明白。看来以后最好能每天看一个源码,现在看代码已经不像以前那么兴奋了,大概已经习惯了现在的文档生活了吧....

因为还有其他环境变量,我本来想要做个右键级联菜单,可惜,查了查说是要用shell什么的,不懂。。。下了一个源码,都是英文,不但眼花,而且是C++的,多年不看,都不知道C++怎么玩了,自己汗一个先...作罢,就这么着吧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值