|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Using the Registry
The following example demonstrates the use of the RegQueryInfoKey, RegEnumKey, and RegEnumValue functions. The hKey parameter passed to each function is the handle of an open key. This key must be opened before the function call and closed afterward.
// QueryKey - enumerates the subkeys of a given key and the associated // values and then copies the information about the keys and values // into a pair of edit controls and list boxes. // hDlg - dialog box that contains the edit controls and list boxes // hKey - key whose subkeys and values are to be enumerated VOID QueryKey(HWND hDlg, HANDLE hKey) { CHAR achKey[MAX_PATH]; CHAR achClass[MAX_PATH] = ""; /* buffer for class name */
DWORD cchClassName = MAX_PATH; /* length of class string */ DWORD cSubKeys; /* number of subkeys */ DWORD cbMaxSubKey; /* longest subkey size */ DWORD cchMaxClass; /* longest class string */ DWORD cValues; /* number of values for key */ DWORD cchMaxValue; /* longest value name */ DWORD cbMaxValueData; /* longest value data */
DWORD cbSecurityDescriptor; /* size of security descriptor */ FILETIME ftLastWriteTime; /* last write time */ DWORD i, j; DWORD retCode, retValue; CHAR achValue[MAX_VALUE_NAME]; DWORD cchValue = MAX_VALUE_NAME; CHAR achBuff[80]; // Get the class name and the value count. RegQueryInfoKey(hKey, /* key handle */ achClass, /* buffer for class name */
&cchClassName, /* length of class string */ NULL, /* reserved */ &cSubKeys, /* number of subkeys */ &cbMaxSubKey, /* longest subkey size */ &cchMaxClass, /* longest class string */ &cValues, /* number of values for this key */ &cchMaxValue, /* longest value name */
&cbMaxValueData, /* longest value data */ &cbSecurityDescriptor, /* security descriptor */ &ftLastWriteTime); /* last write time */ SetDlgItemText(hDlg, IDE_CLASS, achClass); SetDlgItemInt(hDlg, IDE_CVALUES, cValues, FALSE); SendMessage(GetDlgItem(hDlg, IDL_LISTBOX), LB_ADDSTRING, 0, (LONG) ".."); // Enumerate the child keys, looping until RegEnumKey fails. Then
// get the name of each child key and copy it into the list box. SetCursor(LoadCursor(NULL, IDC_WAIT)); for (i = 0, retCode = ERROR_SUCCESS; retCode == ERROR_SUCCESS; i++) { retCode = RegEnumKey(hKey, i, achKey, MAX_PATH); if (retCode == (DWORD)ERROR_SUCCESS) SendMessage(GetDlgItem(hDlg, IDL_LISTBOX), LB_ADDSTRING, 0, (LONG) achKey); } SetCursor(LoadCursor (NULL, IDC_ARROW));
// Enumerate the key values. SetCursor(LoadCursor(NULL, IDC_WAIT)); if (cValues) for (j = 0, retValue = ERROR_SUCCESS; j < cValues; j++) { cchValue = MAX_VALUE_NAME; achValue[0] = '\0'; retValue = RegEnumValue(hKey, j, achValue, &cchValue, NULL, NULL, /* &dwType, */ NULL, /* &bData, */ NULL); /* &bcData */
if (retValue != (DWORD) ERROR_SUCCESS && retValue != ERROR_INSUFFICIENT_BUFFER) { wsprintf (achBuff, "Line:%d 0 based index = %d, retValue = %d, " "ValueLen = %d", __LINE__, j, retValue, cchValue); MessageBox (hDlg, achBuff, "Debug", MB_OK); } achBuff[0] = '\0'; // Add each value to a list box.
if (!lstrlen(achValue)) lstrcpy(achValue, ""); wsprintf(achBuff, "%d) %s ", j, achValue); SendMessage(GetDlgItem(hDlg,IDL_LISTBOX2), LB_ADDSTRING, 0, (LONG) achBuff); } SetCursor(LoadCursor(NULL, IDC_ARROW)); }
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Использование Регистрации
Следующий пример демонстрирует использование RegQueryInfoKey, RegEnumKey, и функций RegEnumValue. Параметр hKey пройденный в каждую функцию - ручка открытого ключа. Этот ключ должен быть открыт перед функциональным вызовом и закрытым впоследствии.
// QueryKey - ПЕРЕЧИСЛЯЕТ подключи данной клавиши и связанные // величины затем копирует информацию о клавишах и оценивает // в пару элементов управления редактирования и блоков списка. // hDlg - Диалоговый блок, что содержит элементы управления редактирования и блоков / списка/ hKey - клавиша, чьи подключи и величины должны быть перечислены ПУСТОТА QueryKey(HWND hDlg, HANDLE hKey) { СИМВОЛ achKey[MAX_PATH]; СИМВОЛ achClass[MAX_PATH] = ""; /* буфер для имени класса */
DWORD cchClassName = MAX_PATH; /* длина строки класса */ DWORD cSubKeys; /* количество подключей */ DWORD cbMaxSubKey; /* самый длинный размер подключа */ DWORD cchMaxClass; /* самая длинная строка класса */ DWORD cValues; /* количество величин для клавиши */ DWORD cchMaxValue; /* самое длинное имя величины */ DWORD cbMaxValueData; /* самые длинные данные величины */
cbSecurityDescriptor DWORD; /* размер дескриптора безопасности */ FILETIME ftLastWriteTime; /* последнее время записи */ DWORD Я, j; DWORD retCode, retValue; СИМВОЛ achValue[MAX_VALUE_NAME]; DWORD cchValue = MAX_VALUE_NAME; СИМВОЛ achBuff[80]; // Получите имя класса и счет величины. RegQueryInfoKey(hKey, /* КЛЮЧЕВАЯ ручка */ achClass, /* буфер для имени класса */
&cchClassName, /* ДЛИНА строки класса */ НЕДЕЙСТВИТЕЛЬНЫЙ, /* зарезервированное */ &cSubKeys, /* количество подключей */ &cbMaxSubKey, /* самый длинный размер подключа */ &cchMaxClass, /* самая длинная строка класса */ &cValues, /* количество величин для этой клавиши */ &cchMaxValue, /* самое длинное имя величины */
&cbMaxValueData, /* САМЫЕ длинные данные величины */ &cbSecurityDescriptor, /* дескриптор безопасности */ &ftLastWriteTime); /* последнее время записи */ SetDlgItemText(hDlg, IDE_CLASS, achClass); SetDlgItemInt(hDlg, IDE_CVALUES, cValues, ЛОЖЬ); SendMessage(GetDlgItem(hDlg, IDL_LISTBOX), LB_ADDSTRING, 0, (ДОЛГО (ДЛИНОЙ)) ".."); // Перечислите клавиши ребенка, зацикливающие пока RegEnumKey не потерпит неудачу. Затем
// получите имя каждой клавиши ребенка и копируйте это в блока списка. SetCursor(LoadCursor(НЕДЕЙСТВИТЕЛЬНЫЙ, IDC_WAIT)); для (i = 0, retCode = ERROR_SUCCESS; retCode == ERROR_SUCCESS; я++) { retCode = RegEnumKey(hKey, я, achKey, MAX_PATH); если (retCode == (DWORD)ERROR_SUCCESS) SendMessage(GetDlgItem(hDlg, IDL_LISTBOX), LB_ADDSTRING, 0, (ДОЛГО (ДЛИНОЙ)) achKey); } SetCursor(LoadCursor (НЕДЕЙСТВИТЕЛЬНЫЙ, IDC_ARROW));
// Перечислите ключевые величины. SetCursor(LoadCursor(НЕДЕЙСТВИТЕЛЬНЫЙ, IDC_WAIT)); если (cValues) для (j = 0, retValue = ERROR_SUCCESS; j < cValues; j++) { cchValue = MAX_VALUE_NAME; achValue[0] = '\0; retValue = RegEnumValue(hKey, j, achValue, &cchValue, НЕДЕЙСТВИТЕЛЬНОЕ, НЕДЕЙСТВИТЕЛЬНОЕ, /* &dwType, */ НЕДЕЙСТВИТЕЛЬНЫЙ, /* &bData, */ НЕДЕЙСТВИТЕЛЬНЫЙ); /* &bcData */
если (retValue != (DWORD) ERROR_SUCCESS && retValue!= ERROR_INSUFFICIENT_BUFFER) { wsprintf (achBuff, "Строка:%d 0 основанное индексировать = %d, retValue = %d, " "ValueLen = %d", __LINE__, j, retValue, cchValue); MessageBox (hDlg, achBuff, "ОТЛАДКА", MB_OK); } achBuff[0] = '\0; // Добавьте каждую величину к блоку списка.
если (!lstrlen(achValue)) lstrcpy(achValue, "<НИКАКОЕ ИМЯ>"); wsprintf(achBuff, "%d) %s ", j, achValue); SendMessage(GetDlgItem(hDlg,IDL_LISTBOX2), LB_ADDSTRING, 0, (ДОЛГО (ДЛИНОЙ)) achBuff); } SetCursor(LoadCursor(НЕДЕЙСТВИТЕЛЬНЫЙ, IDC_ARROW)); }
|
|
|
|
| |