BOOL HCR_GetClassNameW(REFIID riid, LPWSTR szDest, DWORD len) { HKEY hkey; BOOL ret = FALSE; DWORD buflen = len; szDest[0] = 0; if (HCR_RegOpenClassIDKey(riid, &hkey)) { static const WCHAR wszLocalizedString[] = { 'L','o','c','a','l','i','z','e','d','S','t','r','i','n','g', 0 }; if (!RegLoadMUIStringW(hkey, wszLocalizedString, szDest, len, NULL, 0, NULL) || !RegQueryValueExW(hkey, swEmpty, 0, NULL, (LPBYTE)szDest, &len)) { ret = TRUE; } RegCloseKey(hkey); } if (!ret || !szDest[0]) { if(IsEqualIID(riid, &CLSID_ShellDesktop)) { if (LoadStringW(shell32_hInstance, IDS_DESKTOP, szDest, buflen)) ret = TRUE; } else if (IsEqualIID(riid, &CLSID_MyComputer)) { if(LoadStringW(shell32_hInstance, IDS_MYCOMPUTER, szDest, buflen)) ret = TRUE; } } TRACE("-- %s\n", debugstr_w(szDest)); return ret; }
BOOL HCR_GetClassNameW(REFIID riid, LPWSTR szDest, DWORD len) { HKEY hkey; BOOL ret = FALSE; DWORD buflen = len; #ifdef __REACTOS__ WCHAR szName[100]; LPOLESTR pStr; #endif szDest[0] = 0; #ifdef __REACTOS__ if (StringFromCLSID(riid, &pStr) == S_OK) { DWORD dwLen = buflen * sizeof(WCHAR); swprintf(szName, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\CLSID\\%s", pStr); if (!RegGetValueW(HKEY_CURRENT_USER, szName, NULL, RRF_RT_REG_SZ, NULL, (PVOID)szDest, &dwLen)) { ret = TRUE; } CoTaskMemFree(pStr); } if (!ret && HCR_RegOpenClassIDKey(riid, &hkey)) #else if (HCR_RegOpenClassIDKey(riid, &hkey)) #endif { static const WCHAR wszLocalizedString[] = { 'L','o','c','a','l','i','z','e','d','S','t','r','i','n','g', 0 }; if (!RegLoadMUIStringW(hkey, wszLocalizedString, szDest, len, NULL, 0, NULL) || !RegQueryValueExW(hkey, swEmpty, 0, NULL, (LPBYTE)szDest, &len)) { ret = TRUE; } RegCloseKey(hkey); } if (!ret || !szDest[0]) { if(IsEqualIID(riid, &CLSID_ShellDesktop)) { if (LoadStringW(shell32_hInstance, IDS_DESKTOP, szDest, buflen)) ret = TRUE; } else if (IsEqualIID(riid, &CLSID_MyComputer)) { if(LoadStringW(shell32_hInstance, IDS_MYCOMPUTER, szDest, buflen)) ret = TRUE; } #ifdef __REACTOS__ else if (IsEqualIID(riid, &CLSID_MyDocuments)) { if(LoadStringW(shell32_hInstance, IDS_PERSONAL, szDest, buflen)) ret = TRUE; } else if (IsEqualIID(riid, &CLSID_RecycleBin)) { if(LoadStringW(shell32_hInstance, IDS_RECYCLEBIN_FOLDER_NAME, szDest, buflen)) ret = TRUE; } else if (IsEqualIID(riid, &CLSID_ControlPanel)) { if(LoadStringW(shell32_hInstance, IDS_CONTROLPANEL, szDest, buflen)) ret = TRUE; } else if (IsEqualIID(riid, &CLSID_AdminFolderShortcut)) { if(LoadStringW(shell32_hInstance, IDS_ADMINISTRATIVETOOLS, szDest, buflen)) ret = TRUE; } #endif } TRACE("-- %s\n", debugstr_w(szDest)); return ret; }
static VOID InsertFileType(HWND hDlgCtrl, WCHAR * szName, PINT iItem, WCHAR * szFile) { PFOLDER_FILE_TYPE_ENTRY Entry; HKEY hKey; LVITEMW lvItem; DWORD dwSize; if (szName[0] != L'.') { /* FIXME handle URL protocol handlers */ return; } /* allocate file type entry */ Entry = (PFOLDER_FILE_TYPE_ENTRY)HeapAlloc(GetProcessHeap(), 0, sizeof(FOLDER_FILE_TYPE_ENTRY)); if (!Entry) return; /* open key */ if (RegOpenKeyExW(HKEY_CLASSES_ROOT, szName, 0, KEY_READ, &hKey) != ERROR_SUCCESS) { HeapFree(GetProcessHeap(), 0, Entry); return; } /* FIXME check for duplicates */ /* query for the default key */ dwSize = sizeof(Entry->ClassKey); if (RegQueryValueExW(hKey, NULL, NULL, NULL, (LPBYTE)Entry->ClassKey, &dwSize) != ERROR_SUCCESS) { /* no link available */ Entry->ClassKey[0] = 0; } if (Entry->ClassKey[0]) { HKEY hTemp; /* try open linked key */ if (RegOpenKeyExW(HKEY_CLASSES_ROOT, Entry->ClassKey, 0, KEY_READ, &hTemp) == ERROR_SUCCESS) { /* use linked key */ RegCloseKey(hKey); hKey = hTemp; } } /* read friendly type name */ if (RegLoadMUIStringW(hKey, L"FriendlyTypeName", Entry->FileDescription, sizeof(Entry->FileDescription), NULL, 0, NULL) != ERROR_SUCCESS) { /* read file description */ dwSize = sizeof(Entry->FileDescription); Entry->FileDescription[0] = 0; /* read default key */ RegQueryValueExW(hKey, NULL, NULL, NULL, (LPBYTE)Entry->FileDescription, &dwSize); } /* close key */ RegCloseKey(hKey); /* convert extension to upper case */ wcscpy(Entry->FileExtension, szName); _wcsupr(Entry->FileExtension); if (!Entry->FileDescription[0]) { /* construct default 'FileExtensionFile' */ wcscpy(Entry->FileDescription, &Entry->FileExtension[1]); wcscat(Entry->FileDescription, L" "); wcscat(Entry->FileDescription, szFile); } ZeroMemory(&lvItem, sizeof(LVITEMW)); lvItem.mask = LVIF_TEXT | LVIF_PARAM; lvItem.iSubItem = 0; lvItem.pszText = &Entry->FileExtension[1]; lvItem.iItem = *iItem; lvItem.lParam = (LPARAM)Entry; (void)SendMessageW(hDlgCtrl, LVM_INSERTITEMW, 0, (LPARAM)&lvItem); ZeroMemory(&lvItem, sizeof(LVITEMW)); lvItem.mask = LVIF_TEXT; lvItem.pszText = Entry->FileDescription; lvItem.iItem = *iItem; lvItem.iSubItem = 1; (void)SendMessageW(hDlgCtrl, LVM_SETITEMW, 0, (LPARAM)&lvItem); (*iItem)++; }