アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (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 …

最後に:
・『SendMessageTimeout』関数でシステム関連のアプリケーションに WM_SETTINGCHANGE の
 メッセージを送ります。これで、環境変数の内容が更新(反映)されます。
・システム関連のアプリケーションとは、『エクスプローラ』、『プログラム』、
 『マネージャ』、『タスク マネージャ』、『コントロール パネル』などです。
・なお、Windows 95、Windows 98 の環境ではこのメッセージに応答しません。→再起動しましょう。
・以上。おわり。

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!