Author: akhaldi Date: Mon Nov 3 12:17:30 2014 New Revision: 65217
URL: http://svn.reactos.org/svn/reactos?rev=65217&view=rev Log: [SHELL32] * Move shell32_main.cpp to the wine folder. * Rename shell32_main.cpp to shell32_main.c. * Partially sync shell32_main.c with Wine 1.7.27. * Update the location of shell32_main.h in inclusions. CORE-8540
Added: branches/shell-experiments/dll/win32/shell32/wine/shell32_main.c - copied, changed from r65215, branches/shell-experiments/dll/win32/shell32/shell32_main.cpp branches/shell-experiments/dll/win32/shell32/wine/shell32_main.h - copied, changed from r65212, branches/shell-experiments/dll/win32/shell32/shell32_main.h Removed: branches/shell-experiments/dll/win32/shell32/shell32_main.cpp branches/shell-experiments/dll/win32/shell32/shell32_main.h Modified: branches/shell-experiments/dll/win32/shell32/CMakeLists.txt branches/shell-experiments/dll/win32/shell32/precomp.h branches/shell-experiments/dll/win32/shell32/wine/shellole.c
Modified: branches/shell-experiments/dll/win32/shell32/CMakeLists.txt URL: http://svn.reactos.org/svn/reactos/branches/shell-experiments/dll/win32/shel... ============================================================================== --- branches/shell-experiments/dll/win32/shell32/CMakeLists.txt [iso-8859-1] (original) +++ branches/shell-experiments/dll/win32/shell32/CMakeLists.txt [iso-8859-1] Mon Nov 3 12:17:30 2014 @@ -42,7 +42,6 @@ iconcache.cpp pidl.cpp shell32.cpp - shell32_main.cpp shellitem.cpp shelllink.cpp shellord.cpp @@ -76,6 +75,7 @@
add_library(shell32 SHARED ${SOURCE} + wine/shell32_main.c wine/shellole.c wine/shellstring.c vista.c
Modified: branches/shell-experiments/dll/win32/shell32/precomp.h URL: http://svn.reactos.org/svn/reactos/branches/shell-experiments/dll/win32/shel... ============================================================================== --- branches/shell-experiments/dll/win32/shell32/precomp.h [iso-8859-1] (original) +++ branches/shell-experiments/dll/win32/shell32/precomp.h [iso-8859-1] Mon Nov 3 12:17:30 2014 @@ -37,7 +37,7 @@ #include "pidl.h" #include "debughlp.h" #include "undocshell.h" -#include "shell32_main.h" +#include "wine/shell32_main.h" #include "shresdef.h" #include "cpanel.h" #include "enumidlist.h"
Removed: branches/shell-experiments/dll/win32/shell32/shell32_main.cpp URL: http://svn.reactos.org/svn/reactos/branches/shell-experiments/dll/win32/shel... ============================================================================== --- branches/shell-experiments/dll/win32/shell32/shell32_main.cpp [iso-8859-1] (original) +++ branches/shell-experiments/dll/win32/shell32/shell32_main.cpp (removed) @@ -1,1343 +0,0 @@ -/* - * Shell basics - * - * Copyright 1998 Marcus Meissner - * Copyright 1998 Juergen Schmied (jsch) * juergen.schmied@metronet.de - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "precomp.h" - -#include <reactos/version.h> - -WINE_DEFAULT_DEBUG_CHANNEL(shell); - -const char * const SHELL_Authors[] = { "Copyright 1993-"COPYRIGHT_YEAR" WINE team", "Copyright 1998-"COPYRIGHT_YEAR" ReactOS Team", 0 }; - -#define MORE_DEBUG 1 -/************************************************************************* - * CommandLineToArgvW [SHELL32.@] - * - * We must interpret the quotes in the command line to rebuild the argv - * array correctly: - * - arguments are separated by spaces or tabs - * - quotes serve as optional argument delimiters - * '"a b"' -> 'a b' - * - escaped quotes must be converted back to '"' - * '"' -> '"' - * - consecutive backslashes preceding a quote see their number halved with - * the remainder escaping the quote: - * 2n backslashes + quote -> n backslashes + quote as an argument delimiter - * 2n+1 backslashes + quote -> n backslashes + literal quote - * - backslashes that are not followed by a quote are copied literally: - * 'a\b' -> 'a\b' - * 'a\b' -> 'a\b' - * - in quoted strings, consecutive quotes see their number divided by three - * with the remainder modulo 3 deciding whether to close the string or not. - * Note that the opening quote must be counted in the consecutive quotes, - * that's the (1+) below: - * (1+) 3n quotes -> n quotes - * (1+) 3n+1 quotes -> n quotes plus closes the quoted string - * (1+) 3n+2 quotes -> n+1 quotes plus closes the quoted string - * - in unquoted strings, the first quote opens the quoted string and the - * remaining consecutive quotes follow the above rule. - */ -LPWSTR* WINAPI CommandLineToArgvW(LPCWSTR lpCmdline, int* numargs) -{ - DWORD argc; - LPWSTR *argv; - LPCWSTR s; - LPWSTR d; - LPWSTR cmdline; - int qcount,bcount; - - if(!numargs) - { - SetLastError(ERROR_INVALID_PARAMETER); - return NULL; - } - - if (*lpCmdline==0) - { - /* Return the path to the executable */ - DWORD len, deslen=MAX_PATH, size; - - size = sizeof(LPWSTR) + deslen*sizeof(WCHAR) + sizeof(LPWSTR); - for (;;) - { - if (!(argv = (LPWSTR *)LocalAlloc(LMEM_FIXED, size))) return NULL; - len = GetModuleFileNameW(0, (LPWSTR)(argv+1), deslen); - if (!len) - { - LocalFree(argv); - return NULL; - } - if (len < deslen) break; - deslen*=2; - size = sizeof(LPWSTR) + deslen*sizeof(WCHAR) + sizeof(LPWSTR); - LocalFree( argv ); - } - argv[0]=(LPWSTR)(argv+1); - *numargs=1; - - return argv; - } - - /* --- First count the arguments */ - argc=1; - s=lpCmdline; - /* The first argument, the executable path, follows special rules */ - if (*s=='"') - { - /* The executable path ends at the next quote, no matter what */ - s++; - while (*s) - if (*s++=='"') - break; - } - else - { - /* The executable path ends at the next space, no matter what */ - while (*s && *s!=' ' && *s!='\t') - s++; - } - /* skip to the first argument, if any */ - while (*s==' ' || *s=='\t') - s++; - if (*s) - argc++; - - /* Analyze the remaining arguments */ - qcount=bcount=0; - while (*s) - { - if ((*s==' ' || *s=='\t') && qcount==0) - { - /* skip to the next argument and count it if any */ - while (*s==' ' || *s=='\t') - s++; - if (*s) - argc++; - bcount=0; - } - else if (*s=='\') - { - /* '', count them */ - bcount++; - s++; - } - else if (*s=='"') - { - /* '"' */ - if ((bcount & 1)==0) - qcount++; /* unescaped '"' */ - s++; - bcount=0; - /* consecutive quotes, see comment in copying code below */ - while (*s=='"') - { - qcount++; - s++; - } - qcount=qcount % 3; - if (qcount==2) - qcount=0; - } - else - { - /* a regular character */ - bcount=0; - s++; - } - } - - /* Allocate in a single lump, the string array, and the strings that go - * with it. This way the caller can make a single LocalFree() call to free - * both, as per MSDN. - */ - argv=(LPWSTR *)LocalAlloc(LMEM_FIXED, argc*sizeof(LPWSTR)+(strlenW(lpCmdline)+1)*sizeof(WCHAR)); - if (!argv) - return NULL; - cmdline=(LPWSTR)(argv+argc); - strcpyW(cmdline, lpCmdline); - - /* --- Then split and copy the arguments */ - argv[0]=d=cmdline; - argc=1; - /* The first argument, the executable path, follows special rules */ - if (*d=='"') - { - /* The executable path ends at the next quote, no matter what */ - s=d+1; - while (*s) - { - if (*s=='"') - { - s++; - break; - } - *d++=*s++; - } - } - else - { - /* The executable path ends at the next space, no matter what */ - while (*d && *d!=' ' && *d!='\t') - d++; - s=d; - if (*s) - s++; - } - /* close the executable path */ - *d++=0; - /* skip to the first argument and initialize it if any */ - while (*s==' ' || *s=='\t') - s++; - if (!*s) - { - /* There are no parameters so we are all done */ - *numargs=argc; - return argv; - } - - /* Split and copy the remaining arguments */ - argv[argc++]=d; - qcount=bcount=0; - while (*s) - { - if ((*s==' ' || *s=='\t') && qcount==0) - { - /* close the argument */ - *d++=0; - bcount=0; - - /* skip to the next one and initialize it if any */ - do { - s++; - } while (*s==' ' || *s=='\t'); - if (*s) - argv[argc++]=d; - } - else if (*s=='\') - { - *d++=*s++; - bcount++; - } - else if (*s=='"') - { - if ((bcount & 1)==0) - { - /* Preceded by an even number of '', this is half that - * number of '', plus a quote which we erase. - */ - d-=bcount/2; - qcount++; - } - else - { - /* Preceded by an odd number of '', this is half that - * number of '' followed by a '"' - */ - d=d-bcount/2-1; - *d++='"'; - } - s++; - bcount=0; - /* Now count the number of consecutive quotes. Note that qcount - * already takes into account the opening quote if any, as well as - * the quote that lead us here. - */ - while (*s=='"') - { - if (++qcount==3) - { - *d++='"'; - qcount=0; - } - s++; - } - if (qcount==2) - qcount=0; - } - else - { - /* a regular character */ - *d++=*s++; - bcount=0; - } - } - *d='\0'; - *numargs=argc; - - return argv; -} - -static DWORD shgfi_get_exe_type(LPCWSTR szFullPath) -{ - BOOL status = FALSE; - HANDLE hfile; - DWORD BinaryType; - IMAGE_DOS_HEADER mz_header; - IMAGE_NT_HEADERS nt; - DWORD len; - char magic[4]; - - status = GetBinaryTypeW (szFullPath, &BinaryType); - if (!status) - return 0; - if (BinaryType == SCS_DOS_BINARY || BinaryType == SCS_PIF_BINARY) - return 0x4d5a; - - hfile = CreateFileW( szFullPath, GENERIC_READ, FILE_SHARE_READ, - NULL, OPEN_EXISTING, 0, 0 ); - if ( hfile == INVALID_HANDLE_VALUE ) - return 0; - - /* - * The next section is adapted from MODULE_GetBinaryType, as we need - * to examine the image header to get OS and version information. We - * know from calling GetBinaryTypeA that the image is valid and either - * an NE or PE, so much error handling can be omitted. - * Seek to the start of the file and read the header information. - */ - - SetFilePointer( hfile, 0, NULL, SEEK_SET ); - ReadFile( hfile, &mz_header, sizeof(mz_header), &len, NULL ); - - SetFilePointer( hfile, mz_header.e_lfanew, NULL, SEEK_SET ); - ReadFile( hfile, magic, sizeof(magic), &len, NULL ); - - if ( *(DWORD*)magic == IMAGE_NT_SIGNATURE ) - { - SetFilePointer( hfile, mz_header.e_lfanew, NULL, SEEK_SET ); - ReadFile( hfile, &nt, sizeof(nt), &len, NULL ); - CloseHandle( hfile ); - - /* DLL files are not executable and should return 0 */ - if (nt.FileHeader.Characteristics & IMAGE_FILE_DLL) - return 0; - - if (nt.OptionalHeader.Subsystem == IMAGE_SUBSYSTEM_WINDOWS_GUI) - { - return IMAGE_NT_SIGNATURE | - (nt.OptionalHeader.MajorSubsystemVersion << 24) | - (nt.OptionalHeader.MinorSubsystemVersion << 16); - } - return IMAGE_NT_SIGNATURE; - } - else if ( *(WORD*)magic == IMAGE_OS2_SIGNATURE ) - { - IMAGE_OS2_HEADER ne; - SetFilePointer( hfile, mz_header.e_lfanew, NULL, SEEK_SET ); - ReadFile( hfile, &ne, sizeof(ne), &len, NULL ); - CloseHandle( hfile ); - - if (ne.ne_exetyp == 2) - return IMAGE_OS2_SIGNATURE | (ne.ne_expver << 16); - return 0; - } - CloseHandle( hfile ); - return 0; -} - -/************************************************************************* - * SHELL_IsShortcut [internal] - * - * Decide if an item id list points to a shell shortcut - */ -BOOL SHELL_IsShortcut(LPCITEMIDLIST pidlLast) -{ - char szTemp[MAX_PATH]; - HKEY keyCls; - BOOL ret = FALSE; - - if (_ILGetExtension(pidlLast, szTemp, MAX_PATH) && - HCR_MapTypeToValueA(szTemp, szTemp, MAX_PATH, TRUE)) - { - if (ERROR_SUCCESS == RegOpenKeyExA(HKEY_CLASSES_ROOT, szTemp, 0, KEY_QUERY_VALUE, &keyCls)) - { - if (ERROR_SUCCESS == RegQueryValueExA(keyCls, "IsShortcut", NULL, NULL, NULL, NULL)) - ret = TRUE; - - RegCloseKey(keyCls); - } - } - - return ret; -} - -#define SHGFI_KNOWN_FLAGS \ - (SHGFI_SMALLICON | SHGFI_OPENICON | SHGFI_SHELLICONSIZE | SHGFI_PIDL | \ - SHGFI_USEFILEATTRIBUTES | SHGFI_ADDOVERLAYS | SHGFI_OVERLAYINDEX | \ - SHGFI_ICON | SHGFI_DISPLAYNAME | SHGFI_TYPENAME | SHGFI_ATTRIBUTES | \ - SHGFI_ICONLOCATION | SHGFI_EXETYPE | SHGFI_SYSICONINDEX | \ - SHGFI_LINKOVERLAY | SHGFI_SELECTED | SHGFI_ATTR_SPECIFIED) - -/************************************************************************* - * SHGetFileInfoW [SHELL32.@] - * - */ -DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path,DWORD dwFileAttributes, - SHFILEINFOW *psfi, UINT sizeofpsfi, UINT flags ) -{ - WCHAR szLocation[MAX_PATH], szFullPath[MAX_PATH]; - int iIndex; - DWORD_PTR ret = TRUE; - DWORD dwAttributes = 0; - CComPtr<IShellFolder> psfParent; - CComPtr<IExtractIconW> pei; - LPITEMIDLIST pidlLast = NULL, pidl = NULL; - HRESULT hr = S_OK; - BOOL IconNotYetLoaded=TRUE; - UINT uGilFlags = 0; - - TRACE("%s fattr=0x%x sfi=%p(attr=0x%08x) size=0x%x flags=0x%x\n", - (flags & SHGFI_PIDL)? "pidl" : debugstr_w(path), dwFileAttributes, - psfi, psfi->dwAttributes, sizeofpsfi, flags); - - if (!path) - return FALSE; - - /* windows initializes these values regardless of the flags */ - if (psfi != NULL) - { - psfi->szDisplayName[0] = '\0'; - psfi->szTypeName[0] = '\0'; - psfi->iIcon = 0; - } - - if (!(flags & SHGFI_PIDL)) - { - /* SHGetFileInfo should work with absolute and relative paths */ - if (PathIsRelativeW(path)) - { - GetCurrentDirectoryW(MAX_PATH, szLocation); - PathCombineW(szFullPath, szLocation, path); - } - else - { - lstrcpynW(szFullPath, path, MAX_PATH); - } - } - - if (flags & SHGFI_EXETYPE) - { - if (flags != SHGFI_EXETYPE) - return 0; - return shgfi_get_exe_type(szFullPath); - } - - /* - * psfi is NULL normally to query EXE type. If it is NULL, none of the - * below makes sense anyway. Windows allows this and just returns FALSE - */ - if (psfi == NULL) - return FALSE; - - /* - * translate the path into a pidl only when SHGFI_USEFILEATTRIBUTES - * is not specified. - * The pidl functions fail on not existing file names - */ - - if (flags & SHGFI_PIDL) - { - pidl = ILClone((LPCITEMIDLIST)path); - } - else if (!(flags & SHGFI_USEFILEATTRIBUTES)) - { - hr = SHILCreateFromPathW(szFullPath, &pidl, &dwAttributes); - } - - if ((flags & SHGFI_PIDL) || !(flags & SHGFI_USEFILEATTRIBUTES)) - { - /* get the parent shellfolder */ - if (pidl) - { - hr = SHBindToParent( pidl, IID_PPV_ARG(IShellFolder, &psfParent), - (LPCITEMIDLIST*)&pidlLast ); - if (SUCCEEDED(hr)) - pidlLast = ILClone(pidlLast); - ILFree(pidl); - } - else - { - ERR("pidl is null!\n"); - return FALSE; - } - } - - /* get the attributes of the child */ - if (SUCCEEDED(hr) && (flags & SHGFI_ATTRIBUTES)) - { - if (!(flags & SHGFI_ATTR_SPECIFIED)) - { - psfi->dwAttributes = 0xffffffff; - } - if (psfParent != NULL) - psfParent->GetAttributesOf(1, (LPCITEMIDLIST*)&pidlLast, - &(psfi->dwAttributes) ); - } - - /* get the displayname */ - if (SUCCEEDED(hr) && (flags & SHGFI_DISPLAYNAME)) - { - if (flags & SHGFI_USEFILEATTRIBUTES) - { - wcscpy (psfi->szDisplayName, PathFindFileNameW(szFullPath)); - } - else - { - STRRET str; - hr = psfParent->GetDisplayNameOf(pidlLast, - SHGDN_INFOLDER, &str); - StrRetToStrNW (psfi->szDisplayName, MAX_PATH, &str, pidlLast); - } - } - - /* get the type name */ - if (SUCCEEDED(hr) && (flags & SHGFI_TYPENAME)) - { - static const WCHAR szFile[] = { 'F','i','l','e',0 }; - static const WCHAR szDashFile[] = { '-','f','i','l','e',0 }; - - if (!(flags & SHGFI_USEFILEATTRIBUTES)) - { - char ftype[80]; - - _ILGetFileType(pidlLast, ftype, 80); - MultiByteToWideChar(CP_ACP, 0, ftype, -1, psfi->szTypeName, 80 ); - } - else - { - if (dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - wcscat (psfi->szTypeName, szFile); - else - { - WCHAR sTemp[64]; - - wcscpy(sTemp,PathFindExtensionW(szFullPath)); - if (!( HCR_MapTypeToValueW(sTemp, sTemp, 64, TRUE) && - HCR_MapTypeToValueW(sTemp, psfi->szTypeName, 80, FALSE ))) - { - lstrcpynW (psfi->szTypeName, sTemp, 64); - wcscat (psfi->szTypeName, szDashFile); - } - } - } - } - - /* ### icons ###*/ - if (flags & SHGFI_OPENICON) - uGilFlags |= GIL_OPENICON; - - if (flags & SHGFI_LINKOVERLAY) - uGilFlags |= GIL_FORSHORTCUT; - else if ((flags&SHGFI_ADDOVERLAYS) || - (flags&(SHGFI_ICON|SHGFI_SMALLICON))==SHGFI_ICON) - { - if (SHELL_IsShortcut(pidlLast)) - uGilFlags |= GIL_FORSHORTCUT; - } - - if (flags & SHGFI_OVERLAYINDEX) - FIXME("SHGFI_OVERLAYINDEX unhandled\n"); - - if (flags & SHGFI_SELECTED) - FIXME("set icon to selected, stub\n"); - - if (flags & SHGFI_SHELLICONSIZE) - FIXME("set icon to shell size, stub\n"); - - /* get the iconlocation */ - if (SUCCEEDED(hr) && (flags & SHGFI_ICONLOCATION )) - { - UINT uFlags; - - if (flags & SHGFI_USEFILEATTRIBUTES) - { - if (dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - { - wcscpy(psfi->szDisplayName, swShell32Name); - psfi->iIcon = -IDI_SHELL_FOLDER; - } - else - { - WCHAR* szExt; - static const WCHAR p1W[] = {'%','1',0}; - WCHAR sTemp [MAX_PATH]; - - szExt = PathFindExtensionW(szFullPath); - TRACE("szExt=%s\n", debugstr_w(szExt)); - if ( szExt && - HCR_MapTypeToValueW(szExt, sTemp, MAX_PATH, TRUE) && - HCR_GetIconW(sTemp, sTemp, NULL, MAX_PATH, &psfi->iIcon)) - { - if (lstrcmpW(p1W, sTemp)) - wcscpy(psfi->szDisplayName, sTemp); - else - { - /* the icon is in the file */ - wcscpy(psfi->szDisplayName, szFullPath); - } - } - else - ret = FALSE; - } - } - else - { - hr = psfParent->GetUIObjectOf(0, 1, - (LPCITEMIDLIST*)&pidlLast, IID_NULL_PPV_ARG(IExtractIconW, &pei)); - if (SUCCEEDED(hr)) - { - hr = pei->GetIconLocation(uGilFlags, - szLocation, MAX_PATH, &iIndex, &uFlags); - - if (uFlags & GIL_NOTFILENAME) - ret = FALSE; - else - { - wcscpy (psfi->szDisplayName, szLocation); - psfi->iIcon = iIndex; - } - } - } - } - - /* get icon index (or load icon)*/ - if (SUCCEEDED(hr) && (flags & (SHGFI_ICON | SHGFI_SYSICONINDEX))) - { - if (flags & SHGFI_USEFILEATTRIBUTES && !(flags & SHGFI_PIDL)) - { - WCHAR sTemp [MAX_PATH]; - WCHAR * szExt; - int icon_idx=0; - - lstrcpynW(sTemp, szFullPath, MAX_PATH); - - if (dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - psfi->iIcon = SIC_GetIconIndex(swShell32Name, -IDI_SHELL_FOLDER, 0); - else - { - static const WCHAR p1W[] = {'%','1',0}; - - psfi->iIcon = 0; - szExt = PathFindExtensionW(sTemp); - if ( szExt && - HCR_MapTypeToValueW(szExt, sTemp, MAX_PATH, TRUE) && - HCR_GetIconW(sTemp, sTemp, NULL, MAX_PATH, &icon_idx)) - { - if (!lstrcmpW(p1W,sTemp)) /* icon is in the file */ - wcscpy(sTemp, szFullPath); - - if (flags & SHGFI_SYSICONINDEX) - { - psfi->iIcon = SIC_GetIconIndex(sTemp,icon_idx,0); - if (psfi->iIcon == -1) - psfi->iIcon = 0; - } - else - { - UINT ret; - if (flags & SHGFI_SMALLICON) - ret = PrivateExtractIconsW( sTemp,icon_idx, - GetSystemMetrics( SM_CXSMICON ), - GetSystemMetrics( SM_CYSMICON ), - &psfi->hIcon, 0, 1, 0); - else - ret = PrivateExtractIconsW( sTemp, icon_idx, - GetSystemMetrics( SM_CXICON), - GetSystemMetrics( SM_CYICON), - &psfi->hIcon, 0, 1, 0); - - if (ret != 0 && ret != 0xFFFFFFFF) - { - IconNotYetLoaded=FALSE; - psfi->iIcon = icon_idx; - } - } - } - } - } - else - { - if (!(PidlToSicIndex(psfParent, pidlLast, !(flags & SHGFI_SMALLICON), - uGilFlags, &(psfi->iIcon)))) - { - ret = FALSE; - } - } - if (ret && (flags & SHGFI_SYSICONINDEX)) - { - if (flags & SHGFI_SMALLICON) - ret = (DWORD_PTR) ShellSmallIconList; - else - ret = (DWORD_PTR) ShellBigIconList; - } - } - - /* icon handle */ - if (SUCCEEDED(hr) && (flags & SHGFI_ICON) && IconNotYetLoaded) - { - if (flags & SHGFI_SMALLICON) - psfi->hIcon = ImageList_GetIcon( ShellSmallIconList, psfi->iIcon, ILD_NORMAL); - else - psfi->hIcon = ImageList_GetIcon( ShellBigIconList, psfi->iIcon, ILD_NORMAL); - } - - if (flags & ~SHGFI_KNOWN_FLAGS) - FIXME("unknown flags %08x\n", flags & ~SHGFI_KNOWN_FLAGS); - - if (hr != S_OK) - ret = FALSE; - - SHFree(pidlLast); - -#ifdef MORE_DEBUG - TRACE ("icon=%p index=0x%08x attr=0x%08x name=%s type=%s ret=0x%08lx\n", - psfi->hIcon, psfi->iIcon, psfi->dwAttributes, - debugstr_w(psfi->szDisplayName), debugstr_w(psfi->szTypeName), ret); -#endif - - return ret; -} - -/************************************************************************* - * SHGetFileInfoA [SHELL32.@] - * - * Note: - * MSVBVM60.__vbaNew2 expects this function to return a value in range - * 1 .. 0x7fff when the function succeeds and flags does not contain - * SHGFI_EXETYPE or SHGFI_SYSICONINDEX (see bug 7701) - */ -DWORD_PTR WINAPI SHGetFileInfoA(LPCSTR path,DWORD dwFileAttributes, - SHFILEINFOA *psfi, UINT sizeofpsfi, - UINT flags ) -{ - INT len; - LPWSTR temppath = NULL; - LPCWSTR pathW; - DWORD ret; - SHFILEINFOW temppsfi; - - if (flags & SHGFI_PIDL) - { - /* path contains a pidl */ - pathW = (LPCWSTR)path; - } - else - { - len = MultiByteToWideChar(CP_ACP, 0, path, -1, NULL, 0); - temppath = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR)); - MultiByteToWideChar(CP_ACP, 0, path, -1, temppath, len); - pathW = temppath; - } - - if (psfi && (flags & SHGFI_ATTR_SPECIFIED)) - temppsfi.dwAttributes=psfi->dwAttributes; - - if (psfi == NULL) - ret = SHGetFileInfoW(pathW, dwFileAttributes, NULL, 0, flags); - else - ret = SHGetFileInfoW(pathW, dwFileAttributes, &temppsfi, sizeof(temppsfi), flags); - - if (psfi) - { - if(flags & SHGFI_ICON) - psfi->hIcon=temppsfi.hIcon; - if(flags & (SHGFI_SYSICONINDEX|SHGFI_ICON|SHGFI_ICONLOCATION)) - psfi->iIcon=temppsfi.iIcon; - if(flags & SHGFI_ATTRIBUTES) - psfi->dwAttributes=temppsfi.dwAttributes; - if(flags & (SHGFI_DISPLAYNAME|SHGFI_ICONLOCATION)) - { - WideCharToMultiByte(CP_ACP, 0, temppsfi.szDisplayName, -1, - psfi->szDisplayName, sizeof(psfi->szDisplayName), NULL, NULL); - } - if(flags & SHGFI_TYPENAME) - { - WideCharToMultiByte(CP_ACP, 0, temppsfi.szTypeName, -1, - psfi->szTypeName, sizeof(psfi->szTypeName), NULL, NULL); - } - } - - HeapFree(GetProcessHeap(), 0, temppath); - - return ret; -} - -/************************************************************************* - * DuplicateIcon [SHELL32.@] - */ -EXTERN_C HICON WINAPI DuplicateIcon( HINSTANCE hInstance, HICON hIcon) -{ - ICONINFO IconInfo; - HICON hDupIcon = 0; - - TRACE("%p %p\n", hInstance, hIcon); - - if (GetIconInfo(hIcon, &IconInfo)) - { - hDupIcon = CreateIconIndirect(&IconInfo); - - /* clean up hbmMask and hbmColor */ - DeleteObject(IconInfo.hbmMask); - DeleteObject(IconInfo.hbmColor); - } - - return hDupIcon; -} - -/************************************************************************* - * ExtractIconA [SHELL32.@] - */ -HICON WINAPI ExtractIconA(HINSTANCE hInstance, LPCSTR lpszFile, UINT nIconIndex) -{ - HICON ret; - INT len = MultiByteToWideChar(CP_ACP, 0, lpszFile, -1, NULL, 0); - LPWSTR lpwstrFile = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); - - TRACE("%p %s %d\n", hInstance, lpszFile, nIconIndex); - - MultiByteToWideChar(CP_ACP, 0, lpszFile, -1, lpwstrFile, len); - ret = ExtractIconW(hInstance, lpwstrFile, nIconIndex); - HeapFree(GetProcessHeap(), 0, lpwstrFile); - - return ret; -} - -/************************************************************************* - * ExtractIconW [SHELL32.@] - */ -HICON WINAPI ExtractIconW(HINSTANCE hInstance, LPCWSTR lpszFile, UINT nIconIndex) -{ - HICON hIcon = NULL; - UINT ret; - UINT cx = GetSystemMetrics(SM_CXICON), cy = GetSystemMetrics(SM_CYICON); - - TRACE("%p %s %d\n", hInstance, debugstr_w(lpszFile), nIconIndex); - - if (nIconIndex == 0xFFFFFFFF) - { - ret = PrivateExtractIconsW(lpszFile, 0, cx, cy, NULL, NULL, 0, LR_DEFAULTCOLOR); - if (ret != 0xFFFFFFFF && ret) - return (HICON)(UINT_PTR)ret; - return NULL; - } - else - ret = PrivateExtractIconsW(lpszFile, nIconIndex, cx, cy, &hIcon, NULL, 1, LR_DEFAULTCOLOR); - - if (ret == 0xFFFFFFFF) - return (HICON)1; - else if (ret > 0 && hIcon) - return hIcon; - - return NULL; -} - -/************************************************************************* - * Printer_LoadIconsW [SHELL32.205] - */ -EXTERN_C VOID WINAPI Printer_LoadIconsW(LPCWSTR wsPrinterName, HICON * pLargeIcon, HICON * pSmallIcon) -{ - INT iconindex=IDI_SHELL_PRINTERS_FOLDER; - - TRACE("(%s, %p, %p)\n", debugstr_w(wsPrinterName), pLargeIcon, pSmallIcon); - - /* We should check if wsPrinterName is - 1. the Default Printer or not - 2. connected or not - 3. a Local Printer or a Network-Printer - and use different Icons - */ - if((wsPrinterName != NULL) && (wsPrinterName[0] != 0)) - { - FIXME("(select Icon by PrinterName %s not implemented)\n", debugstr_w(wsPrinterName)); - } - - if(pLargeIcon != NULL) - *pLargeIcon = (HICON)LoadImageW(shell32_hInstance, - (LPCWSTR) MAKEINTRESOURCE(iconindex), IMAGE_ICON, - 0, 0, LR_DEFAULTCOLOR|LR_DEFAULTSIZE); - - if(pSmallIcon != NULL) - *pSmallIcon = (HICON)LoadImageW(shell32_hInstance, - (LPCWSTR) MAKEINTRESOURCE(iconindex), IMAGE_ICON, - 16, 16, LR_DEFAULTCOLOR); -} - -/************************************************************************* - * Printers_RegisterWindowW [SHELL32.213] - * used by "printui.dll": - * find the Window of the given Type for the specific Printer and - * return the already existent hwnd or open a new window - */ -EXTERN_C BOOL WINAPI Printers_RegisterWindowW(LPCWSTR wsPrinter, DWORD dwType, - HANDLE * phClassPidl, HWND * phwnd) -{ - FIXME("(%s, %x, %p (%p), %p (%p)) stub!\n", debugstr_w(wsPrinter), dwType, - phClassPidl, (phClassPidl != NULL) ? *(phClassPidl) : NULL, - phwnd, (phwnd != NULL) ? *(phwnd) : NULL); - - return FALSE; -} - -/************************************************************************* - * Printers_UnregisterWindow [SHELL32.214] - */ -EXTERN_C VOID WINAPI Printers_UnregisterWindow(HANDLE hClassPidl, HWND hwnd) -{ - FIXME("(%p, %p) stub!\n", hClassPidl, hwnd); -} - -/*************************************************************************/ - -typedef struct -{ - LPCWSTR szApp; - LPCWSTR szOtherStuff; - HICON hIcon; -} ABOUT_INFO; - -#define DROP_FIELD_TOP (-15) -#define DROP_FIELD_HEIGHT 15 - -/************************************************************************* - * SHAppBarMessage [SHELL32.@] - */ -UINT_PTR WINAPI SHAppBarMessage(DWORD msg, PAPPBARDATA data) -{ - int width=data->rc.right - data->rc.left; - int height=data->rc.bottom - data->rc.top; - RECT rec=data->rc; - - TRACE("msg=%d, data={cb=%d, hwnd=%p, callback=%x, edge=%d, rc=%s, lparam=%lx}\n", - msg, data->cbSize, data->hWnd, data->uCallbackMessage, data->uEdge, - wine_dbgstr_rect(&data->rc), data->lParam); - - switch (msg) - { - case ABM_GETSTATE: - return ABS_ALWAYSONTOP | ABS_AUTOHIDE; - - case ABM_GETTASKBARPOS: - GetWindowRect(data->hWnd, &rec); - data->rc=rec; - return TRUE; - - case ABM_ACTIVATE: - SetActiveWindow(data->hWnd); - return TRUE; - - case ABM_GETAUTOHIDEBAR: - return 0; /* pretend there is no autohide bar */ - - case ABM_NEW: - /* cbSize, hWnd, and uCallbackMessage are used. All other ignored */ - SetWindowPos(data->hWnd,HWND_TOP,0,0,0,0,SWP_SHOWWINDOW|SWP_NOMOVE|SWP_NOSIZE); - return TRUE; - - case ABM_QUERYPOS: - GetWindowRect(data->hWnd, &(data->rc)); - return TRUE; - - case ABM_REMOVE: - FIXME("ABM_REMOVE broken\n"); - /* FIXME: this is wrong; should it be DestroyWindow instead? */ - /*CloseHandle(data->hWnd);*/ - return TRUE; - - case ABM_SETAUTOHIDEBAR: - SetWindowPos(data->hWnd,HWND_TOP,rec.left+1000,rec.top, - width,height,SWP_SHOWWINDOW); - return TRUE; - - case ABM_SETPOS: - data->uEdge=(ABE_RIGHT | ABE_LEFT); - SetWindowPos(data->hWnd,HWND_TOP,data->rc.left,data->rc.top, - width,height,SWP_SHOWWINDOW); - return TRUE; - - case ABM_WINDOWPOSCHANGED: - return TRUE; - } - - return FALSE; -} - -/************************************************************************* - * SHHelpShortcuts_RunDLLA [SHELL32.@] - * - */ -EXTERN_C DWORD WINAPI SHHelpShortcuts_RunDLLA(DWORD dwArg1, DWORD dwArg2, DWORD dwArg3, DWORD dwArg4) -{ - FIXME("(%x, %x, %x, %x) stub!\n", dwArg1, dwArg2, dwArg3, dwArg4); - return 0; -} - -/************************************************************************* - * SHHelpShortcuts_RunDLLA [SHELL32.@] - * - */ -EXTERN_C DWORD WINAPI SHHelpShortcuts_RunDLLW(DWORD dwArg1, DWORD dwArg2, DWORD dwArg3, DWORD dwArg4) -{ - FIXME("(%x, %x, %x, %x) stub!\n", dwArg1, dwArg2, dwArg3, dwArg4); - return 0; -} - -/************************************************************************* - * SHLoadInProc [SHELL32.@] - * Create an instance of specified object class from within - * the shell process and release it immediately - */ -EXTERN_C HRESULT WINAPI SHLoadInProc (REFCLSID rclsid) -{ - CComPtr<IUnknown> ptr; - - TRACE("%s\n", debugstr_guid(&rclsid)); - - CoCreateInstance(rclsid, NULL, CLSCTX_INPROC_SERVER, IID_IUnknown, (void **)&ptr); - if (ptr) - return S_OK; - return DISP_E_MEMBERNOTFOUND; -} - -static VOID SetRegTextData(HWND hWnd, HKEY hKey, LPCWSTR Value, UINT uID) -{ - DWORD dwBufferSize; - DWORD dwType; - LPWSTR lpBuffer; - - if( RegQueryValueExW(hKey, Value, NULL, &dwType, NULL, &dwBufferSize) == ERROR_SUCCESS ) - { - if(dwType == REG_SZ) - { - lpBuffer = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, dwBufferSize); - - if(lpBuffer) - { - if( RegQueryValueExW(hKey, Value, NULL, &dwType, (LPBYTE)lpBuffer, &dwBufferSize) == ERROR_SUCCESS ) - { - SetDlgItemTextW(hWnd, uID, lpBuffer); - } - - HeapFree(GetProcessHeap(), 0, lpBuffer); - } - } - } -} - -INT_PTR CALLBACK AboutAuthorsDlgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) -{ - switch(msg) - { - case WM_INITDIALOG: - { - const char* const *pstr = SHELL_Authors; - - // Add the authors to the list - SendDlgItemMessageW( hWnd, IDC_ABOUT_AUTHORS_LISTBOX, WM_SETREDRAW, FALSE, 0 ); - - while (*pstr) - { - WCHAR name[64]; - - /* authors list is in utf-8 format */ - MultiByteToWideChar( CP_UTF8, 0, *pstr, -1, name, sizeof(name)/sizeof(WCHAR) ); - SendDlgItemMessageW( hWnd, IDC_ABOUT_AUTHORS_LISTBOX, LB_ADDSTRING, (WPARAM)-1, (LPARAM)name ); - pstr++; - } - - SendDlgItemMessageW( hWnd, IDC_ABOUT_AUTHORS_LISTBOX, WM_SETREDRAW, TRUE, 0 ); - - return TRUE; - } - } - - return FALSE; -} -/************************************************************************* - * AboutDlgProc (internal) - */ -static INT_PTR CALLBACK AboutDlgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) -{ - static DWORD cxLogoBmp; - static DWORD cyLogoBmp; - static HBITMAP hLogoBmp; - static HWND hWndAuthors; - - switch(msg) - { - case WM_INITDIALOG: - { - ABOUT_INFO *info = (ABOUT_INFO *)lParam; - - if (info) - { - const WCHAR szRegKey[] = L"SOFTWARE\Microsoft\Windows NT\CurrentVersion"; - HKEY hRegKey; - MEMORYSTATUSEX MemStat; - WCHAR szAppTitle[512]; - WCHAR szAppTitleTemplate[512]; - WCHAR szAuthorsText[20]; - - // Preload the ROS bitmap - hLogoBmp = (HBITMAP)LoadImage(shell32_hInstance, MAKEINTRESOURCE(IDB_REACTOS), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR); - - if(hLogoBmp) - { - BITMAP bmpLogo; - - GetObject( hLogoBmp, sizeof(BITMAP), &bmpLogo ); - - cxLogoBmp = bmpLogo.bmWidth; - cyLogoBmp = bmpLogo.bmHeight; - } - - // Set App-specific stuff (icon, app name, szOtherStuff string) - SendDlgItemMessageW(hWnd, IDC_ABOUT_ICON, STM_SETICON, (WPARAM)info->hIcon, 0); - - GetWindowTextW( hWnd, szAppTitleTemplate, sizeof(szAppTitleTemplate) / sizeof(WCHAR) ); - swprintf( szAppTitle, szAppTitleTemplate, info->szApp ); - SetWindowTextW( hWnd, szAppTitle ); - - SetDlgItemTextW( hWnd, IDC_ABOUT_APPNAME, info->szApp ); - SetDlgItemTextW( hWnd, IDC_ABOUT_OTHERSTUFF, info->szOtherStuff ); - - // Set the registered user and organization name - if(RegOpenKeyExW( HKEY_LOCAL_MACHINE, szRegKey, 0, KEY_QUERY_VALUE, &hRegKey ) == ERROR_SUCCESS) - { - SetRegTextData( hWnd, hRegKey, L"RegisteredOwner", IDC_ABOUT_REG_USERNAME ); - SetRegTextData( hWnd, hRegKey, L"RegisteredOrganization", IDC_ABOUT_REG_ORGNAME ); - - RegCloseKey( hRegKey ); - } - - // Set the value for the installed physical memory - MemStat.dwLength = sizeof(MemStat); - if( GlobalMemoryStatusEx(&MemStat) ) - { - WCHAR szBuf[12]; - - if (MemStat.ullTotalPhys > 1024 * 1024 * 1024) - { - double dTotalPhys; - WCHAR szDecimalSeparator[4]; - WCHAR szUnits[3]; - - // We're dealing with GBs or more - MemStat.ullTotalPhys /= 1024 * 1024; - - if (MemStat.ullTotalPhys > 1024 * 1024) - { - // We're dealing with TBs or more - MemStat.ullTotalPhys /= 1024; - - if (MemStat.ullTotalPhys > 1024 * 1024) - { - // We're dealing with PBs or more - MemStat.ullTotalPhys /= 1024; - - dTotalPhys = (double)MemStat.ullTotalPhys / 1024; - wcscpy( szUnits, L"PB" ); - } - else - { - dTotalPhys = (double)MemStat.ullTotalPhys / 1024; - wcscpy( szUnits, L"TB" ); - } - } - else - { - dTotalPhys = (double)MemStat.ullTotalPhys / 1024; - wcscpy( szUnits, L"GB" ); - } - - // We need the decimal point of the current locale to display the RAM size correctly - if (GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, - szDecimalSeparator, - sizeof(szDecimalSeparator) / sizeof(WCHAR)) > 0) - { - UCHAR uDecimals; - UINT uIntegral; - - uIntegral = (UINT)dTotalPhys; - uDecimals = (UCHAR)((UINT)(dTotalPhys * 100) - uIntegral * 100); - - // Display the RAM size with 2 decimals - swprintf(szBuf, L"%u%s%02u %s", uIntegral, szDecimalSeparator, uDecimals, szUnits); - } - } - else - { - // We're dealing with MBs, don't show any decimals - swprintf( szBuf, L"%u MB", (UINT)MemStat.ullTotalPhys / 1024 / 1024 ); - } - - SetDlgItemTextW( hWnd, IDC_ABOUT_PHYSMEM, szBuf); - } - - // Add the Authors dialog - hWndAuthors = CreateDialogW( shell32_hInstance, MAKEINTRESOURCEW(IDD_ABOUT_AUTHORS), hWnd, AboutAuthorsDlgProc ); - LoadStringW( shell32_hInstance, IDS_SHELL_ABOUT_AUTHORS, szAuthorsText, sizeof(szAuthorsText) / sizeof(WCHAR) ); - SetDlgItemTextW( hWnd, IDC_ABOUT_AUTHORS, szAuthorsText ); - } - - return TRUE; - } - - case WM_PAINT: - { - if(hLogoBmp) - { - PAINTSTRUCT ps; - HDC hdc; - HDC hdcMem; - - hdc = BeginPaint(hWnd, &ps); - hdcMem = CreateCompatibleDC(hdc); - - if(hdcMem) - { - SelectObject(hdcMem, hLogoBmp); - BitBlt(hdc, 0, 0, cxLogoBmp, cyLogoBmp, hdcMem, 0, 0, SRCCOPY); - - DeleteDC(hdcMem); - } - - EndPaint(hWnd, &ps); - } - }; break; - - case WM_COMMAND: - { - switch(wParam) - { - case IDOK: - case IDCANCEL: - EndDialog(hWnd, TRUE); - return TRUE; - - case IDC_ABOUT_AUTHORS: - { - static BOOL bShowingAuthors = FALSE; - WCHAR szAuthorsText[20]; - - if(bShowingAuthors) - { - LoadStringW( shell32_hInstance, IDS_SHELL_ABOUT_AUTHORS, szAuthorsText, sizeof(szAuthorsText) / sizeof(WCHAR) ); - ShowWindow( hWndAuthors, SW_HIDE ); - } - else - { - LoadStringW( shell32_hInstance, IDS_SHELL_ABOUT_BACK, szAuthorsText, sizeof(szAuthorsText) / sizeof(WCHAR) ); - ShowWindow( hWndAuthors, SW_SHOW ); - } - - SetDlgItemTextW( hWnd, IDC_ABOUT_AUTHORS, szAuthorsText ); - bShowingAuthors = !bShowingAuthors; - return TRUE; - } - } - }; break; - - case WM_CLOSE: - EndDialog(hWnd, TRUE); - break; - } - - return FALSE; -} - - -/************************************************************************* - * ShellAboutA [SHELL32.288] - */ -BOOL WINAPI ShellAboutA( HWND hWnd, LPCSTR szApp, LPCSTR szOtherStuff, HICON hIcon ) -{ - BOOL ret; - LPWSTR appW = NULL, otherW = NULL; - int len; - - if (szApp) - { - len = MultiByteToWideChar(CP_ACP, 0, szApp, -1, NULL, 0); - appW = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); - MultiByteToWideChar(CP_ACP, 0, szApp, -1, appW, len); - } - if (szOtherStuff) - { - len = MultiByteToWideChar(CP_ACP, 0, szOtherStuff, -1, NULL, 0); - otherW = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); - MultiByteToWideChar(CP_ACP, 0, szOtherStuff, -1, otherW, len); - } - - ret = ShellAboutW(hWnd, appW, otherW, hIcon); - - HeapFree(GetProcessHeap(), 0, otherW); - HeapFree(GetProcessHeap(), 0, appW); - return ret; -} - - -/************************************************************************* - * ShellAboutW [SHELL32.289] - */ -BOOL WINAPI ShellAboutW( HWND hWnd, LPCWSTR szApp, LPCWSTR szOtherStuff, - HICON hIcon ) -{ - ABOUT_INFO info; - HRSRC hRes; - DLGTEMPLATE *DlgTemplate; - BOOL bRet; - - TRACE("\n"); - - // DialogBoxIndirectParamW will be called with the hInstance of the calling application, so we have to preload the dialog template - hRes = FindResourceW(shell32_hInstance, MAKEINTRESOURCEW(IDD_ABOUT), (LPWSTR)RT_DIALOG); - if(!hRes) - return FALSE; - - DlgTemplate = (DLGTEMPLATE *)LoadResource(shell32_hInstance, hRes); - if(!DlgTemplate) - return FALSE; - - info.szApp = szApp; - info.szOtherStuff = szOtherStuff; - info.hIcon = hIcon ? hIcon : LoadIconW( 0, (LPWSTR)IDI_WINLOGO ); - - bRet = DialogBoxIndirectParamW((HINSTANCE)GetWindowLongPtrW( hWnd, GWLP_HINSTANCE ), - DlgTemplate, hWnd, AboutDlgProc, (LPARAM)&info ); - return bRet; -} - -/************************************************************************* - * FreeIconList (SHELL32.@) - */ -EXTERN_C void WINAPI FreeIconList( DWORD dw ) -{ - FIXME("%x: stub\n",dw); -} - -/************************************************************************* - * SHLoadNonloadedIconOverlayIdentifiers (SHELL32.@) - */ -EXTERN_C HRESULT WINAPI SHLoadNonloadedIconOverlayIdentifiers(VOID) -{ - FIXME("stub\n"); - return S_OK; -}
Removed: branches/shell-experiments/dll/win32/shell32/shell32_main.h URL: http://svn.reactos.org/svn/reactos/branches/shell-experiments/dll/win32/shel... ============================================================================== --- branches/shell-experiments/dll/win32/shell32/shell32_main.h [iso-8859-1] (original) +++ branches/shell-experiments/dll/win32/shell32/shell32_main.h (removed) @@ -1,199 +0,0 @@ -/* - * internal Shell32 Library definitions - * - * Copyright 1998 Marcus Meissner - * Copyright 1998 Juergen Schmied (jsch) * juergen.schmied@metronet.de - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#ifndef __WINE_SHELL_MAIN_H -#define __WINE_SHELL_MAIN_H - -/******************************************* -* global SHELL32.DLL variables -*/ -extern HMODULE huser32; -extern HINSTANCE shell32_hInstance; -extern HIMAGELIST ShellSmallIconList; -extern HIMAGELIST ShellBigIconList; - -BOOL WINAPI Shell_GetImageLists(HIMAGELIST * lpBigList, HIMAGELIST * lpSmallList); - -/* Iconcache */ -#define INVALID_INDEX -1 -BOOL SIC_Initialize(void); -void SIC_Destroy(void); -BOOL PidlToSicIndex (IShellFolder * sh, LPCITEMIDLIST pidl, BOOL bBigIcon, UINT uFlags, int * pIndex); -INT SIC_GetIconIndex (LPCWSTR sSourceFile, INT dwSourceIndex, DWORD dwFlags ); - -/* Classes Root */ -BOOL HCR_MapTypeToValueW(LPCWSTR szExtension, LPWSTR szFileType, LONG len, BOOL bPrependDot); -BOOL HCR_GetDefaultVerbW( HKEY hkeyClass, LPCWSTR szVerb, LPWSTR szDest, DWORD len ); -BOOL HCR_GetExecuteCommandW( HKEY hkeyClass, LPCWSTR szClass, LPCWSTR szVerb, LPWSTR szDest, DWORD len ); -BOOL HCR_GetIconW(LPCWSTR szClass, LPWSTR szDest, LPCWSTR szName, DWORD len, int* picon_idx); -BOOL HCR_GetIconFromGUIDW(REFIID riid, LPWSTR szDest, LPWSTR szName, DWORD len, int* picon_idx); -BOOL HCR_GetClassNameW(REFIID riid, LPWSTR szDest, DWORD len); - -/* ANSI versions of above functions, supposed to go away as soon as they are not used anymore */ -BOOL HCR_MapTypeToValueA(LPCSTR szExtension, LPSTR szFileType, LONG len, BOOL bPrependDot); -BOOL HCR_GetIconA(LPCSTR szClass, LPSTR szDest, LPCSTR sName, DWORD len, int* picon_idx); -BOOL HCR_GetClassNameA(REFIID riid, LPSTR szDest, DWORD len); - -BOOL HCR_GetFolderAttributes(LPCITEMIDLIST pidlFolder, LPDWORD dwAttributes); -DWORD WINAPI ParseFieldA(LPCSTR src, DWORD nField, LPSTR dst, DWORD len); -DWORD WINAPI ParseFieldW(LPCWSTR src, DWORD nField, LPWSTR dst, DWORD len); - -/**************************************************************************** - * Class constructors - */ -HRESULT IDataObject_Constructor(HWND hwndOwner, LPCITEMIDLIST pMyPidl, LPCITEMIDLIST * apidl, UINT cidl, IDataObject **dataObject); -HRESULT IEnumFORMATETC_Constructor(UINT cfmt, const FORMATETC afmt[], IEnumFORMATETC **enumerator); - -LPCLASSFACTORY IClassFactory_Constructor(REFCLSID); -IContextMenu2 * ISvItemCm_Constructor(LPSHELLFOLDER pSFParent, LPCITEMIDLIST pidl, const LPCITEMIDLIST *aPidls, UINT uItemCount); -HRESULT WINAPI INewItem_Constructor(IUnknown * pUnkOuter, REFIID riif, LPVOID *ppv); -IContextMenu2 * ISvStaticItemCm_Constructor(LPSHELLFOLDER pSFParent, LPCITEMIDLIST pidl, LPCITEMIDLIST *apidl, UINT cidl, HKEY hKey); -IContextMenu2 * ISvBgCm_Constructor(LPSHELLFOLDER pSFParent, BOOL bDesktop); -HRESULT WINAPI IShellView_Constructor(IShellFolder *pFolder, IShellView **newView); - -HRESULT WINAPI IShellLink_ConstructFromFile(IUnknown * pUnkOuter, REFIID riid, LPCITEMIDLIST pidl, LPVOID * ppv); -HRESULT WINAPI IFileSystemBindData_Constructor(const WIN32_FIND_DATAW *pfd, LPBC *ppV); -extern HRESULT CPanel_GetIconLocationW(LPCITEMIDLIST, LPWSTR, UINT, int*); -HRESULT WINAPI CPanel_ExtractIconA(LPITEMIDLIST pidl, LPCSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize); -HRESULT WINAPI CPanel_ExtractIconW(LPITEMIDLIST pidl, LPCWSTR pszFile, UINT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIconSize); - -LPEXTRACTICONA IExtractIconA_Constructor(LPCITEMIDLIST); -LPEXTRACTICONW IExtractIconW_Constructor(LPCITEMIDLIST); - -/* initialisation for FORMATETC */ -#define InitFormatEtc(fe, cf, med) \ - {\ - (fe).cfFormat=cf;\ - (fe).dwAspect=DVASPECT_CONTENT;\ - (fe).ptd=NULL;\ - (fe).tymed=med;\ - (fe).lindex=-1;\ - }; - -#define KeyStateToDropEffect(kst)\ - ((((kst)&(MK_CONTROL|MK_SHIFT))==(MK_CONTROL|MK_SHIFT)) ? DROPEFFECT_LINK :\ - (((kst)&(MK_CONTROL)) ? DROPEFFECT_COPY :\ - (((kst)&(MK_SHIFT)) ? DROPEFFECT_MOVE :\ - DROPEFFECT_NONE))) - - -HGLOBAL RenderHDROP(LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl); -HGLOBAL RenderSHELLIDLIST (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl); -HGLOBAL RenderSHELLIDLISTOFFSET (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl); -HGLOBAL RenderFILECONTENTS (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl); -HGLOBAL RenderFILEDESCRIPTOR (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl); -HGLOBAL RenderFILENAMEA (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl); -HGLOBAL RenderFILENAMEW (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl); -HGLOBAL RenderPREFEREDDROPEFFECT (DWORD dwFlags); - -/* Change Notification */ -void InitChangeNotifications(void); -void FreeChangeNotifications(void); -void InitIconOverlays(void); - -/* file operation */ -#define ASK_DELETE_FILE 1 -#define ASK_DELETE_FOLDER 2 -#define ASK_DELETE_MULTIPLE_ITEM 3 -#define ASK_CREATE_FOLDER 4 -#define ASK_OVERWRITE_FILE 5 -#define ASK_DELETE_SELECTED 6 -#define ASK_TRASH_FILE 7 -#define ASK_TRASH_FOLDER 8 -#define ASK_TRASH_MULTIPLE_ITEM 9 -#define ASK_CANT_TRASH_ITEM 10 -#define ASK_OVERWRITE_FOLDER 11 - -BOOL SHELL_DeleteDirectoryW(HWND hwnd, LPCWSTR pwszDir, BOOL bShowUI); -BOOL SHELL_ConfirmYesNoW(HWND hWnd, int nKindOfDialog, LPCWSTR szDir); - -void WINAPI _InsertMenuItemW (HMENU hmenu, UINT indexMenu, BOOL fByPosition, - UINT wID, UINT fType, LPCWSTR dwTypeData, UINT fState); - -static __inline BOOL SHELL_OsIsUnicode(void) -{ - /* if high-bit of version is 0, we are emulating NT */ - return !(GetVersion() & 0x80000000); -} - -#define __SHFreeAndNil(ptr) \ - {\ - SHFree(*ptr); \ - *ptr = NULL; \ - }; -static __inline void __SHCloneStrA(char **target, const char *source) -{ - *target = (char *)SHAlloc(strlen(source) + 1); - strcpy(*target, source); -} - -static __inline void __SHCloneStrWtoA(char **target, const WCHAR *source) -{ - int len = WideCharToMultiByte(CP_ACP, 0, source, -1, NULL, 0, NULL, NULL); - *target = (char *)SHAlloc(len); - WideCharToMultiByte(CP_ACP, 0, source, -1, *target, len, NULL, NULL); -} - -static __inline void __SHCloneStrW(WCHAR **target, const WCHAR *source) -{ - *target = (WCHAR *)SHAlloc((lstrlenW(source) + 1) * sizeof(WCHAR) ); - lstrcpyW(*target, source); -} - -static __inline LPWSTR __SHCloneStrAtoW(WCHAR **target, const char *source) -{ - int len = MultiByteToWideChar(CP_ACP, 0, source, -1, NULL, 0); - *target = (WCHAR *)SHAlloc(len * sizeof(WCHAR)); - MultiByteToWideChar(CP_ACP, 0, source, -1, *target, len); - return *target; -} - -/* handle conversions */ -#define HICON_16(h32) (LOWORD(h32)) -#define HICON_32(h16) ((HICON)(ULONG_PTR)(h16)) -#define HINSTANCE_32(h16) ((HINSTANCE)(ULONG_PTR)(h16)) -#define HINSTANCE_16(h32) (LOWORD(h32)) - -extern WCHAR swShell32Name[MAX_PATH]; - -BOOL UNIXFS_is_rooted_at_desktop(void); -extern const GUID CLSID_UnixFolder; -extern const GUID CLSID_UnixDosFolder; - -/* Default shell folder value registration */ -EXTERN_C HRESULT SHELL_RegisterShellFolders(void); - -/* Detect Shell Links */ -BOOL SHELL_IsShortcut(LPCITEMIDLIST); - -INT_PTR CALLBACK SH_FileGeneralDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); -INT_PTR CALLBACK SH_FileVersionDlgProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); -HPROPSHEETPAGE SH_CreatePropertySheetPage(WORD wDialogId, DLGPROC pfnDlgProc, LPARAM lParam, LPCWSTR pwszTitle); -BOOL SH_ShowDriveProperties(WCHAR *drive, LPCITEMIDLIST pidlFolder, LPCITEMIDLIST *apidl); -BOOL SH_ShowRecycleBinProperties(WCHAR sDrive); -BOOL SH_ShowPropertiesDialog(LPCWSTR pwszPath, LPCITEMIDLIST pidlFolder, LPCITEMIDLIST *apidl); -BOOL SH_ShowFolderProperties(LPWSTR pwszFolder, LPCITEMIDLIST pidlFolder, LPCITEMIDLIST *apidl); -LPWSTR SH_FormatFileSizeWithBytes(PULARGE_INTEGER lpQwSize, LPWSTR pszBuf, UINT cchBuf); - -EXTERN_C HRESULT WINAPI DoRegisterServer(void); -EXTERN_C HRESULT WINAPI DoUnregisterServer(void); - -#endif /* __WINE_SHELL_MAIN_H */
Copied: branches/shell-experiments/dll/win32/shell32/wine/shell32_main.c (from r65215, branches/shell-experiments/dll/win32/shell32/shell32_main.cpp) URL: http://svn.reactos.org/svn/reactos/branches/shell-experiments/dll/win32/shel... ============================================================================== --- branches/shell-experiments/dll/win32/shell32/shell32_main.cpp [iso-8859-1] (original) +++ branches/shell-experiments/dll/win32/shell32/wine/shell32_main.c [iso-8859-1] Mon Nov 3 12:17:30 2014 @@ -19,7 +19,25 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-#include "precomp.h" +#include <wine/config.h> + +#define WIN32_NO_STATUS +#define _INC_WINDOWS +#define COBJMACROS + +#include <windef.h> +#include <winbase.h> +#include <shellapi.h> +#include <shlobj.h> +#include <shlwapi.h> + +#include "undocshell.h" +#include "pidl.h" +#include "shell32_main.h" +#include "shresdef.h" + +#include <wine/debug.h> +#include <wine/unicode.h>
#include <reactos/version.h>
@@ -27,7 +45,6 @@
const char * const SHELL_Authors[] = { "Copyright 1993-"COPYRIGHT_YEAR" WINE team", "Copyright 1998-"COPYRIGHT_YEAR" ReactOS Team", 0 };
-#define MORE_DEBUG 1 /************************************************************************* * CommandLineToArgvW [SHELL32.@] * @@ -75,11 +92,11 @@ /* Return the path to the executable */ DWORD len, deslen=MAX_PATH, size;
- size = sizeof(LPWSTR) + deslen*sizeof(WCHAR) + sizeof(LPWSTR); + size = sizeof(LPWSTR)*2 + deslen*sizeof(WCHAR); for (;;) { - if (!(argv = (LPWSTR *)LocalAlloc(LMEM_FIXED, size))) return NULL; - len = GetModuleFileNameW(0, (LPWSTR)(argv+1), deslen); + if (!(argv = LocalAlloc(LMEM_FIXED, size))) return NULL; + len = GetModuleFileNameW(0, (LPWSTR)(argv+2), deslen); if (!len) { LocalFree(argv); @@ -87,10 +104,11 @@ } if (len < deslen) break; deslen*=2; - size = sizeof(LPWSTR) + deslen*sizeof(WCHAR) + sizeof(LPWSTR); + size = sizeof(LPWSTR)*2 + deslen*sizeof(WCHAR); LocalFree( argv ); } - argv[0]=(LPWSTR)(argv+1); + argv[0]=(LPWSTR)(argv+2); + argv[1]=NULL; *numargs=1;
return argv; @@ -168,10 +186,10 @@ * with it. This way the caller can make a single LocalFree() call to free * both, as per MSDN. */ - argv=(LPWSTR *)LocalAlloc(LMEM_FIXED, argc*sizeof(LPWSTR)+(strlenW(lpCmdline)+1)*sizeof(WCHAR)); + argv=LocalAlloc(LMEM_FIXED, (argc+1)*sizeof(LPWSTR)+(strlenW(lpCmdline)+1)*sizeof(WCHAR)); if (!argv) return NULL; - cmdline=(LPWSTR)(argv+argc); + cmdline=(LPWSTR)(argv+argc+1); strcpyW(cmdline, lpCmdline);
/* --- Then split and copy the arguments */ @@ -209,6 +227,7 @@ if (!*s) { /* There are no parameters so we are all done */ + argv[argc]=NULL; *numargs=argc; return argv; } @@ -280,6 +299,7 @@ } } *d='\0'; + argv[argc]=NULL; *numargs=argc;
return argv; @@ -319,20 +339,17 @@
SetFilePointer( hfile, mz_header.e_lfanew, NULL, SEEK_SET ); ReadFile( hfile, magic, sizeof(magic), &len, NULL ); - if ( *(DWORD*)magic == IMAGE_NT_SIGNATURE ) { SetFilePointer( hfile, mz_header.e_lfanew, NULL, SEEK_SET ); ReadFile( hfile, &nt, sizeof(nt), &len, NULL ); CloseHandle( hfile ); - /* DLL files are not executable and should return 0 */ if (nt.FileHeader.Characteristics & IMAGE_FILE_DLL) return 0; - if (nt.OptionalHeader.Subsystem == IMAGE_SUBSYSTEM_WINDOWS_GUI) { - return IMAGE_NT_SIGNATURE | + return IMAGE_NT_SIGNATURE | (nt.OptionalHeader.MajorSubsystemVersion << 24) | (nt.OptionalHeader.MinorSubsystemVersion << 16); } @@ -344,7 +361,6 @@ SetFilePointer( hfile, mz_header.e_lfanew, NULL, SEEK_SET ); ReadFile( hfile, &ne, sizeof(ne), &len, NULL ); CloseHandle( hfile ); - if (ne.ne_exetyp == 2) return IMAGE_OS2_SIGNATURE | (ne.ne_expver << 16); return 0; @@ -354,7 +370,7 @@ }
/************************************************************************* - * SHELL_IsShortcut [internal] + * SHELL_IsShortcut [internal] * * Decide if an item id list points to a shell shortcut */ @@ -397,8 +413,8 @@ int iIndex; DWORD_PTR ret = TRUE; DWORD dwAttributes = 0; - CComPtr<IShellFolder> psfParent; - CComPtr<IExtractIconW> pei; + IShellFolder * psfParent = NULL; + IExtractIconW * pei = NULL; LPITEMIDLIST pidlLast = NULL, pidl = NULL; HRESULT hr = S_OK; BOOL IconNotYetLoaded=TRUE; @@ -409,7 +425,7 @@ psfi, psfi->dwAttributes, sizeofpsfi, flags);
if (!path) - return FALSE; + return FALSE;
/* windows initializes these values regardless of the flags */ if (psfi != NULL) @@ -467,7 +483,7 @@ /* get the parent shellfolder */ if (pidl) { - hr = SHBindToParent( pidl, IID_PPV_ARG(IShellFolder, &psfParent), + hr = SHBindToParent( pidl, &IID_IShellFolder, (LPVOID*)&psfParent, (LPCITEMIDLIST*)&pidlLast ); if (SUCCEEDED(hr)) pidlLast = ILClone(pidlLast); @@ -487,22 +503,22 @@ { psfi->dwAttributes = 0xffffffff; } - if (psfParent != NULL) - psfParent->GetAttributesOf(1, (LPCITEMIDLIST*)&pidlLast, + if (psfParent) + IShellFolder_GetAttributesOf( psfParent, 1, (LPCITEMIDLIST*)&pidlLast, &(psfi->dwAttributes) ); }
/* get the displayname */ if (SUCCEEDED(hr) && (flags & SHGFI_DISPLAYNAME)) { - if (flags & SHGFI_USEFILEATTRIBUTES) - { - wcscpy (psfi->szDisplayName, PathFindFileNameW(szFullPath)); + if (flags & SHGFI_USEFILEATTRIBUTES && !(flags & SHGFI_PIDL)) + { + lstrcpyW (psfi->szDisplayName, PathFindFileNameW(szFullPath)); } else { STRRET str; - hr = psfParent->GetDisplayNameOf(pidlLast, + hr = IShellFolder_GetDisplayNameOf( psfParent, pidlLast, SHGDN_INFOLDER, &str); StrRetToStrNW (psfi->szDisplayName, MAX_PATH, &str, pidlLast); } @@ -514,7 +530,7 @@ static const WCHAR szFile[] = { 'F','i','l','e',0 }; static const WCHAR szDashFile[] = { '-','f','i','l','e',0 };
- if (!(flags & SHGFI_USEFILEATTRIBUTES)) + if (!(flags & SHGFI_USEFILEATTRIBUTES) || (flags & SHGFI_PIDL)) { char ftype[80];
@@ -524,17 +540,17 @@ else { if (dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - wcscat (psfi->szTypeName, szFile); - else + strcatW (psfi->szTypeName, szFile); + else { WCHAR sTemp[64];
- wcscpy(sTemp,PathFindExtensionW(szFullPath)); + lstrcpyW(sTemp,PathFindExtensionW(szFullPath)); if (!( HCR_MapTypeToValueW(sTemp, sTemp, 64, TRUE) && HCR_MapTypeToValueW(sTemp, psfi->szTypeName, 80, FALSE ))) { lstrcpynW (psfi->szTypeName, sTemp, 64); - wcscat (psfi->szTypeName, szDashFile); + strcatW (psfi->szTypeName, szDashFile); } } } @@ -565,13 +581,13 @@ /* get the iconlocation */ if (SUCCEEDED(hr) && (flags & SHGFI_ICONLOCATION )) { - UINT uFlags; - - if (flags & SHGFI_USEFILEATTRIBUTES) + UINT uDummy,uFlags; + + if (flags & SHGFI_USEFILEATTRIBUTES && !(flags & SHGFI_PIDL)) { if (dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { - wcscpy(psfi->szDisplayName, swShell32Name); + lstrcpyW(psfi->szDisplayName, swShell32Name); psfi->iIcon = -IDI_SHELL_FOLDER; } else @@ -587,11 +603,11 @@ HCR_GetIconW(sTemp, sTemp, NULL, MAX_PATH, &psfi->iIcon)) { if (lstrcmpW(p1W, sTemp)) - wcscpy(psfi->szDisplayName, sTemp); + strcpyW(psfi->szDisplayName, sTemp); else { /* the icon is in the file */ - wcscpy(psfi->szDisplayName, szFullPath); + strcpyW(psfi->szDisplayName, szFullPath); } } else @@ -600,20 +616,22 @@ } else { - hr = psfParent->GetUIObjectOf(0, 1, - (LPCITEMIDLIST*)&pidlLast, IID_NULL_PPV_ARG(IExtractIconW, &pei)); + hr = IShellFolder_GetUIObjectOf(psfParent, 0, 1, + (LPCITEMIDLIST*)&pidlLast, &IID_IExtractIconW, + &uDummy, (LPVOID*)&pei); if (SUCCEEDED(hr)) { - hr = pei->GetIconLocation(uGilFlags, + hr = IExtractIconW_GetIconLocation(pei, uGilFlags, szLocation, MAX_PATH, &iIndex, &uFlags);
if (uFlags & GIL_NOTFILENAME) ret = FALSE; else { - wcscpy (psfi->szDisplayName, szLocation); + lstrcpyW (psfi->szDisplayName, szLocation); psfi->iIcon = iIndex; } + IExtractIconW_Release(pei); } } } @@ -642,15 +660,15 @@ HCR_GetIconW(sTemp, sTemp, NULL, MAX_PATH, &icon_idx)) { if (!lstrcmpW(p1W,sTemp)) /* icon is in the file */ - wcscpy(sTemp, szFullPath); - - if (flags & SHGFI_SYSICONINDEX) + strcpyW(sTemp, szFullPath); + + if (flags & SHGFI_SYSICONINDEX) { psfi->iIcon = SIC_GetIconIndex(sTemp,icon_idx,0); if (psfi->iIcon == -1) psfi->iIcon = 0; } - else + else { UINT ret; if (flags & SHGFI_SMALLICON) @@ -663,8 +681,7 @@ GetSystemMetrics( SM_CXICON), GetSystemMetrics( SM_CYICON), &psfi->hIcon, 0, 1, 0); - - if (ret != 0 && ret != 0xFFFFFFFF) + if (ret != 0 && ret != (UINT)-1) { IconNotYetLoaded=FALSE; psfi->iIcon = icon_idx; @@ -707,11 +724,9 @@
SHFree(pidlLast);
-#ifdef MORE_DEBUG TRACE ("icon=%p index=0x%08x attr=0x%08x name=%s type=%s ret=0x%08lx\n", psfi->hIcon, psfi->iIcon, psfi->dwAttributes, debugstr_w(psfi->szDisplayName), debugstr_w(psfi->szTypeName), ret); -#endif
return ret; } @@ -731,7 +746,7 @@ INT len; LPWSTR temppath = NULL; LPCWSTR pathW; - DWORD ret; + DWORD_PTR ret; SHFILEINFOW temppsfi;
if (flags & SHGFI_PIDL) @@ -742,7 +757,7 @@ else { len = MultiByteToWideChar(CP_ACP, 0, path, -1, NULL, 0); - temppath = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR)); + temppath = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR)); MultiByteToWideChar(CP_ACP, 0, path, -1, temppath, len); pathW = temppath; } @@ -783,7 +798,7 @@ /************************************************************************* * DuplicateIcon [SHELL32.@] */ -EXTERN_C HICON WINAPI DuplicateIcon( HINSTANCE hInstance, HICON hIcon) +HICON WINAPI DuplicateIcon( HINSTANCE hInstance, HICON hIcon) { ICONINFO IconInfo; HICON hDupIcon = 0; @@ -806,10 +821,10 @@ * ExtractIconA [SHELL32.@] */ HICON WINAPI ExtractIconA(HINSTANCE hInstance, LPCSTR lpszFile, UINT nIconIndex) -{ +{ HICON ret; INT len = MultiByteToWideChar(CP_ACP, 0, lpszFile, -1, NULL, 0); - LPWSTR lpwstrFile = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + LPWSTR lpwstrFile = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
TRACE("%p %s %d\n", hInstance, lpszFile, nIconIndex);
@@ -831,17 +846,17 @@
TRACE("%p %s %d\n", hInstance, debugstr_w(lpszFile), nIconIndex);
- if (nIconIndex == 0xFFFFFFFF) + if (nIconIndex == (UINT)-1) { ret = PrivateExtractIconsW(lpszFile, 0, cx, cy, NULL, NULL, 0, LR_DEFAULTCOLOR); - if (ret != 0xFFFFFFFF && ret) + if (ret != (UINT)-1 && ret) return (HICON)(UINT_PTR)ret; return NULL; } else ret = PrivateExtractIconsW(lpszFile, nIconIndex, cx, cy, &hIcon, NULL, 1, LR_DEFAULTCOLOR);
- if (ret == 0xFFFFFFFF) + if (ret == (UINT)-1) return (HICON)1; else if (ret > 0 && hIcon) return hIcon; @@ -852,7 +867,7 @@ /************************************************************************* * Printer_LoadIconsW [SHELL32.205] */ -EXTERN_C VOID WINAPI Printer_LoadIconsW(LPCWSTR wsPrinterName, HICON * pLargeIcon, HICON * pSmallIcon) +VOID WINAPI Printer_LoadIconsW(LPCWSTR wsPrinterName, HICON * pLargeIcon, HICON * pSmallIcon) { INT iconindex=IDI_SHELL_PRINTERS_FOLDER;
@@ -870,12 +885,12 @@ }
if(pLargeIcon != NULL) - *pLargeIcon = (HICON)LoadImageW(shell32_hInstance, + *pLargeIcon = LoadImageW(shell32_hInstance, (LPCWSTR) MAKEINTRESOURCE(iconindex), IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR|LR_DEFAULTSIZE);
if(pSmallIcon != NULL) - *pSmallIcon = (HICON)LoadImageW(shell32_hInstance, + *pSmallIcon = LoadImageW(shell32_hInstance, (LPCWSTR) MAKEINTRESOURCE(iconindex), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR); } @@ -883,10 +898,10 @@ /************************************************************************* * Printers_RegisterWindowW [SHELL32.213] * used by "printui.dll": - * find the Window of the given Type for the specific Printer and + * find the Window of the given Type for the specific Printer and * return the already existent hwnd or open a new window */ -EXTERN_C BOOL WINAPI Printers_RegisterWindowW(LPCWSTR wsPrinter, DWORD dwType, +BOOL WINAPI Printers_RegisterWindowW(LPCWSTR wsPrinter, DWORD dwType, HANDLE * phClassPidl, HWND * phwnd) { FIXME("(%s, %x, %p (%p), %p (%p)) stub!\n", debugstr_w(wsPrinter), dwType, @@ -894,12 +909,12 @@ phwnd, (phwnd != NULL) ? *(phwnd) : NULL);
return FALSE; -} +}
/************************************************************************* * Printers_UnregisterWindow [SHELL32.214] */ -EXTERN_C VOID WINAPI Printers_UnregisterWindow(HANDLE hClassPidl, HWND hwnd) +VOID WINAPI Printers_UnregisterWindow(HANDLE hClassPidl, HWND hwnd) { FIXME("(%p, %p) stub!\n", hClassPidl, hwnd); } @@ -983,7 +998,7 @@ * SHHelpShortcuts_RunDLLA [SHELL32.@] * */ -EXTERN_C DWORD WINAPI SHHelpShortcuts_RunDLLA(DWORD dwArg1, DWORD dwArg2, DWORD dwArg3, DWORD dwArg4) +DWORD WINAPI SHHelpShortcuts_RunDLLA(DWORD dwArg1, DWORD dwArg2, DWORD dwArg3, DWORD dwArg4) { FIXME("(%x, %x, %x, %x) stub!\n", dwArg1, dwArg2, dwArg3, dwArg4); return 0; @@ -993,7 +1008,7 @@ * SHHelpShortcuts_RunDLLA [SHELL32.@] * */ -EXTERN_C DWORD WINAPI SHHelpShortcuts_RunDLLW(DWORD dwArg1, DWORD dwArg2, DWORD dwArg3, DWORD dwArg4) +DWORD WINAPI SHHelpShortcuts_RunDLLW(DWORD dwArg1, DWORD dwArg2, DWORD dwArg3, DWORD dwArg4) { FIXME("(%x, %x, %x, %x) stub!\n", dwArg1, dwArg2, dwArg3, dwArg4); return 0; @@ -1004,13 +1019,13 @@ * Create an instance of specified object class from within * the shell process and release it immediately */ -EXTERN_C HRESULT WINAPI SHLoadInProc (REFCLSID rclsid) -{ - CComPtr<IUnknown> ptr; - - TRACE("%s\n", debugstr_guid(&rclsid)); - - CoCreateInstance(rclsid, NULL, CLSCTX_INPROC_SERVER, IID_IUnknown, (void **)&ptr); +HRESULT WINAPI SHLoadInProc (REFCLSID rclsid) +{ + void *ptr = NULL; + + TRACE("%s\n", debugstr_guid(rclsid)); + + CoCreateInstance(rclsid, NULL, CLSCTX_INPROC_SERVER, &IID_IUnknown,&ptr); if (ptr) return S_OK; return DISP_E_MEMBERNOTFOUND; @@ -1260,7 +1275,7 @@ break; }
- return FALSE; + return 0; }
@@ -1276,13 +1291,13 @@ if (szApp) { len = MultiByteToWideChar(CP_ACP, 0, szApp, -1, NULL, 0); - appW = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + appW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); MultiByteToWideChar(CP_ACP, 0, szApp, -1, appW, len); } if (szOtherStuff) { len = MultiByteToWideChar(CP_ACP, 0, szOtherStuff, -1, NULL, 0); - otherW = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + otherW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); MultiByteToWideChar(CP_ACP, 0, szOtherStuff, -1, otherW, len); }
@@ -1328,7 +1343,7 @@ /************************************************************************* * FreeIconList (SHELL32.@) */ -EXTERN_C void WINAPI FreeIconList( DWORD dw ) +void WINAPI FreeIconList( DWORD dw ) { FIXME("%x: stub\n",dw); } @@ -1336,7 +1351,7 @@ /************************************************************************* * SHLoadNonloadedIconOverlayIdentifiers (SHELL32.@) */ -EXTERN_C HRESULT WINAPI SHLoadNonloadedIconOverlayIdentifiers(VOID) +HRESULT WINAPI SHLoadNonloadedIconOverlayIdentifiers( VOID ) { FIXME("stub\n"); return S_OK;
Copied: branches/shell-experiments/dll/win32/shell32/wine/shell32_main.h (from r65212, branches/shell-experiments/dll/win32/shell32/shell32_main.h) URL: http://svn.reactos.org/svn/reactos/branches/shell-experiments/dll/win32/shel... ============================================================================== --- branches/shell-experiments/dll/win32/shell32/shell32_main.h [iso-8859-1] (original) +++ branches/shell-experiments/dll/win32/shell32/wine/shell32_main.h [iso-8859-1] Mon Nov 3 12:17:30 2014 @@ -21,6 +21,10 @@
#ifndef __WINE_SHELL_MAIN_H #define __WINE_SHELL_MAIN_H + +#ifdef __cplusplus +extern "C" { +#endif
/******************************************* * global SHELL32.DLL variables @@ -179,7 +183,7 @@ extern const GUID CLSID_UnixDosFolder;
/* Default shell folder value registration */ -EXTERN_C HRESULT SHELL_RegisterShellFolders(void); +HRESULT SHELL_RegisterShellFolders(void);
/* Detect Shell Links */ BOOL SHELL_IsShortcut(LPCITEMIDLIST); @@ -193,7 +197,11 @@ BOOL SH_ShowFolderProperties(LPWSTR pwszFolder, LPCITEMIDLIST pidlFolder, LPCITEMIDLIST *apidl); LPWSTR SH_FormatFileSizeWithBytes(PULARGE_INTEGER lpQwSize, LPWSTR pszBuf, UINT cchBuf);
-EXTERN_C HRESULT WINAPI DoRegisterServer(void); -EXTERN_C HRESULT WINAPI DoUnregisterServer(void); +HRESULT WINAPI DoRegisterServer(void); +HRESULT WINAPI DoUnregisterServer(void); + +#ifdef __cplusplus +} /* extern "C" */ +#endif
#endif /* __WINE_SHELL_MAIN_H */
Modified: branches/shell-experiments/dll/win32/shell32/wine/shellole.c URL: http://svn.reactos.org/svn/reactos/branches/shell-experiments/dll/win32/shel... ============================================================================== --- branches/shell-experiments/dll/win32/shell32/wine/shellole.c [iso-8859-1] (original) +++ branches/shell-experiments/dll/win32/shell32/wine/shellole.c [iso-8859-1] Mon Nov 3 12:17:30 2014 @@ -36,10 +36,11 @@ #include <shlobj.h> #include <shlwapi.h> #include <debughlp.h> -#include <shell32_main.h>
#include <wine/debug.h> #include <wine/unicode.h> + +#include "shell32_main.h"
WINE_DEFAULT_DEBUG_CHANNEL(shell);