- 締切済み
VB6での環境変数変更方法について
VB6で開発しておりますが、環境変数を変更してすぐに反映させる方法はありますか?(OS は WinXP pro です) レジストリの「HKLM/SYSTEM/CurrentControlSet/Control/Session Manager/Environment」のキーを更新してもPCを再起動しないと反映されないようで困っています。 何か方法はあるのでしょうか?
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- Oh-Orange
- ベストアンサー率63% (854/1345)
★再起動しないで反映させるには 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 の環境ではこのメッセージに応答しません。→再起動しましょう。 ・以上。おわり。