BOOL DoLoadItems(void) { ITEMVECTOR Items; HKEY hKey = NULL; RegOpenKeyExW(HKEY_LOCAL_MACHINE, g_pszKey, 0, KEY_READ, &hKey); if (hKey == NULL) return FALSE; WCHAR szName[MAX_STRING], szValue[MAX_STRING]; DWORD cbName, cbValue; for (DWORD dwIndex = 0; ; ++dwIndex) { cbName = sizeof(szName); cbValue = sizeof(szValue); LONG Error = RegEnumValueW(hKey, dwIndex, szName, &cbName, NULL, NULL, (LPBYTE)szValue, &cbValue); if (Error != ERROR_SUCCESS) break; BYTE CharSet1 = DEFAULT_CHARSET, CharSet2 = DEFAULT_CHARSET; LPWSTR pch; pch = wcsrchr(szName, L','); if (pch) { *pch = 0; CharSet1 = (BYTE)_wtoi(pch + 1); } pch = wcsrchr(szValue, L','); if (pch) { *pch = 0; CharSet2 = (BYTE)_wtoi(pch + 1); } ITEM Item(szName, szValue, CharSet1, CharSet2); trim(Item.m_Name); trim(Item.m_Substitute); Items.push_back(Item); } RegCloseKey(hKey); g_Items = Items; LV_AddItems(g_hListView); DoSort(0, TRUE); g_bModified = FALSE; g_bNeedsReboot = FALSE; return !g_Items.empty(); }
BOOL DoParseFile(LPVOID pvContents, DWORD dwSize) { ITEMVECTOR Items; LPWSTR pch, pchSep, pchStart = (LPWSTR)pvContents; pchStart[dwSize / sizeof(WCHAR)] = UNICODE_NULL; // check header const DWORD cbHeader = lstrlenW(g_pszFileHeader) * sizeof(WCHAR); if (memcmp(pchStart, g_pszFileHeader, cbHeader) != 0) return FALSE; pchStart += cbHeader / sizeof(WCHAR); // find the key WCHAR szKey[MAX_STRING]; wsprintfW(szKey, L"[HKEY_LOCAL_MACHINE\\%s]", g_pszKey); pch = wcsstr(pchStart, szKey); if (pch == NULL) return FALSE; pchStart = pch + lstrlenW(szKey); for (;;) { pchStart = SkipSpace(pchStart); if (*pchStart == UNICODE_NULL || *pchStart == L'[') break; pch = wcschr(pchStart, L'\n'); if (pch) *pch = UNICODE_NULL; pchSep = SkipQuoted(pchStart); if (*pchSep == L'=') { *pchSep = UNICODE_NULL; STRING key = pchStart; trim(key); key = Unquote(key); STRING value = pchSep + 1; trim(value); value = Unquote(value); BYTE CharSet1 = DEFAULT_CHARSET, CharSet2 = DEFAULT_CHARSET; size_t pos; pos = key.find(L','); if (pos != STRING::npos) { CharSet1 = (BYTE)_wtoi(&key[pos + 1]); key.resize(pos); trim(key); } pos = value.find(L','); if (pos != STRING::npos) { CharSet2 = (BYTE)_wtoi(&value[pos + 1]); value.resize(pos); trim(value); } ITEM Item(key, value, CharSet1, CharSet2); Items.push_back(Item); } if (pch == NULL) break; pchStart = pch + 1; } g_Items = Items; g_bModified = TRUE; LV_AddItems(g_hListView); return TRUE; }
void AddDlg_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) { WCHAR szKey[MAX_STRING], szValue[MAX_STRING], sz[MAX_STRING]; INT i, iCharSet1, iCharSet2; BYTE CharSet1, CharSet2; STRING key, value; switch (id) { case IDOK: GetDlgItemTextW(hwnd, cmb1, szKey, _countof(szKey)); key = szKey; trim(key); LoadStringW(g_hInstance, IDS_ENTERNAME, sz, _countof(sz)); if (key.empty() || key == sz) { SendDlgItemMessageW(hwnd, cmb1, CB_SETEDITSEL, 0, MAKELPARAM(0, -1)); SetFocus(GetDlgItem(hwnd, cmb1)); LoadStringW(g_hInstance, IDS_ENTERNAME2, sz, _countof(sz)); MessageBoxW(hwnd, sz, NULL, MB_ICONERROR); return; } GetDlgItemTextW(hwnd, cmb2, szValue, _countof(szValue)); value = szValue; trim(value); if (value.empty()) { SendDlgItemMessageW(hwnd, cmb2, CB_SETEDITSEL, 0, MAKELPARAM(0, -1)); SetFocus(GetDlgItem(hwnd, cmb2)); LoadStringW(g_hInstance, IDS_ENTERNAME2, sz, _countof(sz)); MessageBoxW(hwnd, sz, NULL, MB_ICONERROR); return; } iCharSet1 = SendDlgItemMessageW(hwnd, cmb3, CB_GETCURSEL, 0, 0); if (iCharSet1 == CB_ERR) iCharSet1 = 0; iCharSet2 = SendDlgItemMessageW(hwnd, cmb4, CB_GETCURSEL, 0, 0); if (iCharSet2 == CB_ERR) iCharSet2 = 0; CharSet1 = g_CharSetList[iCharSet1].CharSet; CharSet2 = g_CharSetList[iCharSet2].CharSet; for (i = 0; i < (INT)g_Items.size(); ++i) { if (g_Items[i].m_Name == key && g_Items[i].m_CharSet1 == CharSet1) { WCHAR sz[MAX_STRING]; SendDlgItemMessageW(hwnd, cmb1, CB_SETEDITSEL, 0, MAKELPARAM(0, -1)); SetFocus(GetDlgItem(hwnd, cmb1)); LoadStringW(g_hInstance, IDS_ALREADYEXISTS, sz, _countof(sz)); MessageBoxW(hwnd, sz, NULL, MB_ICONERROR); return; } } { ITEM Item(key, value, CharSet1, CharSet2); g_Items.push_back(Item); g_bModified = TRUE; i = (INT)g_Items.size(); LV_ITEM LvItem; ZeroMemory(&LvItem, sizeof(LvItem)); LvItem.mask = LVIF_PARAM; LvItem.iItem = i; LvItem.lParam = i; LvItem.iSubItem = 0; ListView_InsertItem(g_hListView, &LvItem); LvItem.iSubItem = 1; ListView_InsertItem(g_hListView, &LvItem); } g_bModified = TRUE; EndDialog(hwnd, IDOK); break; case IDCANCEL: EndDialog(hwnd, IDCANCEL); break; } }