掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.24645

環境変数の読み込み、書き込み方法(WindowsXP+bcc+SDK)
投稿者---om(2005/12/10 13:20:49)


環境変数を読み込んだり、書き込んだりするにはどうすればいいのでしょうか?
書き込む場合は、そのプログラムが終了しても永続的にその環境変数への書き込みが有効である方法でお願いします



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:環境変数の読み込み、書き込み方法(WindowsXP+bcc+SDK) 24647 Hermit 2005/12/10 15:50:52
<子記事> Re:環境変数の読み込み、書き込み方法(WindowsXP+bcc+SDK) 24648 Craft 2005/12/10 15:54:24


No.24647

Re:環境変数の読み込み、書き込み方法(WindowsXP+bcc+SDK)
投稿者---Hermit(2005/12/10 15:50:52)


>環境変数を読み込んだり、書き込んだりするにはどうすればいいのでしょうか?
>書き込む場合は、そのプログラムが終了しても永続的にその環境変数への書き込みが有効である方法でお願いします

環境によって違います。

getenv() 程度の読み込みでよいのであれば C では関数が用意されています。
また、int main(int argc, char **argv, char **env)
で、env に環境変数が入っていることが多いです。

書き込みについては、子プロセス以外は、
書き換え不能であることが多いです。
MSDOS の COMMAND.COM 程度であれば書き換え可能ですが、
他のプログラムなど(shの移植物とか)では、
環境変数の管理のしかたが違う可能性もあるので、
出来ない可能性大です。
他の UNIX 系や、Windows 系など、マルチユーザーマルチタスクでは、
他のプロセスの環境変数を変えるのはほぼ無理ではないでしょうか。
環境を書き変えて、reboot が一番確実です。


この投稿にコメントする

削除パスワード

No.24648

Re:環境変数の読み込み、書き込み方法(WindowsXP+bcc+SDK)
投稿者---Craft(2005/12/10 15:54:24)


>環境変数を読み込んだり、書き込んだりするにはどうすればいいのでしょうか?
>書き込む場合は、そのプログラムが終了しても永続的にその環境変数への書き込みが有効である方法でお願いします

WindowsXPでは、環境変数の内容はレジストリに設定されるので、
bccでは、TRegistoryクラスを使用してアクセスします。

HKEY_CURRENT_USER\SOFTWARE\TEST_PROGRAMの
integer型データを持つNumberメンバを読む例
#include <vcl\Registry.hpp>

void sample()
{
    TRegistory *reg = new TRegistory;
    int number;

    reg->RootKey = HKEY_CURRENT_USER;
    if( reg->KeyExists("SOFTWARE\TEST_PROGRARM") ){
        reg->OpenKey("SOFTWARE\TEST_PROGRAM",true);
        number = reg->ReadInteger("Number");
    }
    reg->CloseKey();

    delete reg;
}

レジストリ操作をするコードを書く場合、サンプルだけに頼らず、TRegistoryのヘルプ等を呼んで、正確なアクセス方法を調査した方がいいです。

システム環境変数の設定されているレジストリパス
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Session Manager\Environment

ユーザー環境変数の設定されているレジストリパス
HKEY_CURRENT_USER\Environment


システム環境変数(HKEY_LOCAL_MACHINE)は、PowerUser権限を持つユーザアカウントでないと書き込みできないらしいです。
まあ、システム環境変数は下手にいじって壊すと取り返しつかなくなる場合があるのでやらないほうが安全ですけどね。

個人的にHKLMレジストリの値書き換えるのは怖いので、試してはいません。


この投稿にコメントする

削除パスワード

No.24649

Re:環境変数の読み込み、書き込み方法(WindowsXP+bcc+SDK)
投稿者---Craft(2005/12/10 17:35:58)


ifブロック内でOpenしてるのに、Closeがブロックの外になってたorz


この投稿にコメントする

削除パスワード

No.24667

Re:環境変数の読み込み、書き込み方法(WindowsXP+bcc+SDK)
投稿者---YuO(2005/12/10 23:51:15)


>WindowsXPでは、環境変数の内容はレジストリに設定されるので、
>bccでは、TRegistoryクラスを使用してアクセスします。

bccと言っているので,Borland C++ Builderの固有クラスはアクセスできないのでは?

まぁ,TRegistoryクラスが使えないからといって,
システム環境変数の設定されているレジストリパス
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Session Manager\Environment

ユーザー環境変数の設定されているレジストリパス
HKEY_CURRENT_USER\Environment

であることに違いはないのですが。
# 正しくは, HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment ですね。

あと,書き換えるのであればちゃんとMSDNの該当ページ:Environment Variablesを読んでおく必要があります。
# レジストリを書き換えるだけではだめです。



この投稿にコメントする

削除パスワード

No.24677

Re:環境変数の読み込み、書き込み方法(WindowsXP+bcc+SDK)
投稿者---Craft(2005/12/11 00:19:55)


>bccと言っているので,Borland C++ Builderの固有クラスはアクセスできないのでは?

あ、なるほど。勘違いしてました。

>あと,書き換えるのであればちゃんとMSDNの該当ページ:Environment Variablesを読んでおく必要があります。
># レジストリを書き換えるだけではだめです。

ってことは過去に自分のつくったことのあるレジストリにデータ書くソフトはやばそうですね。ありがとうございます。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧