• 締切済み

VB6での環境変数変更方法について

VB6で開発しておりますが、環境変数を変更してすぐに反映させる方法はありますか?(OS は WinXP pro です) レジストリの「HKLM/SYSTEM/CurrentControlSet/Control/Session Manager/Environment」のキーを更新してもPCを再起動しないと反映されないようで困っています。 何か方法はあるのでしょうか?

みんなの回答

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

★再起動しないで反映させるには API 関数の『SendMessageTimeout』で可能です。 ・ちなみに、レジストリの環境変数の領域は『ユーザ環境変数』と『システム環境変数』の2つが  ありますが『システムの環境変数』領域ですね。 ・ユーザー環境変数⇒『HKEY_CURRENT_USER\Environment』 ・システム環境変数⇒『HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment』 ・下にサンプルを載せておきます。→ただし C 言語ですよ。ごめんなさい。 ●サンプル DWORD dwReturnValue; LRESULT Ret; printf( "★レジストリ内容を反映させています...\n" ); Ret = SendMessageTimeout( HWND_BROADCAST, WM_SETTINGCHANGE, 0,  (LPARAM)TEXT("Environment"), SMTO_ABORTIFHUNG, 5000, &dwReturnValue ); if ( Ret == 0 ){  printf( "\n×正常にレジストリ内容を反映できませんでした。\n" ); } else{  printf( "\n★正常にレジストリ内容を反映しました。\n" ); } 関連: ・http://oshiete1.goo.ne.jp/qa2616715.html→『システム環境変数の削除の自動化(バッチ化)』 ・http://oshiete1.goo.ne.jp/qa2613662.html→『C言語を用いた環境変数の作成/削除方法』 ・http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpwinui/html/_win32_sendmessagetimeout.asp 最後に: ・『SendMessageTimeout』関数でシステム関連のアプリケーションに WM_SETTINGCHANGE の  メッセージを送ります。これで、環境変数の内容が更新(反映)されます。 ・システム関連のアプリケーションとは、『エクスプローラ』、『プログラム』、  『マネージャ』、『タスク マネージャ』、『コントロール パネル』などです。 ・なお、Windows 95、Windows 98 の環境ではこのメッセージに応答しません。→再起動しましょう。 ・以上。おわり。

参考URL:
http://support.microsoft.com/kb/104011/ja

関連するQ&A

  • バッチでのレジストリPath環境変数方法

    バッチでのレジストリPath環境変数方法 お世話になっております。 レジストリのPath環境変数をバッチで変更しようとています。 バッチ処理の動きとしては、下記の処理をするバッチを 作りたいのですが、上手くいきません。 ≪処理≫ 1、reg queryで、指定されたPath設定を検索 2、if errorlevel ~ 構文で   if errorlevel 1 goto tran1   goto tran2     2-1、指定されたPath設定がなければ、3へ。   2-2、指定されたPath設定があれば、 4へ。     (指定されたPath環境変数は設定済み)    3、reg addで、Path環境変数を変更する 4、次の処理実施   (指定されたPath環境変数は設定済) 具体的な処理内容は、下記のような記述をしてます。 ≪バッチ内容(例)≫ @echo off reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v path | findstr /i "C:\Program Files\navnt" if errorlevel 1 goto tran1 goto tran2 :tran1 reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v path /t REG_EXPAND_SZ /d "%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Program Files\navnt" /f :tran2 echo 次の処理へ しかし、実行すると、全てTran2へ行く処理になってしまい、Tran1への処理になりません。    ※reg query "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v path | findstr /i "C:\Program Files\navnt"  | findstr /i "C:\Program Files\navnt" 箇所の、findstr が上手く機能してないと思ってます。   オプションもいくつか追加して試しましたが、上手くいきませんでした。  (試)  findstr の /c:文字列 を追加  ⇒ 結果、NG ~ | findstr /i /c:"C:\Program Files\navnt" findstrの記述が原因と思いますが、 ●tran1の reg addへ飛ぶ処理の記述をご教授頂けますか? 宜しくお願い致します。

  • Win2000のシステム環境変数Path

    バッチファイル上で reg.exeで新たにパスを追加したいんですが、 overwrite(Y/N?)と聞かれて止まります。 止まらずにいくには、どう書いたら良いでしょうか? 教えて下さい。 [コマンド] reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_EXPAND_SZ /d %Path%;任意のパス /f

  • Pathを楽に設定したい

    Windows2000で、「システム環境変数」にすでに存在する「Path」変数に、いくつか長めのパスを追加で入れようとしています。入力間違いを避けるためにもバッチファイルを作って設定しようとしたのですが、どうもうまくいきません。 諸般の事情で、Autoexec.batはいじりたくないのです。 プログラムを組んで、レジストリのHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Pahtをいじるしかないのでしょうか。できれば、バッチファイルでチョロチョロっと書いて済ませたいのですけど。

  • レジストリ操作でのページングファイル(pagefile.sys) の削除方法

    はじめまして レジストリ操作にてページングファイルを削除したいのですが、削除できなくて困っています。 WinXP, WIn2000 の複数台で検証したのですが、シャットダウン後に削除できませんでした。 どなたか原因がわかる方がいらっしゃしましたら、ぜひ教えてもらいたいです。 変更したレジストリ キー名 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management エントリ名 ClearPageFileAtShutdown 変更後の値 DWORD 16進 0 → 1 へ変更 当方のマシン 使用OS :WinXP SP2, Win2000 SP4 よろしくお願いします。

  • レジストリ操作でデフラグが高速化しますか?

    レジストリ操作でデフラグが高速化しますか? HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management の 「IoPageLockLimit」 の 値のデータを 大きくすると デフラグは 早くなりますか?

  • VB6の開発環境の設定の仕方がわかりません

    過去に誰かが作ったVBのシステムを修正しようと思っております。 修正の為にまず開発環境を整えなければならないのですが、前製作者が書き残したメモの内容が理解できません。 どなたか教えていただけませんでしょうか? メモの内容は以下のとおりです。 --------------------------------------------- 1) mpscmp.dll、phrcmp.dllは ActiveX DLL 開発環境にインストールすること 2) Fsrtmov.ocxは ActiveXコントロール 開発環境にインストールすること 3) PhTrans.dllはWin32DLL 開発環境のカレントや環境変数のパスの通っているとこに置くこと 4)開発環境 Win2000Pro+SP1 IE5+SP1 VB6+SP3 PowerTools ActiveReport ver1.5J + 最終パッチ PowerTools DBGrid Pro ver6.0J + 最終パッチ (現GrapeCity社) --------------------------------------------- mpscmp.dll、phrcmp.dll、Fsrtmov.ocx、PhTrans.dllといったファイルは手元にあるのですが、具体的にどこに設置すればいいのかというのがわかりません。 VBが置いてある場所に設置するということでしょうか? VBについて詳しく無いため質問の内容がわかりずらいと思いますが、どうぞよろしくお願いします。

  • 環境変数PATHをスクリプトかバッチから設定する方法

    社内研修の準備のために、何台ものパソコン(Windows XPを想定)のセットアップを 行うことがありまして、 ・ZIPファイルの展開 ・展開後フォルダを特定の場所へ配置 ・環境変数JAVA_HOMEとPATHの変更 などをバッチやJavaScriptを利用して自動的に処理させようと しています。ZIPの展開と配置は解決できたのですが、 環境変数(pathなど)をスクリプトかバッチから設定できないでしょうか? JavaScript(またはVBスクリプト)で次のように記述すると、 一見うまくいったように見えるのですが、レジストリが書き換わるだけで、 再起動しないとpathが有効になりませんでした。(スクリプト実行後に開いた コマンドプロンプトで echo %path% をしても反映されていない。) <setenvion.js> var shell = WScript.CreateObject("WScript.shell"); shell.RegWrite("HKEY_CURRENT_USER\\Environment\\path", "C:\\Program Files\\Java\\jdk1.6.0_06\\bin", "REG_EXPAND_SZ"); googleで検索しても、バッチを実行するためにpathを設定しましょう、みたいな 情報しか見つからないので、質問させていただきました。 上記のスクリプトでも再起動すれば反映されるのでその点我慢すればよいのですが、 なにかよい方法をご存知の方、よろしくお願いします。

    • ベストアンサー
    • Java
  • レジストリの規定値

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management のDisablePagingExecutive 上記のレジストリの既定値はいくらでしょうか? 処理速度向上を期待して「1」にて設定してみましたが、 変更前の値を忘れたので困っております・・・ よろしくお願いします!!

  • VB.NETの不正?なレジストリ書き込みについて(WinXP)

    VB.NETで開発を行っているのですが、特にレジストリに書き込むような記述はしていないのに、何故か開発したEXEの情報?が以下のレジストリに書き込まれています。 このレジストリは一体何者なのでしょうか? またレジストリの内容を削除した場合にWinXPに影響はありますか? HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache

  • autorunsで不審なアプリケーションが

    autoruns.exeで自動起動するアプリケーションを見てみた所、HKLM\System\CurrentControlSet\Control\Session Manager\BootExecuteという場所に搀渀挀氀攀愀渀㘀㐀⸀攀砀攀という不審な破棄されたアプリケーションを見つけ、またBootExecuteのレジストリ値にautocheck autochk *搀渀挀氀攀愀渀㘀㐀⸀攀砀攀という不審な値を見つけました。BootExecuteを使って悪意のあるマルウェア制作者もまた、スパイウェアやウイルスをロードするらしいのですがpcに対しての悪意ある侵入と見ていいのでしょうか。それともただのエラーなのでしょうか

専門家に質問してみよう