3 * LICENSE: LGPL-2.1+ (https://spdx.org/licenses/LGPL-2.1+)
4 * PURPOSE: MyDocs implementation
5 * COPYRIGHT: Copyright 2019 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
10 WINE_DEFAULT_DEBUG_CHANNEL(mydocs
);
12 BEGIN_OBJECT_MAP(ObjectMap
)
13 OBJECT_ENTRY(CLSID_MyDocsDropHandler
, CMyDocsDropHandler
)
17 LONG g_ModuleRefCnt
= 0;
20 CreateEmptyFile(LPCWSTR pszFile
)
23 hFile
= CreateFileW(pszFile
, GENERIC_WRITE
, FILE_SHARE_READ
, NULL
,
24 CREATE_ALWAYS
, FILE_ATTRIBUTE_NORMAL
, NULL
);
25 if (hFile
!= INVALID_HANDLE_VALUE
)
34 CreateSendToMyDocuments(LPCWSTR pszSendTo
)
36 WCHAR szTarget
[MAX_PATH
], szSendToFile
[MAX_PATH
];
38 SHGetSpecialFolderPathW(NULL
, szTarget
, CSIDL_MYDOCUMENTS
, FALSE
);
40 StringCbCopyW(szSendToFile
, sizeof(szSendToFile
), pszSendTo
);
41 PathAppendW(szSendToFile
, PathFindFileNameW(szTarget
));
42 StringCbCatW(szSendToFile
, sizeof(szSendToFile
), L
".mydocs");
44 if (!CreateEmptyFile(szSendToFile
))
46 ERR("CreateEmptyFile(%S, %S) failed!\n", szSendToFile
, szTarget
);
54 GetDefaultUserSendTo(LPWSTR pszPath
)
56 return SHGetFolderPathW(NULL
, CSIDL_SENDTO
, INVALID_HANDLE_VALUE
,
57 SHGFP_TYPE_DEFAULT
, pszPath
);
60 STDAPI
DllCanUnloadNow(void)
64 return gModule
.DllCanUnloadNow();
67 STDAPI
DllGetClassObject(REFCLSID rclsid
, REFIID riid
, LPVOID
*ppv
)
69 TRACE("CLSID:%s,IID:%s\n", wine_dbgstr_guid(&rclsid
), wine_dbgstr_guid(&riid
));
71 HRESULT hr
= gModule
.DllGetClassObject(rclsid
, riid
, ppv
);
73 TRACE("-- pointer to class factory: %p\n", *ppv
);
78 STDAPI
DllRegisterServer(void)
80 HRESULT hr
= gModule
.DllRegisterServer(FALSE
);
81 if (FAILED_UNEXPECTEDLY(hr
))
84 WCHAR szSendTo
[MAX_PATH
];
85 hr
= GetDefaultUserSendTo(szSendTo
);
87 CreateSendToMyDocuments(szSendTo
);
92 STDAPI
DllUnregisterServer(void)
94 HRESULT hr
= gModule
.DllUnregisterServer(FALSE
);
95 if (FAILED_UNEXPECTEDLY(hr
))
101 STDAPI_(BOOL
) DllMain(HINSTANCE hInstance
, DWORD dwReason
, LPVOID fImpLoad
)
103 TRACE("%p 0x%x %p\n", hInstance
, dwReason
, fImpLoad
);
104 if (dwReason
== DLL_PROCESS_ATTACH
)
106 gModule
.Init(ObjectMap
, hInstance
, NULL
);
107 DisableThreadLibraryCalls(hInstance
);
109 else if (dwReason
== DLL_PROCESS_DETACH
)