#include <windef.h>
#include <winbase.h>
-#include <winternl.h>
+#include <wine/winternl.h>
#include <shlobj.h>
#include <undocshell.h>
#include <shlwapi.h>
#include <commdlg.h>
#include <commoncontrols.h>
-#include <recyclebin.h>
-#include <mmsystem.h>
+#include "../shellrecyclebin/recyclebin.h"
#include <wine/debug.h>
#include <wine/unicode.h>
extern INT WINAPI EnumMRUListA(HANDLE hList, INT nItemPos, LPVOID lpBuffer, DWORD nBufferSize);
-/* Get a function pointer from a DLL handle */
-#define GET_FUNC(func, funcType, module, name, fail) \
- do { \
- if (!func) { \
- if (!SHELL32_h##module && !(SHELL32_h##module = LoadLibraryA(#module ".dll"))) return fail; \
- func = (funcType)GetProcAddress(SHELL32_h##module, name); \
- if (!func) return fail; \
- } \
- } while (0)
-
-/* Function pointers for GET_FUNC macro */
-static HMODULE SHELL32_hshlwapi=NULL;
-
-
/*************************************************************************
* ParseFieldA [internal]
*
DWORD dwType)
{
if (dwType == 3)
+ {
+ SetTaskmanWindow(hWnd);
return RegisterShellHookWindow(hWnd);
+ }
else if (dwType == 0)
+ {
return DeregisterShellHookWindow(hWnd);
+ }
ERR("Unsupported argument");
return FALSE;
switch (uFlags)
{
case SHARD_PIDL:
- SHGetPathFromIDListA(pv, doc_name);
+ if (!SHGetPathFromIDListA(pv, doc_name))
+ {
+ WARN("can't get path from PIDL\n");
+ return;
+ }
break;
case SHARD_PATHA:
ext = strrchr(doc_name, '.');
if (!lstrcmpiA(ext, ".lnk"))
{
+ WCHAR doc_nameW[MAX_PATH];
IShellLinkA* ShellLink;
- IShellLink_ConstructFromFile(NULL, &IID_IShellLinkA, (LPCITEMIDLIST)SHSimpleIDListFromPathA(doc_name), (LPVOID*)&ShellLink);
+ int nLength = MultiByteToWideChar(CP_ACP, 0, doc_name, -1, doc_nameW, MAX_PATH);
+ if (nLength == 0)
+ return;
+
+ IShellLink_ConstructFromPath(doc_nameW, &IID_IShellLinkA, (LPVOID*)&ShellLink);
IShellLinkA_GetPath(ShellLink, doc_name, MAX_PATH, NULL, 0);
IShellLinkA_Release(ShellLink);
}
/* buffer size looks good */
ptr += 12; /* get to string */
len = bufused - (ptr-buffer); /* get length of buf remaining */
- if ((lstrlenA(ptr) > 0) && (lstrlenA(ptr) <= len-1)) {
+ if (ptr[0] && (lstrlenA(ptr) <= len-1)) {
/* appears to be good string */
lstrcpyA(old_lnk_name, link_dir);
PathAppendA(old_lnk_name, ptr);
if( r == ERROR_SUCCESS )
{
type = REG_BINARY;
- r = RegQueryValueExW( hkey, szwSettings,
+ r = RegQueryValueExW( hkey, szwSettings,
NULL, &type, (LPBYTE)cs, (LPDWORD)&length );
RegCloseKey( hkey );
-
+
}
/* if we can't read from the registry, create default values */
cs->fAdminsCreateCommonGroups = TRUE;
cs->fMenuEnumFilter = 96;
}
-
+
return TRUE;
}
NULL, 0, KEY_ALL_ACCESS, NULL, &hkey, NULL);
if( r == ERROR_SUCCESS )
{
- r = RegSetValueExW( hkey, szwSettings, 0,
+ r = RegSetValueExW( hkey, szwSettings, 0,
REG_BINARY, (LPBYTE) cs, cs->cLength);
RegCloseKey( hkey );
*
*/
BOOL WINAPI FileIconInit(BOOL bFullInit)
-{ FIXME("(%s)\n", bFullInit ? "true" : "false");
- return FALSE;
+{
+ return SIC_Initialize();
}
/*************************************************************************
return bResult;
}
-/*************************************************************************
- * SHAllocShared [SHELL32.520]
- *
- * See shlwapi.SHAllocShared
- */
-HANDLE WINAPI SHAllocShared(LPCVOID lpvData, DWORD dwSize, DWORD dwProcId)
-{
- typedef HANDLE (WINAPI *SHAllocSharedProc)(LPCVOID, DWORD, DWORD);
- static SHAllocSharedProc pSHAllocShared;
-
- GET_FUNC(pSHAllocShared, SHAllocSharedProc, shlwapi, (char*)7, NULL);
- return pSHAllocShared(lpvData, dwSize, dwProcId);
-}
-
-/*************************************************************************
- * SHLockShared [SHELL32.521]
- *
- * See shlwapi.SHLockShared
- */
-LPVOID WINAPI SHLockShared(HANDLE hShared, DWORD dwProcId)
-{
- typedef HANDLE (WINAPI *SHLockSharedProc)(HANDLE, DWORD);
- static SHLockSharedProc pSHLockShared;
-
- GET_FUNC(pSHLockShared, SHLockSharedProc, shlwapi, (char*)8, NULL);
- return pSHLockShared(hShared, dwProcId);
-}
-
-/*************************************************************************
- * SHUnlockShared [SHELL32.522]
- *
- * See shlwapi.SHUnlockShared
- */
-BOOL WINAPI SHUnlockShared(LPVOID lpView)
-{
- typedef HANDLE (WINAPI *SHUnlockSharedProc)(LPCVOID);
- static SHUnlockSharedProc pSHUnlockShared;
-
- GET_FUNC(pSHUnlockShared, SHUnlockSharedProc, shlwapi, (char*)9, FALSE);
- return pSHUnlockShared(lpView) != NULL;
-}
-
-/*************************************************************************
- * SHFreeShared [SHELL32.523]
- *
- * See shlwapi.SHFreeShared
- */
-BOOL WINAPI SHFreeShared(HANDLE hShared, DWORD dwProcId)
-{
- typedef HANDLE (WINAPI *SHFreeSharedProc)(HANDLE, DWORD);
- static SHFreeSharedProc pSHFreeShared;
-
- GET_FUNC(pSHFreeShared, SHFreeSharedProc, shlwapi, (char*)10, FALSE);
- return pSHFreeShared(hShared, dwProcId) != NULL;
-}
-
/*************************************************************************
* SetAppStartingCursor [SHELL32.99]
*/
/************************************************************************
* DoEnvironmentSubst [SHELL32.53]
*
- * See DoEnvironmentSubstA.
+ * See DoEnvironmentSubstA.
*/
DWORD WINAPI DoEnvironmentSubstAW(LPVOID x, UINT y)
{
return !RtlGUIDFromString(&guid_str, guid);
}
+/*************************************************************************
+ * PathIsTemporaryA [SHELL32.713]
+ */
+BOOL WINAPI PathIsTemporaryA(LPSTR Str)
+{
+ FIXME("(%s)stub\n", debugstr_a(Str));
+ return FALSE;
+}
+
/*************************************************************************
* PathIsTemporaryW [SHELL32.714]
*/
* Create IDataObject from PIDLs??
*/
HRESULT WINAPI CIDLData_CreateFromIDArray(
- LPCITEMIDLIST pidlFolder,
+ PCIDLIST_ABSOLUTE pidlFolder,
UINT cpidlFiles,
- LPCITEMIDLIST *lppidlFiles,
+ PCUIDLIST_RELATIVE_ARRAY lppidlFiles,
LPDATAOBJECT *ppdataObject)
{
UINT i;
/*************************************************************************
* LinkWindow_UnregisterClass (SHELL32.259)
*/
-BOOL WINAPI LinkWindow_UnregisterClass(void)
+BOOL WINAPI LinkWindow_UnregisterClass(DWORD dwUnused)
{
FIXME("()\n");
return TRUE;
return hRes;
}
-
-/*************************************************************************
- * PathIsTemporaryA [SHELL32.713]
- */
-BOOL WINAPI PathIsTemporaryA(LPSTR Str)
-{
- FIXME("(%s)stub\n", debugstr_a(Str));
- return FALSE;
-}
-
-/*************************************************************************
- * SHEmptyRecycleBinA (SHELL32.@)
- */
-HRESULT WINAPI SHEmptyRecycleBinA(HWND hwnd, LPCSTR pszRootPath, DWORD dwFlags)
-{
- LPWSTR szRootPathW = NULL;
- int len;
- HRESULT hr;
-
- TRACE("%p, %s, 0x%08x\n", hwnd, debugstr_a(pszRootPath), dwFlags);
-
- if (pszRootPath)
- {
- len = MultiByteToWideChar(CP_ACP, 0, pszRootPath, -1, NULL, 0);
- if (len == 0)
- return HRESULT_FROM_WIN32(GetLastError());
- szRootPathW = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
- if (!szRootPathW)
- return E_OUTOFMEMORY;
- if (MultiByteToWideChar(CP_ACP, 0, pszRootPath, -1, szRootPathW, len) == 0)
- {
- HeapFree(GetProcessHeap(), 0, szRootPathW);
- return HRESULT_FROM_WIN32(GetLastError());
- }
- }
-
- hr = SHEmptyRecycleBinW(hwnd, szRootPathW, dwFlags);
- HeapFree(GetProcessHeap(), 0, szRootPathW);
-
- return hr;
-}
-
-HRESULT WINAPI SHEmptyRecycleBinW(HWND hwnd, LPCWSTR pszRootPath, DWORD dwFlags)
-{
- WCHAR szPath[MAX_PATH] = {0};
- DWORD dwSize, dwType;
- LONG ret;
-
- TRACE("%p, %s, 0x%08x\n", hwnd, debugstr_w(pszRootPath), dwFlags);
-
- if (!(dwFlags & SHERB_NOCONFIRMATION))
- {
- /* FIXME
- * enumerate available files
- * show confirmation dialog
- */
- FIXME("show confirmation dialog\n");
- }
-
- if (dwFlags & SHERB_NOPROGRESSUI)
- {
- ret = EmptyRecycleBinW(pszRootPath);
- }
- else
- {
- /* FIXME
- * show a progress dialog
- */
- ret = EmptyRecycleBinW(pszRootPath);
- }
-
- if (!ret)
- return HRESULT_FROM_WIN32(GetLastError());
-
- if (!(dwFlags & SHERB_NOSOUND))
- {
- dwSize = sizeof(szPath);
- ret = RegGetValueW(HKEY_CURRENT_USER,
- L"AppEvents\\Schemes\\Apps\\Explorer\\EmptyRecycleBin\\.Current",
- NULL,
- RRF_RT_REG_EXPAND_SZ,
- &dwType,
- (PVOID)szPath,
- &dwSize);
- if (ret != ERROR_SUCCESS)
- return S_OK;
-
- if (dwType != REG_EXPAND_SZ) /* type dismatch */
- return S_OK;
-
- szPath[(sizeof(szPath)/sizeof(WCHAR))-1] = L'\0';
- PlaySoundW(szPath, NULL, SND_FILENAME);
- }
- return S_OK;
-}
-
-HRESULT WINAPI SHQueryRecycleBinA(LPCSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo)
-{
- LPWSTR szRootPathW = NULL;
- int len;
- HRESULT hr;
-
- TRACE("%s, %p\n", debugstr_a(pszRootPath), pSHQueryRBInfo);
-
- if (pszRootPath)
- {
- len = MultiByteToWideChar(CP_ACP, 0, pszRootPath, -1, NULL, 0);
- if (len == 0)
- return HRESULT_FROM_WIN32(GetLastError());
- szRootPathW = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
- if (!szRootPathW)
- return E_OUTOFMEMORY;
- if (MultiByteToWideChar(CP_ACP, 0, pszRootPath, -1, szRootPathW, len) == 0)
- {
- HeapFree(GetProcessHeap(), 0, szRootPathW);
- return HRESULT_FROM_WIN32(GetLastError());
- }
- }
-
- hr = SHQueryRecycleBinW(szRootPathW, pSHQueryRBInfo);
- HeapFree(GetProcessHeap(), 0, szRootPathW);
-
- return hr;
-}
-
-HRESULT WINAPI SHQueryRecycleBinW(LPCWSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo)
-{
- FIXME("%s, %p - stub\n", debugstr_w(pszRootPath), pSHQueryRBInfo);
-
- if (!(pszRootPath) || (pszRootPath[0] == 0) ||
- !(pSHQueryRBInfo) || (pSHQueryRBInfo->cbSize < sizeof(SHQUERYRBINFO)))
- {
- return E_INVALIDARG;
- }
-
- pSHQueryRBInfo->i64Size = 0;
- pSHQueryRBInfo->i64NumItems = 0;
-
- return S_OK;
-}