Пример #1
0
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();
}
Пример #2
0
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;
}
Пример #3
0
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;
    }
}