<Return[WXYZ]><Top>

WriteProfileString

Declare Function Api_WriteProfileString& Lib "kernel32" Alias "WriteProfileStringA" (ByVal lpszSection$, ByVal lpszKeyName$, ByVal lpszString$)

Declare Function WriteProfileString Lib "kernel32" Alias "WriteProfileStringA" (ByVal lpszSection As String, ByVal lpszKeyName As String, ByVal lpszString As String) As Long

Win.ini ファイルの指定されたセクションに、文字列を書き込む。
この関数は、16 ビット Windows ベースのアプリケーションとの互換性を保つ目的でのみ提供されている。Win32 ベースのアプリケーションでは、初期化情報をレジストリに格納する。

パラメータ
lpAppName
    文字列を書き込むべきセクション名を保持している、NULL で終わる文字列へのポインタを指定する。

    このセクションが存在しない場合、新しく作成される。

    このセクション名では、大文字と小文字を区別しない。文字列で、大文字と小文字の任意の組み合わせを指定できる。
lpKeyName
    文字列へ関連付づけるべきキーの名前を保持している、NULL で終わる文字列へのポインタを指定する。

    指定されたセクション内にこのキーが存在していない場合、新しく作成される。lpKeyName パラメータで NULL を指定すると、この関数

    は、そのセクション内のすべてのエントリを含めセクション全体を削除する。
lpString
    Win.ini ファイルに書き込むべき、NULL で終わる文字列へのポインタを指定する。

    lpString パラメータで NULL を指定すると、この関数は、lpKeyName パラメータで指定したキーを削除する。
    Windows 95:lpString パラメータの一部として TAB 文字(\t)を使うことはできない。

戻り値
    関数が Win.ini ファイルに文字列を格納することに成功すると、0 以外の値が返る。
    関数が失敗するか、キャッシュ内の Win.ini ファイルをディスク上のファイルへフラッシュする(書き込む)と、0 が返る。

    拡張エラー情報を取得するには、GetLastError 関数を使う。

 

解説
    Windows 95:システムはパフォーマンスを向上させるために、Win.ini ファイルをキャッシュ内に維持している。この関数の 3 つのパラメータ

    すべてで NULL を指定すると、この関数はキャッシュをフラッシュして、内容をディスク上のファイルに書き込む。フラッシュが成功したかどう

    かにかかわらりなく、キャッシュをフラッシュした場合は、この関数は必ず FALSE を返す。
    Win.ini ファイル内のセクションの形式は、次のとおり。
        [section]
        key=string
            .
            .
    これらのシステムでは、ほとんどの .ini ファイルが、次のレジストリキーで定義されているマッピング情報を使ってレジストリへマッピングされて

    いる。
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\IniFileMapping
    操作がレジストリへマッピングされている場合、WriteProfileString 関数は .ini ファイルではなくレジストリへ情報を書き込む。情報の格納

    場所(書き込み先)が .ini ファイルからレジストリへ変化しても、この関数の動作に変化はない。
    Win32 のプロファイル関数(Get/WriteProfile* と Get/WritePrivateProfile*)は、次の手順に従って初期化情報を検索する。
    1.Win32 のプロファイル関数は、レジストリの IniFileMapping キーの中で、指定された .ini ファイル、たとえば myFile.ini を検索する。
      HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\IniFileMapping\myfile.ini
    2.lpAppName パラメータで指定されたセクション名を検索する。このセクション名が見つかった場合、そのセクション名は、myfile.ini ファイ

      ル内の名前付きの値(エントリ)、または myfile.ini のサブキーである。ほかに、このセクション名が見つからないこともある。
    3.lpAppName パラメータで指定したセクション名が myfile.ini 内の名前付きの値である場合、その値が示すレジストリ内の特定の場所

      (マップ先)で、そのセクションに所属するキーの検索を行う。
    4.lpAppName パラメータで指定したセクション名が myfile.ini のサブキーである場合、そのサブキー内の名前付きの値が示すレジストリ内

      の特定の場所(マップ先)で、キーの検索を行う。検索対象のキーが名前付きの値として存在していない場合、名前なしの値

      (<No Name>、日本語版では <名前なし>)が示すレジストリ内の既定の場所で、キーの検索を行う。
    5.lpAppName パラメータで指定したセクション名が、myfile.ini 内の名前付きの値としてもサブキーとしても存在していない場合、myfile.ini

      内の名前なしの値(<No Name>、日本語版では <名前なし>)が示すレジストリ内の既定の場所で、そのセクションに所属するキーの

      検索を行う。
    6.myfile.ini 内にサブキーが存在せず、指定したセクション名に対応するエントリも存在しない場合は、ディスク上で実際の myfile.ini ファイ

      ルを検索し、その内容を読み取る。
    レジストリ内の特定のレジストリエントリが、レジストリ内の他の場所を指定している場合、次の各プレフィックスは、.ini ファイルのマッピング

    の動作方法に変更を加える。
    レジストリエディタ(Regedt32.exe または Regedit.exe)は、ここで言う「レジストリエントリ」を「値」(英語版は Value)と呼んでいる。

    どちらも同じものを意味していて、「名前」(レジストリエントリ名)と「データ」(レジストリエントリのデータ)で構成されている。
    ?! - すべての変更結果を、レジストリとディスク上のファイルの両方へ書き込む。
    ?# - セットアップ後に新しいユーザーが初めてログオンする際に、Windows 3.1 の .ini ファイルの値に合わせて、レジストリエントリのデータを

      設定する。
    ?@ - 要求された値がレジストリ内に見つからない場合、ディスク上の .ini ファイルからその値を読み取らない。
    ?USR: - このプレフィックスは、HKEY_CURRENT_USER を意味する。それ以降のテキストは、このキーを基準とする相対キーを意味す

      る。
    ?SYS: - このプレフィックスは、HKEY_LOCAL_MACHINE\SOFTWARE を意味する。それ以降のテキストは、このキーを基準とする相対

      キーを意味する。