打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[注册表和VBS]配置环境变量并立即生效 - 电脑技术 - 广西民族师范学院论坛 创新的|...

[注册表和VBS]配置环境变量并立即生效

最近开始学Java。我们主要学Java Application和Java Applet两个分类。为了在任意目录下都能编译和运行Java程序,需要对path和classpath环境变量进行相关设置。终于知道环境变量用处之一了。想用程序来实现一下设置环境变量。好不容易用注册表函数写好,结果不行。晕。。。后来想到应该要刷新一下。注销和重起都可以。但我想实现的是立即生效。后来上网搜了一下,得到如下结果:
通过修改注册表,修改了系统的环境变量,但是不会立即生效,除非在【我的电脑】上点击右键,然后打开环境变量的窗口,点击【OK】后,才能生效。后来用Spy++工具捕获消息,发现在点击【OK】按钮时,发送了WM_SETTINGCHANGE消息。
这里有两种方法可以实现:

1.SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,(LPARAM)TEXT("Environment"));
2.SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment", SMTO_ABORTIFHUNG, 5000, 0);
终于成功了,高兴哇。后来无意中发现用VBS配置环境变量并立即生效简单得要命,当场晕倒。。。
下面把两种实现方法都贴出来吧。
  1. //////////配置JAVA环境变量////////
  2. #include <windows.h>
  3. #include <string.h>
  4. #include <stdlib.h>

  5. int SetValue (char * valueName, char *AddValue);

  6. DWORD nLength = MAX_PATH;
  7. char DirectoryName[MAX_PATH];

  8. int APIENTRY WinMain(HINSTANCE hInstance,
  9.                      HINSTANCE hPrevInstance,
  10.                      LPSTR     lpCmdLine,
  11.                      int       nCmdShow)
  12. {
  13.         char pValue[MAX_PATH];
  14.         ::ZeroMemory(DirectoryName,MAX_PATH);
  15.         ::ZeroMemory(pValue,MAX_PATH);

  16.         // 得到当前执行文件的路径名       
  17.         ::GetCurrentDirectory(nLength,DirectoryName);

  18.         // 设置path环境变量
  19.         strcat(pValue,";");
  20.         strcat(pValue,DirectoryName);
  21.         strcat(pValue,"\\bin");
  22.         SetValue("path",pValue);

  23.         // 重置pValue
  24.         ::ZeroMemory(pValue,MAX_PATH);

  25.         // 设置classpath环境变量
  26.         strcat(pValue,".;");
  27.         strcat(pValue,DirectoryName);
  28.         strcat(pValue,"\\lib\\tool.jar;");
  29.         strcat(pValue,DirectoryName);
  30.         strcat(pValue,"\\lib\\dt.jar");
  31.         SetValue("classpath",pValue);
  32.         return 0;
  33. }

  34. int SetValue(char * valueName, char *AddValue)
  35. {
  36.         DWORD keyType = REG_SZ;       
  37.         BYTE getValue[1024];
  38.         DWORD DataLen = 1024;
  39.         HKEY hRoot = HKEY_LOCAL_MACHINE;
  40.         HKEY hKey;
  41.         char *pIsset;
  42.         ::ZeroMemory(getValue,MAX_PATH);
  43.     char *szSubKey = "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment";
  44.        
  45.         // 打开键
  46.         DWORD dwDisposition = REG_OPENED_EXISTING_KEY;       
  47.         LONG lRet = ::RegCreateKeyEx(hRoot, szSubKey, 0, NULL, REG_OPTION_NON_VOLATILE,

  48. KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition);
  49.         if (lRet != ERROR_SUCCESS)
  50.                 return -1;
  51.        
  52.         // 读取键值
  53.         lRet = ::RegQueryValueEx(hKey,valueName,NULL,&keyType,getValue,&DataLen);
  54.        
  55.         pIsset = strstr((char*)getValue, DirectoryName);

  56.         // 如果已设置则返回
  57.         if (pIsset)
  58.         {
  59.                 char MsgText[80];
  60.                 strcpy(MsgText,valueName);
  61.                 strcat(MsgText,"环境变量已配置好,不需再配置!");
  62.                 ::MessageBox(NULL,MsgText,"fc提示",MB_OK);
  63.                 return -1;
  64.         }

  65.         strcat((char*)getValue,AddValue);
  66.        
  67.         // 写入键值
  68.         lRet = ::RegSetValueEx(hKey, valueName, 0, REG_SZ, (BYTE*)getValue, strlen((char*)

  69. getValue));
  70.         if (lRet == ERROR_SUCCESS)
  71.         {       
  72.                 char MsgText[80];
  73.                 strcpy(MsgText,valueName);
  74.                 strcat(MsgText,"环境变量配置成功!");
  75.                 ::MessageBox(NULL,MsgText,"fc提示",MB_OK);

  76.                 // 使设置立即生效,下面两种法都可以
  77.                 SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,(LPARAM)TEXT("Environment"));
  78.                 //SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,

  79. (LPARAM)"Environment", SMTO_ABORTIFHUNG, 5000, 0);
  80.         }
  81.        
  82.         // 关闭句柄
  83.         ::RegCloseKey(hKey);
  84.         return 0;
  85. }
复制代码
  1. on error resume next
  2. set sysenv = CreateObject("WScript.Shell").Environment("system") '系统环境变量的数组对象
  3. sysenv.Remove("ztest3")                      '删除变量
  4. sysenv("ztest3")="test value"                '添加变量
复制代码
VBS这种简单吧……
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
设立系统环境变量立即生效的VBS脚本
C++中strcat()函数
函数指针详解
062.浮点数转换为字符串
[原创]按键+VBS实现WINSOCK-TCP连接传送字符(二)
QTP:VBS基础教程
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服