Что такое код getprofilestring

GetPrivateProfileString function

Retrieves a string from the specified section in an initialization file.

Syntax

Parameters

The name of the section containing the key name. If this parameter is NULL, the GetPrivateProfileString function copies all section names in the file to the supplied buffer.

The name of the key whose associated string is to be retrieved. If this parameter is NULL, all key names in the section specified by the lpAppName parameter are copied to the buffer specified by the lpReturnedString parameter.

A default string. If the lpKeyName key cannot be found in the initialization file, GetPrivateProfileString copies the default string to the lpReturnedString buffer.

If this parameter is NULL, the default is an empty string, «».

Avoid specifying a default string with trailing blank characters. The function inserts a null character in the lpReturnedString buffer to strip any trailing blanks.

A pointer to the buffer that receives the retrieved string.

The size of the buffer pointed to by the lpReturnedString parameter, in characters.

The name of the initialization file. If this parameter does not contain a full path to the file, the system searches for the file in the Windows directory.

Return Value

The return value is the number of characters copied to the buffer, not including the terminating null character.

If neither lpAppName nor lpKeyName is NULL and the supplied destination buffer is too small to hold the requested string, the string is truncated and followed by a null character, and the return value is equal to nSize minus one.

If either lpAppName or lpKeyName is NULL and the supplied destination buffer is too small to hold all the strings, the last string is truncated and followed by two null characters. In this case, the return value is equal to nSize minus two.

In the event the initialization file specified by lpFileName is not found, or contains invalid values, this function will set errorno with a value of ‘0x2’ (File Not Found). To retrieve extended error information, call GetLastError.

Remarks

The GetPrivateProfileString function searches the specified initialization file for a key that matches the name specified by the lpKeyName parameter under the section heading specified by the lpAppName parameter. If it finds the key, the function copies the corresponding string to the buffer. If the key does not exist, the function copies the default character string specified by the lpDefault parameter. A section in the initialization file must have the following form:

If lpAppName is NULL, GetPrivateProfileString copies all section names in the specified file to the supplied buffer. If lpKeyName is NULL, the function copies all key names in the specified section to the supplied buffer. An application can use this method to enumerate all of the sections and keys in a file. In either case, each string is followed by a null character and the final string is followed by a second null character. If the supplied destination buffer is too small to hold all the strings, the last string is truncated and followed by two null characters.

If the string associated with lpKeyName is enclosed in single or double quotation marks, the marks are discarded when the GetPrivateProfileString function retrieves the string.

The GetPrivateProfileString function is not case-sensitive; the strings can be a combination of uppercase and lowercase letters.

To retrieve a string from the Win.ini file, use the GetProfileString function.

The system maps most .ini file references to the registry, using the mapping defined under the following registry key:HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionIniFileMapping

This mapping is likely if an application modifies system-component initialization files, such as Control.ini, System.ini, and Winfile.ini. In these cases, the function retrieves information from the registry, not from the initialization file; the change in the storage location has no effect on the function’s behavior.

The profile functions use the following steps to locate initialization information:

  1. Look in the registry for the name of the initialization file under the IniFileMapping key.
  2. Look for the section name specified by lpAppName. This will be a named value under the key that has the name of the initialization file, or a subkey with this name, or the name will not exist as either a value or subkey.
  3. If the section name specified by lpAppName is a named value, then that value specifies where in the registry you will find the keys for the section.
  4. If the section name specified by lpAppName is a subkey, then named values under that subkey specify where in the registry you will find the keys for the section. If the key you are looking for does not exist as a named value, then there will be an unnamed value (shown as ) that specifies the default location in the registry where you will find the key.
  5. If the section name specified by lpAppName does not exist as a named value or as a subkey, then there will be an unnamed value (shown as ) that specifies the default location in the registry where you will find the keys for the section.
  6. If there is no subkey or entry for the section name, then look for the actual initialization file on the disk and read its contents.
Илон Маск рекомендует:  Атрибут disabled в HTML

When looking at values in the registry that specify other registry locations, there are several prefixes that change the behavior of the .ini file mapping:

  • ! — this character forces all writes to go both to the registry and to the .ini file on disk.
  • # — this character causes the registry value to be set to the value in the Windows 3.1 .ini file when a new user logs in for the first time after setup.
  • @ — this character prevents any reads from going to the .ini file on disk if the requested data is not found in the registry.
  • USR: — this prefix stands for HKEY_CURRENT_USER, and the text after the prefix is relative to that key.
  • SYS: — this prefix stands for HKEY_LOCAL_MACHINE\SOFTWARE, and the text after the prefix is relative to that key.

Как функция GetProfileString ищет значения в реестре?

Я пытался получить принтер по умолчанию через VBA и я наткнулся на Windows API GetProfileString функции: GetProfileString документация

На одном сайте я нашел рабочий пример, который извлекает имя принтера:

На сайте я связан заявляет , что в Windows Server 2003, Windows XP и Windows 2000 (и более поздних версий , а также, я полагаю , — документация , вероятно, не уточненный) значений , которые GetProfileString возвращают могут быть взяты из реестра , если некоторые условия. Я открыл редактор реестра и нашел правильный раздел — . \IniFileMapping\win.ini\Windows . К моему удивлению, там нет ключа с именем device . Я заново прочитать документацию пару раз, но это не помогло. Я не имею соответствующий раздел в моем win.ini файле.

Может кто-нибудь объяснить, как эта функция точно работает? Похоже, что это может пригодиться во многих ситуациях, поэтому было бы хорошо знать, как правильно его использовать.

Эта функция одна гигантская прокладка обратной совместимости. Идея для унаследованного кода, чтобы продолжить работу, подбирая значения, которые были перемещены в реестр, когда Windows, перемещается с 16-разрядной на 32-бит.

Документации делает это довольно ясно:

Примечание Эта функция предусмотрена только для совместимости с 16-разрядными приложениями на базе Windows, поэтому эта функция не должна быть вызвана из серверного кода. Приложения должны хранить информацию инициализации в реестре.

Сообщение ясно. Не используйте эту функцию.

Вы спросите , как функция работает, когда он читает из реестра. Это покрыто довольно подробно в документации , и я не думаю , что это может принести большую пользу, пытаясь повторно фразе этой документации.

Было бы хорошо знать, как правильно его использовать.

Используйте функцию должным образом никогда не называя его!

CWinApp::GetProfileString

The return value is the string from the application’s .INI file or lpszDefault if the string cannot be found. The maximum string length supported by the framework is _MAX_PATH. If lpszDefault is NULL, the return value is an empty string.

Points to a null-terminated string that specifies the section containing the entry.

Points to a null-terminated string that contains the entry whose string is to be retrieved. This value must not be NULL.

Илон Маск рекомендует:  Что такое код opensound

Points to the default string value for the given entry if the entry cannot be found in the initialization file.

Call this member function to retrieve the string associated with an entry within the specified section in the application’s registry or .INI file.

The entries are stored as follows:

    In Windows NT, the value is stored to a registry key.

GetPrivateProfileString не выводит все ключи

Добрый день!
Мучаюсь уже несколько дней, так и не пойму в чем загвоздка.

Вообщем есть WinApi функция GetPrivateProfileString :

lpAppName — имя секции, в которой находится считываемй ключ. Если в качестве этого параметра передать NULL, функция вернет список всех секций в указанном INI-файле
lpKeyName — имя ключа, чье значение нужно считать. Если в качестве параметра передать NULL, то функция, по аналогии с секциями, вернет имена всех ключей в секции.
lpDefault — строка по умолчанию. Если в указанном INI-файле ключ lpKeyName не найден, то функция вернет это значение.
lpReturnedString — буфер, в который будут записаны возвращаемые функцией данные
lpFileName — имя считываемого INI-файла.

То есть код типа :

должен вывести в переменную out список всех ключей в данной секции, но у меня выводит только первый ключ.

Вот мой код (Visual Studio C++):

То же самое если задать вывод всех секций, то выводит только первую из файла.
Но количество символов считает правильно.

How does GetProfileString function look for values in the registry?

I was trying to get the default printer through VBA and I came across the Windows API GetProfileString function: GetProfileString documentation

On one website I found a working example that retrieves the printer name:

The site I linked states that on Windows Server 2003, Windows XP and Windows 2000 (and later versions as well, I assume — the documentation probably isn’t up-to-date) the values that GetProfileString return may be taken from the registry if certain conditions are met. I opened the Registry Editor and found the correct section — . \IniFileMapping\win.ini\Windows . To my surprise, there is no key named device . I re-read the documentation a couple of times, but it didn’t help. I don’t have a corresponding section in my win.ini file.

Can anyone explain how this function exactly works? It looks like it could come in handy in numerous situations, so it would be nice to know how to use it properly.

Как функция GetProfileString ищет значения в реестре?

Я пытался получить принтер по умолчанию через VBA и я наткнулся на Windows API, GetProfileString функции: GetProfileString documentation

На одном сайте я нашел рабочий пример, который извлекает имя принтера:

связанный с сайтом, указывает, что в Windows Server 2003, Windows XP и Windows 2000 (и более поздних версиях я предполагаю, что документация, вероятно, не обновлена) значения, возвращаемые GetProfileString , могут быть взяты из реестра, если определенные условия выполнены. Я открыл редактор реестра и нашел правильный раздел — . \IniFileMapping\win.ini\Windows . К моему удивлению, нет ключа с именем device . Я перечитал документацию пару раз, но это не помогло. У меня нет соответствующего раздела в моем файле win.ini .

Может ли кто-нибудь объяснить, как именно эта функция работает? Похоже, что это может пригодиться во многих ситуациях, поэтому было бы неплохо знать, как правильно использовать его.

Создан 23 июн. 14 2014-06-23 10:58:23 Kapol

1 ответ

Эта функция является одной гигантской совместимостью в обратном направлении. Идея заключается в том, чтобы устаревший код продолжал работать, выбирая значения, которые были перенесены в реестр, когда Windows переместилась с 16-бит на 32-разрядную.

The documentation делает это довольно ясно:

Примечание Эта функция предусмотрена только для совместимости с 16-разрядными приложениями на базе Windows, поэтому эта функция не должна вызываться из серверного кода. Приложения должны хранить информацию об инициализации в реестре.

Сообщение ясно. Не используйте эту функцию.

Вы спрашиваете, как работает функция, когда она читается из реестра. Это подробно описано в статье documentation, и я не думаю, что можно многое сделать, пытаясь перефразировать эту документацию.

Было бы неплохо знать, как правильно его использовать.

Используйте эту функцию должным образом, никогда не называя ее!

Создан 23 июн. 14 2014-06-23 11:16:05 David Heffernan

GetProfileString

Description

Gets an initialization file entry. An initialization file assigns values to configuration variables, also known as entries, that are set when the system boots, the operating system comes up, or an application starts. An initialization file has the suffix INI; for example, boot.ini, Win32.ini.

Илон Маск рекомендует:  Что такое код asp hits

Returns

An entry in an initialization file, as a string. If there is no value, returns an empty string.

History

ColdFusion 11: Added the encoding attribute.

Category

Function syntax

GetProfileString(iniPath, section, entry, [encoding])

ВИДЕОКУРС
выпущен 4 ноября!

Справочник можно смотреть от 1 до 50 справок на одну страницу, для этого в URL страницы вы можете править параметр &ln= на то число, которое вам удобнее, а также параметр ?pg= позволяет указать номер первой справки для вывода.

Всего на данный момент представлено 733 функций и сообщений WinAPI в справочнике

Если вы хотите прочитать «всё сразу», то пользуйтесь списком страниц по 50 справок по функциям WinAPI на каждой:

Ниже приведен полный список функций и сообщений WinAPI, подробности по которым вы можете узнать.

GetProfileString

WinApi Функция GetProfileString

Описание:
function GetProfileString(AppName, KeyName, Default, ReturnedString: PChar; Size: Integer): Integer;

Считывает из файла WIN.INI стpоковое значение клавиши.

Паpаметpы:
AppName: Имя заголовка пpикладной задачи.
KeyName: Имя искомой клавиши или nil для получения всех имен клавиш, связанных с AppName.
Default: Значение, пpинимаемое по умолчанию, если KeyName не найдено.
ReturnedString: Пpинимающий буфеp.

Size: Размеp буфеpа.

Возвpащаемое значение:
Фактическое число скопиpованных символов.

В конун праздника 8 марта хочется поздравить всех женщин, а особенно тех которые выбрали для себя такую интересную, но в тоже время не простую профессию программиста. С праздником дорогие дамы. По воле случая моя вторая половинка также высоко классный программист и тяга ко всем техническим новшествам у нас взаимная, так например подарив в прошлом году ей женский телефон был приятно удивлен самописному софту который плотно закрепился на нем.) и теперь используется и мною.

Материал взят из:
Русская спpавка по Windows API

MFC SetRegistryKey . Есть функция GetRegistryKey?

У меня есть эти две строки кода.

Нигде в приложении не я устанавливаю значение. (Инсталлятор делает это). Так в strHost, должна быть такой же, независимо от того, где и когда эта линия запускается.

Вот что у меня есть. Нажмите кнопку A — функция> прогон, который содержит код -> см ожидаемых данных; Нажмите B -> сделать некоторые окна обратных вызовов -> запустить функцию, которая содержит код -> см «»;

Я думаю, что что-то в B убирала значение, но если я нажимаю B сначала, а затем, А yeilds, что я хочу, а не «».

К сожалению, у меня нет доступа к коду, который содержит окно обратных вызовы, или, вернее, он должен быть самой большой кучей плохо управляемых obfiscation я когда-либо видел.

То, что я currious о том, если GetProfileString тянет данные где-то это не должно быть? Это единственное, что я могу думать.

Вопросов.
1.) Есть ли способ , чтобы подтвердить , что я до сих пор работаю с тем же «ключом»?
2.) Кто — нибудь когда — нибудь сталкивались с этим раньше?

Пожалуйста, если вы думаете, что это плохой вопрос, и хотите, чтобы пометить его как таковой, оставить комментарий, так что я могу это исправить.

Хотя я не нашел ответ полностью я выследить что — то интересное.
Я использую AfxGetApp () -> GetProfileString ..
Кажется , функция AfxGetApp () возвращает разные вещи в разное время .. Я не уверен , как это могло произойти, но , по крайней мере , теперь я могу объяснить.

GetProfileString () также может считывать из файла .ini, кроме реестра. Если вызов GetProfileString () делается на другом CWinApp производный объект, чем тот, в основном приложении (в библиотеке DLL, например), он может попытаться прочитать из INI-файла приложения. Попробуйте заходя в GetProfileString (), чтобы выяснить, что происходит.

Однако мой advcie: не используйте GetProfileString (). Используйте CRegKey непосредственно запросить реестр. Это, вероятно, не то, что вы хотите услышать, потому что это крупный, чтобы передать ключ реестра вокруг. То, что я обычно делаю #define глобальный APPLICATION_REG_KEY макрос в stdafx.h. Это расстраивает пуристов, но это очень удобно.

Я нашел ответ .. Вроде. Функция AfxGetApp возвращает разные объекты в зависимости от того, где она называется .. Если это называется в библиотеке DLL, например, она возвращает указатель на это. Я думаю, что это даже возвращает неправильные вещи, когда приложение использует вызовы операционной системы. Это означает, что GetProfileString для другого «профиля».

Я не нашел никого, кто бы с этим столкнулся, но я считаю этот вопрос решен. Вы можете добавить больше «ответы», если вы не ..

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL