13const GUID CLSID_CFontExt = { 0xbd84b380, 0x8ca2, 0x1069, { 0xab, 0x1d, 0x08, 0x00, 0x09, 0x48, 0xf5, 0x34 } };
54 static const char DesktopIniContents[] =
"[.ShellClassInfo]\r\n"
55 "CLSID={BD84B380-8CA2-1069-AB1D-08000948F534}\r\n"
56 "IconResource=%SystemRoot%\\system32\\shell32.dll,-39\r\n";
79 ERR(
"Unable to get attributes for fonts folder (%d)\n",
GetLastError());
105 for (
UINT i = 0;
i < cKeys; ++
i)
118 array[*cKeys] = hkey;
133 for (
UINT n = 0;
n < cidl; ++
n)
139 ERR(
"Out of memory\n");
157 ERR(
"CRegKey::Open failed\n");
163 if (
pData->bCanceled)
193 ERR(
"AddFontResourceW('%S') failed\n", pszFontPath);
205 for (
INT iTry = 0; iTry < 3; ++iTry)
222 szDestFile += pszFileTitle;
225 if (!
StrCmpIW(szDestFile, pszFontPath))
227 ERR(
"Wrongly same: %S\n", pszFontPath);
234 ERR(
"CopyFileW('%S', '%S') failed\n", pszFontPath, (
PCWSTR)szDestFile);
244 ERR(
"RegSetValueExW failed with %ld\n", nError);
268 LPWSTR pszBuffer = strFontName.GetBuffer(cbInfo /
sizeof(
WCHAR));
271 strFontName.ReleaseBuffer();
274 ERR(
"GetFontResourceInfoW failed (err: %u)\n",
dwErr);
282 strFontName +=
L" (TrueType)";
311 FORMATETC etc = {
CF_HDROP,
NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
315 HDROP hDrop =
reinterpret_cast<HDROP
>(stg.hGlobal);
326 if (
pData->bCanceled)
330 pData->pDataObj->Release();
346 WARN(
"!SHCreateThread\n");
347 pData->pDataObj->Release();
394 ERR(
"!CheckDataObject\n");
398 CDataObjectHIDA cida(pDataObj);
399 if (!cida || cida->cidl <= 0)
401 ERR(
"E_UNEXPECTED\n");
408 ERR(
"pidlParent is NULL\n");
413 for (
UINT n = 0;
n < cida->cidl; ++
n)
418 ERR(
"!pidlRelative\n");
421 apidl.
Add(pidlRelative);
426 data.pDataObj = pDataObj;
427 data.pidlParent = pidlParent;
428 data.apidl = &apidl[0];
429 data.cSteps = cida->cidl;
PRTL_UNICODE_STRING_BUFFER Path
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
#define RegCloseKey(hKey)
EXTERN_C void WINAPI SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2)
size_t Add(INARGTYPE element)
HRESULT DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
HRESULT DllUnregisterServer(BOOL bUnRegTypeLib=TRUE)
HRESULT Init(_ATL_OBJMAP_ENTRY *p, HINSTANCE, const GUID *plibid)
HRESULT DllCanUnloadNow()
HRESULT DllRegisterServer(BOOL bRegTypeLib=TRUE)
LONG Open(HKEY hKeyParent, LPCTSTR lpszKeyName, REGSAM samDesired=KEY_READ|KEY_WRITE) noexcept
const CStringW & FontPath() const
void Init(_ATL_OBJMAP_ENTRY *p, HINSTANCE h, const GUID *plibid)
static LSTATUS(WINAPI *pRegDeleteTreeW)(HKEY
struct tagINSTALL_FONT_DATA * PINSTALL_FONT_DATA
BOOL IsFontDotExt(LPCWSTR pchDotExt)
#define IDC_INSTALL_PROGRESS
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
LONG WINAPI RegDeleteValueW(HKEY hKey, LPCWSTR lpValueName)
#define DLL_PROCESS_ATTACH
#define DLL_PROCESS_DETACH
#define INVALID_HANDLE_VALUE
BOOL WINAPI CopyFileW(IN LPCWSTR lpExistingFileName, IN LPCWSTR lpNewFileName, IN BOOL bFailIfExists)
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
BOOL WINAPI SetFileAttributesW(LPCWSTR lpFileName, DWORD dwFileAttributes)
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
LPWSTR WINAPI PathFindExtensionW(const WCHAR *path)
int WINAPI StrCmpIW(const WCHAR *str, const WCHAR *comp)
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
_ACRTIMP size_t __cdecl strlen(const char *)
void WINAPI ReleaseStgMedium(STGMEDIUM *pmedium)
UINT WINAPI DragQueryFileW(HDROP hDrop, UINT lFile, LPWSTR lpszwFile, UINT lLength)
HRESULT WINAPI SHGetFolderPathW(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath)
BOOL WINAPI PathIsDirectoryW(LPCWSTR lpszPath)
BOOL WINAPI SHCreateThread(LPTHREAD_START_ROUTINE pfnThreadProc, VOID *pData, DWORD dwFlags, LPTHREAD_START_ROUTINE pfnCallback)
#define FAILED_UNEXPECTEDLY
EXTERN_C BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
STDAPI DllRegisterServer()
const GUID CLSID_CFontExt
STDAPI DllUnregisterServer()
HRESULT InstallFontsFromDataObject(HWND hwndView, IDataObject *pDataObj)
static INT_PTR CALLBACK InstallDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, PINSTALL_FONT_DATA pData)
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
HRESULT InstallFontFiles(_Inout_ PINSTALL_FONT_DATA pData)
LSTATUS AddClassKeyToArray(const WCHAR *szClass, HKEY *array, UINT *cKeys)
void CloseRegKeyArray(HKEY *array, UINT cKeys)
BOOL CheckDropFontFiles(HDROP hDrop)
static DWORD WINAPI InstallThreadProc(LPVOID lpParameter)
BOOL CheckDataObject(IDataObject *pDataObj)
HRESULT DoGetFontTitle(_In_ LPCWSTR pszFontPath, _Out_ CStringW &strFontName)
HRESULT DoInstallFontFile(_In_ PCWSTR pszFontPath, _In_ PCWSTR pszFontsDir, _In_ HKEY hkeyFonts)
static INT_PTR CALLBACK InstallDialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
BOOL WINAPI GetFontResourceInfoW(LPCWSTR lpFileName, DWORD *pdwBufSize, void *lpBuffer, DWORD dwType)
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLfloat GLfloat GLfloat GLfloat h
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
HRESULT GetData([in, unique] FORMATETC *pformatetcIn, [out] STGMEDIUM *pmedium)
#define OBJECT_ENTRY(clsid, class)
#define BEGIN_OBJECT_MAP(x)
#define FILE_ATTRIBUTE_HIDDEN
#define FILE_ATTRIBUTE_SYSTEM
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
_In_opt_ _In_opt_ _In_ _In_ DWORD cbData
static PCUIDLIST_RELATIVE HIDA_GetPIDLItem(CIDA const *pida, SIZE_T i)
static PCUIDLIST_ABSOLUTE HIDA_GetPIDLFolder(CIDA const *pida)
const ITEMIDLIST_ABSOLUTE UNALIGNED * PCUIDLIST_ABSOLUTE
const PCUITEMID_CHILD * PCUITEMID_CHILD_ARRAY
const ITEMIDLIST_RELATIVE UNALIGNED * PCUIDLIST_RELATIVE
TW_UINT32 TW_UINT16 TW_UINT16 TW_MEMREF pData
#define INVALID_FILE_ATTRIBUTES
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesWritten
BOOL WINAPI RemoveFontResourceExW(_In_ LPCWSTR lpFileName, _In_ DWORD fl, _In_opt_ PVOID pdv)
DWORD WINAPI GetLastError(void)
static HRESULT HRESULT_FROM_WIN32(unsigned int x)
int WINAPI AddFontResourceW(_In_ LPCWSTR pszFilename)
BOOL WINAPI RemoveFontResourceW(_In_ LPCWSTR)
_In_ DWORD _In_ int _In_ int _In_opt_ LPNLSVERSIONINFO _In_opt_ LPVOID lpReserved
#define HKEY_CLASSES_ROOT
#define GetWindowLongPtrW
BOOL WINAPI PostMessageW(_In_opt_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
LRESULT WINAPI SendDlgItemMessageW(_In_ HWND, _In_ int, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define MAKEINTRESOURCEW(i)
#define SetWindowLongPtrW
INT_PTR WINAPI DialogBoxParamW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)