powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Непонятки с REG_EXPAND_SZ (чтение-запись с использованием переменных %variable%)
12 сообщений из 12, страница 1 из 1
Непонятки с REG_EXPAND_SZ (чтение-запись с использованием переменных %variable%)
    #39650455
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например, есть параметр "Store Root" (REG_EXPAND_SZ)
в ветке
HKEY_CURRENT_USER\Software\Microsoft\Proga

Варианты значений, как они там записаны:

%USERPROFILE%\AppData\Local\Microsoft\Proga\
%USERPROFILE%\Desktop\Новая папка
%SystemDrive%\Новая папка

Читаю значение
В1 (через .Net ф-ции)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
  Public Function RegGetValue_Net(ByVal Key As RegistryKey, ByVal SubKey As String, _
   ByVal valueName As String, Optional ByVal defaultValue As String = vbNullString) As String
    '!!! REG_SZ либо REG_EXPAND_SZ 
    Try
      Dim reg_key As RegistryKey = Key.OpenSubKey(SubKey)
      If reg_key Is Nothing Then Return defaultValue
      Dim reg_value As Object = reg_key.GetValue(valueName)
      If reg_value Is Nothing Then Return defaultValue
      If reg_key.GetValueKind(valueName) = RegistryValueKind.String Or _
       reg_key.GetValueKind(valueName) = RegistryValueKind.ExpandString Then Return CType(reg_value, String)
      Return defaultValue
    Catch
      Return defaultValue
    End Try
  End Function


Код: vbnet
1.
2.
3.
4.
5.
RegGetValue_Net(Registry.CurrentUser, "Software\Microsoft\Proga", "Store Root", "")
'Возвращает (значение без переменных):
'C:\Users\Dmitry\AppData\Local\Microsoft\Proga\
'C:\Users\Dmitry\Desktop\Новая папка
'C:\Новая папка


В2 (через API)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
  Public Function GetRegValue(ByVal hKey As IntPtr, ByVal lpszSubKey As String, _
   ByVal szKey As String, ByVal szDefault As String, _
   Optional ByVal reg64 As Boolean = False, Optional ByVal reg32 As Boolean = False) As String
    'reg64=true -> force 64-bit key
    'reg64=false + reg32=true  -> force 32-bit key
    'reg64=false + reg32=false  -> default key
    On Error GoTo ErrorRoutineErr

    Dim phkResult As IntPtr
    Dim lResult As Integer
    Dim szBuffer As String
    Dim lBuffSize As Integer

    'Open the key
    If reg64 Then
      RegOpenKeyEx(hKey, lpszSubKey, 0, 1 Or KEY_WOW64_64KEY, phkResult) 'force 64-bit key
    ElseIf reg32 Then
      RegOpenKeyEx(hKey, lpszSubKey, 0, 1 Or KEY_WOW64_32KEY, phkResult) 'force 32-bit key
    Else
      RegOpenKeyEx(hKey, lpszSubKey, 0, 1, phkResult) 'default key
    End If

    'Query lBuffSize
    lResult = RegQueryValueEx(phkResult, szKey, 0, , , lBuffSize)
    'Debug.Print("lResult=" & lResult & ";lBuffSize=" & lBuffSize)
    If lResult = ERROR_SUCCESS Then
      'Create buffer
      szBuffer = Space(lBuffSize)
      'Query the value
      lResult = RegQueryValueEx(phkResult, szKey, 0, , szBuffer, lBuffSize)
      'Debug.Print "lResult=" & lResult & ";lBuffSize=" & lBuffSize

      'Close the key
      RegCloseKey(phkResult)

      'Return obtained value
      If lResult = ERROR_SUCCESS Then
        GetRegValue = Strings.Left(szBuffer, lBuffSize / 2 - 1) 'делим на 2, т.к. Юникод и размер буфера в байтах
      Else
        GetRegValue = szDefault
      End If
    Else
      'Close the key
      RegCloseKey(phkResult)
      GetRegValue = szDefault
    End If
    Exit Function

ErrorRoutineErr:
    GetRegValue = ""
  End Function


Код: vbnet
1.
2.
3.
4.
5.
GetRegValue(HKEY_CURRENT_USER, "Software\Microsoft\Proga", "Store Root", "", False, False)
'Возвращает (значение как есть, т.е. переменные остались):
'%USERPROFILE%\AppData\Local\Microsoft\Proga\
'%USERPROFILE%\Desktop\Новая папка
'%SystemDrive%\Новая папка



Записываю обратно(естественно без переменных в передаваемом значении):
В1 (через .Net ф-ции)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
  Public Function RegSetValueExpandSZ_Net(ByVal Key As RegistryKey, ByVal SubKey As String, _
   ByVal valueName As String, ByVal value As String) As Boolean
    Try
      Dim reg_key As RegistryKey = Key.CreateSubKey(SubKey)
      reg_key.SetValue(valueName, value, RegistryValueKind.ExpandString)
      Return True
    Catch
      Return False
    End Try
  End Function


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
    RegSetValueExpandSZ_Net(Registry.CurrentUser, "Software\Microsoft\Proga", "Store Root", "C:\Users\Dmitry\AppData\Local\Microsoft\Proga\")
'пишет C:\Users\Dmitry\AppData\Local\Microsoft\Proga\
    RegSetValueExpandSZ_Net(Registry.CurrentUser, "Software\Microsoft\Proga", "Store Root", "C:\Users\Dmitry\Desktop\Новая папка")
'пишет C:\Users\Dmitry\Desktop\Новая папка
    RegSetValueExpandSZ_Net(Registry.CurrentUser, "Software\Microsoft\Proga", "Store Root", "C:\Новая папка")
'пишет C:\Новая папка
'!!!Т.е. никаких преобразований к %variable% не делает


В2 (через API)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
  Public Function SetRegValueExpandSZ(ByVal hKey As IntPtr, ByVal lpszSubKey As String, _
   ByVal sSetValue As String, _
   ByVal sValue As String, _
   Optional ByVal reg64 As Boolean = False, Optional ByVal reg32 As Boolean = False) As Boolean

    On Error GoTo ErrorRoutineErr

    Dim phkResult As IntPtr
    Dim lResult As Integer
    Dim SA As SECURITY_ATTRIBUTES
    Dim Create As Integer

    'Note: This function will create the key or
    'value if it doesn't exist.
    'Open or Create the key
    If reg64 Then
      RegCreateKeyEx(hKey, lpszSubKey, 0, vbNullString, _
       REG_OPTION_NON_VOLATILE, _
       KEY_ALL_ACCESS Or KEY_WOW64_64KEY, SA, phkResult, Create)
    ElseIf reg32 Then
      RegCreateKeyEx(hKey, lpszSubKey, 0, vbNullString, _
       REG_OPTION_NON_VOLATILE, _
       KEY_ALL_ACCESS Or KEY_WOW64_32KEY, SA, phkResult, Create)
    Else
      RegCreateKeyEx(hKey, lpszSubKey, 0, vbNullString, _
       REG_OPTION_NON_VOLATILE, _
       KEY_ALL_ACCESS, SA, phkResult, Create)
    End If

    lResult = RegSetValueEx(phkResult, sSetValue, 0, _
     REG_EXPAND_SZ, sValue, _
     (sValue.Length + 1) * 2)

    'Close the key
    RegCloseKey(phkResult)

    'Return SetRegValue Result
    SetRegValueExpandSZ = (lResult = ERROR_SUCCESS)
    Exit Function

ErrorRoutineErr:
    SetRegValueExpandSZ = False
  End Function


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
    SetRegValueExpandSZ(HKEY_CURRENT_USER, "Software\Microsoft\Proga", "Store Root", "C:\Users\Dmitry\AppData\Local\Microsoft\Proga\")
'пишет C:\Users\Dmitry\AppData\Local\Microsoft\Proga\
   SetRegValueExpandSZ(HKEY_CURRENT_USER, "Software\Microsoft\Proga", "Store Root", "C:\Users\Dmitry\Desktop\Новая папка")
'пишет C:\Users\Dmitry\Desktop\Новая папка
   SetRegValueExpandSZ(HKEY_CURRENT_USER, "Software\Microsoft\Proga", "Store Root", "C:\Новая папка")
'пишет C:\Новая папка
'!!!Т.е. никаких преобразований к %variable% не делает



Что имеем в сухом остатке:
1) При чтении через "Net" %variable%->истинный путь
При чтении через "API" %variable%->%variable%
2) При записи через "Net" истинный путь->истинный путь
При записи через "API" истинный путь->истинный путь

Что бы в идеале хотелось:
1) При чтении %variable%->истинный путь
2) При записи истинный путь->%variable%
Иными словами
1) прочел значение переменной, вывел путь в текстовое поле
2) выбрал путь в текстовом поле (понятно, без %variable%), записал путь в реестр (надо б с применением %variable%)

(1) вроде как решается через "Net" (в данном случае устраивает, т.к. для HKEY_CURRENT_USER разделения 32/64 бит веток нет и связанных с этим проблем не предвидится)
(2) не решается пока

Где собака порылась?
Как эту автоматику преобразования вызывать (особенно при "записи")? М.б. какие ф-ции есть? В .Net? В API?
...
Рейтинг: 0 / 0
Непонятки с REG_EXPAND_SZ (чтение-запись с использованием переменных %variable%)
    #39650474
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот разбираюсь...
Дмитрий771) При чтении через "Net" %variable%->истинный путь
Это потому что делаю
Код: vbnet
1.
reg_key.GetValue(valueName)

а если
Код: vbnet
1.
reg_key.GetValue(valueName, defaultValue, RegistryValueOptions.DoNotExpandEnvironmentNames)


то %variable% останется
Дмитрий77При чтении через "API" %variable%->%variable%
Чтоб в API варианте делало %variable%->истинный путь, надо судя по докам применить ExpandEnvironmentStrings function
Дмитрий77хотелось
2) При записи истинный путь->%variable%

Через .Net что-то не вижу решения
Но через API вроде как есть:
PathUnExpandEnvStrings function
Надо пробовать.
В .Net нет аналога ейного?
...
Рейтинг: 0 / 0
Непонятки с REG_EXPAND_SZ (чтение-запись с использованием переменных %variable%)
    #39650477
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Чтоб в API варианте делало %variable%->истинный путь, надо судя по докам применить ExpandEnvironmentStrings function
Ну OK,
Метод Environment.ExpandEnvironmentVariables

Дмитрий77Но через API вроде как есть:
PathUnExpandEnvStrings function
Надо пробовать.
В .Net нет аналога ейного?
Где?
...
Рейтинг: 0 / 0
Непонятки с REG_EXPAND_SZ (чтение-запись с использованием переменных %variable%)
    #39650487
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77хотелось
2) При записи истинный путь->%variable%

Это примерно как, пусть мысли читает, а ещё носки стирает и кофе варит.

Такие запросы обсмеют на любом форуме, даже самом толерантном и дружелюбном, а не то, что здесь на злом, жестоком и беспощадном :)

В общем, проще говоря. Даже если ты хочешь подобного, и оно реализуемое через предположения, что оно тебе надо, это неправильно, и так нигде и никогда не будет.
...
Рейтинг: 0 / 0
Непонятки с REG_EXPAND_SZ (чтение-запись с использованием переменных %variable%)
    #39650489
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кидайте в меня тапками, но некоторые запросы выглядят из разряда гипер-творческого, как у того художника, который задумался, а не прибить ли мне свои яйца к мостовой.
...
Рейтинг: 0 / 0
Непонятки с REG_EXPAND_SZ (чтение-запись с использованием переменных %variable%)
    #39650502
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
Злой ты, и тапки на тебя тратить жалко.

Дмитрий772) истинный путь->%variable%
Задача решена:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
  Public Declare Unicode Function PathUnExpandEnvStrings Lib "Shlwapi.dll" Alias "PathUnExpandEnvStringsW" _
  (ByVal pszPath As String, ByVal pszBuf As String, ByVal cchBuf As Integer) As Boolean

  Public Function PathWithEnvStrings(ByVal strPath As String) As String
    Dim strEnvPath As String = StrDup(MAX_PATH, " ")
    If PathUnExpandEnvStrings(strPath, strEnvPath, Strings.Len(strEnvPath)) Then
      If InStr(strEnvPath, Chr(0)) > 0 Then _
       strEnvPath = Strings.Left(strEnvPath, InStr(strEnvPath, Chr(0)) - 1)
      Return strEnvPath
    Else 'ну не получилось, что вряд ли
      Return strPath
    End If
  End Function



Обратно,
%variable%->истинный путь
либо Environment.ExpandEnvironmentVariables
но можно и через API:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
  Public Declare Unicode Function ExpandEnvironmentStrings Lib "Kernel32.dll" Alias "ExpandEnvironmentStringsW" _
  (ByVal lpSrc As String, ByVal lpDst As String, ByVal nSize As Integer) As Integer

  Public Function PathNoEnvStrings(ByVal strEnvPath As String) As String
    Dim strPath As String
    Dim iPathLen As Integer
    strPath = StrDup(MAX_PATH, " ")
    iPathLen = ExpandEnvironmentStrings(strEnvPath, strPath, Strings.Len(strPath))
    If iPathLen = 0 Then
      Return strEnvPath 'ну не получилось, что вряд ли
    Else
      If InStr(strPath, Chr(0)) > 0 Then strPath = Strings.Left(strPath, InStr(strPath, Chr(0)) - 1)
      Return strPath
    End If
  End Function
...
Рейтинг: 0 / 0
Непонятки с REG_EXPAND_SZ (чтение-запись с использованием переменных %variable%)
    #39650505
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77hVostt,
Злой ты, и тапки на тебя тратить жалко.

Я не злой, есть Environment.GetEnvironmentVariables , получаешь переменные окружения и крутишь/вертишь как хочешь.

Не обязательно для каждого чиха надо маршалить винапи. Да и вообще..

2) выбрал путь в текстовом поле (понятно, без %variable%), записал путь в реестр (надо б с применением %variable%)

Если надо, чтобы в конкретном случае сохранилось именно то значение, которое введено, без замены? Эти подстановки автоматом -- костыли. Ну и не работает твоя функция через импесонализацию в сервисе.

А я просто разбавил твой диалог самим с собой
...
Рейтинг: 0 / 0
Непонятки с REG_EXPAND_SZ (чтение-запись с использованием переменных %variable%)
    #39650508
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЭти подстановки автоматом -- костыли.
Так делает WinMail, сохраняя путь к БД текущего пользователя в параметре
"Store Root" (REG_EXPAND_SZ) в ветке HKEY_CURRENT_USER\Software\Microsoft\Windows Mail
Он всегда подставляет . Дефолтный путь пишется как %USERPROFILE%\AppData\Local\Microsoft\Windows Mail\
Любой другой путь, кот. штатно меняется через Сервис->Параметры->Дополнительно->Обслуживание->Хранилище сообщений всегда пишется также с подстановкой . Проблема штатной процедуры, что она копирует базу в новое расположение (причем иногда, особенно при отсутствии навыков, делает это глючно и может БД вообще запороть).
Но бывает, просто надо указать путь к БД.
В утилитке, кот. я пишу (в плоскости вопроса кот. задал), пользователь должен просто указать путь к уже имеющейся (другой) БД.
И записать этот параметр в указанное место реестра. Чтобы WinMail (при след. запуске) обратился к этому новому месту.
Костыли ли это или не костыли, но я не вижу никаких оснований делать по-другому т.е. ПО СВОЕМУ, т.е. без указанных подстановок, хотя без подстановок работать конечно будет.
hVosttНу и не работает твоя функция через импесонализацию в сервисе.
Какая нафик импе[р]сонализация в сервисе. WinMail -классическое пользовательское приложение, запускаемое под текущим юзером.

hVosttА я просто разбавил твой диалог самим с собой
Ну и как это помогло решению задачи?
Вот правда, тапок на тебя жалко, сгрызешь ведь[тапки, примечание ред].
...
Рейтинг: 0 / 0
Непонятки с REG_EXPAND_SZ (чтение-запись с использованием переменных %variable%)
    #39650509
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Так делает WinMail, сохраняя путь к БД текущего пользователя в параметре
"Store Root" (REG_EXPAND_SZ) в ветке HKEY_CURRENT_USER\Software\Microsoft\Windows Mail
Он всегда подставляет . Дефолтный путь пишется как %USERPROFILE%\AppData\Local\Microsoft\Windows Mail\
Любой другой путь, кот. штатно меняется через Сервис->Параметры->Дополнительно->Обслуживание->Хранилище сообщений всегда пишется также с подстановкой . Проблема штатной процедуры, что она копирует базу в новое расположение (причем иногда, особенно при отсутствии навыков, делает это глючно и может БД вообще запороть).

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

C:\Program Files\Blablaba

«умная программа» от особо умного «разработчика» превратилась в %ProgramFiles%\Blablabla, потому что если мне надо %ProgramFiles%, я именно так и запишу. Или программа должна предложить подстановку, от которой я должен иметь возможность отказаться.

Дмитрий77Ну и как это помогло решению задачи?
Вот правда, тапок на тебя жалко, сгрызешь ведь[тапки, примечание ред].

Судя по твоим первым сообщениям, ты уже додумался, что есть такой класс в .NET, как Environment , в котором легко обнаруживается метод GetEnvironmentVariables , а дальше дальше справится даже ребёнок

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
        public static string UnExpandPath(string source)
        {
            if (string.IsNullOrEmpty(source)) return source;
            var environments = Environment.GetEnvironmentVariables();
            foreach (DictionaryEntry dictionaryEntry in environments)
            {
                var envKey = (string)dictionaryEntry.Key;
                var envValue = (string)dictionaryEntry.Value;
                if (source.StartsWith(envValue, StringComparison.CurrentCultureIgnoreCase))
                    return "%" + envKey + "%" + source.Substring(envValue.Length);
            }
            return source;
        }



У меня слов нет.
...
Рейтинг: 0 / 0
Непонятки с REG_EXPAND_SZ (чтение-запись с использованием переменных %variable%)
    #39650510
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЯ бы очень не хотел, чтобы мой путь, записанный вот так:
C:\Program Files\Blablaba
«умная программа» от особо умного «разработчика» превратилась в %ProgramFiles%\Blablabla, потому что если мне надо %ProgramFiles%, я именно так и запишу.
Ну, в данном случае глупая программа "Windows Mail (formerly Outlook Express)", написанная 20-30 лет конечно же тупыми бородатыми индусскими гавнокодерами от Microsoft (куда им дуракам до им песо нализации) пишет таки
%USERPROFILE%\AppData\Local\Microsoft\Windows Mail\
и если не делать подстановки,
то это может легко превратиться в
C:\Users\Иван Петрович Робинович\AppData\Local\Microsoft\Windows Mail\
что почему-то не видится мне в данном случае правильным.

hVosttСудя по твоим первым сообщениям, ты уже додумался, что есть такой класс в .NET, как Environment , в котором легко обнаруживается метод GetEnvironmentVariables , а дальше дальше справится даже ребёнок

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
        public static string UnExpandPath(string source)
        {
            if (string.IsNullOrEmpty(source)) return source;
            var environments = Environment.GetEnvironmentVariables();
            foreach (DictionaryEntry dictionaryEntry in environments)
            {
                var envKey = (string)dictionaryEntry.Key;
                var envValue = (string)dictionaryEntry.Value;
                if (source.StartsWith(envValue, StringComparison.CurrentCultureIgnoreCase))
                    return "%" + envKey + "%" + source.Substring(envValue.Length);
            }
            return source;
        }



У меня слов нет.
Ну, шо тебе на это сказать.
Что касается обратного
Код: c#
1.
2.
3.
public static string ExpandEnvironmentVariables(
	string name
)

-здесь у меня к .Net-у претензий нет,

а вот что касается кода "от ребенка", типа того что ты привел, велика вероятность что что-то будет не учтено (какой-нибудь регистр, case, source.StartsWith -а если первая кавычка?-а таких НО в подобных кодах куча), даже неважно насколько у тебя рука набита на подобные коды, и в итоге получим расхождение с оригиналом (хорошо если не критическое).
Посему мой код рискну предположить таки "ближе к телу".
MS-исходников у меня конечно нету, но приложенный скрин как бы косвенно доказывает верность мысли:
...
Рейтинг: 0 / 0
Непонятки с REG_EXPAND_SZ (чтение-запись с использованием переменных %variable%)
    #39650680
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77а вот что касается кода "от ребенка", типа того что ты привел, велика вероятность что что-то будет не учтено (какой-нибудь регистр, case, source.StartsWith -а если первая кавычка?-а таких НО в подобных кодах куча), даже неважно насколько у тебя рука набита на подобные коды, и в итоге получим расхождение с оригиналом (хорошо если не критическое).

Суть в том, что вы имея на руках инструмент, класс Enviroment в котором есть метод получения коллекции всех переменных окружения, просто в упор не видите решения и лезете в винапи со словами, «нуу.. в .NET такого нет...».

Получается, что если какой-то функции в .NET и в WinAPI нет, значит всё, приплыли?
...
Рейтинг: 0 / 0
Непонятки с REG_EXPAND_SZ (чтение-запись с использованием переменных %variable%)
    #39650683
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Ну, в данном случае глупая программа "Windows Mail (formerly Outlook Express)", написанная 20-30 лет конечно же тупыми бородатыми индусскими гавнокодерами от Microsoft (куда им дуракам до им песо нализации) пишет таки
%USERPROFILE%\AppData\Local\Microsoft\Windows Mail\
и если не делать подстановки,
то это может легко превратиться в
C:\Users\Иван Петрович Робинович\AppData\Local\Microsoft\Windows Mail\
что почему-то не видится мне в данном случае правильным.

Вы меня не поняли. Ну лан.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Непонятки с REG_EXPAND_SZ (чтение-запись с использованием переменных %variable%)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]