- sync rest of shell32 excluding resources to wine

svn path=/trunk/; revision=29507
This commit is contained in:
Johannes Anderwald 2007-10-11 18:07:01 +00:00
parent b817f334af
commit 7f50b9b826
49 changed files with 4243 additions and 4879 deletions

View file

@ -18,6 +18,9 @@
* FIXME:
* - many memory leaks
* - many flags unimplemented
* - implement new dialog style "make new folder" button
* - implement editbox
* - implement new dialog style resizing
*/
#include <stdlib.h>
@ -29,7 +32,6 @@
#include "wine/debug.h"
#include "undocshell.h"
#include "shlguid.h"
#include "pidl.h"
#include "shell32_main.h"
#include "shellapi.h"
@ -57,6 +59,8 @@ typedef struct tagTV_ITEMDATA
BIF_BROWSEFORCOMPUTER | \
BIF_RETURNFSANCESTORS | \
BIF_RETURNONLYFSDIRS | \
BIF_NONEWFOLDERBUTTON | \
BIF_NEWDIALOGSTYLE | \
BIF_BROWSEINCLUDEFILES)
static void FillTreeView(browse_info*, LPSHELLFOLDER,
@ -175,7 +179,7 @@ static void InitializeTreeView( browse_info *info )
IShellFolder_Release(lpsfParent);
}
static int GetIcon(LPITEMIDLIST lpi, UINT uFlags)
static int GetIcon(LPCITEMIDLIST lpi, UINT uFlags)
{
SHFILEINFOW sfi;
SHGetFileInfoW((LPCWSTR)lpi, 0 ,&sfi, sizeof(SHFILEINFOW), uFlags);
@ -264,7 +268,7 @@ static HTREEITEM InsertTreeViewItem( browse_info *info, IShellFolder * lpsf,
tvi.cChildren= pEnumIL ? 1 : 0;
tvi.mask |= TVIF_CHILDREN;
lptvid = (LPTV_ITEMDATA)SHAlloc( sizeof(TV_ITEMDATA) );
lptvid = SHAlloc( sizeof(TV_ITEMDATA) );
if (!lptvid)
return NULL;
@ -495,6 +499,8 @@ static BOOL BrsFolder_OnCreate( HWND hWnd, browse_info *info )
info->hWnd = hWnd;
SetPropW( hWnd, szBrowseFolderInfo, info );
if (lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE)
FIXME("flags BIF_NEWDIALOGSTYLE partially implemented\n");
if (lpBrowseInfo->ulFlags & ~SUPPORTEDFLAGS)
FIXME("flags %x not implemented\n", lpBrowseInfo->ulFlags & ~SUPPORTEDFLAGS);
@ -503,12 +509,37 @@ static BOOL BrsFolder_OnCreate( HWND hWnd, browse_info *info )
else
ShowWindow( GetDlgItem(hWnd, IDD_TITLE), SW_HIDE );
if (!(lpBrowseInfo->ulFlags & BIF_STATUSTEXT))
if (!(lpBrowseInfo->ulFlags & BIF_STATUSTEXT)
|| (lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE))
ShowWindow( GetDlgItem(hWnd, IDD_STATUS), SW_HIDE );
/* Hide "Make New Folder" Button? */
if ((lpBrowseInfo->ulFlags & BIF_NONEWFOLDERBUTTON)
|| !(lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE))
ShowWindow( GetDlgItem(hWnd, IDD_MAKENEWFOLDER), SW_HIDE );
/* Hide the editbox? */
if (!(lpBrowseInfo->ulFlags & BIF_EDITBOX))
{
ShowWindow( GetDlgItem(hWnd, IDD_FOLDER), SW_HIDE );
ShowWindow( GetDlgItem(hWnd, IDD_FOLDERTEXT), SW_HIDE );
}
info->hwndTreeView = GetDlgItem( hWnd, IDD_TREEVIEW );
if (info->hwndTreeView)
{
InitializeTreeView( info );
/* Resize the treeview if there's not editbox */
if ((lpBrowseInfo->ulFlags & BIF_NEWDIALOGSTYLE)
&& !(lpBrowseInfo->ulFlags & BIF_EDITBOX))
{
RECT rc;
GetClientRect(info->hwndTreeView, &rc);
SetWindowPos(info->hwndTreeView, HWND_TOP, 0, 0,
rc.right, rc.bottom + 40, SWP_NOMOVE);
}
}
else
ERR("treeview control missing!\n");
@ -524,7 +555,10 @@ static BOOL BrsFolder_OnCommand( browse_info *info, UINT id )
switch (id)
{
case IDOK:
info->pidlRet = ILClone(info->pidlRet); /* The original pidl will be free'd. */
/* The original pidl is owned by the treeview and will be free'd. */
info->pidlRet = ILClone(info->pidlRet);
if (info->pidlRet == NULL) /* A null pidl would mean a cancel */
info->pidlRet = _ILCreateDesktop();
pdump( info->pidlRet );
if (lpBrowseInfo->pszDisplayName)
SHGetPathFromIDListW( info->pidlRet, lpBrowseInfo->pszDisplayName );
@ -534,6 +568,10 @@ static BOOL BrsFolder_OnCommand( browse_info *info, UINT id )
case IDCANCEL:
EndDialog( info->hWnd, 0 );
return TRUE;
case IDD_MAKENEWFOLDER:
FIXME("make new folder not implemented\n");
return TRUE;
}
return FALSE;
}
@ -652,7 +690,7 @@ static INT_PTR CALLBACK BrsFolderDlgProc( HWND hWnd, UINT msg, WPARAM wParam,
{
browse_info *info;
TRACE("hwnd=%p msg=%04x 0x%08x 0x%08lx\n", hWnd, msg, wParam, lParam );
TRACE("hwnd=%p msg=%04x 0x%08lx 0x%08lx\n", hWnd, msg, wParam, lParam );
if (msg == WM_INITDIALOG)
return BrsFolder_OnCreate( hWnd, (browse_info*) lParam );
@ -701,6 +739,8 @@ static INT_PTR CALLBACK BrsFolderDlgProc( HWND hWnd, UINT msg, WPARAM wParam,
static const WCHAR swBrowseTemplateName[] = {
'S','H','B','R','S','F','O','R','F','O','L','D','E','R','_','M','S','G','B','O','X',0};
static const WCHAR swNewBrowseTemplateName[] = {
'S','H','N','E','W','B','R','S','F','O','R','F','O','L','D','E','R','_','M','S','G','B','O','X',0};
/*************************************************************************
* SHBrowseForFolderA [SHELL32.@]
@ -763,6 +803,7 @@ LPITEMIDLIST WINAPI SHBrowseForFolderW (LPBROWSEINFOW lpbi)
browse_info info;
DWORD r;
HRESULT hr;
const WCHAR * templateName;
info.hWnd = 0;
info.pidlRet = NULL;
@ -770,7 +811,12 @@ LPITEMIDLIST WINAPI SHBrowseForFolderW (LPBROWSEINFOW lpbi)
info.hwndTreeView = NULL;
hr = OleInitialize(NULL);
r = DialogBoxParamW( shell32_hInstance, swBrowseTemplateName, lpbi->hwndOwner,
if (lpbi->ulFlags & BIF_NEWDIALOGSTYLE)
templateName = swNewBrowseTemplateName;
else
templateName = swBrowseTemplateName;
r = DialogBoxParamW( shell32_hInstance, templateName, lpbi->hwndOwner,
BrsFolderDlgProc, (LPARAM)&info );
if (SUCCEEDED(hr))
OleUninitialize();

View file

@ -16,7 +16,7 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
@ -117,30 +117,86 @@ BOOL HCR_MapTypeToValueA(LPCSTR szExtension, LPSTR szFileType, LONG len, BOOL bP
return TRUE;
}
static const WCHAR swShell[] = {'s','h','e','l','l','\\',0};
static const WCHAR swOpen[] = {'o','p','e','n',0};
static const WCHAR swCommand[] = {'\\','c','o','m','m','a','n','d',0};
BOOL HCR_GetDefaultVerbW( HKEY hkeyClass, LPCWSTR szVerb, LPWSTR szDest, DWORD len )
{
WCHAR sTemp[MAX_PATH];
LONG size;
HKEY hkey;
TRACE("%p %s %p\n", hkeyClass, debugstr_w(szVerb), szDest);
if (szVerb)
{
lstrcpynW(szDest, szVerb, len);
return TRUE;
}
size=len;
*szDest='\0';
if (!RegQueryValueW(hkeyClass, swShell, szDest, &size) && *szDest)
{
/* The MSDN says to first try the default verb */
lstrcpyW(sTemp, swShell);
lstrcatW(sTemp, szDest);
lstrcatW(sTemp, swCommand);
if (!RegOpenKeyExW(hkeyClass, sTemp, 0, 0, &hkey))
{
RegCloseKey(hkey);
TRACE("default verb=%s\n", debugstr_w(szDest));
return TRUE;
}
}
/* then fallback to 'open' */
lstrcpyW(sTemp, swShell);
lstrcatW(sTemp, swOpen);
lstrcatW(sTemp, swCommand);
if (!RegOpenKeyExW(hkeyClass, sTemp, 0, 0, &hkey))
{
RegCloseKey(hkey);
lstrcpynW(szDest, swOpen, len);
TRACE("default verb=open\n");
return TRUE;
}
/* and then just use the first verb on Windows >= 2000 */
if (!RegEnumKeyW(hkeyClass, 0, szDest, len) && *szDest)
{
TRACE("default verb=first verb=%s\n", debugstr_w(szDest));
return TRUE;
}
TRACE("no default verb!\n");
return FALSE;
}
BOOL HCR_GetExecuteCommandW( HKEY hkeyClass, LPCWSTR szClass, LPCWSTR szVerb, LPWSTR szDest, DWORD len )
{
static const WCHAR swShell[] = {'s','h','e','l','l','\\',0};
static const WCHAR swCommand[] = {'\\','c','o','m','m','a','n','d',0};
BOOL ret = FALSE;
WCHAR sTempVerb[MAX_PATH];
BOOL ret;
TRACE("%p %s %s %p\n", hkeyClass, debugstr_w(szClass), debugstr_w(szVerb), szDest);
if (szClass)
RegOpenKeyExW(HKEY_CLASSES_ROOT, szClass, 0, 0x02000000, &hkeyClass);
if (!hkeyClass)
return FALSE;
ret = FALSE;
if (hkeyClass)
{
WCHAR sTemp[MAX_PATH];
lstrcpyW(sTemp, swShell);
lstrcatW(sTemp, szVerb);
lstrcatW(sTemp, swCommand);
ret = (ERROR_SUCCESS == SHGetValueW(hkeyClass, sTemp, NULL, NULL, szDest, &len));
if (szClass)
RegCloseKey(hkeyClass);
}
if (HCR_GetDefaultVerbW(hkeyClass, szVerb, sTempVerb, sizeof(sTempVerb)))
{
WCHAR sTemp[MAX_PATH];
lstrcpyW(sTemp, swShell);
lstrcatW(sTemp, sTempVerb);
lstrcatW(sTemp, swCommand);
ret = (ERROR_SUCCESS == SHGetValueW(hkeyClass, sTemp, NULL, NULL, szDest, &len));
}
if (szClass)
RegCloseKey(hkeyClass);
TRACE("-- %s\n", debugstr_w(szDest) );
return ret;
@ -154,7 +210,7 @@ BOOL HCR_GetExecuteCommandW( HKEY hkeyClass, LPCWSTR szClass, LPCWSTR szVerb, LP
static BOOL HCR_RegOpenClassIDKey(REFIID riid, HKEY *hkey)
{
char xriid[50];
sprintf( xriid, "CLSID\\{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
sprintf( xriid, "CLSID\\{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
riid->Data1, riid->Data2, riid->Data3,
riid->Data4[0], riid->Data4[1], riid->Data4[2], riid->Data4[3],
riid->Data4[4], riid->Data4[5], riid->Data4[6], riid->Data4[7] );
@ -164,31 +220,31 @@ static BOOL HCR_RegOpenClassIDKey(REFIID riid, HKEY *hkey)
return !RegOpenKeyExA(HKEY_CLASSES_ROOT, xriid, 0, KEY_READ, hkey);
}
static BOOL HCR_RegGetDefaultIconW(HKEY hkey, LPWSTR szDest, DWORD len, LPDWORD dwNr)
static BOOL HCR_RegGetDefaultIconW(HKEY hkey, LPWSTR szDest, DWORD len, int* picon_idx)
{
DWORD dwType;
WCHAR sTemp[MAX_PATH];
WCHAR sNum[5];
DWORD dwType;
WCHAR sTemp[MAX_PATH];
WCHAR sNum[5];
if (!RegQueryValueExW(hkey, NULL, 0, &dwType, (LPBYTE)szDest, &len))
{
if (!RegQueryValueExW(hkey, NULL, 0, &dwType, (LPBYTE)szDest, &len))
{
if (dwType == REG_EXPAND_SZ)
{
ExpandEnvironmentStringsW(szDest, sTemp, MAX_PATH);
lstrcpynW(szDest, sTemp, len);
}
if (ParseFieldW (szDest, 2, sNum, 5))
*dwNr = atoiW(sNum);
{
ExpandEnvironmentStringsW(szDest, sTemp, MAX_PATH);
lstrcpynW(szDest, sTemp, len);
}
if (ParseFieldW (szDest, 2, sNum, 5))
*picon_idx = atoiW(sNum);
else
*dwNr=0; /* sometimes the icon number is missing */
ParseFieldW (szDest, 1, szDest, len);
*picon_idx=0; /* sometimes the icon number is missing */
ParseFieldW (szDest, 1, szDest, len);
PathUnquoteSpacesW(szDest);
return TRUE;
}
return FALSE;
return TRUE;
}
return FALSE;
}
static BOOL HCR_RegGetDefaultIconA(HKEY hkey, LPSTR szDest, DWORD len, LPDWORD dwNr)
static BOOL HCR_RegGetDefaultIconA(HKEY hkey, LPSTR szDest, DWORD len, int* picon_idx)
{
DWORD dwType;
char sTemp[MAX_PATH];
@ -202,9 +258,9 @@ static BOOL HCR_RegGetDefaultIconA(HKEY hkey, LPSTR szDest, DWORD len, LPDWORD d
lstrcpynA(szDest, sTemp, len);
}
if (ParseFieldA (szDest, 2, sNum, 5))
*dwNr=atoi(sNum);
*picon_idx=atoi(sNum);
else
*dwNr=0; /* sometimes the icon number is missing */
*picon_idx=0; /* sometimes the icon number is missing */
ParseFieldA (szDest, 1, szDest, len);
PathUnquoteSpacesA(szDest);
return TRUE;
@ -212,7 +268,7 @@ static BOOL HCR_RegGetDefaultIconA(HKEY hkey, LPSTR szDest, DWORD len, LPDWORD d
return FALSE;
}
BOOL HCR_GetDefaultIconW(LPCWSTR szClass, LPWSTR szDest, DWORD len, LPDWORD dwNr)
BOOL HCR_GetDefaultIconW(LPCWSTR szClass, LPWSTR szDest, DWORD len, int* picon_idx)
{
static const WCHAR swDefaultIcon[] = {'\\','D','e','f','a','u','l','t','I','c','o','n',0};
HKEY hkey;
@ -226,19 +282,19 @@ BOOL HCR_GetDefaultIconW(LPCWSTR szClass, LPWSTR szDest, DWORD len, LPDWORD dwNr
if (!RegOpenKeyExW(HKEY_CLASSES_ROOT, sTemp, 0, 0x02000000, &hkey))
{
ret = HCR_RegGetDefaultIconW(hkey, szDest, len, dwNr);
ret = HCR_RegGetDefaultIconW(hkey, szDest, len, picon_idx);
RegCloseKey(hkey);
}
if(ret)
TRACE("-- %s %li\n", debugstr_w(szDest), *dwNr );
TRACE("-- %s %i\n", debugstr_w(szDest), *picon_idx);
else
TRACE("-- not found\n");
return ret;
}
BOOL HCR_GetDefaultIconA(LPCSTR szClass, LPSTR szDest, DWORD len, LPDWORD dwNr)
BOOL HCR_GetDefaultIconA(LPCSTR szClass, LPSTR szDest, DWORD len, int* picon_idx)
{
HKEY hkey;
char sTemp[MAX_PATH];
@ -250,24 +306,24 @@ BOOL HCR_GetDefaultIconA(LPCSTR szClass, LPSTR szDest, DWORD len, LPDWORD dwNr)
if (!RegOpenKeyExA(HKEY_CLASSES_ROOT, sTemp, 0, 0x02000000, &hkey))
{
ret = HCR_RegGetDefaultIconA(hkey, szDest, len, dwNr);
ret = HCR_RegGetDefaultIconA(hkey, szDest, len, picon_idx);
RegCloseKey(hkey);
}
TRACE("-- %s %li\n", szDest, *dwNr );
TRACE("-- %s %i\n", szDest, *picon_idx);
return ret;
}
BOOL HCR_GetDefaultIconFromGUIDW(REFIID riid, LPWSTR szDest, DWORD len, LPDWORD dwNr)
BOOL HCR_GetDefaultIconFromGUIDW(REFIID riid, LPWSTR szDest, DWORD len, int* picon_idx)
{
HKEY hkey;
BOOL ret = FALSE;
if (HCR_RegOpenClassIDKey(riid, &hkey))
{
ret = HCR_RegGetDefaultIconW(hkey, szDest, len, dwNr);
ret = HCR_RegGetDefaultIconW(hkey, szDest, len, picon_idx);
RegCloseKey(hkey);
}
TRACE("-- %s %li\n", debugstr_w(szDest), *dwNr );
TRACE("-- %s %i\n", debugstr_w(szDest), *picon_idx);
return ret;
}
@ -287,8 +343,11 @@ BOOL HCR_GetClassNameW(REFIID riid, LPWSTR szDest, DWORD len)
szDest[0] = 0;
if (HCR_RegOpenClassIDKey(riid, &hkey))
{
if (!RegQueryValueExW(hkey, swEmpty, 0, NULL, (LPBYTE)szDest, &len))
{
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);
@ -319,8 +378,9 @@ BOOL HCR_GetClassNameA(REFIID riid, LPSTR szDest, DWORD len)
szDest[0] = 0;
if (HCR_RegOpenClassIDKey(riid, &hkey))
{
if (!RegQueryValueExA(hkey,"",0,NULL,(LPBYTE)szDest,&len))
{
if (!RegLoadMUIStringA(hkey,"LocalizedString",szDest,len,NULL,0,NULL) ||
!RegQueryValueExA(hkey,"",0,NULL,(LPBYTE)szDest,&len))
{
ret = TRUE;
}
RegCloseKey(hkey);
@ -419,7 +479,7 @@ BOOL HCR_GetFolderAttributes(LPCITEMIDLIST pidlFolder, LPDWORD pdwAttributes)
}
}
TRACE("-- *pdwAttributes == 0x%08lx\n", *pdwAttributes);
TRACE("-- *pdwAttributes == 0x%08x\n", *pdwAttributes);
return TRUE;
}

View file

@ -15,7 +15,7 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*
* NOTES:
*
@ -60,9 +60,9 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell);
HGLOBAL RenderHDROP(LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl)
{
UINT i;
int rootsize = 0,size = 0;
char szRootPath[MAX_PATH];
char szFileName[MAX_PATH];
int rootlen = 0,size = 0;
WCHAR wszRootPath[MAX_PATH];
WCHAR wszFileName[MAX_PATH];
HGLOBAL hGlobal;
DROPFILES *pDropFiles;
int offset;
@ -72,39 +72,38 @@ HGLOBAL RenderHDROP(LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl)
/* get the size needed */
size = sizeof(DROPFILES);
SHGetPathFromIDListA(pidlRoot, szRootPath);
PathAddBackslashA(szRootPath);
rootsize = strlen(szRootPath);
SHGetPathFromIDListW(pidlRoot, wszRootPath);
PathAddBackslashW(wszRootPath);
rootlen = strlenW(wszRootPath);
for (i=0; i<cidl;i++)
{
_ILSimpleGetText(apidl[i], szFileName, MAX_PATH);
size += rootsize + strlen(szFileName) + 1;
_ILSimpleGetTextW(apidl[i], wszFileName, MAX_PATH);
size += (rootlen + strlenW(wszFileName) + 1) * sizeof(WCHAR);
}
size++;
size += sizeof(WCHAR);
/* Fill the structure */
hGlobal = GlobalAlloc(GHND|GMEM_SHARE, size);
if(!hGlobal) return hGlobal;
pDropFiles = (DROPFILES *)GlobalLock(hGlobal);
pDropFiles->pFiles = sizeof(DROPFILES);
pDropFiles->fWide = FALSE;
offset = (sizeof(DROPFILES) + sizeof(WCHAR) - 1) / sizeof(WCHAR);
pDropFiles->pFiles = offset * sizeof(WCHAR);
pDropFiles->fWide = TRUE;
offset = pDropFiles->pFiles;
strcpy(szFileName, szRootPath);
strcpyW(wszFileName, wszRootPath);
for (i=0; i<cidl;i++)
{
_ILSimpleGetText(apidl[i], szFileName + rootsize, MAX_PATH - rootsize);
size = strlen(szFileName) + 1;
strcpy(((char*)pDropFiles)+offset, szFileName);
offset += size;
_ILSimpleGetTextW(apidl[i], wszFileName + rootlen, MAX_PATH - rootlen);
strcpyW(((WCHAR*)pDropFiles)+offset, wszFileName);
offset += strlenW(wszFileName) + 1;
}
((char*)pDropFiles)[offset] = 0;
((WCHAR*)pDropFiles)[offset] = 0;
GlobalUnlock(hGlobal);
return hGlobal;
@ -239,7 +238,7 @@ HGLOBAL RenderPREFEREDDROPEFFECT (DWORD dwFlags)
DWORD * pdwFlag;
HGLOBAL hGlobal;
TRACE("(0x%08lx)\n", dwFlags);
TRACE("(0x%08x)\n", dwFlags);
hGlobal = GlobalAlloc(GHND|GMEM_SHARE, sizeof(DWORD));
if(!hGlobal) return hGlobal;
@ -248,23 +247,3 @@ HGLOBAL RenderPREFEREDDROPEFFECT (DWORD dwFlags)
GlobalUnlock(hGlobal);
return hGlobal;
}
/**************************************************************************
* IsDataInClipboard
*
* checks if there is something in the clipboard we can use
*/
BOOL IsDataInClipboard (HWND hwnd)
{
BOOL ret = FALSE;
if (OpenClipboard(hwnd))
{
if (GetOpenClipboardWindow())
{
ret = IsClipboardFormatAvailable(CF_TEXT);
}
CloseClipboard();
}
return ret;
}

View file

@ -352,7 +352,6 @@ static void Control_DoLaunch(CPanel* panel, HWND hWnd, LPCWSTR wszCmd)
unsigned sp = 0;
LPWSTR extraPmts = NULL;
int quoted = 0;
BOOL spSet = FALSE;
buffer = HeapAlloc(GetProcessHeap(), 0, (lstrlenW(wszCmd) + 1) * sizeof(*wszCmd));
if (!buffer) return;
@ -367,10 +366,8 @@ static void Control_DoLaunch(CPanel* panel, HWND hWnd, LPCWSTR wszCmd)
if (beg) {
if (*beg == '@') {
sp = atoiW(beg + 1);
spSet = TRUE;
} else if (*beg == '\0') {
sp = 0;
spSet = TRUE;
} else {
extraPmts = beg;
}
@ -384,9 +381,6 @@ static void Control_DoLaunch(CPanel* panel, HWND hWnd, LPCWSTR wszCmd)
while ((ptr = StrChrW(buffer, '"')))
memmove(ptr, ptr+1, lstrlenW(ptr)*sizeof(WCHAR));
while ((ptr = StrChrW(extraPmts, '"')))
memmove(ptr, ptr+1, lstrlenW(ptr)*sizeof(WCHAR));
TRACE("cmd %s, extra %s, sp %d\n", debugstr_w(buffer), debugstr_w(extraPmts), sp);
Control_LoadApplet(hWnd, buffer, panel);
@ -399,13 +393,6 @@ static void Control_DoLaunch(CPanel* panel, HWND hWnd, LPCWSTR wszCmd)
WARN("Out of bounds (%u >= %u), setting to 0\n", sp, applet->count);
sp = 0;
}
if ((extraPmts)&&(!spSet))
{
while ((lstrcmpiW(extraPmts, applet->info[sp].szName)) && (sp < applet->count))
sp++;
}
if (applet->info[sp].dwSize) {
if (!applet->proc(applet->hWnd, CPL_STARTWPARMSA, sp, (LPARAM)extraPmts))
applet->proc(applet->hWnd, CPL_DBLCLK, sp, applet->info[sp].lData);

View file

@ -14,7 +14,7 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef __WINE_SHELL_CPANEL_H

View file

@ -6,7 +6,7 @@
* 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.
* 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
@ -15,7 +15,7 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
@ -109,7 +109,7 @@ static inline ICPanelImpl *impl_from_IShellExecuteHookA( IShellExecuteHookA *ifa
* IShellFolder [ControlPanel] implementation
*/
static shvheader ControlPanelSFHeader[] = {
static const shvheader ControlPanelSFHeader[] = {
{IDS_SHV_COLUMN8, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15},/*FIXME*/
{IDS_SHV_COLUMN9, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 200},/*FIXME*/
};
@ -189,7 +189,7 @@ static ULONG WINAPI ISF_ControlPanel_fnAddRef(IShellFolder2 * iface)
ICPanelImpl *This = (ICPanelImpl *)iface;
ULONG refCount = InterlockedIncrement(&This->ref);
TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
TRACE("(%p)->(count=%u)\n", This, refCount - 1);
return refCount;
}
@ -199,12 +199,11 @@ static ULONG WINAPI ISF_ControlPanel_fnRelease(IShellFolder2 * iface)
ICPanelImpl *This = (ICPanelImpl *)iface;
ULONG refCount = InterlockedDecrement(&This->ref);
TRACE("(%p)->(count=%lu)\n", This, refCount + 1);
TRACE("(%p)->(count=%u)\n", This, refCount + 1);
if (!refCount) {
TRACE("-- destroying IShellFolder(%p)\n", This);
if (This->pidlRoot)
SHFree(This->pidlRoot);
SHFree(This->pidlRoot);
LocalFree((HLOCAL) This);
}
return refCount;
@ -231,7 +230,7 @@ ISF_ControlPanel_fnParseDisplayName(IShellFolder2 * iface,
if (pchEaten)
*pchEaten = 0;
TRACE("(%p)->(-- ret=0x%08lx)\n", This, hr);
TRACE("(%p)->(-- ret=0x%08x)\n", This, hr);
return hr;
}
@ -410,9 +409,9 @@ static BOOL CreateCPanelEnumList(
WIN32_FIND_DATAA wfd;
HANDLE hFile;
TRACE("(%p)->(flags=0x%08lx)\n", iface, dwFlags);
TRACE("(%p)->(flags=0x%08x)\n", iface, dwFlags);
/* enumerate control panel folders folders */
/* enumerate control panel folders */
if (dwFlags & SHCONTF_FOLDERS)
SHELL_RegisterCPanelFolders(iface, HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ControlPanel\\NameSpace");
@ -457,7 +456,7 @@ ISF_ControlPanel_fnEnumObjects(IShellFolder2 * iface, HWND hwndOwner, DWORD dwFl
{
ICPanelImpl *This = (ICPanelImpl *)iface;
TRACE("(%p)->(HWND=%p flags=0x%08lx pplist=%p)\n", This, hwndOwner, dwFlags, ppEnumIDList);
TRACE("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n", This, hwndOwner, dwFlags, ppEnumIDList);
*ppEnumIDList = IEnumIDList_Constructor();
if (*ppEnumIDList)
@ -558,7 +557,7 @@ ISF_ControlPanel_fnGetAttributesOf(IShellFolder2 * iface, UINT cidl, LPCITEMIDLI
HRESULT hr = S_OK;
TRACE("(%p)->(cidl=%d apidl=%p mask=%p (0x%08lx))\n",
TRACE("(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n",
This, cidl, apidl, rgfInOut, rgfInOut ? *rgfInOut : 0);
if (!rgfInOut)
@ -578,7 +577,7 @@ ISF_ControlPanel_fnGetAttributesOf(IShellFolder2 * iface, UINT cidl, LPCITEMIDLI
/* make sure SFGAO_VALIDATE is cleared, some apps depend on that */
*rgfInOut &= ~SFGAO_VALIDATE;
TRACE("-- result=0x%08lx\n", *rgfInOut);
TRACE("-- result=0x%08x\n", *rgfInOut);
return hr;
}
@ -641,7 +640,7 @@ ISF_ControlPanel_fnGetUIObjectOf(IShellFolder2 * iface,
*ppvOut = pObj;
}
TRACE("(%p)->hr=0x%08lx\n", This, hr);
TRACE("(%p)->hr=0x%08x\n", This, hr);
return hr;
}
@ -652,12 +651,13 @@ static HRESULT WINAPI ISF_ControlPanel_fnGetDisplayNameOf(IShellFolder2 * iface,
{
ICPanelImpl *This = (ICPanelImpl *)iface;
CHAR szPath[MAX_PATH*2];
CHAR szPath[MAX_PATH];
WCHAR wszPath[MAX_PATH+1]; /* +1 for potential backslash */
PIDLCPanelStruct* pcpanel;
*szPath = '\0';
TRACE("(%p)->(pidl=%p,0x%08lx,%p)\n", This, pidl, dwFlags, strRet);
TRACE("(%p)->(pidl=%p,0x%08x,%p)\n", This, pidl, dwFlags, strRet);
pdump(pidl);
if (!pidl || !strRet)
@ -671,12 +671,12 @@ static HRESULT WINAPI ISF_ControlPanel_fnGetDisplayNameOf(IShellFolder2 * iface,
if (!(dwFlags & SHGDN_FORPARSING))
FIXME("retrieve display name from control panel app\n");
}
/* take names of special folders only if its only this folder */
/* take names of special folders only if it's only this folder */
else if (_ILIsSpecialFolder(pidl)) {
BOOL bSimplePidl = _ILIsPidlSimple(pidl);
if (bSimplePidl) {
_ILSimpleGetText(pidl, szPath, MAX_PATH); /* append my own path */
_ILSimpleGetTextW(pidl, wszPath, MAX_PATH); /* append my own path */
} else {
FIXME("special pidl\n");
}
@ -684,12 +684,14 @@ static HRESULT WINAPI ISF_ControlPanel_fnGetDisplayNameOf(IShellFolder2 * iface,
if ((dwFlags & SHGDN_FORPARSING) && !bSimplePidl) { /* go deeper if needed */
int len = 0;
PathAddBackslashA(szPath); /*FIXME*/
len = lstrlenA(szPath);
PathAddBackslashW(wszPath);
len = lstrlenW(wszPath);
if (!SUCCEEDED
(SHELL32_GetDisplayNameOfChild(iface, pidl, dwFlags | SHGDN_INFOLDER, szPath + len, MAX_PATH - len)))
(SHELL32_GetDisplayNameOfChild(iface, pidl, dwFlags | SHGDN_INFOLDER, wszPath + len, MAX_PATH + 1 - len)))
return E_OUTOFMEMORY;
if (!WideCharToMultiByte(CP_ACP, 0, wszPath, -1, szPath, MAX_PATH, NULL, NULL))
wszPath[0] = '\0';
}
}
@ -716,7 +718,7 @@ static HRESULT WINAPI ISF_ControlPanel_fnSetNameOf(IShellFolder2 * iface, HWND h
LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut)
{
ICPanelImpl *This = (ICPanelImpl *)iface;
FIXME("(%p)->(%p,pidl=%p,%s,%lu,%p)\n", This, hwndOwner, pidl, debugstr_w(lpName), dwFlags, pPidlOut);
FIXME("(%p)->(%p,pidl=%p,%s,%u,%p)\n", This, hwndOwner, pidl, debugstr_w(lpName), dwFlags, pPidlOut);
return E_FAIL;
}
@ -844,7 +846,7 @@ static ULONG WINAPI ICPanel_PersistFolder2_AddRef(IPersistFolder2 * iface)
{
ICPanelImpl *This = impl_from_IPersistFolder2(iface);
TRACE("(%p)->(count=%lu)\n", This, This->ref);
TRACE("(%p)->(count=%u)\n", This, This->ref);
return IUnknown_AddRef(_IUnknown_(This));
}
@ -856,7 +858,7 @@ static ULONG WINAPI ICPanel_PersistFolder2_Release(IPersistFolder2 * iface)
{
ICPanelImpl *This = impl_from_IPersistFolder2(iface);
TRACE("(%p)->(count=%lu)\n", This, This->ref);
TRACE("(%p)->(count=%u)\n", This, This->ref);
return IUnknown_Release(_IUnknown_(This));
}
@ -915,7 +917,7 @@ static const IPersistFolder2Vtbl vt_PersistFolder2 =
ICPanel_PersistFolder2_GetCurFolder
};
HRESULT CPanel_GetIconLocationW(LPITEMIDLIST pidl,
HRESULT CPanel_GetIconLocationW(LPCITEMIDLIST pidl,
LPWSTR szIconFile, UINT cchMax, int* piIndex)
{
PIDLCPanelStruct* pcpanel = _ILGetCPanelPointer(pidl);
@ -939,7 +941,7 @@ static HRESULT WINAPI IShellExecuteHookW_fnQueryInterface(
{
ICPanelImpl *This = impl_from_IShellExecuteHookW(iface);
TRACE("(%p)->(count=%lu)\n", This, This->ref);
TRACE("(%p)->(count=%u)\n", This, This->ref);
return IUnknown_QueryInterface(This->pUnkOuter, riid, ppvObject);
}
@ -948,7 +950,7 @@ static ULONG STDMETHODCALLTYPE IShellExecuteHookW_fnAddRef(IShellExecuteHookW* i
{
ICPanelImpl *This = impl_from_IShellExecuteHookW(iface);
TRACE("(%p)->(count=%lu)\n", This, This->ref);
TRACE("(%p)->(count=%u)\n", This, This->ref);
return IUnknown_AddRef(This->pUnkOuter);
}
@ -1027,7 +1029,7 @@ static HRESULT WINAPI IShellExecuteHookA_fnQueryInterface(IShellExecuteHookA* if
{
ICPanelImpl *This = impl_from_IShellExecuteHookA(iface);
TRACE("(%p)->(count=%lu)\n", This, This->ref);
TRACE("(%p)->(count=%u)\n", This, This->ref);
return IUnknown_QueryInterface(This->pUnkOuter, riid, ppvObject);
}
@ -1036,7 +1038,7 @@ static ULONG STDMETHODCALLTYPE IShellExecuteHookA_fnAddRef(IShellExecuteHookA* i
{
ICPanelImpl *This = impl_from_IShellExecuteHookA(iface);
TRACE("(%p)->(count=%lu)\n", This, This->ref);
TRACE("(%p)->(count=%u)\n", This, This->ref);
return IUnknown_AddRef(This->pUnkOuter);
}

View file

@ -17,7 +17,7 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <string.h>
@ -82,7 +82,7 @@ static ULONG WINAPI IEnumFORMATETC_fnAddRef(LPENUMFORMATETC iface)
IEnumFORMATETCImpl *This = (IEnumFORMATETCImpl *)iface;
ULONG refCount = InterlockedIncrement(&This->ref);
TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
TRACE("(%p)->(count=%u)\n", This, refCount - 1);
return refCount;
}
@ -92,15 +92,12 @@ static ULONG WINAPI IEnumFORMATETC_fnRelease(LPENUMFORMATETC iface)
IEnumFORMATETCImpl *This = (IEnumFORMATETCImpl *)iface;
ULONG refCount = InterlockedDecrement(&This->ref);
TRACE("(%p)->(%lu)\n", This, refCount + 1);
TRACE("(%p)->(%u)\n", This, refCount + 1);
if (!refCount)
{
TRACE(" destroying IEnumFORMATETC(%p)\n",This);
if (This->pFmt)
{
SHFree (This->pFmt);
}
SHFree (This->pFmt);
HeapFree(GetProcessHeap(),0,This);
return 0;
}
@ -112,7 +109,7 @@ static HRESULT WINAPI IEnumFORMATETC_fnNext(LPENUMFORMATETC iface, ULONG celt, F
IEnumFORMATETCImpl *This = (IEnumFORMATETCImpl *)iface;
UINT i;
TRACE("(%p)->(%lu,%p)\n", This, celt, rgelt);
TRACE("(%p)->(%u,%p)\n", This, celt, rgelt);
if(!This->pFmt)return S_FALSE;
if(!rgelt) return E_INVALIDARG;
@ -131,7 +128,7 @@ static HRESULT WINAPI IEnumFORMATETC_fnNext(LPENUMFORMATETC iface, ULONG celt, F
static HRESULT WINAPI IEnumFORMATETC_fnSkip(LPENUMFORMATETC iface, ULONG celt)
{
IEnumFORMATETCImpl *This = (IEnumFORMATETCImpl *)iface;
TRACE("(%p)->(num=%lu)\n", This, celt);
TRACE("(%p)->(num=%u)\n", This, celt);
if((This->posFmt + celt) >= This->countFmt) return S_FALSE;
This->posFmt += celt;
@ -256,7 +253,7 @@ static ULONG WINAPI IDataObject_fnAddRef(LPDATAOBJECT iface)
IDataObjectImpl *This = (IDataObjectImpl *)iface;
ULONG refCount = InterlockedIncrement(&This->ref);
TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
TRACE("(%p)->(count=%u)\n", This, refCount - 1);
return refCount;
}
@ -269,7 +266,7 @@ static ULONG WINAPI IDataObject_fnRelease(LPDATAOBJECT iface)
IDataObjectImpl *This = (IDataObjectImpl *)iface;
ULONG refCount = InterlockedDecrement(&This->ref);
TRACE("(%p)->(%lu)\n", This, refCount + 1);
TRACE("(%p)->(%u)\n", This, refCount + 1);
if (!refCount)
{
@ -340,7 +337,7 @@ static HRESULT WINAPI IDataObject_fnQueryGetData(LPDATAOBJECT iface, LPFORMATETC
IDataObjectImpl *This = (IDataObjectImpl *)iface;
UINT i;
TRACE("(%p)->(fmt=0x%08x tym=0x%08lx)\n", This, pformatetc->cfFormat, pformatetc->tymed);
TRACE("(%p)->(fmt=0x%08x tym=0x%08x)\n", This, pformatetc->cfFormat, pformatetc->tymed);
if(!(DVASPECT_CONTENT & pformatetc->dwAspect))
return DV_E_DVASPECT;

View file

@ -15,7 +15,7 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
@ -52,8 +52,8 @@ typedef struct
typedef BOOL (*LPFNOFN) (OPENFILENAMEA *) ;
WINE_DEFAULT_DEBUG_CHANNEL(shell);
INT_PTR CALLBACK RunDlgProc (HWND, UINT, WPARAM, LPARAM) ;
void FillList (HWND, char *) ;
static INT_PTR CALLBACK RunDlgProc (HWND, UINT, WPARAM, LPARAM) ;
static void FillList (HWND, char *) ;
/*************************************************************************
@ -66,7 +66,7 @@ BOOL WINAPI PickIconDlg(
DWORD nMaxFile,
LPDWORD lpdwIconIndex)
{
FIXME("(%p,%s,%08lx,%p):stub.\n",
FIXME("(%p,%s,%08x,%p):stub.\n",
hwndOwner, lpstrFile, nMaxFile,lpdwIconIndex);
return 0xffffffff;
}
@ -116,7 +116,7 @@ void WINAPI RunFileDlg(
}
/* Dialog procedure for RunFileDlg */
INT_PTR CALLBACK RunDlgProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
static INT_PTR CALLBACK RunDlgProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int ic ;
char *psz, szMsg[256] ;
@ -145,7 +145,7 @@ INT_PTR CALLBACK RunDlgProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lPar
psz = HeapAlloc( GetProcessHeap(), 0, (ic + 2) );
GetWindowTextA (htxt, psz, ic + 1) ;
if (ShellExecuteA(NULL, NULL, psz, NULL, NULL, SW_SHOWNORMAL) < (HINSTANCE)33)
if (ShellExecuteA(NULL, "open", psz, NULL, NULL, SW_SHOWNORMAL) < (HINSTANCE)33)
{
char *pszSysMsg = NULL ;
FormatMessageA (
@ -162,7 +162,6 @@ INT_PTR CALLBACK RunDlgProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lPar
HeapFree(GetProcessHeap(), 0, psz);
SendMessageA (htxt, CB_SETEDITSEL, 0, MAKELPARAM (0, -1)) ;
SetFocus(htxt);
return TRUE ;
}
FillList (htxt, psz) ;
@ -218,19 +217,15 @@ INT_PTR CALLBACK RunDlgProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lPar
return TRUE ;
}
if(ofnProc (&ofn))
{
SetFocus (GetDlgItem (hwnd, IDOK)) ;
SetWindowTextA (GetDlgItem (hwnd, 12298), szFName) ;
SendMessageA (GetDlgItem (hwnd, 12298), CB_SETEDITSEL, 0, MAKELPARAM (0, -1)) ;
SetFocus (GetDlgItem (hwnd, IDOK)) ;
}
else
{
SetFocus(GetDlgItem(hwnd, 12288));
}
ofnProc (&ofn) ;
SetFocus (GetDlgItem (hwnd, IDOK)) ;
SetWindowTextA (GetDlgItem (hwnd, 12298), szFName) ;
SendMessageA (GetDlgItem (hwnd, 12298), CB_SETEDITSEL, 0, MAKELPARAM (0, -1)) ;
SetFocus (GetDlgItem (hwnd, IDOK)) ;
FreeLibrary (hComdlg) ;
return TRUE ;
}
}
@ -240,7 +235,7 @@ INT_PTR CALLBACK RunDlgProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lPar
}
/* This grabs the MRU list from the registry and fills the combo for the "Run" dialog above */
void FillList (HWND hCb, char *pszLatest)
static void FillList (HWND hCb, char *pszLatest)
{
HKEY hkey ;
/* char szDbgMsg[256] = "" ; */
@ -252,7 +247,7 @@ void FillList (HWND hCb, char *pszLatest)
if (ERROR_SUCCESS != RegCreateKeyExA (
HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\RunMRU",
0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, NULL))
0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, NULL))
MessageBoxA (hCb, "Unable to open registry key !", "Nix", MB_OK) ;
RegQueryValueExA (hkey, "MRUList", NULL, NULL, NULL, &icList) ;
@ -411,16 +406,6 @@ int WINAPI RestartDialogEx(HWND hWndOwner, LPCWSTR lpwstrReason, DWORD uFlags, D
return 0;
}
/*************************************************************************
* LogoffWindowsDialog [SHELL32.54]
*/
int WINAPI LogoffWindowsDialog(DWORD uFlags)
{
ERR("LogoffWindowsDialog is UNIMPLEMENTED\n");
ExitWindowsEx(EWX_LOGOFF, 0);
return 0;
}
/*************************************************************************
* RestartDialog [SHELL32.59]

View file

@ -26,6 +26,7 @@
#define ExtendedIntegerMultiply RtlExtendedIntegerMultiply
#define ConvertUlongToLargeInteger RtlConvertUlongToLargeInteger
#define LargeIntegerSubtract RtlLargeIntegerSubtract
#define MAX_PROPERTY_SHEET_PAGE 32
#include <string.h>
#include <stdarg.h>
#include <stdio.h>

View file

@ -14,7 +14,7 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
@ -33,7 +33,6 @@
#include "objbase.h"
#include "undocshell.h"
#include "shlguid.h"
#include "winreg.h"
#include "wine/debug.h"
@ -138,7 +137,7 @@ static ULONG WINAPI IExtractIconW_fnAddRef(IExtractIconW * iface)
IExtractIconWImpl *This = (IExtractIconWImpl *)iface;
ULONG refCount = InterlockedIncrement(&This->ref);
TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
TRACE("(%p)->(count=%u)\n", This, refCount - 1);
return refCount;
}
@ -150,7 +149,7 @@ static ULONG WINAPI IExtractIconW_fnRelease(IExtractIconW * iface)
IExtractIconWImpl *This = (IExtractIconWImpl *)iface;
ULONG refCount = InterlockedDecrement(&This->ref);
TRACE("(%p)->(count=%lu)\n", This, refCount + 1);
TRACE("(%p)->(count=%u)\n", This, refCount + 1);
if (!refCount)
{
@ -166,7 +165,7 @@ static HRESULT getIconLocationForFolder(IExtractIconW *iface, UINT uFlags,
LPWSTR szIconFile, UINT cchMax, int *piIndex, UINT *pwFlags)
{
IExtractIconWImpl *This = (IExtractIconWImpl *)iface;
DWORD dwNr;
int icon_idx;
WCHAR wszPath[MAX_PATH];
WCHAR wszCLSIDValue[CHARS_IN_GUID];
static const WCHAR shellClassInfo[] = { '.','S','h','e','l','l','C','l','a','s','s','I','n','f','o',0 };
@ -185,27 +184,32 @@ static HRESULT getIconLocationForFolder(IExtractIconW *iface, UINT uFlags,
}
else if (SHELL32_GetCustomFolderAttribute(This->pidl, shellClassInfo, clsid,
wszCLSIDValue, CHARS_IN_GUID) &&
HCR_GetDefaultIconW(wszCLSIDValue, szIconFile, cchMax, &dwNr))
HCR_GetDefaultIconW(wszCLSIDValue, szIconFile, cchMax, &icon_idx))
{
*piIndex = dwNr;
*piIndex = icon_idx;
}
else if (SHELL32_GetCustomFolderAttribute(This->pidl, shellClassInfo, clsid2,
wszCLSIDValue, CHARS_IN_GUID) &&
HCR_GetDefaultIconW(wszCLSIDValue, szIconFile, cchMax, &dwNr))
HCR_GetDefaultIconW(wszCLSIDValue, szIconFile, cchMax, &icon_idx))
{
*piIndex = dwNr;
*piIndex = icon_idx;
}
else
{
static const WCHAR folder[] = { 'F','o','l','d','e','r',0 };
if (!HCR_GetDefaultIconW(folder, szIconFile, cchMax, &dwNr))
if (!HCR_GetDefaultIconW(folder, szIconFile, cchMax, &icon_idx))
{
lstrcpynW(szIconFile, swShell32Name, cchMax);
dwNr = IDI_SHELL_FOLDER;
icon_idx = -IDI_SHELL_FOLDER;
}
*piIndex = -((uFlags & GIL_OPENICON) ? dwNr + 1 : dwNr);
if (uFlags & GIL_OPENICON)
*piIndex = icon_idx<0? icon_idx-1: icon_idx+1;
else
*piIndex = icon_idx;
}
return S_OK;
}
@ -227,7 +231,7 @@ static HRESULT WINAPI IExtractIconW_fnGetIconLocation(
IExtractIconWImpl *This = (IExtractIconWImpl *)iface;
char sTemp[MAX_PATH];
DWORD dwNr;
int icon_idx;
GUID const * riid;
LPITEMIDLIST pSimplePidl = ILFindLastID(This->pidl);
@ -256,9 +260,9 @@ static HRESULT WINAPI IExtractIconW_fnGetIconLocation(
riid->Data4[0], riid->Data4[1], riid->Data4[2], riid->Data4[3],
riid->Data4[4], riid->Data4[5], riid->Data4[6], riid->Data4[7]);
if (HCR_GetDefaultIconW(xriid, szIconFile, cchMax, &dwNr))
if (HCR_GetDefaultIconW(xriid, szIconFile, cchMax, &icon_idx))
{
*piIndex = dwNr;
*piIndex = icon_idx;
}
else
{
@ -269,6 +273,9 @@ static HRESULT WINAPI IExtractIconW_fnGetIconLocation(
*piIndex = -IDI_SHELL_MY_DOCUMENTS;
else if(IsEqualGUID(riid, &CLSID_NetworkPlaces))
*piIndex = -IDI_SHELL_MY_NETWORK_PLACES;
else if(IsEqualGUID(riid, &CLSID_UnixFolder) ||
IsEqualGUID(riid, &CLSID_UnixDosFolder))
*piIndex = -IDI_SHELL_DRIVE;
else
*piIndex = -IDI_SHELL_FOLDER;
}
@ -298,9 +305,9 @@ static HRESULT WINAPI IExtractIconW_fnGetIconLocation(
}
else
{
if (HCR_GetDefaultIconW(drive, szIconFile, cchMax, &dwNr))
if (HCR_GetDefaultIconW(drive, szIconFile, cchMax, &icon_idx))
{
*piIndex = dwNr;
*piIndex = icon_idx;
}
else
{
@ -326,7 +333,7 @@ static HRESULT WINAPI IExtractIconW_fnGetIconLocation(
else if (_ILGetExtension(pSimplePidl, sTemp, MAX_PATH))
{
if (HCR_MapTypeToValueA(sTemp, sTemp, MAX_PATH, TRUE)
&& HCR_GetDefaultIconA(sTemp, sTemp, MAX_PATH, &dwNr))
&& HCR_GetDefaultIconA(sTemp, sTemp, MAX_PATH, &icon_idx))
{
if (!lstrcmpA("%1", sTemp)) /* icon is in the file */
{
@ -336,7 +343,7 @@ static HRESULT WINAPI IExtractIconW_fnGetIconLocation(
else
{
MultiByteToWideChar(CP_ACP, 0, sTemp, -1, szIconFile, cchMax);
*piIndex = dwNr;
*piIndex = icon_idx;
}
found = TRUE;

View file

@ -18,9 +18,12 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#define COBJMACROS
#define NONAMELESSUNION
#define YDEBUG
#include "config.h"
#include "wine/port.h"
#define YDEBUG
#include <string.h>
#include <stdarg.h>
#include <stdio.h>
@ -39,16 +42,61 @@
#include "shell32_main.h"
#include "shresdef.h"
#include "undocshell.h"
#include <prsht.h>
#include "prsht.h"
WINE_DEFAULT_DEBUG_CHANNEL(shell);
#define MAX_PROPERTY_SHEET_PAGE 32
typedef struct _LANGANDCODEPAGE_
{
WORD lang;
WORD code;
} LANGANDCODEPAGE, *LPLANGANDCODEPAGE;
/*************************************************************************
*
* SH_CreatePropertySheetPage [Internal]
*
* creates a property sheet page from an resource name
*
*/
HPROPSHEETPAGE
SH_CreatePropertySheetPage(LPSTR resname, DLGPROC dlgproc, LPARAM lParam)
{
HRSRC hRes;
LPVOID lpsztemplate;
PROPSHEETPAGEW ppage;
if (resname == NULL)
return (HPROPSHEETPAGE)0;
hRes = FindResourceA(shell32_hInstance, resname, (LPSTR)RT_DIALOG);
if (hRes == NULL)
{
ERR("failed to find resource name\n");
return (HPROPSHEETPAGE)0;
}
lpsztemplate = LoadResource(shell32_hInstance, hRes);
if (lpsztemplate == NULL)
return (HPROPSHEETPAGE)0;
memset(&ppage, 0x0, sizeof(PROPSHEETPAGEW));
ppage.dwSize = sizeof(PROPSHEETPAGEW);
ppage.dwFlags = PSP_DLGINDIRECT;
ppage.u.pResource = lpsztemplate;
ppage.pfnDlgProc = dlgproc;
ppage.lParam = lParam;
return CreatePropertySheetPageW(&ppage);
}
/*************************************************************************
*
* SH_FileGeneralFileType [Internal]
@ -616,7 +664,7 @@ SH_ShowPropertiesDialog(WCHAR * lpf)
pinfo.dwSize = sizeof(PROPSHEETHEADERW);
pinfo.dwFlags = PSH_NOCONTEXTHELP | PSH_PROPTITLE;
pinfo.nPages = num_pages;
pinfo.phpage = hppages;
pinfo.u3.phpage = hppages;
pinfo.pszCaption = wFileName;
return (PropertySheetW(&pinfo) != -1);
}

View file

@ -15,7 +15,7 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*
* NOTES
* a pidl == NULL means desktop and is legal
@ -43,7 +43,6 @@
#include "winnls.h"
#include "undocshell.h"
#include "shell32_main.h"
#include "shellapi.h"
#include "shlwapi.h"
#include "pidl.h"
@ -78,7 +77,7 @@ BOOL WINAPI ILGetDisplayNameExA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPSTR pat
BOOL ret = FALSE;
WCHAR wPath[MAX_PATH];
TRACE("%p %p %p %ld\n", psf, pidl, path, type);
TRACE("%p %p %p %d\n", psf, pidl, path, type);
if (!pidl || !path)
return FALSE;
@ -98,7 +97,7 @@ BOOL WINAPI ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR pa
STRRET strret;
DWORD flag;
TRACE("%p %p %p %ld\n", psf, pidl, path, type);
TRACE("%p %p %p %d\n", psf, pidl, path, type);
if (!pidl || !path)
return FALSE;
@ -124,7 +123,7 @@ BOOL WINAPI ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR pa
flag = SHGDN_INFOLDER;
break;
default:
FIXME("Unknown type parameter = %lx\n", type);
FIXME("Unknown type parameter = %x\n", type);
flag = SHGDN_FORPARSING | SHGDN_FORADDRESSBAR;
break;
}
@ -133,7 +132,8 @@ BOOL WINAPI ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR pa
ret = IShellFolder_GetDisplayNameOf(lsf, pidl, flag, &strret);
if (SUCCEEDED(ret))
{
ret = StrRetToStrNW(path, MAX_PATH, &strret, pidl);
if(!StrRetToStrNW(path, MAX_PATH, &strret, pidl))
ret = E_FAIL;
}
}
else
@ -144,7 +144,8 @@ BOOL WINAPI ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR pa
ret = IShellFolder_GetDisplayNameOf(psfParent, pidllast, flag, &strret);
if (SUCCEEDED(ret))
{
ret = StrRetToStrNW(path, MAX_PATH, &strret, pidllast);
if(!StrRetToStrNW(path, MAX_PATH, &strret, pidllast))
ret = E_FAIL;
}
IShellFolder_Release(psfParent);
}
@ -160,7 +161,7 @@ BOOL WINAPI ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR pa
BOOL WINAPI ILGetDisplayNameEx(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPVOID path, DWORD type)
{
TRACE_(shell)("%p %p %p %ld\n", psf, pidl, path, type);
TRACE_(shell)("%p %p %p %d\n", psf, pidl, path, type);
if (SHELL_OsIsUnicode())
return ILGetDisplayNameExW(psf, pidl, path, type);
@ -289,11 +290,8 @@ HRESULT WINAPI ILLoadFromStream (IStream * pStream, LPITEMIDLIST * ppPidl)
TRACE_(shell)("%p %p\n", pStream , ppPidl);
if (*ppPidl)
{
SHFree(*ppPidl);
*ppPidl = NULL;
}
SHFree(*ppPidl);
*ppPidl = NULL;
IStream_AddRef (pStream);
@ -389,7 +387,7 @@ HRESULT WINAPI SHILCreateFromPathA(LPCSTR path, LPITEMIDLIST * ppidl, DWORD * at
{
WCHAR lpszDisplayName[MAX_PATH];
TRACE_(shell)("%s %p 0x%08lx\n", path, ppidl, attributes ? *attributes : 0);
TRACE_(shell)("%s %p 0x%08x\n", path, ppidl, attributes ? *attributes : 0);
if (!MultiByteToWideChar(CP_ACP, 0, path, -1, lpszDisplayName, MAX_PATH))
lpszDisplayName[MAX_PATH-1] = 0;
@ -403,7 +401,7 @@ HRESULT WINAPI SHILCreateFromPathW(LPCWSTR path, LPITEMIDLIST * ppidl, DWORD * a
DWORD pchEaten;
HRESULT ret = E_FAIL;
TRACE_(shell)("%s %p 0x%08lx\n", debugstr_w(path), ppidl, attributes ? *attributes : 0);
TRACE_(shell)("%s %p 0x%08x\n", debugstr_w(path), ppidl, attributes ? *attributes : 0);
if (SUCCEEDED (SHGetDesktopFolder(&sf)))
{
@ -442,7 +440,7 @@ HRESULT WINAPI SHILCreateFromPathAW (LPCVOID path, LPITEMIDLIST * ppidl, DWORD *
LPITEMIDLIST WINAPI SHCloneSpecialIDList(HWND hwndOwner, DWORD nFolder, BOOL fCreate)
{
LPITEMIDLIST ppidl;
TRACE_(shell)("(hwnd=%p,csidl=0x%lx,%s).\n", hwndOwner, nFolder, fCreate ? "T" : "F");
TRACE_(shell)("(hwnd=%p,csidl=0x%x,%s).\n", hwndOwner, nFolder, fCreate ? "T" : "F");
if (fCreate)
nFolder |= CSIDL_FLAG_CREATE;
@ -863,8 +861,7 @@ LPITEMIDLIST WINAPI ILAppend(LPITEMIDLIST pidl, LPCITEMIDLIST item, BOOL bEnd)
if (_ILIsDesktop(pidl))
{
idlRet = ILClone(item);
if (pidl)
SHFree (pidl);
SHFree (pidl);
return idlRet;
}
@ -894,8 +891,7 @@ LPITEMIDLIST WINAPI ILAppend(LPITEMIDLIST pidl, LPCITEMIDLIST item, BOOL bEnd)
void WINAPI ILFree(LPITEMIDLIST pidl)
{
TRACE("(pidl=%p)\n",pidl);
if (pidl)
SHFree(pidl);
SHFree(pidl);
}
/*************************************************************************
@ -916,8 +912,7 @@ void WINAPI ILGlobalFree( LPITEMIDLIST pidl)
{
TRACE("%p\n", pidl);
if (pidl)
Free(pidl);
Free(pidl);
}
/*************************************************************************
@ -1005,7 +1000,7 @@ static HRESULT WINAPI _ILParsePathW(LPCWSTR path, LPWIN32_FIND_DATAW lpFindFile,
LPBC pBC = NULL;
HRESULT ret;
TRACE("%s %p %d (%p)->%p (%p)->0x%lx\n", debugstr_w(path), lpFindFile, bBindCtx,
TRACE("%s %p %d (%p)->%p (%p)->0x%x\n", debugstr_w(path), lpFindFile, bBindCtx,
ppidl, ppidl ? *ppidl : NULL,
prgfInOut, prgfInOut ? *prgfInOut : 0);
@ -1032,7 +1027,7 @@ static HRESULT WINAPI _ILParsePathW(LPCWSTR path, LPWIN32_FIND_DATAW lpFindFile,
if (!SUCCEEDED(ret) && ppidl)
*ppidl = NULL;
TRACE("%s %p 0x%lx\n", debugstr_w(path), ppidl ? *ppidl : NULL, prgfInOut ? *prgfInOut : 0);
TRACE("%s %p 0x%x\n", debugstr_w(path), ppidl ? *ppidl : NULL, prgfInOut ? *prgfInOut : 0);
return ret;
}
@ -1238,8 +1233,7 @@ BOOL WINAPI SHGetPathFromIDListA(LPCITEMIDLIST pidl, LPSTR pszPath)
BOOL bSuccess;
bSuccess = SHGetPathFromIDListW(pidl, wszPath);
if (bSuccess)
WideCharToMultiByte(CP_ACP, 0, wszPath, -1, pszPath, MAX_PATH, NULL, NULL);
WideCharToMultiByte(CP_ACP, 0, wszPath, -1, pszPath, MAX_PATH, NULL, NULL);
return bSuccess;
}
@ -1257,9 +1251,10 @@ BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
DWORD dwAttributes;
STRRET strret;
TRACE_(shell)("(pidl=%p,%p)\n", pidl, debugstr_w(pszPath));
TRACE_(shell)("(pidl=%p,%p)\n", pidl, pszPath);
pdump(pidl);
*pszPath = '\0';
if (!pidl)
return FALSE;
@ -1279,7 +1274,7 @@ BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
hr = StrRetToBufW(&strret, pidlLast, pszPath, MAX_PATH);
TRACE_(shell)("-- %s, 0x%08lx\n",debugstr_w(pszPath), hr);
TRACE_(shell)("-- %s, 0x%08x\n",debugstr_w(pszPath), hr);
return SUCCEEDED(hr);
}
@ -1323,7 +1318,7 @@ HRESULT WINAPI SHBindToParent(LPCITEMIDLIST pidl, REFIID riid, LPVOID *ppv, LPCI
if (SUCCEEDED(hr) && ppidlLast)
*ppidlLast = ILFindLastID(pidl);
TRACE_(shell)("-- psf=%p pidl=%p ret=0x%08lx\n", *ppv, (ppidlLast)?*ppidlLast:NULL, hr);
TRACE_(shell)("-- psf=%p pidl=%p ret=0x%08x\n", *ppv, (ppidlLast)?*ppidlLast:NULL, hr);
return hr;
}
@ -1361,7 +1356,7 @@ LPITEMIDLIST _ILAlloc(PIDLTYPE type, unsigned int size)
return pidlOut;
}
LPITEMIDLIST _ILCreateDesktop()
LPITEMIDLIST _ILCreateDesktop(void)
{
LPITEMIDLIST ret;
@ -1372,19 +1367,25 @@ LPITEMIDLIST _ILCreateDesktop()
return ret;
}
LPITEMIDLIST _ILCreateMyComputer()
LPITEMIDLIST _ILCreateMyComputer(void)
{
TRACE("()\n");
return _ILCreateGuid(PT_GUID, &CLSID_MyComputer);
}
LPITEMIDLIST _ILCreateIExplore()
LPITEMIDLIST _ILCreateMyDocuments(void)
{
TRACE("()\n");
return _ILCreateGuid(PT_GUID, &CLSID_MyDocuments);
}
LPITEMIDLIST _ILCreateIExplore(void)
{
TRACE("()\n");
return _ILCreateGuid(PT_GUID, &CLSID_Internet);
}
LPITEMIDLIST _ILCreateControlPanel()
LPITEMIDLIST _ILCreateControlPanel(void)
{
LPITEMIDLIST parent = _ILCreateGuid(PT_GUID, &CLSID_MyComputer), ret = NULL;
@ -1403,7 +1404,7 @@ LPITEMIDLIST _ILCreateControlPanel()
return ret;
}
LPITEMIDLIST _ILCreatePrinters()
LPITEMIDLIST _ILCreatePrinters(void)
{
LPITEMIDLIST parent = _ILCreateGuid(PT_GUID, &CLSID_MyComputer), ret = NULL;
@ -1422,13 +1423,13 @@ LPITEMIDLIST _ILCreatePrinters()
return ret;
}
LPITEMIDLIST _ILCreateNetwork()
LPITEMIDLIST _ILCreateNetwork(void)
{
TRACE("()\n");
return _ILCreateGuid(PT_GUID, &CLSID_NetworkPlaces);
}
LPITEMIDLIST _ILCreateBitBucket()
LPITEMIDLIST _ILCreateBitBucket(void)
{
TRACE("()\n");
return _ILCreateGuid(PT_GUID, &CLSID_RecycleBin);
@ -1482,95 +1483,52 @@ LPITEMIDLIST _ILCreateGuidFromStrW(LPCWSTR szGUID)
return _ILCreateGuid(PT_GUID, &iid);
}
LPITEMIDLIST _ILCreateFromFindDataW( WIN32_FIND_DATAW *wfd )
{
/* FIXME: should make unicode PIDLs */
WIN32_FIND_DATAA fda;
memset( &fda, 0, sizeof fda );
fda.dwFileAttributes = wfd->dwFileAttributes;
fda.ftCreationTime = wfd->ftCreationTime;
fda.ftLastAccessTime = wfd->ftLastAccessTime;
fda.ftLastWriteTime = wfd->ftLastWriteTime;
fda.nFileSizeHigh = wfd->nFileSizeHigh;
fda.nFileSizeLow = wfd->nFileSizeLow;
fda.dwReserved0 = wfd->dwReserved0;
fda.dwReserved1 = wfd->dwReserved1;
WideCharToMultiByte( CP_ACP, 0, wfd->cFileName, -1,
fda.cFileName, MAX_PATH, NULL, NULL );
return _ILCreateFromFindDataA( &fda );
}
LPITEMIDLIST _ILCreateFromFindDataA(WIN32_FIND_DATAA * stffile )
LPITEMIDLIST _ILCreateFromFindDataW( const WIN32_FIND_DATAW *wfd )
{
char buff[MAX_PATH + 14 +1]; /* see WIN32_FIND_DATA */
char * pbuff = buff;
size_t len, len1;
DWORD len, len1, wlen, alen;
LPITEMIDLIST pidl;
PIDLTYPE type;
if (!stffile)
if (!wfd)
return NULL;
TRACE("(%s, %s)\n",stffile->cAlternateFileName, stffile->cFileName);
TRACE("(%s, %s)\n",debugstr_w(wfd->cAlternateFileName), debugstr_w(wfd->cFileName));
/* prepare buffer with both names */
len = strlen (stffile->cFileName) + 1;
memcpy (pbuff, stffile->cFileName, len);
pbuff += len;
len = WideCharToMultiByte(CP_ACP,0,wfd->cFileName,-1,buff,MAX_PATH,NULL,NULL);
len1 = WideCharToMultiByte(CP_ACP,0,wfd->cAlternateFileName,-1, buff+len, sizeof(buff)-len, NULL, NULL);
alen = len + len1;
len1 = strlen (stffile->cAlternateFileName)+1;
memcpy (pbuff, stffile->cAlternateFileName, len1);
type = (wfd->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? PT_FOLDER : PT_VALUE;
type = (stffile->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? PT_FOLDER : PT_VALUE;
/*
* FileStruct already has one byte for the first name, so use len - 1 in
* size calculation
*/
pidl = _ILAlloc(type, sizeof(FileStruct) + (len - 1) + len1);
wlen = lstrlenW(wfd->cFileName) + 1;
pidl = _ILAlloc(type, FIELD_OFFSET(FileStruct, szNames[alen + (alen & 1)]) +
FIELD_OFFSET(FileStructW, wszName[wlen]) + sizeof(WORD));
if (pidl)
{
LPPIDLDATA pData;
LPSTR pszDest;
LPPIDLDATA pData = _ILGetDataPointer(pidl);
FileStruct *fs = &pData->u.file;
FileStructW *fsw;
WORD *pOffsetW;
/* set attributes */
pData = _ILGetDataPointer(pidl);
if (pData)
{
pData->type = type;
FileTimeToDosDateTime( &(stffile->ftLastWriteTime),
&pData->u.file.uFileDate, &pData->u.file.uFileTime);
pData->u.file.dwFileSize = stffile->nFileSizeLow;
pData->u.file.uFileAttribs = (WORD)stffile->dwFileAttributes;
}
pszDest = _ILGetTextPointer(pidl);
if (pszDest)
{
memcpy(pszDest, buff, len + len1);
TRACE("-- create Value: %s\n",debugstr_a(pszDest));
}
FileTimeToDosDateTime( &wfd->ftLastWriteTime, &fs->uFileDate, &fs->uFileTime);
fs->dwFileSize = wfd->nFileSizeLow;
fs->uFileAttribs = wfd->dwFileAttributes;
memcpy(fs->szNames, buff, alen);
fsw = (FileStructW*)(pData->u.file.szNames + alen + (alen & 0x1));
fsw->cbLen = FIELD_OFFSET(FileStructW, wszName[wlen]) + sizeof(WORD);
FileTimeToDosDateTime( &wfd->ftCreationTime, &fsw->uCreationDate, &fsw->uCreationTime);
FileTimeToDosDateTime( &wfd->ftLastAccessTime, &fsw->uLastAccessDate, &fsw->uLastAccessTime);
memcpy(fsw->wszName, wfd->cFileName, wlen * sizeof(WCHAR));
pOffsetW = (WORD*)((LPBYTE)pidl + pidl->mkid.cb - sizeof(WORD));
*pOffsetW = (LPBYTE)fsw - (LPBYTE)pidl;
TRACE("-- Set Value: %s\n",debugstr_w(fsw->wszName));
}
return pidl;
}
HRESULT _ILCreateFromPathA(LPCSTR szPath, LPITEMIDLIST* ppidl)
{
HANDLE hFile;
WIN32_FIND_DATAA stffile;
if (!ppidl)
return E_INVALIDARG;
hFile = FindFirstFileA(szPath, &stffile);
if (hFile == INVALID_HANDLE_VALUE)
return HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND);
FindClose(hFile);
*ppidl = _ILCreateFromFindDataA(&stffile);
return *ppidl ? S_OK : E_OUTOFMEMORY;
}
HRESULT _ILCreateFromPathW(LPCWSTR szPath, LPITEMIDLIST* ppidl)
@ -1640,6 +1598,7 @@ DWORD _ILGetDrive(LPCITEMIDLIST pidl,LPSTR pOut, UINT uSize)
* ### 2. section testing pidls ###
*
**************************************************************************
* _ILIsUnicode()
* _ILIsDesktop()
* _ILIsMyComputer()
* _ILIsSpecialFolder()
@ -1648,6 +1607,15 @@ DWORD _ILGetDrive(LPCITEMIDLIST pidl,LPSTR pOut, UINT uSize)
* _ILIsValue()
* _ILIsPidlSimple()
*/
BOOL _ILIsUnicode(LPCITEMIDLIST pidl)
{
LPPIDLDATA lpPData = _ILGetDataPointer(pidl);
TRACE("(%p)\n",pidl);
return (pidl && lpPData && PT_VALUEW == lpPData->type);
}
BOOL _ILIsDesktop(LPCITEMIDLIST pidl)
{
TRACE("(%p)\n",pidl);
@ -1752,6 +1720,7 @@ DWORD _ILSimpleGetText (LPCITEMIDLIST pidl, LPSTR szOut, UINT uOutSize)
{
DWORD dwReturn=0;
LPSTR szSrc;
LPWSTR szSrcW;
GUID const * riid;
char szTemp[MAX_PATH];
@ -1782,6 +1751,16 @@ DWORD _ILSimpleGetText (LPCITEMIDLIST pidl, LPSTR szOut, UINT uOutSize)
dwReturn = strlen(szSrc);
}
else if (( szSrcW = _ILGetTextPointerW(pidl) ))
{
/* unicode filesystem */
WideCharToMultiByte(CP_ACP,0,szSrcW, -1, szTemp, MAX_PATH, NULL, NULL);
if (szOut)
lstrcpynA(szOut, szTemp, uOutSize);
dwReturn = strlen (szTemp);
}
else if (( riid = _ILGetGUIDPointer(pidl) ))
{
/* special folder */
@ -1798,7 +1777,7 @@ DWORD _ILSimpleGetText (LPCITEMIDLIST pidl, LPSTR szOut, UINT uOutSize)
ERR("-- no text\n");
}
TRACE("-- (%p=%s 0x%08lx)\n",szOut,debugstr_a(szOut),dwReturn);
TRACE("-- (%p=%s 0x%08x)\n",szOut,debugstr_a(szOut),dwReturn);
return dwReturn;
}
@ -1812,7 +1791,6 @@ DWORD _ILSimpleGetText (LPCITEMIDLIST pidl, LPSTR szOut, UINT uOutSize)
DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
{
DWORD dwReturn;
char szTemp[MAX_PATH];
FileStructW *pFileStructW = _ILGetFileStructW(pidl);
TRACE("(%p %p %x)\n",pidl,szOut,uOutSize);
@ -1821,13 +1799,65 @@ DWORD _ILSimpleGetTextW (LPCITEMIDLIST pidl, LPWSTR szOut, UINT uOutSize)
lstrcpynW(szOut, pFileStructW->wszName, uOutSize);
dwReturn = lstrlenW(pFileStructW->wszName);
} else {
dwReturn = _ILSimpleGetText(pidl, szTemp, MAX_PATH);
GUID const * riid;
WCHAR szTemp[MAX_PATH];
LPSTR szSrc;
LPWSTR szSrcW;
dwReturn=0;
if (!MultiByteToWideChar(CP_ACP, 0, szTemp, -1, szOut, uOutSize))
if (!pidl)
return 0;
if (szOut)
*szOut = 0;
if (_ILIsDesktop(pidl))
{
/* desktop */
if (HCR_GetClassNameW(&CLSID_ShellDesktop, szTemp, MAX_PATH))
{
if (szOut)
lstrcpynW(szOut, szTemp, uOutSize);
dwReturn = lstrlenW (szTemp);
}
}
else if (( szSrcW = _ILGetTextPointerW(pidl) ))
{
/* unicode filesystem */
if (szOut)
lstrcpynW(szOut, szSrcW, uOutSize);
dwReturn = lstrlenW(szSrcW);
}
else if (( szSrc = _ILGetTextPointer(pidl) ))
{
/* filesystem */
MultiByteToWideChar(CP_ACP, 0, szSrc, -1, szTemp, MAX_PATH);
if (szOut)
lstrcpynW(szOut, szTemp, uOutSize);
dwReturn = lstrlenW (szTemp);
}
else if (( riid = _ILGetGUIDPointer(pidl) ))
{
/* special folder */
if ( HCR_GetClassNameW(riid, szTemp, MAX_PATH) )
{
if (szOut)
lstrcpynW(szOut, szTemp, uOutSize);
dwReturn = lstrlenW (szTemp);
}
}
else
{
ERR("-- no text\n");
}
}
TRACE("-- (%p=%s 0x%08lx)\n",szOut,debugstr_w(szOut),dwReturn);
TRACE("-- (%p=%s 0x%08x)\n",szOut,debugstr_w(szOut),dwReturn);
return dwReturn;
}
@ -1845,6 +1875,56 @@ LPPIDLDATA _ILGetDataPointer(LPCITEMIDLIST pidl)
return NULL;
}
/**************************************************************************
* _ILGetTextPointerW()
* gets a pointer to the unicode long filename string stored in the pidl
*/
LPWSTR _ILGetTextPointerW(LPCITEMIDLIST pidl)
{
/* TRACE(pidl,"(pidl%p)\n", pidl);*/
LPPIDLDATA pdata = _ILGetDataPointer(pidl);
if (!pdata)
return NULL;
switch (pdata->type)
{
case PT_GUID:
case PT_SHELLEXT:
case PT_YAGUID:
return NULL;
case PT_DRIVE:
case PT_DRIVE1:
case PT_DRIVE2:
case PT_DRIVE3:
/*return (LPSTR)&(pdata->u.drive.szDriveName);*/
return NULL;
case PT_FOLDER:
case PT_FOLDER1:
case PT_VALUE:
case PT_IESPECIAL1:
case PT_IESPECIAL2:
/*return (LPSTR)&(pdata->u.file.szNames);*/
return NULL;
case PT_WORKGRP:
case PT_COMP:
case PT_NETWORK:
case PT_NETPROVIDER:
case PT_SHARE:
/*return (LPSTR)&(pdata->u.network.szNames);*/
return NULL;
case PT_VALUEW:
return (LPWSTR)&(pdata->u.file.szNames);
}
return NULL;
}
/**************************************************************************
* _ILGetTextPointer()
* gets a pointer to the long filename string stored in the pidl
@ -1963,7 +2043,7 @@ FileStructW* _ILGetFileStructW(LPCITEMIDLIST pidl) {
if (!(_ILIsValue(pidl) || _ILIsFolder(pidl)))
return NULL;
cbOffset = *(WORD*)((LPBYTE)pidl + pidl->mkid.cb - sizeof(WORD));
cbOffset = *(const WORD *)((const BYTE *)pidl + pidl->mkid.cb - sizeof(WORD));
pFileStructW = (FileStructW*)((LPBYTE)pidl + cbOffset);
/* Currently I don't see a fool prove way to figure out if a pidl is for sure of WinXP
@ -2074,7 +2154,7 @@ DWORD _ILGetFileSize (LPCITEMIDLIST pidl, LPSTR pOut, UINT uOutSize)
case PT_VALUE:
dwSize = pdata->u.file.dwFileSize;
if (pOut)
StrFormatByteSizeA(dwSize, pOut, uOutSize);
StrFormatKBSizeA(dwSize, pOut, uOutSize);
return dwSize;
}
if (pOut)
@ -2224,7 +2304,7 @@ void _ILFreeaPidl(LPITEMIDLIST * apidl, UINT cidl)
*
* copies an aPidl struct
*/
LPITEMIDLIST* _ILCopyaPidl(LPCITEMIDLIST * apidlsrc, UINT cidl)
LPITEMIDLIST* _ILCopyaPidl(const LPCITEMIDLIST * apidlsrc, UINT cidl)
{
UINT i;
LPITEMIDLIST *apidldest;
@ -2244,7 +2324,7 @@ LPITEMIDLIST* _ILCopyaPidl(LPCITEMIDLIST * apidlsrc, UINT cidl)
*
* creates aPidl from CIDA
*/
LPITEMIDLIST* _ILCopyCidaToaPidl(LPITEMIDLIST* pidl, LPIDA cida)
LPITEMIDLIST* _ILCopyCidaToaPidl(LPITEMIDLIST* pidl, const CIDA * cida)
{
UINT i;
LPITEMIDLIST *dst;
@ -2254,10 +2334,10 @@ LPITEMIDLIST* _ILCopyCidaToaPidl(LPITEMIDLIST* pidl, LPIDA cida)
return NULL;
if (pidl)
*pidl = ILClone((LPITEMIDLIST)(&((LPBYTE)cida)[cida->aoffset[0]]));
*pidl = ILClone((LPCITEMIDLIST)(&((const BYTE*)cida)[cida->aoffset[0]]));
for (i = 0; i < cida->cidl; i++)
dst[i] = ILClone((LPITEMIDLIST)(&((LPBYTE)cida)[cida->aoffset[i + 1]]));
dst[i] = ILClone((LPCITEMIDLIST)(&((const BYTE*)cida)[cida->aoffset[i + 1]]));
return dst;
}

View file

@ -201,6 +201,7 @@ DWORD _ILGetDrive (LPCITEMIDLIST, LPSTR, UINT);
/*
* testing simple pidls
*/
BOOL _ILIsUnicode (LPCITEMIDLIST pidl);
BOOL _ILIsDesktop (LPCITEMIDLIST pidl);
BOOL _ILIsMyComputer (LPCITEMIDLIST pidl);
BOOL _ILIsDrive (LPCITEMIDLIST pidl);
@ -241,9 +242,7 @@ LPITEMIDLIST _ILCreateGuidFromStrW(LPCWSTR szGUID);
/* Commonly used PIDLs representing file system objects. */
LPITEMIDLIST _ILCreateDesktop (void);
LPITEMIDLIST _ILCreateFromFindDataA(WIN32_FIND_DATAA *stffile);
LPITEMIDLIST _ILCreateFromFindDataW(WIN32_FIND_DATAW *stffile);
HRESULT _ILCreateFromPathA (LPCSTR szPath, LPITEMIDLIST* ppidl);
LPITEMIDLIST _ILCreateFromFindDataW(const WIN32_FIND_DATAW *stffile);
HRESULT _ILCreateFromPathW (LPCWSTR szPath, LPITEMIDLIST* ppidl);
/* Other helpers */
@ -261,6 +260,7 @@ LPITEMIDLIST _ILCreateDrive (LPCWSTR);
*/
LPPIDLDATA _ILGetDataPointer (LPCITEMIDLIST);
LPSTR _ILGetTextPointer (LPCITEMIDLIST);
LPWSTR _ILGetTextPointerW (LPCITEMIDLIST);
LPSTR _ILGetSTextPointer (LPCITEMIDLIST);
IID *_ILGetGUIDPointer (LPCITEMIDLIST pidl);
FileStructW *_ILGetFileStructW (LPCITEMIDLIST pidl);
@ -275,8 +275,8 @@ BOOL pcheck (LPCITEMIDLIST pidl);
* aPidl helper
*/
void _ILFreeaPidl(LPITEMIDLIST * apidl, UINT cidl);
LPITEMIDLIST * _ILCopyaPidl(LPCITEMIDLIST * apidlsrc, UINT cidl);
LPITEMIDLIST * _ILCopyCidaToaPidl(LPITEMIDLIST* pidl, LPIDA cida);
LPITEMIDLIST * _ILCopyaPidl(const LPCITEMIDLIST * apidlsrc, UINT cidl);
LPITEMIDLIST * _ILCopyCidaToaPidl(LPITEMIDLIST* pidl, const CIDA * cida);
BOOL WINAPI ILGetDisplayNameExA(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPSTR path, DWORD type);
BOOL WINAPI ILGetDisplayNameExW(LPSHELLFOLDER psf, LPCITEMIDLIST pidl, LPWSTR path, DWORD type);

View file

@ -15,7 +15,7 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <stdarg.h>
@ -29,8 +29,11 @@
#include "winerror.h"
#include "ole2.h"
#include "shldisp.h"
#include "shlguid.h"
#include "shell32_main.h"
#include "shresdef.h"
#include "initguid.h"
#include "shfldr.h"
#include "wine/debug.h"
@ -62,6 +65,7 @@ struct regsvr_coclass
{
CLSID const *clsid; /* NULL for end of list */
LPCSTR name; /* can be NULL to omit */
UINT idName; /* can be 0 to omit */
LPCSTR ips; /* can be NULL to omit */
LPCSTR ips32; /* can be NULL to omit */
LPCSTR ips32_tmodel; /* can be NULL to omit */
@ -70,6 +74,7 @@ struct regsvr_coclass
DWORD dwCallForAttributes;
LPCSTR clsid_str; /* can be NULL to omit */
LPCSTR progid; /* can be NULL to omit */
UINT idDefaultIcon; /* can be 0 to omit */
};
/* flags for regsvr_coclass.flags */
@ -124,10 +129,13 @@ static WCHAR const shellfolder_keyname[12] = {
static WCHAR const mcdm_keyname[21] = {
'M', 'a', 'y', 'C', 'h', 'a', 'n', 'g', 'e', 'D', 'e', 'f',
'a', 'u', 'l', 't', 'M', 'e', 'n', 'u', 0 };
static WCHAR const defaulticon_keyname[] = {
'D','e','f','a','u','l','t','I','c','o','n',0};
static char const tmodel_valuename[] = "ThreadingModel";
static char const wfparsing_valuename[] = "WantsFORPARSING";
static char const attributes_valuename[] = "Attributes";
static char const cfattributes_valuename[] = "CallForAttributes";
static char const localized_valuename[] = "LocalizedString";
/***********************************************************************
* static helper functions
@ -137,9 +145,6 @@ static LONG register_key_defvalueW(HKEY base, WCHAR const *name,
WCHAR const *value);
static LONG register_key_defvalueA(HKEY base, WCHAR const *name,
char const *value);
static LONG recursive_delete_key(HKEY key);
static LONG recursive_delete_keyA(HKEY base, char const *name);
static LONG recursive_delete_keyW(HKEY base, WCHAR const *name);
/***********************************************************************
* register_interfaces
@ -170,7 +175,7 @@ static HRESULT register_interfaces(struct regsvr_interface const *list)
}
if (list->base_iid) {
register_key_guid(iid_key, base_ifa_keyname, list->base_iid);
res = register_key_guid(iid_key, base_ifa_keyname, list->base_iid);
if (res != ERROR_SUCCESS) goto error_close_iid_key;
}
@ -192,12 +197,12 @@ static HRESULT register_interfaces(struct regsvr_interface const *list)
}
if (list->ps_clsid) {
register_key_guid(iid_key, ps_clsid_keyname, list->ps_clsid);
res = register_key_guid(iid_key, ps_clsid_keyname, list->ps_clsid);
if (res != ERROR_SUCCESS) goto error_close_iid_key;
}
if (list->ps_clsid32) {
register_key_guid(iid_key, ps_clsid32_keyname, list->ps_clsid32);
res = register_key_guid(iid_key, ps_clsid32_keyname, list->ps_clsid32);
if (res != ERROR_SUCCESS) goto error_close_iid_key;
}
@ -228,7 +233,8 @@ static HRESULT unregister_interfaces(struct regsvr_interface const *list)
WCHAR buf[39];
StringFromGUID2(list->iid, buf, 39);
res = recursive_delete_keyW(interface_key, buf);
res = RegDeleteTreeW(interface_key, buf);
if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS;
}
RegCloseKey(interface_key);
@ -264,6 +270,29 @@ static HRESULT register_coclasses(struct regsvr_coclass const *list)
if (res != ERROR_SUCCESS) goto error_close_clsid_key;
}
if (list->idName) {
char buffer[64];
sprintf(buffer, "@shell32.dll,-%u", list->idName);
res = RegSetValueExA(clsid_key, localized_valuename, 0, REG_SZ,
(CONST BYTE*)(buffer), strlen(buffer)+1);
if (res != ERROR_SUCCESS) goto error_close_clsid_key;
}
if (list->idDefaultIcon) {
HKEY icon_key;
char buffer[64];
res = RegCreateKeyExW(clsid_key, defaulticon_keyname, 0, NULL, 0,
KEY_READ | KEY_WRITE, NULL, &icon_key, NULL);
if (res != ERROR_SUCCESS) goto error_close_clsid_key;
sprintf(buffer, "shell32.dll,-%u", list->idDefaultIcon);
res = RegSetValueExA(icon_key, NULL, 0, REG_SZ,
(CONST BYTE*)(buffer), strlen(buffer)+1);
RegCloseKey(icon_key);
if (res != ERROR_SUCCESS) goto error_close_clsid_key;
}
if (list->ips) {
res = register_key_defvalueA(clsid_key, ips_keyname, list->ips);
if (res != ERROR_SUCCESS) goto error_close_clsid_key;
@ -313,13 +342,13 @@ static HRESULT register_coclasses(struct regsvr_coclass const *list)
&shellfolder_key, NULL);
if (res != ERROR_SUCCESS) goto error_close_clsid_key;
if (list->flags & SHELLFOLDER_WANTSFORPARSING)
res = RegSetValueExA(shellfolder_key, wfparsing_valuename, 0, REG_SZ, (LPBYTE)"", 1);
res = RegSetValueExA(shellfolder_key, wfparsing_valuename, 0, REG_SZ, (const BYTE *)"", 1);
if (list->flags & SHELLFOLDER_ATTRIBUTES)
res = RegSetValueExA(shellfolder_key, attributes_valuename, 0, REG_DWORD,
(LPBYTE)&list->dwAttributes, sizeof(DWORD));
(const BYTE *)&list->dwAttributes, sizeof(DWORD));
if (list->flags & SHELLFOLDER_CALLFORATTRIBUTES)
res = RegSetValueExA(shellfolder_key, cfattributes_valuename, 0, REG_DWORD,
(LPBYTE)&list->dwCallForAttributes, sizeof(DWORD));
(const BYTE *)&list->dwCallForAttributes, sizeof(DWORD));
RegCloseKey(shellfolder_key);
if (res != ERROR_SUCCESS) goto error_close_clsid_key;
}
@ -374,11 +403,13 @@ static HRESULT unregister_coclasses(struct regsvr_coclass const *list)
WCHAR buf[39];
StringFromGUID2(list->clsid, buf, 39);
res = recursive_delete_keyW(coclass_key, buf);
res = RegDeleteTreeW(coclass_key, buf);
if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS;
if (res != ERROR_SUCCESS) goto error_close_coclass_key;
if (list->progid) {
res = recursive_delete_keyA(HKEY_CLASSES_ROOT, list->progid);
res = RegDeleteTreeA(HKEY_CLASSES_ROOT, list->progid);
if (res == ERROR_FILE_NOT_FOUND) res = ERROR_SUCCESS;
if (res != ERROR_SUCCESS) goto error_close_coclass_key;
}
}
@ -429,7 +460,7 @@ static HRESULT register_namespace_extensions(struct regsvr_namespace const *list
if (pwszKey && ERROR_SUCCESS ==
RegCreateKeyExW(HKEY_LOCAL_MACHINE, pwszKey, 0, NULL, 0, KEY_WRITE, NULL, &hKey, NULL))
{
RegSetValueExW(hKey, NULL, 0, REG_SZ, (LPBYTE)list->value, sizeof(WCHAR)*(lstrlenW(list->value)+1));
RegSetValueExW(hKey, NULL, 0, REG_SZ, (const BYTE *)list->value, sizeof(WCHAR)*(lstrlenW(list->value)+1));
RegCloseKey(hKey);
}
@ -500,70 +531,6 @@ static LONG register_key_defvalueA(
return res;
}
/***********************************************************************
* recursive_delete_key
*/
static LONG recursive_delete_key(HKEY key)
{
LONG res;
WCHAR subkey_name[MAX_PATH];
DWORD cName;
HKEY subkey;
for (;;) {
cName = sizeof(subkey_name) / sizeof(WCHAR);
res = RegEnumKeyExW(key, 0, subkey_name, &cName,
NULL, NULL, NULL, NULL);
if (res != ERROR_SUCCESS && res != ERROR_MORE_DATA) {
res = ERROR_SUCCESS; /* presumably we're done enumerating */
break;
}
res = RegOpenKeyExW(key, subkey_name, 0,
KEY_READ | KEY_WRITE, &subkey);
if (res == ERROR_FILE_NOT_FOUND) continue;
if (res != ERROR_SUCCESS) break;
res = recursive_delete_key(subkey);
RegCloseKey(subkey);
if (res != ERROR_SUCCESS) break;
}
if (res == ERROR_SUCCESS) res = RegDeleteKeyW(key, 0);
return res;
}
/***********************************************************************
* recursive_delete_keyA
*/
static LONG recursive_delete_keyA(HKEY base, char const *name)
{
LONG res;
HKEY key;
res = RegOpenKeyExA(base, name, 0, KEY_READ | KEY_WRITE, &key);
if (res == ERROR_FILE_NOT_FOUND) return ERROR_SUCCESS;
if (res != ERROR_SUCCESS) return res;
res = recursive_delete_key(key);
RegCloseKey(key);
return res;
}
/***********************************************************************
* recursive_delete_keyW
*/
static LONG recursive_delete_keyW(HKEY base, WCHAR const *name)
{
LONG res;
HKEY key;
res = RegOpenKeyExW(base, name, 0, KEY_READ | KEY_WRITE, &key);
if (res == ERROR_FILE_NOT_FOUND) return ERROR_SUCCESS;
if (res != ERROR_SUCCESS) return res;
res = recursive_delete_key(key);
RegCloseKey(key);
return res;
}
/***********************************************************************
* coclass list
*/
@ -576,24 +543,35 @@ static GUID const CLSID_Shortcut = {
static struct regsvr_coclass const coclass_list[] = {
{ &CLSID_Desktop,
"Desktop",
IDS_DESKTOP,
NULL,
"shell32.dll",
"Apartment"
},
{ &CLSID_DragDropHelper,
"Shell Drag and Drop Helper",
0,
NULL,
"shell32.dll",
"Apartment"
},
{ &CLSID_MyComputer,
"My Computer",
IDS_MYCOMPUTER,
NULL,
"shell32.dll",
"Apartment"
},
{ &CLSID_NetworkPlaces,
"My Network Places",
0,
NULL,
"shell32.dll",
"Apartment"
},
{ &CLSID_Shortcut,
"Shortcut",
0,
NULL,
"shell32.dll",
"Apartment",
@ -601,12 +579,32 @@ static struct regsvr_coclass const coclass_list[] = {
},
{ &CLSID_AutoComplete,
"AutoComplete",
0,
NULL,
"shell32.dll",
"Apartment",
},
{ &CLSID_UnixFolder,
"/",
0,
NULL,
"shell32.dll",
"Apartment",
SHELLFOLDER_WANTSFORPARSING
},
{ &CLSID_UnixDosFolder,
"/",
0,
NULL,
"shell32.dll",
"Apartment",
SHELLFOLDER_WANTSFORPARSING|SHELLFOLDER_ATTRIBUTES|SHELLFOLDER_CALLFORATTRIBUTES,
SFGAO_FILESYSANCESTOR|SFGAO_FOLDER|SFGAO_HASSUBFOLDER,
SFGAO_FILESYSTEM
},
{ &CLSID_FolderShortcut,
"Foldershortcut",
0,
NULL,
"shell32.dll",
"Apartment",
@ -616,6 +614,7 @@ static struct regsvr_coclass const coclass_list[] = {
},
{ &CLSID_MyDocuments,
"My Documents",
IDS_PERSONAL,
NULL,
"shell32.dll",
"Apartment",
@ -623,6 +622,33 @@ static struct regsvr_coclass const coclass_list[] = {
SFGAO_FILESYSANCESTOR|SFGAO_FOLDER|SFGAO_HASSUBFOLDER,
SFGAO_FILESYSTEM
},
{ &CLSID_RecycleBin,
"Trash",
IDS_RECYCLEBIN_FOLDER_NAME,
NULL,
"shell32.dll",
"Apartment",
SHELLFOLDER_ATTRIBUTES,
SFGAO_FOLDER|SFGAO_DROPTARGET|SFGAO_HASPROPSHEET,
0,
NULL,
NULL,
IDI_SHELL_FULL_RECYCLE_BIN
},
{ &CLSID_ShellFSFolder,
"Shell File System Folder",
0,
NULL,
"shell32.dll",
"Apartment"
},
{ &CLSID_ShellFolderViewOC,
"Microsoft Shell Folder View Router",
0,
NULL,
"shell32.dll",
"Apartment"
},
{ NULL } /* list terminator */
};
@ -640,14 +666,25 @@ static struct regsvr_interface const interface_list[] = {
static const WCHAR wszDesktop[] = { 'D','e','s','k','t','o','p',0 };
static const WCHAR wszSlash[] = { '/', 0 };
static const WCHAR wszMyDocuments[] = { 'M','y',' ','D','o','c','u','m','e','n','t','s', 0 };
static const WCHAR wszRecycleBin[] = { 'T','r','a','s','h', 0 };
static struct regsvr_namespace const namespace_extensions_list[] = {
#if 0
{
&CLSID_UnixDosFolder,
wszDesktop,
wszSlash
},
{
&CLSID_MyDocuments,
wszDesktop,
wszMyDocuments
},
{
&CLSID_RecycleBin,
wszDesktop,
wszRecycleBin
},
#endif
{ NULL }
};

View file

@ -17,7 +17,7 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
@ -33,19 +33,15 @@
#include "windef.h"
#include "winbase.h"
#include "winerror.h"
#include "winreg.h"
#include "wownt32.h"
#include "dlgs.h"
#include "shellapi.h"
#include "winuser.h"
#include "wingdi.h"
#include "shlobj.h"
#include "shlwapi.h"
#include "ddeml.h"
#include "wine/winbase16.h"
#include "wine/winuser16.h"
#include "shell32_main.h"
#include "wine/debug.h"
@ -60,9 +56,9 @@ typedef struct { /* structure for dropped files */
/* memory block with filenames follows */
} DROPFILESTRUCT16, *LPDROPFILESTRUCT16;
static const char* lpstrMsgWndCreated = "OTHERWINDOWCREATED";
static const char* lpstrMsgWndDestroyed = "OTHERWINDOWDESTROYED";
static const char* lpstrMsgShellActivate = "ACTIVATESHELLWINDOW";
static const char lpstrMsgWndCreated[] = "OTHERWINDOWCREATED";
static const char lpstrMsgWndDestroyed[] = "OTHERWINDOWDESTROYED";
static const char lpstrMsgShellActivate[] = "ACTIVATESHELLWINDOW";
static HWND SHELL_hWnd = 0;
static HHOOK SHELL_hHook = 0;
@ -124,10 +120,8 @@ UINT16 WINAPI DragQueryFile16(
}
i = strlen(lpDrop);
i++;
if (!lpszFile ) goto end; /* needed buffer size */
i = (wLength > i) ? i : wLength;
lstrcpynA (lpszFile, lpDrop, i);
lstrcpynA (lpszFile, lpDrop, wLength);
end:
GlobalUnlock16(hDrop);
return i;
@ -313,7 +307,7 @@ static LPSTR SHELL_FindString(LPSTR lpEnv, LPCSTR entry)
/**********************************************************************/
SEGPTR WINAPI FindEnvironmentString16(LPSTR str)
SEGPTR WINAPI FindEnvironmentString16(LPCSTR str)
{ SEGPTR spEnv;
LPSTR lpEnv,lpString;
TRACE("\n");
@ -418,7 +412,7 @@ DWORD WINAPI DoEnvironmentSubst16(LPSTR str,WORD length)
*/
static LRESULT WINAPI SHELL_HookProc(INT code, WPARAM wParam, LPARAM lParam)
{
TRACE("%i, %x, %08lx\n", code, wParam, lParam );
TRACE("%i, %lx, %08lx\n", code, wParam, lParam );
if (SHELL_hWnd)
{
@ -589,7 +583,7 @@ DWORD WINAPI RegEnumKey16( HKEY hkey, DWORD index, LPSTR name, DWORD name_len )
/*************************************************************************
* SHELL_Execute16 [Internal]
*/
static UINT SHELL_Execute16(const WCHAR *lpCmd, WCHAR *env, BOOL shWait,
static UINT_PTR SHELL_Execute16(const WCHAR *lpCmd, WCHAR *env, BOOL shWait,
LPSHELLEXECUTEINFOW psei, LPSHELLEXECUTEINFOW psei_out)
{
UINT ret;
@ -628,10 +622,10 @@ HINSTANCE16 WINAPI ShellExecute16( HWND16 hWnd, LPCSTR lpOperation,
SHELL_execute( &seiW, SHELL_Execute16 );
if (wVerb) SHFree(wVerb);
if (wFile) SHFree(wFile);
if (wParameters) SHFree(wParameters);
if (wDirectory) SHFree(wDirectory);
SHFree(wVerb);
SHFree(wFile);
SHFree(wParameters);
SHFree(wDirectory);
return HINSTANCE_16(seiW.hInstApp);
}

View file

@ -5,8 +5,8 @@
<include base="ReactOS">include/reactos/wine</include>
<define name="__USE_W32API" />
<define name="_WIN32_IE">0x600</define>
<define name="_WIN32_WINNT">0x501</define>
<define name="WINVER">0x501</define>
<define name="_WIN32_WINNT">0x600</define>
<define name="WINVER">0x600</define>
<define name="_SHELL32_" />
<define name="COM_NO_WINDOWS_H" />
<library>wine</library>

View file

@ -4,8 +4,10 @@
# This list was updated to dll version 4.72
2 stdcall -noname SHChangeNotifyRegister(long long long long long ptr)
3 stdcall SHDefExtractIconA(str long long ptr ptr long)
4 stdcall -noname SHChangeNotifyDeregister(long)
5 stdcall -noname SHChangeNotifyUpdateEntryList(long long long long)
6 stdcall SHDefExtractIconW(wstr long long ptr ptr long)
9 stub -noname PifMgr_OpenProperties
10 stub -noname PifMgr_GetProperties
11 stub -noname PifMgr_SetProperties
@ -44,10 +46,9 @@
48 stdcall -noname PathSetDlgItemPath(long long ptr) PathSetDlgItemPathAW
49 stdcall -noname PathQualify(ptr) PathQualifyAW
50 stdcall -noname PathStripToRoot(ptr) PathStripToRootAW
51 stdcall -noname PathResolve(str long long) PathResolveAW
51 stdcall PathResolve(str long long) PathResolveAW
52 stdcall -noname PathGetArgs(str) PathGetArgsAW
53 stdcall DoEnvironmentSubst(long long) DoEnvironmentSubstAW
54 stdcall -noname LogoffWindowsDialog(ptr)
55 stdcall -noname PathQuoteSpaces(ptr) PathQuoteSpacesAW
56 stdcall -noname PathUnquoteSpaces(str) PathUnquoteSpacesAW
57 stdcall -noname PathGetDriveNumber(str) PathGetDriveNumberAW
@ -58,7 +59,7 @@
62 stdcall -noname PickIconDlg(long long long long)
63 stdcall -noname GetFileNameFromBrowse(long long long long str str str)
64 stdcall -noname DriveType(long)
65 stub -noname InvalidateDriveType
65 stdcall -noname InvalidateDriveType(long)
66 stdcall -noname IsNetDrive(long)
67 stdcall -noname Shell_MergeMenus(long long long long long long)
68 stdcall -noname SHGetSetSettings(ptr long long)
@ -118,6 +119,7 @@
125 stdcall -noname FileMenu_AddFilesForPidl(long long long ptr long long ptr)
126 stdcall -noname SHOutOfMemoryMessageBox(long long long)
127 stdcall -noname SHWinHelp(long long long long)
128 stdcall -noname SHDllGetClassObject(ptr ptr ptr) DllGetClassObject
129 stdcall -noname DAD_AutoScroll(long ptr ptr)
130 stdcall -noname DAD_DragEnter(long)
131 stdcall -noname DAD_DragEnterEx(long double)
@ -134,6 +136,7 @@
145 stdcall -noname PathFindOnPath(ptr ptr) PathFindOnPathAW
146 stdcall -noname RLBuildListOfPaths()
147 stdcall -noname SHCLSIDFromString(long long) SHCLSIDFromStringAW
148 stdcall -noname SHMapIDListToImageListIndexAsync(ptr ptr ptr long ptr ptr ptr ptr ptr)
149 stdcall -noname SHFind_InitMenuPopup(long long long long)
151 stdcall -noname SHLoadOLE(long)
@ -167,8 +170,8 @@
179 stdcall -noname SHGetNewLinkInfoA(str str ptr long long)
180 stdcall -noname SHGetNewLinkInfoW(wstr wstr ptr long long)
181 stdcall -noname RegisterShellHook(long long)
182 varargs -noname ShellMessageBoxW(long long long str long)
183 varargs -noname ShellMessageBoxA(long long long str long)
182 varargs -noname ShellMessageBoxW(long long wstr wstr long)
183 varargs -noname ShellMessageBoxA(long long str str long)
184 stdcall -noname ArrangeWindows(long long long long long)
185 stub SHHandleDiskFull
186 stdcall -noname ILGetDisplayNameEx(ptr ptr ptr long)
@ -213,7 +216,7 @@
505 stdcall SHRegCloseKey (long)
506 stdcall SHRegOpenKeyA (long str long)
507 stdcall SHRegOpenKeyW (long wstr long)
508 stub SHRegQueryValueA
508 stdcall SHRegQueryValueA(long str ptr ptr)
509 stdcall SHRegQueryValueExA(long str ptr ptr ptr ptr)
510 stdcall SHRegQueryValueW (long long long long)
511 stdcall SHRegQueryValueExW (long wstr ptr ptr ptr ptr)
@ -297,9 +300,9 @@
@ stub InternalExtractIconListA
@ stub InternalExtractIconListW
@ stub OCInstall
@ stub OpenAs_RunDLL
@ stub OpenAs_RunDLLA
@ stub OpenAs_RunDLLW
@ stdcall OpenAs_RunDLL(long long str long) OpenAs_RunDLLA
@ stdcall OpenAs_RunDLLA(long long str long)
@ stdcall OpenAs_RunDLLW(long long wstr long)
@ stub PrintersGetCommand_RunDLL
@ stub PrintersGetCommand_RunDLLA
@ stub PrintersGetCommand_RunDLLW
@ -319,8 +322,6 @@
@ stdcall SHCreateDirectoryExA(long str ptr)
@ stdcall SHCreateDirectoryExW(long wstr ptr)
@ stub SHCreateProcessAsUserW
@ stdcall SHDefExtractIconA(str long long ptr ptr long)
@ stdcall SHDefExtractIconW(wstr long long ptr ptr long)
@ stdcall SHEmptyRecycleBinA(long str long)
@ stdcall SHEmptyRecycleBinW(long wstr long)
@ stub SHExtractIconsW
@ -359,13 +360,14 @@
@ stdcall SHHelpShortcuts_RunDLLW(long long long long)
@ stub SHInvokePrinterCommandA
@ stub SHInvokePrinterCommandW
@ stub SHIsFileAvailableOffline
@ stdcall SHIsFileAvailableOffline(wstr ptr)
@ stdcall SHLoadInProc(long)
@ stub SHLoadNonloadedIconOverlayIdentifiers
@ stub SHPathPrepareForWriteA
@ stub SHPathPrepareForWriteW
@ stdcall SHLoadNonloadedIconOverlayIdentifiers()
@ stdcall SHPathPrepareForWriteA(long ptr str long)
@ stdcall SHPathPrepareForWriteW(long ptr wstr long)
@ stdcall SHQueryRecycleBinA(str ptr)
@ stdcall SHQueryRecycleBinW(wstr ptr)
@ stdcall SHSetLocalizedName(wstr wstr long)
@ stub SHUpdateRecycleBinIcon
@ stdcall SheChangeDirA(str)
@ stub SheChangeDirExA

View file

@ -1,7 +1,6 @@
/*
* Copyright 1998 Juergen Schmied
* Copyright 2004 Henning Gerhardt
* Copyright 2007 Daniel Reimer
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@ -15,7 +14,7 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL
@ -28,6 +27,9 @@ BEGIN
MENUITEM "&Details", FCIDM_SHVIEW_REPORTVIEW
END
/*
shellview background menu
*/
MENU_002 MENU DISCARDABLE
BEGIN
POPUP ""
@ -67,6 +69,9 @@ BEGIN
END
END
/*
shellview item menu
*/
MENU_SHV_FILE MENU DISCARDABLE
BEGIN
POPUP ""
@ -87,7 +92,7 @@ END
SHBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFONT | DS_3DLOOK
CAPTION "Nach Verzeichnis durchsuchen"
CAPTION "Verzeichnis auswählen"
FONT 8, "MS Shell Dlg"
{
DEFPUSHBUTTON "OK", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
@ -100,6 +105,19 @@ FONT 8, "MS Shell Dlg"
4, 40, 180, 120
}
SHELL_YESTOALL_MSGBOX DIALOG 200, 100, 280, 90
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Meldung"
FONT 8, "MS Shell Dlg"
{
DEFPUSHBUTTON "&Ja", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP
PUSHBUTTON "Ja zu &allen", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP
PUSHBUTTON "&Nein", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP
PUSHBUTTON "Abbrechen", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP
ICON "", IDD_ICON, 10, 10, 16, 16
LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0
}
SHELL_ABOUT_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 210, 152
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Informationen über %s"
@ -290,6 +308,7 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x0
PUSHBUTTON "Abbrechen", 14008, 140, 170, 60, 15, WS_TABSTOP
}
STRINGTABLE DISCARDABLE
{
/* columns in the shellview */
@ -304,10 +323,13 @@ STRINGTABLE DISCARDABLE
IDS_SHV_COLUMN9 "Kommentar"
IDS_SHV_COLUMN10 "Besitzer"
IDS_SHV_COLUMN11 "Gruppe"
IDS_SHV_COLUMN_DELFROM "Ursprung"
IDS_SHV_COLUMN_DELDATE "Gelöscht am"
/* special folders */
IDS_DESKTOP "Desktop"
IDS_MYCOMPUTER "Arbeitsplatz"
IDS_RECYCLEBIN_FOLDER_NAME "Müll"
/* context menus */
IDS_VIEW_LARGE "&Große Symbole"
@ -319,12 +341,21 @@ STRINGTABLE DISCARDABLE
IDS_CREATEFOLDER_DENIED "Es konnte kein neues Verzeichnis erstellt werden: Zugriff verweigert."
IDS_CREATEFOLDER_CAPTION "Es trat ein Fehler beim Erstellen eines neuen Verzeichnisses auf"
IDS_DELETEITEM_CAPTION "Bestätigung: Datei löschen"
IDS_DELETEITEM_CAPTION "Bestätigung: Objekt löschen"
IDS_DELETEFOLDER_CAPTION "Bestätigung: Verzeichnis löschen"
IDS_DELETEITEM_TEXT "Sind Sie sich sicher, dass Sie die Datei '%1' löschen möchten ?"
IDS_DELETEMULTIPLE_TEXT "Sind Sie sich sicher, dass Sie diese %1 Dateien löschen möchten ?"
IDS_OVERWRITEFILE_TEXT "Möchten Sie, dass die Datei '%1' überschrieben wird ?"
IDS_DELETEITEM_TEXT "Sind Sie sich sicher, dass Sie '%1' löschen möchten?"
IDS_DELETEMULTIPLE_TEXT "Sind Sie sich sicher, dass Sie diese %1 Objekte löschen möchten?"
IDS_DELETESELECTED_TEXT "Sind Sie sich sicher, dass Sie die ausgewählten Objekte löschen möchten?"
IDS_TRASHITEM_TEXT "Sind Sie sich sicher, dass Sie '%1' in Müll verschieben möchten?"
IDS_TRASHFOLDER_TEXT "Sind Sie sich sicher, dass Sie '%1' und seinen Inhalt in den Müll verschieben möchten?"
IDS_TRASHMULTIPLE_TEXT "Sind Sie sich sicher, dass Sie diese %1 Dateien in den Müll verschieben möchten?"
IDS_CANTTRASH_TEXT "Das Objekt '%1' kann nicht in den Müll verschoben werden. Möchten Sie es stattdessen löschen?"
IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?"
IDS_OVERWRITEFILE_CAPTION "Bestätigung: Datei überschreiben"
IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\
"If the files in the destination folder have the same names as files in the\n"\
"selected folder they will be replaced. Do you still want to move or copy\n"\
"the folder?"
/* message box strings */
IDS_RESTART_TITLE "Neu starten"
@ -340,8 +371,8 @@ STRINGTABLE DISCARDABLE
IDS_RECENT "Recent"
IDS_SENDTO "SendTo"
IDS_STARTMENU "Startmenü"
IDS_MYMUSIC "Eigene Dateien\\Meine Musik"
IDS_MYVIDEO "Eigene Dateien\\Meine Videos"
IDS_MYMUSIC "Meine Musik"
IDS_MYVIDEO "Meine Videos"
IDS_DESKTOPDIRECTORY "Desktop"
IDS_NETHOOD "Netzwerkumgebung"
IDS_TEMPLATES "Vorlagen"
@ -352,7 +383,7 @@ STRINGTABLE DISCARDABLE
IDS_COOKIES "Cookies"
IDS_HISTORY "Lokale Einstellungen\\Verlauf"
IDS_PROGRAM_FILES "Programme"
IDS_MYPICTURES "Eigene Dateien\\Eigene Bilder"
IDS_MYPICTURES "Eigene Bilder"
IDS_PROGRAM_FILES_COMMON "Programme\\Gemeinsame Dateien"
IDS_COMMON_DOCUMENTS "Dokumente"
IDS_ADMINTOOLS "Startmenü\\Programme\\Verwaltung"

View file

@ -13,7 +13,7 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
@ -104,6 +104,37 @@ FONT 8, "MS Shell Dlg"
4, 40, 180, 120
}
SHNEWBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFONT | DS_3DLOOK
CAPTION "Browse for Folder"
FONT 8, "MS Shell Dlg"
{
LTEXT "", IDD_TITLE, 10, 8, 198, 24
LTEXT "", IDD_STATUS, 10, 25, 198, 12
LTEXT "Folder:", IDD_FOLDER, 10, 156, 40, 12
CONTROL "", IDD_TREEVIEW, "SysTreeView32",
TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT |
WS_BORDER | WS_TABSTOP,
12, 38, 194, 105
EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP
PUSHBUTTON "&Make New Folder", IDD_MAKENEWFOLDER, 12, 174, 70, 14, WS_GROUP | WS_TABSTOP
DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP
}
SHELL_YESTOALL_MSGBOX DIALOG 200, 100, 280, 90
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Message"
FONT 8, "MS Shell Dlg"
{
DEFPUSHBUTTON "&Yes", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP
PUSHBUTTON "Yes to &all", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP
PUSHBUTTON "&No", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP
PUSHBUTTON "&Cancel", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP
ICON "", IDD_ICON, 10, 10, 16, 16
LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0
}
SHELL_ABOUT_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 210, 152
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "About %s"
@ -131,7 +162,6 @@ FONT 8, "MS Shell Dlg"
PUSHBUTTON "&Browse...", 12288, 170, 63, 50, 14, WS_TABSTOP
}
SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Shortcut"
@ -297,6 +327,7 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x0
PUSHBUTTON "Cancel", 14008, 140, 170, 60, 15, WS_TABSTOP
}
STRINGTABLE DISCARDABLE
{
/* columns in the shellview */
@ -311,10 +342,13 @@ STRINGTABLE DISCARDABLE
IDS_SHV_COLUMN9 "Comments"
IDS_SHV_COLUMN10 "Owner"
IDS_SHV_COLUMN11 "Group"
IDS_SHV_COLUMN_DELFROM "Original location"
IDS_SHV_COLUMN_DELDATE "Date deleted"
/* special folders */
IDS_DESKTOP "Desktop"
IDS_MYCOMPUTER "My Computer"
IDS_RECYCLEBIN_FOLDER_NAME "Trash"
/* context menus */
IDS_VIEW_LARGE "Lar&ge Icons"
@ -330,8 +364,17 @@ STRINGTABLE DISCARDABLE
IDS_DELETEFOLDER_CAPTION "Confirm folder deletion"
IDS_DELETEITEM_TEXT "Are you sure you want to delete '%1'?"
IDS_DELETEMULTIPLE_TEXT "Are you sure you want to delete these %1 items?"
IDS_OVERWRITEFILE_TEXT "OverWrite File %1?"
IDS_OVERWRITEFILE_CAPTION "Confirm File OverWrite"
IDS_DELETESELECTED_TEXT "Are you sure you want to delete the selected item(s)?"
IDS_TRASHITEM_TEXT "Are you sure that you want to send '%1' to the Trash?"
IDS_TRASHFOLDER_TEXT "Are you sure that you want to send '%1' and all its content to the Trash?"
IDS_TRASHMULTIPLE_TEXT "Are you sure that you want to send these %1 items to the Trash?"
IDS_CANTTRASH_TEXT "The item '%1' can't be sent to Trash. Do you want to delete it instead?"
IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?"
IDS_OVERWRITEFILE_CAPTION "Confirm file overwrite"
IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\
"If the files in the destination folder have the same names as files in the\n"\
"selected folder they will be replaced. Do you still want to move or copy\n"\
"the folder?"
/* message box strings */
IDS_RESTART_TITLE "Restart"
@ -347,8 +390,8 @@ STRINGTABLE DISCARDABLE
IDS_RECENT "Recent"
IDS_SENDTO "SendTo"
IDS_STARTMENU "Start Menu"
IDS_MYMUSIC "My Documents\\My Music"
IDS_MYVIDEO "My Documents\\My Video"
IDS_MYMUSIC "My Music"
IDS_MYVIDEO "My Video"
IDS_DESKTOPDIRECTORY "Desktop"
IDS_NETHOOD "NetHood"
IDS_TEMPLATES "Templates"
@ -359,7 +402,7 @@ STRINGTABLE DISCARDABLE
IDS_COOKIES "Cookies"
IDS_HISTORY "Local Settings\\History"
IDS_PROGRAM_FILES "Program Files"
IDS_MYPICTURES "My Documents\\My Pictures"
IDS_MYPICTURES "My Pictures"
IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files"
IDS_COMMON_DOCUMENTS "Documents"
IDS_ADMINTOOLS "Start Menu\\Programs\\Administrative Tools"

View file

@ -13,7 +13,7 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL
@ -28,7 +28,7 @@ FONT 10, "MS Shell Dlg"
ICON "", 1088, 10, 10, 14, 16
LTEXT "", 100, 30, 10, 137, 10
LTEXT "", 101, 30, 22, 137, 10
LTEXT "ReactOS is geschreven door:", 98, 8, 55, 137, 10
LTEXT "Wine is geschreven door:", 98, 8, 55, 137, 10
}
SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95
@ -37,142 +37,10 @@ CAPTION ""
FONT 8, "MS Shell Dlg"
{
ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE
LTEXT "Type the name of a program, folder, document, or Internet resource, and ReactOS will open it for you.", 12289, 36, 11, 182, 18
LTEXT "&Open:", 12305, 7, 39, 24, 10
LTEXT "Geef de naam van een programma, map, document, of Internet-adres op. Wine zal het vervolgens openen.", 12289, 36, 11, 182, 18
LTEXT "&Openen:", 12305, 7, 39, 28, 10
CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "Cancel", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "&Browse...", 12288, 170, 63, 50, 14, WS_TABSTOP
}
SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Shortcut"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
LTEXT "Target type:", 14004, 10, 30, 50, 10
LTEXT "", 14005, 70, 30, 150, 10
LTEXT "Target location:", 14006, 10, 40, 70, 10
LTEXT "", 14007, 70, 40, 150, 10
LTEXT "Target:", 14008, 10, 55, 45, 10
EDITTEXT 14009, 70, 55, 150, 10, ES_LEFT
LTEXT "&Start in:",14010, 10, 65, 45, 10
EDITTEXT 14011, 70, 65, 150, 10, ES_LEFT
LTEXT "Shortcut &key:", 14014, 10, 80, 45, 10
EDITTEXT 14015, 70, 80, 150, 10, ES_LEFT
LTEXT "Run:", 14016, 10, 90, 45, 10
EDITTEXT 14017, 70, 90, 150, 10
LTEXT "C&omment:", 14018, 10, 100, 45, 10
EDITTEXT 14019, 70, 100, 150, 10, ES_LEFT
PUSHBUTTON "&Find Target...", 14020, 10, 115, 60, 14, ES_LEFT
PUSHBUTTON "&Change Icon...", 14021, 80, 115, 60, 14, ES_LEFT
PUSHBUTTON "A&dvanced...", 14022, 150, 115, 60, 14, ES_LEFT
}
SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "General"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
EDITTEXT 14001, 70, 5, 100, 10, ES_LEFT | ES_READONLY
LTEXT "Type of file:", 14004, 10, 30, 50, 10
LTEXT "%s File", 14005, 70, 30, 150, 10
LTEXT "Opens with:", 14006, 10, 40, 50, 10
LTEXT "", 14007, 70, 40, 150, 10
LTEXT "Location:", 14008, 10, 55, 45, 10
LTEXT "", 14009, 70, 55, 200, 10
LTEXT "Size:",14010, 10, 65, 45, 10
LTEXT "", 14011, 70, 65, 150, 10
LTEXT "Created:", 14014, 10, 80, 45, 10
LTEXT "", 14015, 70, 80, 150, 10
LTEXT "Modied:", 14016, 10, 90, 45, 10
LTEXT "", 14017, 70, 90, 150, 10
LTEXT "Accessed:", 14018, 10, 100, 45, 10
LTEXT "", 14019, 70, 100, 150, 10
LTEXT "Attributes:", 14020, 10, 115, 45, 10
CHECKBOX "&Read-only", 14021, 70, 115, 45, 10
CHECKBOX "&Hidden", 14022, 130, 115, 50, 10
CHECKBOX "&Archive", 14023, 180, 115, 45, 10
}
SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Version"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
LTEXT "File version: ", 14000, 10, 10, 45, 10
LTEXT "", 14001, 70, 10, 150, 10
LTEXT "Description: ", 14002, 10, 20, 45, 10
LTEXT "", 14003, 70, 20, 150, 10
LTEXT "Copyright: ", 14004, 10, 30, 45, 10
LTEXT "", 14005, 70, 30, 150, 10
GROUPBOX "Other version information: ", 14006, 10, 45, 220, 90
LTEXT "Item name: ", 14007, 20, 55, 50, 10
LTEXT "Value: ", 14008, 130, 55, 45, 10
LISTBOX 14009,20,65,95,60, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY
EDITTEXT 14010, 130, 65, 95, 60, ES_LEFT|WS_BORDER|WS_VSCROLL|WS_GROUP|ES_MULTILINE|ES_READONLY
}
DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Allgemein"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
EDITTEXT 14001, 40, 20, 190, 10, ES_LEFT|WS_BORDER|WS_GROUP
LTEXT "Type:", -1, 15, 55, 40, 10
LTEXT "", 14002, 110, 55, 100, 10
LTEXT "File system:", -1, 15, 70, 100, 10
LTEXT "", 14003, 110, 70, 100, 10
CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10
LTEXT "Used space:", -1, 25, 90, 120, 10
LTEXT "", 14004, 110, 90, 120, 10
LTEXT "", 14005, 200, 90, 40, 10
CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10
LTEXT "Free space:", -1, 25, 105, 70, 10
LTEXT "", 14006, 110, 105, 120, 10
LTEXT "", 14007, 200, 105, 40, 10
LTEXT "Capacity:", -1, 25, 125, 80, 10
LTEXT "", 14008, 110, 125, 120, 10
LTEXT "", 14009, 200, 125, 40, 10
CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20
LTEXT "Drive %s", 14010, 100, 170, 40, 10
PUSHBUTTON "Disk Cleanup", 14011, 180, 175, 50, 15, WS_TABSTOP
CHECKBOX "Compress drive to save disk space", 14012, 15, 205, 165, 10, WS_DISABLED
CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED
}
DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Extras"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
GROUPBOX "Error-checking", -1, 5, 5, 230, 60
LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20
PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP
GROUPBOX "Defragmentation", -1, 5, 65, 230, 60
LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20
PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP
GROUPBOX "Backup", -1, 5, 130, 230, 60
LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20
PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP
}
DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Version"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
PUSHBUTTON "Annuleren", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "&Bladeren...", 12288, 170, 63, 50, 14, WS_TABSTOP
}

View file

@ -1,5 +1,5 @@
/*
* Copyright 2005 Alexander N. Sørnes <alex@thehandofagony.com>
* Copyright 2005-2007 Alexander N. Sørnes <alex@thehandofagony.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@ -13,15 +13,15 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL
LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL
MENU_001 MENU DISCARDABLE
BEGIN
MENUITEM "&Store ikoner", FCIDM_SHVIEW_BIGICON
MENUITEM "&Små ikoner", FCIDM_SHVIEW_SMALLICON
MENUITEM "&Små ikoner", FCIDM_SHVIEW_SMALLICON
MENUITEM "&Liste", FCIDM_SHVIEW_LISTVIEW
MENUITEM "&Detaljer", FCIDM_SHVIEW_REPORTVIEW
END
@ -45,17 +45,17 @@ BEGIN
BEGIN
MENUITEM "Etter &navn", 0x30 /* column 0 */
MENUITEM "Etter &type", 0x32 /* column 2 */
MENUITEM "Etter &størrelse",0x31 /* ... */
MENUITEM "Etter &størrelse", 0x31 /* ... */
MENUITEM "Etter &dato", 0x33
MENUITEM SEPARATOR
MENUITEM "Ordne &automatisk", FCIDM_SHVIEW_AUTOARRANGE
MENUITEM "Ordne &automatisk", FCIDM_SHVIEW_AUTOARRANGE
END
MENUITEM "Still opp ikoner", FCIDM_SHVIEW_SNAPTOGRID
MENUITEM SEPARATOR
MENUITEM "Oppdater", FCIDM_SHVIEW_REFRESH
MENUITEM SEPARATOR
MENUITEM "Lim inn", FCIDM_SHVIEW_INSERT
MENUITEM "Lim inn som snarvei", FCIDM_SHVIEW_INSERTLINK
MENUITEM "Lim inn som snarvei", FCIDM_SHVIEW_INSERTLINK
MENUITEM SEPARATOR
POPUP "Ny"
BEGIN
@ -83,7 +83,7 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "&Opprett snarvei", FCIDM_SHVIEW_CREATELINK
MENUITEM "&Slett", FCIDM_SHVIEW_DELETE
MENUITEM "&Gi nytt navn", FCIDM_SHVIEW_RENAME
MENUITEM "&Gi nytt navn", FCIDM_SHVIEW_RENAME
MENUITEM SEPARATOR
MENUITEM "Egenska&per", FCIDM_SHVIEW_PROPERTIES
END
@ -104,6 +104,19 @@ FONT 8, "MS Shell Dlg"
4, 40, 180, 120
}
SHELL_YESTOALL_MSGBOX DIALOG 200, 100, 280, 90
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Meldings"
FONT 8, "MS Shell Dlg"
{
DEFPUSHBUTTON "&Ja", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP
PUSHBUTTON "Ja til &alt", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP
PUSHBUTTON "&Nei", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP
PUSHBUTTON "&Avbry&t", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP
ICON "", IDD_ICON, 10, 10, 16, 16
LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0
}
SHELL_ABOUT_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 210, 152
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Om %s"
@ -114,7 +127,7 @@ FONT 10, "MS Shell Dlg"
ICON "", 1088, 10, 10, 14, 16
LTEXT "", 100, 30, 10, 137, 10
LTEXT "", 101, 30, 22, 137, 10
LTEXT "ReactOS er laget av", 98, 8, 55, 137, 10
LTEXT "Wine er laget av", 98, 8, 55, 137, 10
}
SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95
@ -128,142 +141,9 @@ FONT 8, "MS Shell Dlg"
CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "Avbryt", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "&Bla gjennom . . .", 12288, 170, 63, 54, 14, WS_TABSTOP
PUSHBUTTON "&Bla . . .", 12288, 170, 63, 50, 14, WS_TABSTOP
}
SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Shortcut"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
LTEXT "Target type:", 14004, 10, 30, 50, 10
LTEXT "", 14005, 70, 30, 150, 10
LTEXT "Target location:", 14006, 10, 40, 70, 10
LTEXT "", 14007, 70, 40, 150, 10
LTEXT "Target:", 14008, 10, 55, 45, 10
EDITTEXT 14009, 70, 55, 150, 10, ES_LEFT
LTEXT "&Start in:",14010, 10, 65, 45, 10
EDITTEXT 14011, 70, 65, 150, 10, ES_LEFT
LTEXT "Shortcut &key:", 14014, 10, 80, 45, 10
EDITTEXT 14015, 70, 80, 150, 10, ES_LEFT
LTEXT "Run:", 14016, 10, 90, 45, 10
EDITTEXT 14017, 70, 90, 150, 10
LTEXT "C&omment:", 14018, 10, 100, 45, 10
EDITTEXT 14019, 70, 100, 150, 10, ES_LEFT
PUSHBUTTON "&Find Target...", 14020, 10, 115, 60, 14, ES_LEFT
PUSHBUTTON "&Change Icon...", 14021, 80, 115, 60, 14, ES_LEFT
PUSHBUTTON "A&dvanced...", 14022, 150, 115, 60, 14, ES_LEFT
}
SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "General"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
EDITTEXT 14001, 70, 5, 100, 10, ES_LEFT | ES_READONLY
LTEXT "Type of file:", 14004, 10, 30, 50, 10
LTEXT "%s File", 14005, 70, 30, 150, 10
LTEXT "Opens with:", 14006, 10, 40, 50, 10
LTEXT "", 14007, 70, 40, 150, 10
LTEXT "Location:", 14008, 10, 55, 45, 10
LTEXT "", 14009, 70, 55, 200, 10
LTEXT "Size:",14010, 10, 65, 45, 10
LTEXT "", 14011, 70, 65, 150, 10
LTEXT "Created:", 14014, 10, 80, 45, 10
LTEXT "", 14015, 70, 80, 150, 10
LTEXT "Modied:", 14016, 10, 90, 45, 10
LTEXT "", 14017, 70, 90, 150, 10
LTEXT "Accessed:", 14018, 10, 100, 45, 10
LTEXT "", 14019, 70, 100, 150, 10
LTEXT "Attributes:", 14020, 10, 115, 45, 10
CHECKBOX "&Read-only", 14021, 70, 115, 45, 10
CHECKBOX "&Hidden", 14022, 130, 115, 50, 10
CHECKBOX "&Archive", 14023, 180, 115, 45, 10
}
SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Version"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
LTEXT "File version: ", 14000, 10, 10, 45, 10
LTEXT "", 14001, 70, 10, 150, 10
LTEXT "Description: ", 14002, 10, 20, 45, 10
LTEXT "", 14003, 70, 20, 150, 10
LTEXT "Copyright: ", 14004, 10, 30, 45, 10
LTEXT "", 14005, 70, 30, 150, 10
GROUPBOX "Other version information: ", 14006, 10, 45, 220, 90
LTEXT "Item name: ", 14007, 20, 55, 50, 10
LTEXT "Value: ", 14008, 130, 55, 45, 10
LISTBOX 14009,20,65,95,60, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY
EDITTEXT 14010, 130, 65, 95, 60, ES_LEFT|WS_BORDER|WS_VSCROLL|WS_GROUP|ES_MULTILINE|ES_READONLY
}
DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Allgemein"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
EDITTEXT 14001, 40, 20, 190, 10, ES_LEFT|WS_BORDER|WS_GROUP
LTEXT "Type:", -1, 15, 55, 40, 10
LTEXT "", 14002, 110, 55, 100, 10
LTEXT "File system:", -1, 15, 70, 100, 10
LTEXT "", 14003, 110, 70, 100, 10
CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10
LTEXT "Used space:", -1, 25, 90, 120, 10
LTEXT "", 14004, 110, 90, 120, 10
LTEXT "", 14005, 200, 90, 40, 10
CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10
LTEXT "Free space:", -1, 25, 105, 70, 10
LTEXT "", 14006, 110, 105, 120, 10
LTEXT "", 14007, 200, 105, 40, 10
LTEXT "Capacity:", -1, 25, 125, 80, 10
LTEXT "", 14008, 110, 125, 120, 10
LTEXT "", 14009, 200, 125, 40, 10
CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20
LTEXT "Drive %s", 14010, 100, 170, 40, 10
PUSHBUTTON "Disk Cleanup", 14011, 180, 175, 50, 15, WS_TABSTOP
CHECKBOX "Compress drive to save disk space", 14012, 15, 205, 165, 10, WS_DISABLED
CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED
}
DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Extras"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
GROUPBOX "Error-checking", -1, 5, 5, 230, 60
LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20
PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP
GROUPBOX "Defragmentation", -1, 5, 65, 230, 60
LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20
PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP
GROUPBOX "Backup", -1, 5, 130, 230, 60
LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20
PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP
}
DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Version"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
}
STRINGTABLE DISCARDABLE
{
/* columns in the shellview */
@ -278,10 +158,13 @@ STRINGTABLE DISCARDABLE
IDS_SHV_COLUMN9 "Kommentarer"
IDS_SHV_COLUMN10 "Eier"
IDS_SHV_COLUMN11 "Gruppe"
IDS_SHV_COLUMN_DELFROM "Opprinnelig plassering"
IDS_SHV_COLUMN_DELDATE "Dato slettet"
/* special folders */
IDS_DESKTOP "Skrivebord"
IDS_MYCOMPUTER "Min datamaskin"
IDS_RECYCLEBIN_FOLDER_NAME "Papirkurv"
/* context menus */
IDS_VIEW_LARGE "&Store ikoner"
@ -292,19 +175,28 @@ STRINGTABLE DISCARDABLE
IDS_OPEN "Åpne"
IDS_CREATEFOLDER_DENIED "Kunne ikke opprette ny mappe: tilgang nektet."
IDS_CREATEFOLDER_CAPTION "Feil ved oppretting av ny mappe"
IDS_CREATEFOLDER_CAPTION "Klarte ikke opprette ny mappe"
IDS_DELETEITEM_CAPTION "Bekreft filsletting"
IDS_DELETEFOLDER_CAPTION "Bekreft sletting av mappe"
IDS_DELETEITEM_TEXT "Virkelig slette '%1'?"
IDS_DELETEITEM_TEXT "Virkelig slette «%1»?"
IDS_DELETEMULTIPLE_TEXT "Virkelig slette disse %1 elementene?"
IDS_OVERWRITEFILE_TEXT "Overskrive filen '%1'?"
IDS_DELETESELECTED_TEXT "Virkelig slette valgte element(er)??"
IDS_TRASHITEM_TEXT "Virkelig legge «%1» i papirkurven?"
IDS_TRASHFOLDER_TEXT "Virkelig legge «%1» og alt innholdet i papirkurven?"
IDS_TRASHMULTIPLE_TEXT "Virkelig legge disse %1 valgte elementene i papirkurven?"
IDS_CANTTRASH_TEXT "Elementet «%1» kan ikke legges i papirkurven. Vil du slette det i stedet?"
IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?"
IDS_OVERWRITEFILE_CAPTION "Bekreft overskriving av fil"
IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\
"If the files in the destination folder have the same names as files in the\n"\
"selected folder they will be replaced. Do you still want to move or copy\n"\
"the folder?"
/* message box strings */
IDS_RESTART_TITLE "Starte på nytt"
IDS_RESTART_PROMPT "Vil du starte på nytt?"
IDS_RESTART_PROMPT "Vil du simulere en omstart av Windows?"
IDS_SHUTDOWN_TITLE "Avslutt"
IDS_SHUTDOWN_PROMPT "Vil du slå av maskinen?"
IDS_SHUTDOWN_PROMPT "Vil du avslutte Wine-økten?"
/* shell folder path default values */
IDS_PROGRAMS "Start-meny\\Programmer"
@ -312,29 +204,26 @@ STRINGTABLE DISCARDABLE
IDS_FAVORITES "Favoritter"
IDS_STARTUP "Start-meny\\Programmer\\Oppstart"
IDS_RECENT "Siste"
IDS_SENDTO "Send til"
IDS_SENDTO "SendTo"
IDS_STARTMENU "Start-meny"
IDS_MYMUSIC "Mine dokumenter\\Min musikk"
IDS_MYVIDEO "Mine dokumenter\\Mine videoklipp"
IDS_MYMUSIC "Min musikk"
IDS_MYVIDEO "Mine videoklipp"
IDS_DESKTOPDIRECTORY "Skrivebord"
IDS_NETHOOD "NetHood"
IDS_TEMPLATES "Maler"
IDS_APPDATA "Applikasjon Data"
IDS_APPDATA "Programdata"
IDS_PRINTHOOD "Skrivere"
IDS_LOCAL_APPDATA "Lokale innstillinger\\Applikasjon Data"
IDS_INTERNET_CACHE "Lokale innstillinger\\Midlertidig Internett Filer"
IDS_COOKIES "Informasjonskapsler"
IDS_HISTORY "Lokale innstillinger\\Historie"
IDS_PROGRAM_FILES "Program Filer"
IDS_MYPICTURES "Mine dokumenter\\Mine bilder"
IDS_LOCAL_APPDATA "Lokale innstillinger\\Programdata"
IDS_INTERNET_CACHE "Lokale innstillinger\\Temporary Internet Files"
IDS_COOKIES "Cookies"
IDS_HISTORY "Lokale innstillinger\\Logg"
IDS_PROGRAM_FILES "Programfiler"
IDS_MYPICTURES "Mine bilder"
IDS_PROGRAM_FILES_COMMON "Programfiler\\Fellesfiler"
IDS_COMMON_DOCUMENTS "Dokumenter"
IDS_ADMINTOOLS "Start-meny\\Programmer\\Administrative verktøy"
IDS_COMMON_MUSIC "Dokumenter\\Min musikk"
IDS_COMMON_PICTURES "Dokumenter\\Mine bilder"
IDS_COMMON_VIDEO "Dokumenter\\Mine videoklipp"
IDS_CDBURN_AREA "Lokale innstillinger\\Applikasjon Data\\Microsoft\\CD Brenning"
IDS_DRIVE_FIXED "Lokal Disk"
IDS_DRIVE_CDROM "CDROM"
IDS_DRIVE_NETWORK "Network Disk"
IDS_CDBURN_AREA "Lokale innstillinger\\Programdata\\Microsoft\\CD Burning"
}

View file

@ -1,7 +1,6 @@
/*
* Copyright 1998 Juergen Schmied
* Copyright 2004 Piotr Caban
* Made normal by Artek Wiœniewski aart3k@gmail.com
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@ -15,17 +14,17 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
MENU_001 MENU DISCARDABLE
BEGIN
MENUITEM "&Du¿e ikony", FCIDM_SHVIEW_BIGICON
MENUITEM "&Ma³e ikony", FCIDM_SHVIEW_SMALLICON
MENUITEM "&Lista", FCIDM_SHVIEW_LISTVIEW
MENUITEM "&Szczegó³y", FCIDM_SHVIEW_REPORTVIEW
MENUITEM "&Duże Ikony", FCIDM_SHVIEW_BIGICON
MENUITEM "&Małe Ikony", FCIDM_SHVIEW_SMALLICON
MENUITEM "&Lista", FCIDM_SHVIEW_LISTVIEW
MENUITEM "&Szczegóły", FCIDM_SHVIEW_REPORTVIEW
END
/*
@ -37,8 +36,8 @@ BEGIN
BEGIN
POPUP "&Widok"
BEGIN
MENUITEM "&Du¿e ikony", FCIDM_SHVIEW_BIGICON
MENUITEM "&Ma³e ikony", FCIDM_SHVIEW_SMALLICON
MENUITEM "&Duże Ikony", FCIDM_SHVIEW_BIGICON
MENUITEM "&Małe Ikony", FCIDM_SHVIEW_SMALLICON
MENUITEM "&Lista", FCIDM_SHVIEW_LISTVIEW
MENUITEM "&Szczegó³y", FCIDM_SHVIEW_REPORTVIEW
END
@ -54,7 +53,7 @@ BEGIN
END
MENUITEM "&Wyrównaj ikony", FCIDM_SHVIEW_SNAPTOGRID
MENUITEM SEPARATOR
MENUITEM "&Odœwie¿", FCIDM_SHVIEW_REFRESH
MENUITEM "&Odświerz", FCIDM_SHVIEW_REFRESH
MENUITEM SEPARATOR
MENUITEM "W&klej", FCIDM_SHVIEW_INSERT
MENUITEM "Wklej s&krót", FCIDM_SHVIEW_INSERTLINK
@ -77,15 +76,15 @@ MENU_SHV_FILE MENU DISCARDABLE
BEGIN
POPUP ""
BEGIN
MENUITEM "&Eksploruj", FCIDM_SHVIEW_EXPLORE
MENUITEM "&Eksploruj", FCIDM_SHVIEW_EXPLORE
MENUITEM "&Otwórz", FCIDM_SHVIEW_OPEN
MENUITEM SEPARATOR
MENUITEM "&Wytnij", FCIDM_SHVIEW_CUT
MENUITEM "&Kopiuj", FCIDM_SHVIEW_COPY
MENUITEM SEPARATOR
MENUITEM "Utwórz &skrót", FCIDM_SHVIEW_CREATELINK
MENUITEM "Utwórz &Skrót", FCIDM_SHVIEW_CREATELINK
MENUITEM "&Usuñ", FCIDM_SHVIEW_DELETE
MENUITEM "&Zmieñ nazwê", FCIDM_SHVIEW_RENAME
MENUITEM "&Zmień nazwę", FCIDM_SHVIEW_RENAME
MENUITEM SEPARATOR
MENUITEM "W³&aœciwoœci", FCIDM_SHVIEW_PROPERTIES
END
@ -106,6 +105,19 @@ FONT 8, "MS Shell Dlg"
4, 40, 180, 120
}
SHELL_YESTOALL_MSGBOX DIALOG 200, 100, 280, 90
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Komunikat"
FONT 8, "MS Shell Dlg"
{
DEFPUSHBUTTON "&Tak", IDYES, 34, 69, 53, 14, WS_GROUP | WS_TABSTOP
PUSHBUTTON "Tak na &wszystkie", IDD_YESTOALL, 92, 69, 65, 14, WS_GROUP | WS_TABSTOP
PUSHBUTTON "&Nie", IDNO, 162, 69, 53, 14, WS_GROUP | WS_TABSTOP
PUSHBUTTON "&Anuluj", IDCANCEL, 220, 69, 53, 14, WS_GROUP | WS_TABSTOP
ICON "", IDD_ICON, 10, 10, 16, 16
LTEXT "", IDD_MESSAGE, 40, 10, 238, 52, 0
}
SHELL_ABOUT_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 210, 152
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "O %s"
@ -116,7 +128,7 @@ FONT 10, "MS Shell Dlg"
ICON "", 1088, 10, 10, 14, 16
LTEXT "", 100, 30, 10, 137, 10
LTEXT "", 101, 30, 22, 137, 10
LTEXT "ReactOS zawdziêcza swe istnienie nastêpuj¹cym osobom:", 98, 8, 55, 137, 10
LTEXT "Możesz korzystać z Wine'a dzięki:", 98, 8, 55, 137, 10
}
SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95
@ -125,7 +137,7 @@ CAPTION ""
FONT 8, "MS Shell Dlg"
{
ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE
LTEXT "Wpisz nazwê programu, katalogu lub dokumentu, a ReactOS otworzy go dla Ciebie.", 12289, 36, 11, 182, 18
LTEXT "Wpisz nazwę programu, katalogu, dokumentu, a Wine otworzy go dla ciebie.", 12289, 36, 11, 182, 18
LTEXT "&Otwórz:", 12305, 7, 39, 24, 10
CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP
@ -133,191 +145,86 @@ FONT 8, "MS Shell Dlg"
PUSHBUTTON "&Przegl¹daj...", 12288, 170, 63, 50, 14, WS_TABSTOP
}
SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Shortcut"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
LTEXT "Target type:", 14004, 10, 30, 50, 10
LTEXT "", 14005, 70, 30, 150, 10
LTEXT "Target location:", 14006, 10, 40, 70, 10
LTEXT "", 14007, 70, 40, 150, 10
LTEXT "Target:", 14008, 10, 55, 45, 10
EDITTEXT 14009, 70, 55, 150, 10, ES_LEFT
LTEXT "&Start in:",14010, 10, 65, 45, 10
EDITTEXT 14011, 70, 65, 150, 10, ES_LEFT
LTEXT "Shortcut &key:", 14014, 10, 80, 45, 10
EDITTEXT 14015, 70, 80, 150, 10, ES_LEFT
LTEXT "Run:", 14016, 10, 90, 45, 10
EDITTEXT 14017, 70, 90, 150, 10
LTEXT "C&omment:", 14018, 10, 100, 45, 10
EDITTEXT 14019, 70, 100, 150, 10, ES_LEFT
PUSHBUTTON "&Find Target...", 14020, 10, 115, 60, 14, ES_LEFT
PUSHBUTTON "&Change Icon...", 14021, 80, 115, 60, 14, ES_LEFT
PUSHBUTTON "A&dvanced...", 14022, 150, 115, 60, 14, ES_LEFT
}
SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "General"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
EDITTEXT 14001, 70, 5, 100, 10, ES_LEFT | ES_READONLY
LTEXT "Type of file:", 14004, 10, 30, 50, 10
LTEXT "%s File", 14005, 70, 30, 150, 10
LTEXT "Opens with:", 14006, 10, 40, 50, 10
LTEXT "", 14007, 70, 40, 150, 10
LTEXT "Location:", 14008, 10, 55, 45, 10
LTEXT "", 14009, 70, 55, 200, 10
LTEXT "Size:",14010, 10, 65, 45, 10
LTEXT "", 14011, 70, 65, 150, 10
LTEXT "Created:", 14014, 10, 80, 45, 10
LTEXT "", 14015, 70, 80, 150, 10
LTEXT "Modied:", 14016, 10, 90, 45, 10
LTEXT "", 14017, 70, 90, 150, 10
LTEXT "Accessed:", 14018, 10, 100, 45, 10
LTEXT "", 14019, 70, 100, 150, 10
LTEXT "Attributes:", 14020, 10, 115, 45, 10
CHECKBOX "&Read-only", 14021, 70, 115, 45, 10
CHECKBOX "&Hidden", 14022, 130, 115, 50, 10
CHECKBOX "&Archive", 14023, 180, 115, 45, 10
}
SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Version"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
LTEXT "File version: ", 14000, 10, 10, 45, 10
LTEXT "", 14001, 70, 10, 150, 10
LTEXT "Description: ", 14002, 10, 20, 45, 10
LTEXT "", 14003, 70, 20, 150, 10
LTEXT "Copyright: ", 14004, 10, 30, 45, 10
LTEXT "", 14005, 70, 30, 150, 10
GROUPBOX "Other version information: ", 14006, 10, 45, 220, 90
LTEXT "Item name: ", 14007, 20, 55, 50, 10
LTEXT "Value: ", 14008, 130, 55, 45, 10
LISTBOX 14009,20,65,95,60, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY
EDITTEXT 14010, 130, 65, 95, 60, ES_LEFT|WS_BORDER|WS_VSCROLL|WS_GROUP|ES_MULTILINE|ES_READONLY
}
DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Allgemein"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
EDITTEXT 14001, 40, 20, 190, 10, ES_LEFT|WS_BORDER|WS_GROUP
LTEXT "Type:", -1, 15, 55, 40, 10
LTEXT "", 14002, 110, 55, 100, 10
LTEXT "File system:", -1, 15, 70, 100, 10
LTEXT "", 14003, 110, 70, 100, 10
CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10
LTEXT "Used space:", -1, 25, 90, 120, 10
LTEXT "", 14004, 110, 90, 120, 10
LTEXT "", 14005, 200, 90, 40, 10
CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10
LTEXT "Free space:", -1, 25, 105, 70, 10
LTEXT "", 14006, 110, 105, 120, 10
LTEXT "", 14007, 200, 105, 40, 10
LTEXT "Capacity:", -1, 25, 125, 80, 10
LTEXT "", 14008, 110, 125, 120, 10
LTEXT "", 14009, 200, 125, 40, 10
CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20
LTEXT "Drive %s", 14010, 100, 170, 40, 10
PUSHBUTTON "Disk Cleanup", 14011, 180, 175, 50, 15, WS_TABSTOP
CHECKBOX "Compress drive to save disk space", 14012, 15, 205, 165, 10, WS_DISABLED
CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED
}
DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Extras"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
GROUPBOX "Error-checking", -1, 5, 5, 230, 60
LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20
PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP
GROUPBOX "Defragmentation", -1, 5, 65, 230, 60
LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20
PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP
GROUPBOX "Backup", -1, 5, 130, 230, 60
LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20
PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP
}
DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Version"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
}
/*
special folders
*/
STRINGTABLE DISCARDABLE
{
IDS_DESKTOP "Pulpit"
IDS_MYCOMPUTER "Mój komputer"
}
/*
context menus
*/
STRINGTABLE DISCARDABLE
{
IDS_VIEW_LARGE "&Du¿e ikony"
IDS_VIEW_SMALL "&Ma³e ikony"
IDS_VIEW_LIST "&Lista"
IDS_VIEW_DETAILS "&Szczegó³y"
IDS_SELECT "Zaznacz"
IDS_OPEN "Otwórz"
}
STRINGTABLE DISCARDABLE
{
IDS_CREATEFOLDER_DENIED "Nie mo¿na utworzyæ nowego katalogu: Brak dostêpu."
IDS_CREATEFOLDER_CAPTION "B³¹d przy tworzeniu nowego katalogu"
IDS_DELETEITEM_CAPTION "PotwierdŸ usuniêcie pliku"
IDS_DELETEFOLDER_CAPTION "PotwierdŸ usuniêcie katalogu"
IDS_DELETEITEM_TEXT "Czy jesteœ pewien, ¿e chcesz usun¹æ '%1'?"
IDS_DELETEMULTIPLE_TEXT "Czy jesteœ pewien, ¿e chcesz usun¹æ %1 plików?"
IDS_OVERWRITEFILE_TEXT "Zast¹piæ plik %1?"
IDS_OVERWRITEFILE_CAPTION "PotwierdŸ zast¹pienie pliku"
}
/* columns in the shellview */
STRINGTABLE
BEGIN
/* columns in the shellview */
IDS_SHV_COLUMN1 "Plik"
IDS_SHV_COLUMN2 "WielkoϾ"
IDS_SHV_COLUMN3 "Typ"
IDS_SHV_COLUMN4 "Zmodyfikowano"
IDS_SHV_COLUMN4 "Modyfikacja"
IDS_SHV_COLUMN5 "Atrybuty"
IDS_SHV_COLUMN6 "WielkoϾ"
IDS_SHV_COLUMN7 "Dostêpna wielkoœæ"
IDS_SHV_COLUMN8 "Nazwa"
IDS_SHV_COLUMN9 "Komentarz"
END
IDS_SHV_COLUMN10 "Właściciel"
IDS_SHV_COLUMN11 "Grupa"
IDS_SHV_COLUMN_DELFROM "Lokacja oryginalna"
IDS_SHV_COLUMN_DELDATE "Data usunięcia"
/* message box strings */
STRINGTABLE DISCARDABLE
{
IDS_RESTART_TITLE "Uruchom ponownie"
IDS_RESTART_PROMPT "Czy chcesz zasymulowaæ zrestartowanie Windowsa?"
IDS_SHUTDOWN_TITLE "Wy³¹cz"
IDS_SHUTDOWN_PROMPT "Czy chcesz wy³¹czyæ sesjê ReactOS'a?"
/* special folders */
IDS_DESKTOP "Pulpit"
IDS_MYCOMPUTER "Mój komputer"
IDS_RECYCLEBIN_FOLDER_NAME "Kosz"
/* context menus */
IDS_VIEW_LARGE "&Duże Ikony"
IDS_VIEW_SMALL "&Małe Ikony"
IDS_VIEW_LIST "&Lista"
IDS_VIEW_DETAILS "&Szczegóły"
IDS_SELECT "Zaznacz"
IDS_OPEN "Otwórz"
IDS_CREATEFOLDER_DENIED "Nie mogę utworzyć nowego katalogu: Brak dostępu."
IDS_CREATEFOLDER_CAPTION "Błąd przy tworzeniu nowego katalogu."
IDS_DELETEITEM_CAPTION "Potwierdź usunięcia pliku"
IDS_DELETEFOLDER_CAPTION "Potwierdź usunięcie katalogu"
IDS_DELETEITEM_TEXT "Czy jesteś pewien, że chcesz usunąć '%1'?"
IDS_DELETEMULTIPLE_TEXT "Czy jesteś pewien, że chcesz usunąć te %1 pliki?"
IDS_DELETESELECTED_TEXT "Czy jesteś pewien, że chcesz usunąć wybrane elementy?"
IDS_TRASHITEM_TEXT "Czy jesteś pewien, że chcesz umieścić plik '%1' w Koszu?"
IDS_TRASHFOLDER_TEXT "Czy jesteś pewien, że chcesz umieścić folder '%1' i całą jego zawartość w koszu"
IDS_TRASHMULTIPLE_TEXT "Elementów: %1 - czy na pewno chcesz je umieścić w Koszu?"
IDS_CANTTRASH_TEXT "Nie mogę przenieść elementu '%1' do Kosza. Czy chcesz go zamiast tego usunąć?"
IDS_OVERWRITEFILE_TEXT "Ten folder już zawiera plik o nazwie '%1'.\n\nCzy chcesz go zastąpić?"
IDS_OVERWRITEFILE_CAPTION "Potwierdź zastąpienie pliku"
IDS_OVERWRITEFOLDER_TEXT "Ten folder już zawiera folder o nazwie '%1'.\n\n"\
"Jeżeli w docelowym folderze wystąpią pliki o takich samych nazwach jak\n"\
"w wybranym folderze, to zostaną one zastąpione. Czy chcesz mimo to przenieść\n"\
"lub skopiować folder?"
/* message box strings */
IDS_RESTART_TITLE "Uruchom ponownie"
IDS_RESTART_PROMPT "Czy chcesz zasymulować zrestartowanie Windowsa?"
IDS_SHUTDOWN_TITLE "Wyłącz"
IDS_SHUTDOWN_PROMPT "Czy chcesz wyłączyć sesję Wine'a?"
/* shell folder path default values */
IDS_PROGRAMS "Menu Start\\Programy"
IDS_PERSONAL "Moje dokumenty"
IDS_FAVORITES "Ulubione"
IDS_STARTUP "Menu Start\\Programy\\AutoStart"
IDS_RECENT "Recent"
IDS_SENDTO "SendTo"
IDS_STARTMENU "Menu Start"
IDS_MYMUSIC "Moja muzyka"
IDS_MYVIDEO "Moje wideo"
IDS_DESKTOPDIRECTORY "Pulpit"
IDS_NETHOOD "NetHood"
IDS_TEMPLATES "Szablony"
IDS_APPDATA "Dane aplikacji"
IDS_PRINTHOOD "PrintHood"
IDS_LOCAL_APPDATA "Ustawienia lokalne\\Dane aplikacji"
IDS_INTERNET_CACHE "Ustawienia lokalne\\Temporary Internet Files"
IDS_COOKIES "Cookies"
IDS_HISTORY "Ustawienia Lokalne\\Historia"
IDS_PROGRAM_FILES "Program Files"
IDS_MYPICTURES "Moje obrazy"
IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files"
IDS_COMMON_DOCUMENTS "Dokumenty"
IDS_ADMINTOOLS "Menu Start\\Programy\\Narzędzia administracyjne"
IDS_COMMON_MUSIC "Documenty\\Moja muzyka"
IDS_COMMON_PICTURES "Documenty\\Moje obrazy"
IDS_COMMON_VIDEO "Documenty\\Moje wideo"
IDS_CDBURN_AREA "Ustawienia lokalne\\Dane aplikacji\\Microsoft\\Nagrywanie dysków CD"
}

View file

@ -1,6 +1,7 @@
/*
* Copyright 1998 Juergen Schmied
* Copyright 2003 Marcelo Duarte
* Copyright 2006-2007 Américo José Melo
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@ -14,10 +15,10 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_PORTUGUESE, SUBLANG_NEUTRAL
LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN
MENU_001 MENU DISCARDABLE
BEGIN
@ -27,9 +28,12 @@ BEGIN
MENUITEM "&Detalhes", FCIDM_SHVIEW_REPORTVIEW
END
/*
shellview background menu
*/
LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN
MENU_002 MENU DISCARDABLE
BEGIN
POPUP ""
@ -69,9 +73,53 @@ BEGIN
END
END
LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE
MENU_002 MENU DISCARDABLE
BEGIN
POPUP ""
BEGIN
POPUP "&Mostrar"
BEGIN
MENUITEM "Ícones &grandes", FCIDM_SHVIEW_BIGICON
MENUITEM "Ícones &pequenos", FCIDM_SHVIEW_SMALLICON
MENUITEM "&Lista", FCIDM_SHVIEW_LISTVIEW
MENUITEM "&Detalhes", FCIDM_SHVIEW_REPORTVIEW
END
MENUITEM SEPARATOR
POPUP "O&rganizar ícones"
BEGIN
MENUITEM "Por &nome", 0x30 /* column 0 */
MENUITEM "Por &tipo", 0x32 /* column 2 */
MENUITEM "Por ta&manho", 0x31 /* ... */
MENUITEM "Por &data", 0x33
MENUITEM SEPARATOR
MENUITEM "Auto organi&zar", FCIDM_SHVIEW_AUTOARRANGE
END
MENUITEM "Alin&har ícones", FCIDM_SHVIEW_SNAPTOGRID
MENUITEM SEPARATOR
MENUITEM "&Actualizar", FCIDM_SHVIEW_REFRESH
MENUITEM SEPARATOR
MENUITEM "Co&lar", FCIDM_SHVIEW_INSERT
MENUITEM "Colar a&talho", FCIDM_SHVIEW_INSERTLINK
MENUITEM SEPARATOR
POPUP "Novo"
BEGIN
MENUITEM "&Pasta", FCIDM_SHVIEW_NEWFOLDER
MENUITEM "&Atalho", FCIDM_SHVIEW_NEWLINK
MENUITEM SEPARATOR
END
MENUITEM SEPARATOR
MENUITEM "Propriedades", FCIDM_SHVIEW_PROPERTIES
END
END
/*
shellview item menu
*/
LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN
MENU_SHV_FILE MENU DISCARDABLE
BEGIN
POPUP ""
@ -90,6 +138,9 @@ BEGIN
END
END
LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN
SHBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFONT | DS_3DLOOK
CAPTION "Procurar pasta"
@ -105,6 +156,9 @@ FONT 8, "MS Shell Dlg"
4, 40, 180, 120
}
LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN
SHELL_ABOUT_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 210, 152
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Sobre %s"
@ -115,16 +169,50 @@ FONT 10, "MS Shell Dlg"
ICON "", 1088, 10, 10, 14, 16
LTEXT "", 100, 30, 10, 137, 10
LTEXT "", 101, 30, 22, 137, 10
LTEXT "ReactOS foi disponibilizado por:", 98, 8, 55, 137, 10
LTEXT "Wine foi disponibilizado por:", 98, 8, 55, 137, 10
}
LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE
SHELL_ABOUT_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 210, 152
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Acerca do %s"
FONT 10, "MS Shell Dlg"
{
DEFPUSHBUTTON "OK", IDOK, 153, 133, 50, 12, WS_TABSTOP
LISTBOX 99, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
ICON "", 1088, 10, 10, 14, 16
LTEXT "", 100, 30, 10, 137, 10
LTEXT "", 101, 30, 22, 137, 10
LTEXT "Wine disponibilizado por:", 98, 8, 55, 137, 10
}
LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN
SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION ""
FONT 8, "MS Shell Dlg"
{
ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE
LTEXT "Digite o nome do programa, pasta, documento, ou endereço Internet, que o ReactOS irá abrí-lo para você.", 12289, 36, 11, 182, 18
LTEXT "Digite o nome do programa, pasta, documento, ou endereço Internet, que o Wine irá abrí-lo para você.", 12289, 36, 11, 182, 18
LTEXT "&Abrir:", 12305, 7, 39, 24, 10
CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "Cancelar", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "&Procurar...", 12288, 170, 63, 50, 14, WS_TABSTOP
}
LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE
SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION ""
FONT 8, "MS Shell Dlg"
{
ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE
LTEXT "Digite o nome do programa, pasta, documento, ou endereço Internet, que o Wine irá abrí-lo.", 12289, 36, 11, 182, 18
LTEXT "&Abrir:", 12305, 7, 39, 24, 10
CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP
@ -133,135 +221,7 @@ FONT 8, "MS Shell Dlg"
}
SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Shortcut"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
LTEXT "Target type:", 14004, 10, 30, 50, 10
LTEXT "", 14005, 70, 30, 150, 10
LTEXT "Target location:", 14006, 10, 40, 70, 10
LTEXT "", 14007, 70, 40, 150, 10
LTEXT "Target:", 14008, 10, 55, 45, 10
EDITTEXT 14009, 70, 55, 150, 10, ES_LEFT
LTEXT "&Start in:",14010, 10, 65, 45, 10
EDITTEXT 14011, 70, 65, 150, 10, ES_LEFT
LTEXT "Shortcut &key:", 14014, 10, 80, 45, 10
EDITTEXT 14015, 70, 80, 150, 10, ES_LEFT
LTEXT "Run:", 14016, 10, 90, 45, 10
EDITTEXT 14017, 70, 90, 150, 10
LTEXT "C&omment:", 14018, 10, 100, 45, 10
EDITTEXT 14019, 70, 100, 150, 10, ES_LEFT
PUSHBUTTON "&Find Target...", 14020, 10, 115, 60, 14, ES_LEFT
PUSHBUTTON "&Change Icon...", 14021, 80, 115, 60, 14, ES_LEFT
PUSHBUTTON "A&dvanced...", 14022, 150, 115, 60, 14, ES_LEFT
}
SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "General"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
EDITTEXT 14001, 70, 5, 100, 10, ES_LEFT | ES_READONLY
LTEXT "Type of file:", 14004, 10, 30, 50, 10
LTEXT "%s File", 14005, 70, 30, 150, 10
LTEXT "Opens with:", 14006, 10, 40, 50, 10
LTEXT "", 14007, 70, 40, 150, 10
LTEXT "Location:", 14008, 10, 55, 45, 10
LTEXT "", 14009, 70, 55, 200, 10
LTEXT "Size:",14010, 10, 65, 45, 10
LTEXT "", 14011, 70, 65, 150, 10
LTEXT "Created:", 14014, 10, 80, 45, 10
LTEXT "", 14015, 70, 80, 150, 10
LTEXT "Modied:", 14016, 10, 90, 45, 10
LTEXT "", 14017, 70, 90, 150, 10
LTEXT "Accessed:", 14018, 10, 100, 45, 10
LTEXT "", 14019, 70, 100, 150, 10
LTEXT "Attributes:", 14020, 10, 115, 45, 10
CHECKBOX "&Read-only", 14021, 70, 115, 45, 10
CHECKBOX "&Hidden", 14022, 130, 115, 50, 10
CHECKBOX "&Archive", 14023, 180, 115, 45, 10
}
SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Version"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
LTEXT "File version: ", 14000, 10, 10, 45, 10
LTEXT "", 14001, 70, 10, 150, 10
LTEXT "Description: ", 14002, 10, 20, 45, 10
LTEXT "", 14003, 70, 20, 150, 10
LTEXT "Copyright: ", 14004, 10, 30, 45, 10
LTEXT "", 14005, 70, 30, 150, 10
GROUPBOX "Other version information: ", 14006, 10, 45, 220, 90
LTEXT "Item name: ", 14007, 20, 55, 50, 10
LTEXT "Value: ", 14008, 130, 55, 45, 10
LISTBOX 14009,20,65,95,60, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY
EDITTEXT 14010, 130, 65, 95, 60, ES_LEFT|WS_BORDER|WS_VSCROLL|WS_GROUP|ES_MULTILINE|ES_READONLY
}
DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "General"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
EDITTEXT 14001, 40, 20, 190, 10, ES_LEFT|WS_BORDER|WS_GROUP
LTEXT "Type:", -1, 15, 55, 40, 10
LTEXT "", 14002, 110, 55, 100, 10
LTEXT "File system:", -1, 15, 70, 100, 10
LTEXT "", 14003, 110, 70, 100, 10
CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10
LTEXT "Used space:", -1, 25, 90, 120, 10
LTEXT "", 14004, 110, 90, 120, 10
LTEXT "", 14005, 200, 90, 40, 10
CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10
LTEXT "Free space:", -1, 25, 105, 70, 10
LTEXT "", 14006, 110, 105, 120, 10
LTEXT "", 14007, 200, 105, 40, 10
LTEXT "Capacity:", -1, 25, 125, 80, 10
LTEXT "", 14008, 110, 125, 120, 10
LTEXT "", 14009, 200, 125, 40, 10
CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20
LTEXT "Drive %s", 14010, 100, 170, 40, 10
PUSHBUTTON "Disk Cleanup", 14011, 180, 175, 50, 15, WS_TABSTOP
CHECKBOX "Compress drive to save disk space", 14012, 15, 205, 165, 10, WS_DISABLED
CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED
}
DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Tools"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
GROUPBOX "Error-checking", -1, 5, 5, 230, 60
LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20
PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP
GROUPBOX "Defragmentation", -1, 5, 65, 230, 60
LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20
PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP
GROUPBOX "Backup", -1, 5, 130, 230, 60
LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20
PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP
}
DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Version"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
}
LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN
STRINGTABLE DISCARDABLE
{
@ -296,14 +256,18 @@ STRINGTABLE DISCARDABLE
IDS_DELETEFOLDER_CAPTION "Confirmar exclusão de pasta"
IDS_DELETEITEM_TEXT "Você tem certeza que deseja excluir '%1'?"
IDS_DELETEMULTIPLE_TEXT "Você tem certeza que deseja excluir estes %1 itens?"
IDS_OVERWRITEFILE_TEXT "Sobreescrever arquivo %1?"
IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?"
IDS_OVERWRITEFILE_CAPTION "Confirmar sobreescrever arquivo"
IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\
"If the files in the destination folder have the same names as files in the\n"\
"selected folder they will be replaced. Do you still want to move or copy\n"\
"the folder?"
/* message box strings */
IDS_RESTART_TITLE "Reiniciar"
IDS_RESTART_PROMPT "Você quer simular a reinicialização do Windows?"
IDS_SHUTDOWN_TITLE "Desligar"
IDS_SHUTDOWN_PROMPT "Você quer finalizar a sessão no ReactOS?"
IDS_SHUTDOWN_PROMPT "Você quer finalizar a sessão no Wine?"
/* shell folder path default values */
IDS_PROGRAMS "Menu Iniciar\\Programas"
@ -313,8 +277,8 @@ STRINGTABLE DISCARDABLE
IDS_RECENT "Recent"
IDS_SENDTO "SendTo"
IDS_STARTMENU "Menu Iniciar"
IDS_MYMUSIC "Meus Documentos\\Minhas Músicas"
IDS_MYVIDEO "Meus Documentos\\Meus Vídeos"
IDS_MYMUSIC "Minhas Músicas"
IDS_MYVIDEO "Meus Vídeos"
IDS_DESKTOPDIRECTORY "Desktop"
IDS_NETHOOD "NetHood"
IDS_TEMPLATES "Templates"
@ -325,7 +289,7 @@ STRINGTABLE DISCARDABLE
IDS_COOKIES "Cookies"
IDS_HISTORY "Configurações locais\\Histórico"
IDS_PROGRAM_FILES "Arquivos de programas"
IDS_MYPICTURES "Meus Documentos\\Minhas Imagens"
IDS_MYPICTURES "Minhas Imagens"
IDS_PROGRAM_FILES_COMMON "Arquivos de programas\\Arquivos comuns"
IDS_COMMON_DOCUMENTS "Documentos"
IDS_ADMINTOOLS "Menu Iniciar\\Programas\\Ferramentas Administrativas"
@ -333,7 +297,78 @@ STRINGTABLE DISCARDABLE
IDS_COMMON_PICTURES "Documentos\\Minhas Imagens"
IDS_COMMON_VIDEO "Documentos\\Meus Vídeos"
IDS_CDBURN_AREA "Configurações locais\\Dados de aplicativos\\Microsoft\\CD Burning"
IDS_DRIVE_FIXED "Lokal Disk"
IDS_DRIVE_CDROM "CDROM"
IDS_DRIVE_NETWORK "Network Disk"
}
LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE
STRINGTABLE DISCARDABLE
{
/* columns in the shellview */
IDS_SHV_COLUMN1 "Ficheiro"
IDS_SHV_COLUMN2 "Tamanho"
IDS_SHV_COLUMN3 "Tipo"
IDS_SHV_COLUMN4 "Modificado"
IDS_SHV_COLUMN5 "Atributos"
IDS_SHV_COLUMN6 "Tamanho"
IDS_SHV_COLUMN7 "Disponível"
IDS_SHV_COLUMN8 "Nome"
IDS_SHV_COLUMN9 "Comentários"
IDS_SHV_COLUMN10 "Dono"
IDS_SHV_COLUMN11 "Grupo"
/* special folders */
IDS_DESKTOP "Ambiente de trabalho"
IDS_MYCOMPUTER "O Meu Computador"
/* context menus */
IDS_VIEW_LARGE "Ícones &grandes"
IDS_VIEW_SMALL "Ícones &pequenos"
IDS_VIEW_LIST "&Lista"
IDS_VIEW_DETAILS "&Detalhes"
IDS_SELECT "Seleccionar"
IDS_OPEN "Abrir"
IDS_CREATEFOLDER_DENIED "Não é possível criar nova pasta: Permissão negada."
IDS_CREATEFOLDER_CAPTION "Erro durante a criação da nova pasta"
IDS_DELETEITEM_CAPTION "Confirmar exclusão do ficheiro"
IDS_DELETEFOLDER_CAPTION "Confirmar exclusão da pasta"
IDS_DELETEITEM_TEXT "Tem certeza que deseja excluir '%1'?"
IDS_DELETEMULTIPLE_TEXT "Tem certeza que deseja excluir estes %1 itens?"
IDS_OVERWRITEFILE_TEXT "Substituir ficheiro %1?"
IDS_OVERWRITEFILE_CAPTION "Confirmar substituição de ficheiro"
/* message box strings */
IDS_RESTART_TITLE "Reiniciar"
IDS_RESTART_PROMPT "Deseja simular a reinicialização do Windows?"
IDS_SHUTDOWN_TITLE "Desligar"
IDS_SHUTDOWN_PROMPT "Deseja finalizar esta sessão do Wine?"
/* shell folder path default values */
IDS_PROGRAMS "Menu Iniciar\\Programas"
IDS_PERSONAL "OS Meus Documentos"
IDS_FAVORITES "Favoritos"
IDS_STARTUP "Menu Iniciar\\Programas\\Iniciar"
IDS_RECENT "Recentes"
IDS_SENDTO "Enviar Para"
IDS_STARTMENU "Menu Iniciar"
IDS_MYMUSIC "As Minhas Músicas"
IDS_MYVIDEO "Os Meus Vídeos"
IDS_DESKTOPDIRECTORY "Ambiente de Trabalho"
IDS_NETHOOD "NetHood"
IDS_TEMPLATES "Modelos"
IDS_APPDATA "Application Data"
IDS_PRINTHOOD "PrintHood"
IDS_LOCAL_APPDATA "Definições locais\\Application Data"
IDS_INTERNET_CACHE "Definições locais\\Temporary Internet Files"
IDS_COOKIES "Cookies"
IDS_HISTORY "Definições locais\\Histórico"
IDS_PROGRAM_FILES "Programas"
IDS_MYPICTURES "As Minhas Imagens"
IDS_PROGRAM_FILES_COMMON "Programas\\Ficheiros comuns"
IDS_COMMON_DOCUMENTS "Os Meus Documentos"
IDS_ADMINTOOLS "Menu Iniciar\\Programas\\Ferramentas Administrativas"
IDS_COMMON_MUSIC "Os Meus Documentos\\As Minhas Músicas"
IDS_COMMON_PICTURES "Os Meus Documentos\\As Minhas Imagens"
IDS_COMMON_VIDEO "Os Meus Documentos\\Os Meus Vídeos"
IDS_CDBURN_AREA "Definições locais\\Application Data\\Microsoft\\CD Burning"
}

View file

@ -14,7 +14,7 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
@ -42,7 +42,7 @@ BEGIN
MENUITEM "&Ïîäðîáíî", FCIDM_SHVIEW_REPORTVIEW
END
MENUITEM SEPARATOR
POPUP "Âûñòðîèòü &çíà÷êè"
POPUP "Óïîðÿäî÷èòü &çíà÷êè"
BEGIN
MENUITEM "Ïî &èìåíè", 0x30 /* column 0 */
MENUITEM "Ïî &òèïó", 0x32 /* column 2 */
@ -60,7 +60,7 @@ BEGIN
MENUITEM SEPARATOR
POPUP "Ñîçäàòü"
BEGIN
MENUITEM "&Ïàïêó", FCIDM_SHVIEW_NEWFOLDER
MENUITEM "&Ïàïêà", FCIDM_SHVIEW_NEWFOLDER
MENUITEM "&ßðëûê", FCIDM_SHVIEW_NEWLINK
MENUITEM SEPARATOR
END
@ -83,7 +83,7 @@ BEGIN
MENUITEM "&Êîïèðîâàòü", FCIDM_SHVIEW_COPY
MENUITEM SEPARATOR
MENUITEM "Ñîçäàòü &ÿðëûê", FCIDM_SHVIEW_CREATELINK
MENUITEM "&Óäàëèòü", FCIDM_SHVIEW_DELETE
MENUITEM "&Óäàëìòü", FCIDM_SHVIEW_DELETE
MENUITEM "Ïåðåè&ìåíîâàòü", FCIDM_SHVIEW_RENAME
MENUITEM SEPARATOR
MENUITEM "Ñâî&éñòâà", FCIDM_SHVIEW_PROPERTIES
@ -92,7 +92,7 @@ END
SHBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFONT | DS_3DLOOK
CAPTION "Ïðîâîäíèê"
CAPTION "Îáçîð"
FONT 8, "MS Shell Dlg"
{
DEFPUSHBUTTON "Äà", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
@ -115,7 +115,7 @@ FONT 10, "MS Shell Dlg"
ICON "", 1088, 10, 10, 14, 16
LTEXT "", 100, 30, 10, 137, 10
LTEXT "", 101, 30, 22, 137, 10
LTEXT "Ðàçðàáîò÷èêè ReactOS:", 98, 8, 55, 137, 10
LTEXT "Ðàçðàáîò÷èêè Wine:", 98, 8, 55, 137, 10
}
SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95
@ -124,156 +124,23 @@ CAPTION ""
FONT 8, "MS Shell Dlg"
{
ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE
LTEXT "Ââåäèòå èìÿ ïðîãðàììû, ïàïêè, äîêóìåíòà èëè ðåñóðñ Èíòåðíåòà, è ReactOS îòêðîåò èõ.", 12289, 36, 11, 182, 18
LTEXT "&Îòêðûòü:", 12305, 7, 39, 32, 10
CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 42, 37, 179, 100
LTEXT "Ââåäèòå èìÿ ïðîãðàììû, ïàïêè, äîêóìåíòà èëè ðåñóðñ Èíòåðíåòà, è Wine îòêðîåò èõ.", 12289, 36, 11, 182, 18
LTEXT "&Îòêðûòü:", 12305, 7, 39, 24, 10
CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "Îòìåíà", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "Îá&çîð...", 12288, 170, 63, 50, 14, WS_TABSTOP
}
SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Shortcut"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
LTEXT "Target type:", 14004, 10, 30, 50, 10
LTEXT "", 14005, 70, 30, 150, 10
LTEXT "Target location:", 14006, 10, 40, 70, 10
LTEXT "", 14007, 70, 40, 150, 10
LTEXT "Target:", 14008, 10, 55, 45, 10
EDITTEXT 14009, 70, 55, 150, 10, ES_LEFT
LTEXT "&Start in:",14010, 10, 65, 45, 10
EDITTEXT 14011, 70, 65, 150, 10, ES_LEFT
LTEXT "Shortcut &key:", 14014, 10, 80, 45, 10
EDITTEXT 14015, 70, 80, 150, 10, ES_LEFT
LTEXT "Run:", 14016, 10, 90, 45, 10
EDITTEXT 14017, 70, 90, 150, 10
LTEXT "C&omment:", 14018, 10, 100, 45, 10
EDITTEXT 14019, 70, 100, 150, 10, ES_LEFT
PUSHBUTTON "&Find Target...", 14020, 10, 115, 60, 14, ES_LEFT
PUSHBUTTON "&Change Icon...", 14021, 80, 115, 60, 14, ES_LEFT
PUSHBUTTON "A&dvanced...", 14022, 150, 115, 60, 14, ES_LEFT
}
SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "General"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
EDITTEXT 14001, 70, 5, 100, 10, ES_LEFT | ES_READONLY
LTEXT "Type of file:", 14004, 10, 30, 50, 10
LTEXT "%s File", 14005, 70, 30, 150, 10
LTEXT "Opens with:", 14006, 10, 40, 50, 10
LTEXT "", 14007, 70, 40, 150, 10
LTEXT "Location:", 14008, 10, 55, 45, 10
LTEXT "", 14009, 70, 55, 200, 10
LTEXT "Size:",14010, 10, 65, 45, 10
LTEXT "", 14011, 70, 65, 150, 10
LTEXT "Created:", 14014, 10, 80, 45, 10
LTEXT "", 14015, 70, 80, 150, 10
LTEXT "Modied:", 14016, 10, 90, 45, 10
LTEXT "", 14017, 70, 90, 150, 10
LTEXT "Accessed:", 14018, 10, 100, 45, 10
LTEXT "", 14019, 70, 100, 150, 10
LTEXT "Attributes:", 14020, 10, 115, 45, 10
CHECKBOX "&Read-only", 14021, 70, 115, 45, 10
CHECKBOX "&Hidden", 14022, 130, 115, 50, 10
CHECKBOX "&Archive", 14023, 180, 115, 45, 10
}
SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Version"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
LTEXT "File version: ", 14000, 10, 10, 45, 10
LTEXT "", 14001, 70, 10, 150, 10
LTEXT "Description: ", 14002, 10, 20, 45, 10
LTEXT "", 14003, 70, 20, 150, 10
LTEXT "Copyright: ", 14004, 10, 30, 45, 10
LTEXT "", 14005, 70, 30, 150, 10
GROUPBOX "Other version information: ", 14006, 10, 45, 220, 90
LTEXT "Item name: ", 14007, 20, 55, 50, 10
LTEXT "Value: ", 14008, 130, 55, 45, 10
LISTBOX 14009,20,65,95,60, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY
EDITTEXT 14010, 130, 65, 95, 60, ES_LEFT|WS_BORDER|WS_VSCROLL|WS_GROUP|ES_MULTILINE|ES_READONLY
}
DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "General"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
EDITTEXT 14001, 40, 20, 190, 10, ES_LEFT|WS_BORDER|WS_GROUP
LTEXT "Type:", -1, 15, 55, 40, 10
LTEXT "", 14002, 110, 55, 100, 10
LTEXT "File system:", -1, 15, 70, 100, 10
LTEXT "", 14003, 110, 70, 100, 10
CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10
LTEXT "Used space:", -1, 25, 90, 120, 10
LTEXT "", 14004, 110, 90, 120, 10
LTEXT "", 14005, 200, 90, 40, 10
CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10
LTEXT "Free space:", -1, 25, 105, 70, 10
LTEXT "", 14006, 110, 105, 120, 10
LTEXT "", 14007, 200, 105, 40, 10
LTEXT "Capacity:", -1, 25, 125, 80, 10
LTEXT "", 14008, 110, 125, 120, 10
LTEXT "", 14009, 200, 125, 40, 10
CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20
LTEXT "Drive %s", 14010, 100, 170, 40, 10
PUSHBUTTON "Disk Cleanup", 14011, 180, 175, 50, 15, WS_TABSTOP
CHECKBOX "Compress drive to save disk space", 14012, 15, 205, 165, 10, WS_DISABLED
CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED
}
DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Tools"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
GROUPBOX "Error-checking", -1, 5, 5, 230, 60
LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20
PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP
GROUPBOX "Defragmentation", -1, 5, 65, 230, 60
LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20
PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP
GROUPBOX "Backup", -1, 5, 130, 230, 60
LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20
PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP
}
DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Version"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
}
STRINGTABLE DISCARDABLE
{
/* columns in the shellview */
IDS_SHV_COLUMN1 "Èìÿ"
IDS_SHV_COLUMN2 "Ðàçìåð"
IDS_SHV_COLUMN3 "Òèï"
IDS_SHV_COLUMN4 "Èçìåíåí"
IDS_SHV_COLUMN4 "Èçìåí¸í"
IDS_SHV_COLUMN5 "Àòðèáóòû"
IDS_SHV_COLUMN6 "Ïîëíûé îáúåì"
IDS_SHV_COLUMN6 "Ïîëíûé îáú¸ì"
IDS_SHV_COLUMN7 "Ñâîáîäíî"
IDS_SHV_COLUMN8 "Èìÿ"
IDS_SHV_COLUMN9 "Êîììåíòàðèé"
@ -292,50 +159,51 @@ STRINGTABLE DISCARDABLE
IDS_SELECT "&Âûáðàòü"
IDS_OPEN "&Îòêðûòü"
IDS_CREATEFOLDER_DENIED "Íåâîçìîæíî ñîçäàòü ïàïêó - îòêàçàíî â äîñòóïå"
IDS_CREATEFOLDER_DENIED "Íåâîçìîæíî ñîçäàòü ïàïêó - íåò ïîëíîìî÷èé."
IDS_CREATEFOLDER_CAPTION "Îøèáêà âî âðåìÿ ñîçäàíèÿ ïàïêè"
IDS_DELETEITEM_CAPTION "Ïîäòâåðæäåíèå óäàëåíèÿ ôàéëà"
IDS_DELETEFOLDER_CAPTION "Ïîäòâåðæäåíèå óäàëåíèÿ ïàïêè"
IDS_DELETEITEM_TEXT "Óäàëèòü '%1'?"
IDS_DELETEMULTIPLE_TEXT "Óäàëèòü ýòè îáüåêòû %1?"
IDS_OVERWRITEFILE_TEXT "Çàìåíèòü ôàéë(û) %1?"
IDS_DELETEMULTIPLE_TEXT "Óäàëèòü ýòè îáüåêòû (%1?"
IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?"
IDS_OVERWRITEFILE_CAPTION "Ïîäòâåðæäåíèå çàìåíû ôàéëà"
IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\
"If the files in the destination folder have the same names as files in the\n"\
"selected folder they will be replaced. Do you still want to move or copy\n"\
"the folder?"
/* message box strings */
IDS_RESTART_TITLE "Ïåðåçàãðóçèòü"
IDS_RESTART_PROMPT "Âû äåéñòâèòåëüíî õîòèòå ïåðåçàãðóçèòü ReactOS?"
IDS_RESTART_PROMPT "Âû õîòèòå ñèìóëèðîâàòü ïåðåçàïóñê Windows?"
IDS_SHUTDOWN_TITLE "Âûêëþ÷èòü ïèòàíèå"
IDS_SHUTDOWN_PROMPT "Âû äåéñòâèòåëüíî õîòèòå çàêîí÷èòü ðàáîòó ñ ReactOS?"
IDS_SHUTDOWN_PROMPT "Çàêîí÷èòü ðàáîòó ñ Wine?"
/* shell folder path default values */
IDS_PROGRAMS "Ãëàâíîå ìåíþ\\Ïðîãðàììû"
IDS_PERSONAL "Ìîè äîêóìåíòû"
IDS_FAVORITES "Èçáðàííîå"
IDS_STARTUP "Ãëàâíîå ìåíþ\\Ïðîãðàììû\\Àâòîçàãðóçêà"
IDS_RECENT "Recent"
IDS_RECENT "Íåäàâíåå"
IDS_SENDTO "Îòïðàâèòü"
IDS_STARTMENU "Ãëàâíîå ìåíþ"
IDS_MYMUSIC "Ìîè äîêóìåíòû\\Ìîÿ ìóçûêà"
IDS_MYVIDEO "Ìîè äîêóìåíòû\\Ìîè ôèëüìû"
IDS_MYMUSIC "Ìîÿ ìóçûêà"
IDS_MYVIDEO "Ìîè ôèëüìû"
IDS_DESKTOPDIRECTORY "Ðàáî÷èé ñòîë"
IDS_NETHOOD "NetHood"
IDS_NETHOOD "Ñåòåâîå îêðóæåíèå"
IDS_TEMPLATES "Øàáëîíû"
IDS_APPDATA "Application Data"
IDS_PRINTHOOD "PrintHood"
IDS_PRINTHOOD "Ïðèíòåðû"
IDS_LOCAL_APPDATA "Local Settings\\Application Data"
IDS_INTERNET_CACHE "Local Settings\\Temporary Internet Files"
IDS_COOKIES "Cookies"
IDS_HISTORY "Local Settings\\History"
IDS_PROGRAM_FILES "Program Files"
IDS_MYPICTURES "Ìîè äîêóìåíòû\\Ìîè ðèñóíêè"
IDS_MYPICTURES "Ìîè ðèñóíêè"
IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files"
IDS_COMMON_DOCUMENTS "Îáùèå äîêóìåíòû"
IDS_ADMINTOOLS "Ãëàâíîå ìåíþ\\Ïðîãðàììû\\Àäìèíèñòðèðîâàíèå"
IDS_ADMINTOOLS "Ãëàâíîå ìåíþ\\Ïðîãðàììû\\Administrative Tools"
IDS_COMMON_MUSIC "Îáùèå äîêóìåíòû\\Ìîÿ ìóçûêà"
IDS_COMMON_PICTURES "Îáùèå äîêóìåíòû\\Ìîè ðèñóíêè"
IDS_COMMON_VIDEO "Îáùèå äîêóìåíòû\\Ìîè ôèëüìû"
IDS_CDBURN_AREA "Local Settings\\Application Data\\Microsoft\\CD Burning"
IDS_DRIVE_FIXED "Lokal Disk"
IDS_DRIVE_CDROM "CDROM"
IDS_DRIVE_NETWORK "Network Disk"
}

View file

@ -13,7 +13,7 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT
@ -28,7 +28,7 @@ FONT 10, "MS Shell Dlg"
ICON "", 1088, 10, 10, 14, 16
LTEXT "", 100, 30, 10, 137, 10
LTEXT "", 101, 30, 22, 137, 10
LTEXT "ReactOS so ustvarili:", 98, 8, 55, 137, 10
LTEXT "Wine so ustvarili:", 98, 8, 55, 137, 10
}
SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95
@ -37,7 +37,7 @@ CAPTION ""
FONT 8, "MS Shell Dlg"
{
ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE
LTEXT "Vnesite ime programa, mape, dokumenta ali spletne strani, in ReactOS ga (jo) bo odprl.", 12289, 36, 11, 182, 18
LTEXT "Vnesite ime programa, mape, dokumenta ali spletne strani, in Wine ga (jo) bo odprl.", 12289, 36, 11, 182, 18
LTEXT "&Odpri:", 12305, 7, 39, 24, 10
CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
DEFPUSHBUTTON "V redu", IDOK, 62, 63, 50, 14, WS_TABSTOP
@ -45,137 +45,6 @@ FONT 8, "MS Shell Dlg"
PUSHBUTTON "Pre&brskaj", 12288, 170, 63, 50, 14, WS_TABSTOP
}
SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Shortcut"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
LTEXT "Target type:", 14004, 10, 30, 50, 10
LTEXT "", 14005, 70, 30, 150, 10
LTEXT "Target location:", 14006, 10, 40, 70, 10
LTEXT "", 14007, 70, 40, 150, 10
LTEXT "Target:", 14008, 10, 55, 45, 10
EDITTEXT 14009, 70, 55, 150, 10, ES_LEFT
LTEXT "&Start in:",14010, 10, 65, 45, 10
EDITTEXT 14011, 70, 65, 150, 10, ES_LEFT
LTEXT "Shortcut &key:", 14014, 10, 80, 45, 10
EDITTEXT 14015, 70, 80, 150, 10, ES_LEFT
LTEXT "Run:", 14016, 10, 90, 45, 10
EDITTEXT 14017, 70, 90, 150, 10
LTEXT "C&omment:", 14018, 10, 100, 45, 10
EDITTEXT 14019, 70, 100, 150, 10, ES_LEFT
PUSHBUTTON "&Find Target...", 14020, 10, 115, 60, 14, ES_LEFT
PUSHBUTTON "&Change Icon...", 14021, 80, 115, 60, 14, ES_LEFT
PUSHBUTTON "A&dvanced...", 14022, 150, 115, 60, 14, ES_LEFT
}
SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "General"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
EDITTEXT 14001, 70, 5, 100, 10, ES_LEFT | ES_READONLY
LTEXT "Type of file:", 14004, 10, 30, 50, 10
LTEXT "%s File", 14005, 70, 30, 150, 10
LTEXT "Opens with:", 14006, 10, 40, 50, 10
LTEXT "", 14007, 70, 40, 150, 10
LTEXT "Location:", 14008, 10, 55, 45, 10
LTEXT "", 14009, 70, 55, 200, 10
LTEXT "Size:",14010, 10, 65, 45, 10
LTEXT "", 14011, 70, 65, 150, 10
LTEXT "Created:", 14014, 10, 80, 45, 10
LTEXT "", 14015, 70, 80, 150, 10
LTEXT "Modied:", 14016, 10, 90, 45, 10
LTEXT "", 14017, 70, 90, 150, 10
LTEXT "Accessed:", 14018, 10, 100, 45, 10
LTEXT "", 14019, 70, 100, 150, 10
LTEXT "Attributes:", 14020, 10, 115, 45, 10
CHECKBOX "&Read-only", 14021, 70, 115, 45, 10
CHECKBOX "&Hidden", 14022, 130, 115, 50, 10
CHECKBOX "&Archive", 14023, 180, 115, 45, 10
}
SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Version"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
LTEXT "File version: ", 14000, 10, 10, 45, 10
LTEXT "", 14001, 70, 10, 150, 10
LTEXT "Description: ", 14002, 10, 20, 45, 10
LTEXT "", 14003, 70, 20, 150, 10
LTEXT "Copyright: ", 14004, 10, 30, 45, 10
LTEXT "", 14005, 70, 30, 150, 10
GROUPBOX "Other version information: ", 14006, 10, 45, 220, 90
LTEXT "Item name: ", 14007, 20, 55, 50, 10
LTEXT "Value: ", 14008, 130, 55, 45, 10
LISTBOX 14009,20,65,95,60, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY
EDITTEXT 14010, 130, 65, 95, 60, ES_LEFT|WS_BORDER|WS_VSCROLL|WS_GROUP|ES_MULTILINE|ES_READONLY
}
DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "General"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
EDITTEXT 14001, 40, 20, 190, 10, ES_LEFT|WS_BORDER|WS_GROUP
LTEXT "Type:", -1, 15, 55, 40, 10
LTEXT "", 14002, 110, 55, 100, 10
LTEXT "File system:", -1, 15, 70, 100, 10
LTEXT "", 14003, 110, 70, 100, 10
CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10
LTEXT "Used space:", -1, 25, 90, 120, 10
LTEXT "", 14004, 110, 90, 120, 10
LTEXT "", 14005, 200, 90, 40, 10
CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10
LTEXT "Free space:", -1, 25, 105, 70, 10
LTEXT "", 14006, 110, 105, 120, 10
LTEXT "", 14007, 200, 105, 40, 10
LTEXT "Capacity:", -1, 25, 125, 80, 10
LTEXT "", 14008, 110, 125, 120, 10
LTEXT "", 14009, 200, 125, 40, 10
CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20
LTEXT "Drive %s", 14010, 100, 170, 40, 10
PUSHBUTTON "Disk Cleanup", 14011, 180, 175, 50, 15, WS_TABSTOP
CHECKBOX "Compress drive to save disk space", 14012, 15, 205, 165, 10, WS_DISABLED
CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED
}
DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Tools"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
GROUPBOX "Error-checking", -1, 5, 5, 230, 60
LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20
PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP
GROUPBOX "Defragmentation", -1, 5, 65, 230, 60
LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20
PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP
GROUPBOX "Backup", -1, 5, 130, 230, 60
LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20
PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP
}
DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Version"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
}
/* columns in the shellview */
STRINGTABLE LANGUAGE LANG_SLOVENIAN, SUBLANG_NEUTRAL
BEGIN

View file

@ -13,7 +13,7 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT
@ -37,7 +37,7 @@ CAPTION ""
FONT 8, "MS Shell Dlg"
{
ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE
LTEXT "Type the name of a program, folder, document, or Internet resource, and ReactOS will open it for you.", 12289, 36, 11, 182, 18
LTEXT "Type the name of a program, folder, document, or Internet resource, and Wine will open it for you.", 12289, 36, 11, 182, 18
LTEXT "&Open:", 12305, 7, 39, 24, 10
CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP
@ -45,138 +45,6 @@ FONT 8, "MS Shell Dlg"
PUSHBUTTON "&Browse...", 12288, 170, 63, 50, 14, WS_TABSTOP
}
SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Shortcut"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
LTEXT "Target type:", 14004, 10, 30, 50, 10
LTEXT "", 14005, 70, 30, 150, 10
LTEXT "Target location:", 14006, 10, 40, 70, 10
LTEXT "", 14007, 70, 40, 150, 10
LTEXT "Target:", 14008, 10, 55, 45, 10
EDITTEXT 14009, 70, 55, 150, 10, ES_LEFT
LTEXT "&Start in:",14010, 10, 65, 45, 10
EDITTEXT 14011, 70, 65, 150, 10, ES_LEFT
LTEXT "Shortcut &key:", 14014, 10, 80, 45, 10
EDITTEXT 14015, 70, 80, 150, 10, ES_LEFT
LTEXT "Run:", 14016, 10, 90, 45, 10
EDITTEXT 14017, 70, 90, 150, 10
LTEXT "C&omment:", 14018, 10, 100, 45, 10
EDITTEXT 14019, 70, 100, 150, 10, ES_LEFT
PUSHBUTTON "&Find Target...", 14020, 10, 115, 60, 14, ES_LEFT
PUSHBUTTON "&Change Icon...", 14021, 80, 115, 60, 14, ES_LEFT
PUSHBUTTON "A&dvanced...", 14022, 150, 115, 60, 14, ES_LEFT
}
SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "General"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
EDITTEXT 14001, 70, 5, 100, 10, ES_LEFT | ES_READONLY
LTEXT "Type of file:", 14004, 10, 30, 50, 10
LTEXT "%s File", 14005, 70, 30, 150, 10
LTEXT "Opens with:", 14006, 10, 40, 50, 10
LTEXT "", 14007, 70, 40, 150, 10
LTEXT "Location:", 14008, 10, 55, 45, 10
LTEXT "", 14009, 70, 55, 200, 10
LTEXT "Size:",14010, 10, 65, 45, 10
LTEXT "", 14011, 70, 65, 150, 10
LTEXT "Created:", 14014, 10, 80, 45, 10
LTEXT "", 14015, 70, 80, 150, 10
LTEXT "Modied:", 14016, 10, 90, 45, 10
LTEXT "", 14017, 70, 90, 150, 10
LTEXT "Accessed:", 14018, 10, 100, 45, 10
LTEXT "", 14019, 70, 100, 150, 10
LTEXT "Attributes:", 14020, 10, 115, 45, 10
CHECKBOX "&Read-only", 14021, 70, 115, 45, 10
CHECKBOX "&Hidden", 14022, 130, 115, 50, 10
CHECKBOX "&Archive", 14023, 180, 115, 45, 10
}
SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Version"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
LTEXT "File version: ", 14000, 10, 10, 45, 10
LTEXT "", 14001, 70, 10, 150, 10
LTEXT "Description: ", 14002, 10, 20, 45, 10
LTEXT "", 14003, 70, 20, 150, 10
LTEXT "Copyright: ", 14004, 10, 30, 45, 10
LTEXT "", 14005, 70, 30, 150, 10
GROUPBOX "Other version information: ", 14006, 10, 45, 220, 90
LTEXT "Item name: ", 14007, 20, 55, 50, 10
LTEXT "Value: ", 14008, 130, 55, 45, 10
LISTBOX 14009,20,65,95,60, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY
EDITTEXT 14010, 130, 65, 95, 60, ES_LEFT|WS_BORDER|WS_VSCROLL|WS_GROUP|ES_MULTILINE|ES_READONLY
}
DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "General"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
EDITTEXT 14001, 40, 20, 190, 10, ES_LEFT|WS_BORDER|WS_GROUP
LTEXT "Type:", -1, 15, 55, 40, 10
LTEXT "", 14002, 110, 55, 100, 10
LTEXT "File system:", -1, 15, 70, 100, 10
LTEXT "", 14003, 110, 70, 100, 10
CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10
LTEXT "Used space:", -1, 25, 90, 120, 10
LTEXT "", 14004, 110, 90, 120, 10
LTEXT "", 14005, 200, 90, 40, 10
CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10
LTEXT "Free space:", -1, 25, 105, 70, 10
LTEXT "", 14006, 110, 105, 120, 10
LTEXT "", 14007, 200, 105, 40, 10
LTEXT "Capacity:", -1, 25, 125, 80, 10
LTEXT "", 14008, 110, 125, 120, 10
LTEXT "", 14009, 200, 125, 40, 10
CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20
LTEXT "Drive %s", 14010, 100, 170, 40, 10
PUSHBUTTON "Disk Cleanup", 14011, 180, 175, 50, 15, WS_TABSTOP
CHECKBOX "Compress drive to save disk space", 14012, 15, 205, 165, 10, WS_DISABLED
CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED
}
DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Tools"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
GROUPBOX "Error-checking", -1, 5, 5, 230, 60
LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20
PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP
GROUPBOX "Defragmentation", -1, 5, 65, 230, 60
LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20
PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP
GROUPBOX "Backup", -1, 5, 130, 230, 60
LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20
PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP
}
DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Version"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
}
/* columns in the shellview */
STRINGTABLE LANGUAGE LANG_SLOVAK, SUBLANG_NEUTRAL
BEGIN

View file

@ -1,5 +1,5 @@
/*
* Copyright 2005 David Nordenberg
* Copyright 1998 Juergen Schmied
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@ -13,96 +13,10 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_SWEDISH, SUBLANG_NEUTRAL
MENU_001 MENU DISCARDABLE
BEGIN
MENUITEM "&Stora ikoner", FCIDM_SHVIEW_BIGICON
MENUITEM "S&må ikoner", FCIDM_SHVIEW_SMALLICON
MENUITEM "&Lista", FCIDM_SHVIEW_LISTVIEW
MENUITEM "&Detaljer", FCIDM_SHVIEW_REPORTVIEW
END
/*
shellview background menu
*/
MENU_002 MENU DISCARDABLE
BEGIN
POPUP ""
BEGIN
POPUP "&Visa"
BEGIN
MENUITEM "&Stora ikoner", FCIDM_SHVIEW_BIGICON
MENUITEM "S&må ikoner", FCIDM_SHVIEW_SMALLICON
MENUITEM "&Lista", FCIDM_SHVIEW_LISTVIEW
MENUITEM "&Detaljer", FCIDM_SHVIEW_REPORTVIEW
END
MENUITEM SEPARATOR
POPUP "Ordna &ikoner efter"
BEGIN
MENUITEM "&Namn", 0x30 /* column 0 */
MENUITEM "&Typ", 0x32 /* column 2 */
MENUITEM "&Storlek", 0x31 /* ... */
MENUITEM "&Datum", 0x33
MENUITEM SEPARATOR
MENUITEM "&Ordna automatiskt", FCIDM_SHVIEW_AUTOARRANGE
END
MENUITEM "Rada upp ikoner", FCIDM_SHVIEW_SNAPTOGRID
MENUITEM SEPARATOR
MENUITEM "&Uppdatera", FCIDM_SHVIEW_REFRESH
MENUITEM SEPARATOR
MENUITEM "K&listra in", FCIDM_SHVIEW_INSERT
MENUITEM "Klistra in som genväg", FCIDM_SHVIEW_INSERTLINK
MENUITEM SEPARATOR
POPUP "&Ny"
BEGIN
MENUITEM "Ny &mapp", FCIDM_SHVIEW_NEWFOLDER
MENUITEM "Ny &genväg", FCIDM_SHVIEW_NEWLINK
MENUITEM SEPARATOR
END
MENUITEM SEPARATOR
MENUITEM "&Egenskaper", FCIDM_SHVIEW_PROPERTIES
END
END
/*
shellview item menu
*/
MENU_SHV_FILE MENU DISCARDABLE
BEGIN
POPUP ""
BEGIN
MENUITEM "&Utforska", FCIDM_SHVIEW_EXPLORE
MENUITEM "&Öppna", FCIDM_SHVIEW_OPEN
MENUITEM SEPARATOR
MENUITEM "&Klipp ut", FCIDM_SHVIEW_CUT
MENUITEM "K&opiera", FCIDM_SHVIEW_COPY
MENUITEM SEPARATOR
MENUITEM "Skapa &genväg", FCIDM_SHVIEW_CREATELINK
MENUITEM "&Ta bort", FCIDM_SHVIEW_DELETE
MENUITEM "&Byt namn", FCIDM_SHVIEW_RENAME
MENUITEM SEPARATOR
MENUITEM "&Egenskaper", FCIDM_SHVIEW_PROPERTIES
END
END
SHBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFONT | DS_3DLOOK
CAPTION "Bläddra efter mapp"
FONT 8, "MS Shell Dlg"
{
DEFPUSHBUTTON "OK", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
PUSHBUTTON "Avbryt", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP
LTEXT "", IDD_TITLE, 4, 4, 180, 12
LTEXT "", IDD_STATUS, 4, 25, 180, 12
CONTROL "", IDD_TREEVIEW, "SysTreeView32",
TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT |
WS_BORDER | WS_TABSTOP,
4, 40, 180, 120
}
LANGUAGE LANG_SWEDISH, SUBLANG_DEFAULT
SHELL_ABOUT_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 210, 152
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
@ -114,7 +28,7 @@ FONT 10, "MS Shell Dlg"
ICON "", 1088, 10, 10, 14, 16
LTEXT "", 100, 30, 10, 137, 10
LTEXT "", 101, 30, 22, 137, 10
LTEXT "ReactOS hade inte varit möjligt utan dessa personer:", 98, 8, 55, 137, 10
LTEXT "Wine hade inte varit möjligt utan dessa personer:", 98, 8, 55, 137, 10
}
SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95
@ -123,233 +37,10 @@ CAPTION ""
FONT 8, "MS Shell Dlg"
{
ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE
LTEXT "Skriv namnet på ett program, en mapp eller ett dokument för att öppna det.", 12289, 36, 11, 182, 18
LTEXT "Skriv namnet på ett program, en mapp eller ett dokument och wine kommer att öppna det för dig.", 12289, 36, 11, 182, 18
LTEXT "&Öppna:", 12305, 7, 39, 24, 10
CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "Avbryt", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "&Bläddra...", 12288, 170, 63, 50, 14, WS_TABSTOP
}
SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Shortcut"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
LTEXT "Target type:", 14004, 10, 30, 50, 10
LTEXT "", 14005, 70, 30, 150, 10
LTEXT "Target location:", 14006, 10, 40, 70, 10
LTEXT "", 14007, 70, 40, 150, 10
LTEXT "Target:", 14008, 10, 55, 45, 10
EDITTEXT 14009, 70, 55, 150, 10, ES_LEFT
LTEXT "&Start in:",14010, 10, 65, 45, 10
EDITTEXT 14011, 70, 65, 150, 10, ES_LEFT
LTEXT "Shortcut &key:", 14014, 10, 80, 45, 10
EDITTEXT 14015, 70, 80, 150, 10, ES_LEFT
LTEXT "Run:", 14016, 10, 90, 45, 10
EDITTEXT 14017, 70, 90, 150, 10
LTEXT "C&omment:", 14018, 10, 100, 45, 10
EDITTEXT 14019, 70, 100, 150, 10, ES_LEFT
PUSHBUTTON "&Find Target...", 14020, 10, 115, 60, 14, ES_LEFT
PUSHBUTTON "&Change Icon...", 14021, 80, 115, 60, 14, ES_LEFT
PUSHBUTTON "A&dvanced...", 14022, 150, 115, 60, 14, ES_LEFT
}
SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "General"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
EDITTEXT 14001, 70, 5, 100, 10, ES_LEFT | ES_READONLY
LTEXT "Type of file:", 14004, 10, 30, 50, 10
LTEXT "%s File", 14005, 70, 30, 150, 10
LTEXT "Opens with:", 14006, 10, 40, 50, 10
LTEXT "", 14007, 70, 40, 150, 10
LTEXT "Location:", 14008, 10, 55, 45, 10
LTEXT "", 14009, 70, 55, 200, 10
LTEXT "Size:",14010, 10, 65, 45, 10
LTEXT "", 14011, 70, 65, 150, 10
LTEXT "Created:", 14014, 10, 80, 45, 10
LTEXT "", 14015, 70, 80, 150, 10
LTEXT "Modied:", 14016, 10, 90, 45, 10
LTEXT "", 14017, 70, 90, 150, 10
LTEXT "Accessed:", 14018, 10, 100, 45, 10
LTEXT "", 14019, 70, 100, 150, 10
LTEXT "Attributes:", 14020, 10, 115, 45, 10
CHECKBOX "&Read-only", 14021, 70, 115, 45, 10
CHECKBOX "&Hidden", 14022, 130, 115, 50, 10
CHECKBOX "&Archive", 14023, 180, 115, 45, 10
}
SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Version"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
LTEXT "File version: ", 14000, 10, 10, 45, 10
LTEXT "", 14001, 70, 10, 150, 10
LTEXT "Description: ", 14002, 10, 20, 45, 10
LTEXT "", 14003, 70, 20, 150, 10
LTEXT "Copyright: ", 14004, 10, 30, 45, 10
LTEXT "", 14005, 70, 30, 150, 10
GROUPBOX "Other version information: ", 14006, 10, 45, 220, 90
LTEXT "Item name: ", 14007, 20, 55, 50, 10
LTEXT "Value: ", 14008, 130, 55, 45, 10
LISTBOX 14009,20,65,95,60, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY
EDITTEXT 14010, 130, 65, 95, 60, ES_LEFT|WS_BORDER|WS_VSCROLL|WS_GROUP|ES_MULTILINE|ES_READONLY
}
DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "General"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
EDITTEXT 14001, 40, 20, 190, 10, ES_LEFT|WS_BORDER|WS_GROUP
LTEXT "Type:", -1, 15, 55, 40, 10
LTEXT "", 14002, 110, 55, 100, 10
LTEXT "File system:", -1, 15, 70, 100, 10
LTEXT "", 14003, 110, 70, 100, 10
CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10
LTEXT "Used space:", -1, 25, 90, 120, 10
LTEXT "", 14004, 110, 90, 120, 10
LTEXT "", 14005, 200, 90, 40, 10
CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10
LTEXT "Free space:", -1, 25, 105, 70, 10
LTEXT "", 14006, 110, 105, 120, 10
LTEXT "", 14007, 200, 105, 40, 10
LTEXT "Capacity:", -1, 25, 125, 80, 10
LTEXT "", 14008, 110, 125, 120, 10
LTEXT "", 14009, 200, 125, 40, 10
CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20
LTEXT "Drive %s", 14010, 100, 170, 40, 10
PUSHBUTTON "Disk Cleanup", 14011, 180, 175, 50, 15, WS_TABSTOP
CHECKBOX "Compress drive to save disk space", 14012, 15, 205, 165, 10, WS_DISABLED
CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED
}
DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Tools"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
GROUPBOX "Error-checking", -1, 5, 5, 230, 60
LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20
PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP
GROUPBOX "Defragmentation", -1, 5, 65, 230, 60
LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20
PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP
GROUPBOX "Backup", -1, 5, 130, 230, 60
LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20
PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP
}
DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Version"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
}
/*
special folders
*/
STRINGTABLE DISCARDABLE
{
IDS_DESKTOP "Skrivbord"
IDS_MYCOMPUTER "Den här datorn"
}
/*
context menus
*/
STRINGTABLE DISCARDABLE
{
IDS_VIEW_LARGE "&Stora ikoner"
IDS_VIEW_SMALL "S&må ikoner"
IDS_VIEW_LIST "&Lista"
IDS_VIEW_DETAILS "&Detaljer"
IDS_SELECT "Välj"
IDS_OPEN "Öppna"
}
STRINGTABLE DISCARDABLE
{
IDS_CREATEFOLDER_DENIED "Kan inte skapa ny mapp: Åtkomst nekad."
IDS_CREATEFOLDER_CAPTION "Fel vid försök att skapa ny mapp"
IDS_DELETEITEM_CAPTION "Bekräfta borttagning av fil"
IDS_DELETEFOLDER_CAPTION "Bekräfta borttagning av mapp"
IDS_DELETEITEM_TEXT "Är du säker på att du vill ta bort '%1'?"
IDS_DELETEMULTIPLE_TEXT "Är du säker på att du vill ta bort de här %1 objekten?"
IDS_OVERWRITEFILE_TEXT "Skriv över fil %1?"
IDS_OVERWRITEFILE_CAPTION "Bekräfta filöverskrivning"
}
/* columns in the shellview */
STRINGTABLE
BEGIN
IDS_SHV_COLUMN1 "Fil"
IDS_SHV_COLUMN2 "Storlek"
IDS_SHV_COLUMN3 "Typ"
IDS_SHV_COLUMN4 "Modifierad"
IDS_SHV_COLUMN5 "Attribut"
IDS_SHV_COLUMN6 "Storlek"
IDS_SHV_COLUMN7 "Storlek tillgänglig"
IDS_SHV_COLUMN8 "Namn"
IDS_SHV_COLUMN9 "Kommentarer"
END
/* message box strings */
STRINGTABLE DISCARDABLE
{
IDS_RESTART_TITLE "Starta om"
IDS_RESTART_PROMPT "Vill du starta om datorn?"
IDS_SHUTDOWN_TITLE "Stäng av"
IDS_SHUTDOWN_PROMPT "Vill du stänga av datorn?"
}
/* shell folder path default values */
STRINGTABLE DISCARDABLE
{
IDS_PROGRAMS "Start-meny\\Program"
IDS_PERSONAL "Mina dokument"
IDS_FAVORITES "Favoriter"
IDS_STARTUP "Start-meny\\Program\\Autostart"
IDS_RECENT "Tidigare"
IDS_SENDTO "Skicka till"
IDS_STARTMENU "Start-meny"
IDS_MYMUSIC "Mina dokument\\Min musik"
IDS_MYVIDEO "Mina dokument\\Mina videoklipp"
IDS_DESKTOPDIRECTORY "Skrivbord"
IDS_NETHOOD "Nätverk"
IDS_TEMPLATES "Mallar"
IDS_APPDATA "Application Data"
IDS_PRINTHOOD "Skrivare"
IDS_LOCAL_APPDATA "Lokala inställningar\\Application Data"
IDS_INTERNET_CACHE "Temporary Internet Files"
IDS_COOKIES "Cookies"
IDS_HISTORY "Tidigare"
IDS_PROGRAM_FILES "Program"
IDS_MYPICTURES "Mina dokument\\Mina bilder"
IDS_PROGRAM_FILES_COMMON "Program\\Delade filer"
IDS_COMMON_DOCUMENTS "Delade dokument"
IDS_ADMINTOOLS "Start-meny\\Program\\Administrativa verktyg"
IDS_COMMON_MUSIC "Delade dokument\\Min musik"
IDS_COMMON_PICTURES "Delade dokument\\Mina bilder"
IDS_COMMON_VIDEO "Delade dokument\\Mina videoklipp"
IDS_CDBURN_AREA "Lokala inställningar\\Application Data\\Microsoft\\CD Burning"
IDS_DRIVE_FIXED "Local Disk"
IDS_DRIVE_CDROM "CDROM"
IDS_DRIVE_NETWORK "Network Disk"
}

View file

@ -0,0 +1,216 @@
/*
* Copyright 2006 Fatih Aþýcý
*
* 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
*/
LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
MENU_001 MENU DISCARDABLE
BEGIN
MENUITEM "Bü&yük Simgeler", FCIDM_SHVIEW_BIGICON
MENUITEM "Kü&çük Simgeler", FCIDM_SHVIEW_SMALLICON
MENUITEM "&Liste", FCIDM_SHVIEW_LISTVIEW
MENUITEM "&Ayrýntýlý", FCIDM_SHVIEW_REPORTVIEW
END
/*
shellview background menu
*/
MENU_002 MENU DISCARDABLE
BEGIN
POPUP ""
BEGIN
POPUP "&Görünüm"
BEGIN
MENUITEM "Bü&yük Simgeler", FCIDM_SHVIEW_BIGICON
MENUITEM "Kü&çük Simgeler", FCIDM_SHVIEW_SMALLICON
MENUITEM "&Liste", FCIDM_SHVIEW_LISTVIEW
MENUITEM "&Ayrýntýlý", FCIDM_SHVIEW_REPORTVIEW
END
MENUITEM SEPARATOR
POPUP "&Simgeleri Düzenle"
BEGIN
MENUITEM "&Ada Göre", 0x30 /* column 0 */
MENUITEM "&Türe Göre", 0x32 /* column 2 */
MENUITEM "&Boyuta Göre", 0x31 /* ... */
MENUITEM "&Zamana Göre", 0x33
MENUITEM SEPARATOR
MENUITEM "&Otomatik Düzenle", FCIDM_SHVIEW_AUTOARRANGE
END
MENUITEM "Izgaraya Uydur", FCIDM_SHVIEW_SNAPTOGRID
MENUITEM SEPARATOR
MENUITEM "Yenile", FCIDM_SHVIEW_REFRESH
MENUITEM SEPARATOR
MENUITEM "Yapýþtýr", FCIDM_SHVIEW_INSERT
MENUITEM "Kýsayol Yapýþtýr", FCIDM_SHVIEW_INSERTLINK
MENUITEM SEPARATOR
POPUP "Yeni"
BEGIN
MENUITEM "Yeni &Dizin", FCIDM_SHVIEW_NEWFOLDER
MENUITEM "Yeni &Kýsayol", FCIDM_SHVIEW_NEWLINK
MENUITEM SEPARATOR
END
MENUITEM SEPARATOR
MENUITEM "Özellikler", FCIDM_SHVIEW_PROPERTIES
END
END
/*
shellview item menu
*/
MENU_SHV_FILE MENU DISCARDABLE
BEGIN
POPUP ""
BEGIN
MENUITEM "A&raþtýr", FCIDM_SHVIEW_EXPLORE
MENUITEM "&Aç", FCIDM_SHVIEW_OPEN
MENUITEM SEPARATOR
MENUITEM "&Kes", FCIDM_SHVIEW_CUT
MENUITEM "K&opyala", FCIDM_SHVIEW_COPY
MENUITEM SEPARATOR
MENUITEM "Kýsayol O&luþtur", FCIDM_SHVIEW_CREATELINK
MENUITEM "&Sil", FCIDM_SHVIEW_DELETE
MENUITEM "&Yeniden Adlandýr", FCIDM_SHVIEW_RENAME
MENUITEM SEPARATOR
MENUITEM "&Özellikler", FCIDM_SHVIEW_PROPERTIES
END
END
SHBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFONT | DS_3DLOOK
CAPTION "Dizine Gözat"
FONT 8, "MS Shell Dlg"
{
DEFPUSHBUTTON "Tamam", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
PUSHBUTTON "Ýptal", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP
LTEXT "", IDD_TITLE, 4, 4, 180, 12
LTEXT "", IDD_STATUS, 4, 25, 180, 12
CONTROL "", IDD_TREEVIEW, "SysTreeView32",
TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT |
WS_BORDER | WS_TABSTOP,
4, 40, 180, 120
}
SHELL_ABOUT_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 210, 152
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "%s Hakkýnda"
FONT 10, "MS Shell Dlg"
{
DEFPUSHBUTTON "Tamam", IDOK, 153, 133, 50, 12, WS_TABSTOP
LISTBOX 99, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
ICON "", 1088, 10, 10, 14, 16
LTEXT "", 100, 30, 10, 137, 10
LTEXT "", 101, 30, 22, 137, 10
LTEXT "Wine'ý size sunan geliþtiriciler:", 98, 8, 55, 137, 10
}
SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION ""
FONT 8, "MS Shell Dlg"
{
ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE
LTEXT "Herhangi bir program, dizin, belge veya Internet kaynaðý seçin ve Wine sizin için açsýn.", 12289, 36, 11, 182, 18
LTEXT "&Aç:", 12305, 7, 39, 24, 10
CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
DEFPUSHBUTTON "Tamam", IDOK, 62, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "Ýptal", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "&Gözat...", 12288, 170, 63, 50, 14, WS_TABSTOP
}
STRINGTABLE DISCARDABLE
{
/* columns in the shellview */
IDS_SHV_COLUMN1 "Dosya"
IDS_SHV_COLUMN2 "Boyut"
IDS_SHV_COLUMN3 "Tür"
IDS_SHV_COLUMN4 "Düzenlenme"
IDS_SHV_COLUMN5 "Öznitelikler"
IDS_SHV_COLUMN6 "Boyut"
IDS_SHV_COLUMN7 "Kullanýlabilir Alan"
IDS_SHV_COLUMN8 "Ad"
IDS_SHV_COLUMN9 "Açýklamalar"
IDS_SHV_COLUMN10 "Sahip"
IDS_SHV_COLUMN11 "Grup"
IDS_SHV_COLUMN_DELFROM "Özgün konum"
IDS_SHV_COLUMN_DELDATE "Silinme tarihi"
/* special folders */
IDS_DESKTOP "Masaüstü"
IDS_MYCOMPUTER "Bilgisayarým"
IDS_RECYCLEBIN_FOLDER_NAME "Çöp"
/* context menus */
IDS_VIEW_LARGE "Bü&yük Simgeler"
IDS_VIEW_SMALL "Kü&çük Simgeler"
IDS_VIEW_LIST "&Liste"
IDS_VIEW_DETAILS "&Ayrýntýlý"
IDS_SELECT "Seç"
IDS_OPEN "Aç"
IDS_CREATEFOLDER_DENIED "Yeni dizin oluþturulamýyor: Eriþim engellendi."
IDS_CREATEFOLDER_CAPTION "Dizin oluþturma sýrasýnda hata"
IDS_DELETEITEM_CAPTION "Dosya silmeyi onayla"
IDS_DELETEFOLDER_CAPTION "Dizin silmeyi onayla"
IDS_DELETEITEM_TEXT "'%1' öðesini silmek istediðinizden emin misiniz?"
IDS_DELETEMULTIPLE_TEXT "Bu %1 öðeyi silmek istediðinizden emin misiniz?"
IDS_DELETESELECTED_TEXT "Seçili öðeleri silmek istediðinizden emin misiniz?"
IDS_TRASHITEM_TEXT "'%1' adlý öðeyi çöpe göndermek istediðinizden emin misiniz?"
IDS_TRASHFOLDER_TEXT "'%1' adlý öðeyi ve tüm içeriðini çöpe göndermek istediðinizden emin misiniz?"
IDS_TRASHMULTIPLE_TEXT "Bu %1 öðeyi çöpe göndermek istediðinizden emin misiniz?"
IDS_CANTTRASH_TEXT "'%1' adlý öðe çöpe gönderilemiyor. Tamamen silmek ister misiniz?"
IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?"
IDS_OVERWRITEFILE_CAPTION "Dosya Üzerine Yazmayý Onayla"
IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\
"If the files in the destination folder have the same names as files in the\n"\
"selected folder they will be replaced. Do you still want to move or copy\n"\
"the folder?"
/* message box strings */
IDS_RESTART_TITLE "Yeniden Baþlat"
IDS_RESTART_PROMPT "Windows Yeniden Baþlatma taklit edilsin mi?"
IDS_SHUTDOWN_TITLE "Oturumu Kapat"
IDS_SHUTDOWN_PROMPT "Wine oturumunuzu kapatmak istediðinizden emin misiniz?"
/* shell folder path default values */
IDS_PROGRAMS "Start Menu\\Programlar"
IDS_PERSONAL "Belgelerim"
IDS_FAVORITES "Sýk Kullanýlanlar"
IDS_STARTUP "Start Menu\\Programlar\\Baþlangýç"
IDS_RECENT "Recent"
IDS_SENDTO "SendTo"
IDS_STARTMENU "Start Menu"
IDS_MYMUSIC "Belgelerim\\Müziðim"
IDS_MYVIDEO "Belgelerim\\Vidyolarým"
IDS_DESKTOPDIRECTORY "Desktop"
IDS_NETHOOD "NetHood"
IDS_TEMPLATES "Templates"
IDS_APPDATA "Application Data"
IDS_PRINTHOOD "PrintHood"
IDS_LOCAL_APPDATA "Local Settings\\Application Data"
IDS_INTERNET_CACHE "Local Settings\\Temporary Internet Files"
IDS_COOKIES "Cookies"
IDS_HISTORY "Local Settings\\History"
IDS_PROGRAM_FILES "Program Files"
IDS_MYPICTURES "Belgelerim\\Resimlerim"
IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files"
IDS_COMMON_DOCUMENTS "Belgeler"
IDS_ADMINTOOLS "Start Menu\\Programlar\\Yönetimsel Araçlar"
IDS_COMMON_MUSIC "Belgeler\\Müziðim"
IDS_COMMON_PICTURES "Belgeler\\Resimlerim"
IDS_COMMON_VIDEO "Belgeler\\Videolarým"
IDS_CDBURN_AREA "Local Settings\\Application Data\\Microsoft\\CD Burning"
}

View file

@ -1,6 +1,5 @@
/*
* Copyright 2004 Ilya Korniyko
* 2007 Artem Reznikov
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@ -14,16 +13,16 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
MENU_001 MENU DISCARDABLE
BEGIN
MENUITEM "&Âåëèê³ çíà÷êè", FCIDM_SHVIEW_BIGICON
MENUITEM "&Äð³áí³ çíà÷êè", FCIDM_SHVIEW_SMALLICON
MENUITEM "Ñïèñ&îê", FCIDM_SHVIEW_LISTVIEW
MENUITEM "&Âåëèê³ ²êîíêè", FCIDM_SHVIEW_BIGICON
MENUITEM "&Ìàë³ ²êîíêè", FCIDM_SHVIEW_SMALLICON
MENUITEM "&Ñïèñîê", FCIDM_SHVIEW_LISTVIEW
MENUITEM "&Ïîäðîáèö³", FCIDM_SHVIEW_REPORTVIEW
END
@ -36,32 +35,32 @@ BEGIN
BEGIN
POPUP "&Âèãëÿä"
BEGIN
MENUITEM "&Âåëèê³ çíà÷êè", FCIDM_SHVIEW_BIGICON
MENUITEM "&Äð³áí³ çíà÷êè", FCIDM_SHVIEW_SMALLICON
MENUITEM "Ñïèñ&îê", FCIDM_SHVIEW_LISTVIEW
MENUITEM "&Âåëèê³ ²êîíêè", FCIDM_SHVIEW_BIGICON
MENUITEM "&Ìàë³ ²êîíêè", FCIDM_SHVIEW_SMALLICON
MENUITEM "&Ñïèñîê", FCIDM_SHVIEW_LISTVIEW
MENUITEM "&Ïîäðîáèö³", FCIDM_SHVIEW_REPORTVIEW
END
MENUITEM SEPARATOR
POPUP "&Óïîðÿäêóâàòè çíà÷êè"
POPUP "Âïîðÿäêóâàòè &²êîíêè"
BEGIN
MENUITEM "çà &³ì'ÿì", 0x30 /* column 0 */
MENUITEM "çà &òèïîì", 0x32 /* column 2 */
MENUITEM "çà &ðîçì³ðîì", 0x31 /* ... */
MENUITEM "çà &äàòîþ", 0x33
MENUITEM "Çà &Íàçâîþ", 0x30 /* column 0 */
MENUITEM "Çà &Òèïîì", 0x32 /* column 2 */
MENUITEM "Çà &Ðîçì³ðîì", 0x31 /* ... */
MENUITEM "Çà &Äàòîþ", 0x33
MENUITEM SEPARATOR
MENUITEM "&àâòîìàòè÷íî", FCIDM_SHVIEW_AUTOARRANGE
MENUITEM "&Àâòîìàòè÷íî", FCIDM_SHVIEW_AUTOARRANGE
END
MENUITEM "Âèð³âíÿòè çíà÷êè", FCIDM_SHVIEW_SNAPTOGRID
MENUITEM "Âèð³âíÿòè ²êîíêè", FCIDM_SHVIEW_SNAPTOGRID
MENUITEM SEPARATOR
MENUITEM "Îíîâèòè", FCIDM_SHVIEW_REFRESH
MENUITEM SEPARATOR
MENUITEM "Âñòàâèòè", FCIDM_SHVIEW_INSERT
MENUITEM "Âñòàâèòè ÿðëèê", FCIDM_SHVIEW_INSERTLINK
MENUITEM "Âñòàâèòè Ïîñèëàííÿ", FCIDM_SHVIEW_INSERTLINK
MENUITEM SEPARATOR
POPUP "Ñòâîðèòè"
BEGIN
MENUITEM "&Ïàïêó", FCIDM_SHVIEW_NEWFOLDER
MENUITEM "&ßðëèê", FCIDM_SHVIEW_NEWLINK
MENUITEM "Íîâà &Òåêà", FCIDM_SHVIEW_NEWFOLDER
MENUITEM "Íîâå &Ïîñèëàííÿ", FCIDM_SHVIEW_NEWLINK
MENUITEM SEPARATOR
END
MENUITEM SEPARATOR
@ -77,26 +76,26 @@ BEGIN
POPUP ""
BEGIN
MENUITEM "&Ïðîâ³äíèê", FCIDM_SHVIEW_EXPLORE
MENUITEM "Â&³äêðèòè", FCIDM_SHVIEW_OPEN
MENUITEM "&³äêðèòè", FCIDM_SHVIEW_OPEN
MENUITEM SEPARATOR
MENUITEM "&Âèð³çàòè", FCIDM_SHVIEW_CUT
MENUITEM "&Êîï³þâàòè", FCIDM_SHVIEW_COPY
MENUITEM "Âè&ð³çàòè", FCIDM_SHVIEW_CUT
MENUITEM "&Êîï³ÿ", FCIDM_SHVIEW_COPY
MENUITEM SEPARATOR
MENUITEM "Ñòâîðèòè &ÿðëèê", FCIDM_SHVIEW_CREATELINK
MENUITEM "Â&èäàëèòè", FCIDM_SHVIEW_DELETE
MENUITEM "Ïåðåé&ìåíóâàòè", FCIDM_SHVIEW_RENAME
MENUITEM "&Ñòâîðèòè Ïîñèëàííÿ", FCIDM_SHVIEW_CREATELINK
MENUITEM "Âè&äàëèòè", FCIDM_SHVIEW_DELETE
MENUITEM "Ïåðå&éìåíóâàòè", FCIDM_SHVIEW_RENAME
MENUITEM SEPARATOR
MENUITEM "Â&ëàñòèâîñò³", FCIDM_SHVIEW_PROPERTIES
MENUITEM "&Âëàñòèâîñò³", FCIDM_SHVIEW_PROPERTIES
END
END
SHBRSFORFOLDER_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 15, 40, 188, 192
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU | DS_MODALFRAME | DS_SETFONT | DS_3DLOOK
CAPTION "Îãëÿä ïàïîê"
CAPTION "Îãëÿä äî òåêè"
FONT 8, "MS Shell Dlg"
{
DEFPUSHBUTTON "OK", 1, 80, 176, 50, 12, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
PUSHBUTTON "Ñêàñóâàòè", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP
PUSHBUTTON "³äì³íà", 2, 134, 176, 50, 12, WS_GROUP | WS_TABSTOP
LTEXT "", IDD_TITLE, 4, 4, 180, 12
LTEXT "", IDD_STATUS, 4, 25, 180, 12
CONTROL "", IDD_TREEVIEW, "SysTreeView32",
@ -115,7 +114,7 @@ FONT 10, "MS Shell Dlg"
ICON "", 1088, 10, 10, 14, 16
LTEXT "", 100, 30, 10, 137, 10
LTEXT "", 101, 30, 22, 137, 10
LTEXT "Ðîçðîáíèêè ReactOS:", 98, 8, 55, 137, 10
LTEXT "Ðîçðîáíèêè Wine:", 98, 8, 55, 137, 10
}
SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95
@ -124,149 +123,55 @@ CAPTION ""
FONT 8, "MS Shell Dlg"
{
ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE
LTEXT "Ââåä³òü ³ì'ÿ ïðîãðàìè, ïàïêè, äîêóìåíòà àáî ðåñóðñó ²íòåðíåòó, ³ ReactOS â³äêðèº ¿õ.", 12289, 36, 11, 182, 18
LTEXT "Ââåä³òü ³ì'ÿ ïðîãðàìè, òåêè, äîêóìåíòó ÷è ðåñóðñ ²íòåðíåòó, ³ Wine â³äêðèº ¿õ.", 12289, 36, 11, 182, 18
LTEXT "&³äêðèòè:", 12305, 7, 39, 24, 10
CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "Ñêàñóâàòè", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "Î&ãëÿä...", 12288, 170, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "³äì³íà", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "&Îãëÿä...", 12288, 170, 63, 50, 14, WS_TABSTOP
}
SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Shortcut"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
/*
special folders
*/
STRINGTABLE DISCARDABLE
{
ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
LTEXT "Target type:", 14004, 10, 30, 50, 10
LTEXT "", 14005, 70, 30, 150, 10
LTEXT "Target location:", 14006, 10, 40, 70, 10
LTEXT "", 14007, 70, 40, 150, 10
LTEXT "Target:", 14008, 10, 55, 45, 10
EDITTEXT 14009, 70, 55, 150, 10, ES_LEFT
LTEXT "&Start in:",14010, 10, 65, 45, 10
EDITTEXT 14011, 70, 65, 150, 10, ES_LEFT
LTEXT "Shortcut &key:", 14014, 10, 80, 45, 10
EDITTEXT 14015, 70, 80, 150, 10, ES_LEFT
LTEXT "Run:", 14016, 10, 90, 45, 10
EDITTEXT 14017, 70, 90, 150, 10
LTEXT "C&omment:", 14018, 10, 100, 45, 10
EDITTEXT 14019, 70, 100, 150, 10, ES_LEFT
PUSHBUTTON "&Find Target...", 14020, 10, 115, 60, 14, ES_LEFT
PUSHBUTTON "&Change Icon...", 14021, 80, 115, 60, 14, ES_LEFT
PUSHBUTTON "A&dvanced...", 14022, 150, 115, 60, 14, ES_LEFT
IDS_DESKTOP "Ñò³ëüíèöÿ"
IDS_MYCOMPUTER "̳é Êîìï'þòåð"
}
SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "General"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
EDITTEXT 14001, 70, 5, 100, 10, ES_LEFT | ES_READONLY
LTEXT "Type of file:", 14004, 10, 30, 50, 10
LTEXT "%s File", 14005, 70, 30, 150, 10
LTEXT "Opens with:", 14006, 10, 40, 50, 10
LTEXT "", 14007, 70, 40, 150, 10
LTEXT "Location:", 14008, 10, 55, 45, 10
LTEXT "", 14009, 70, 55, 200, 10
LTEXT "Size:",14010, 10, 65, 45, 10
LTEXT "", 14011, 70, 65, 150, 10
LTEXT "Created:", 14014, 10, 80, 45, 10
LTEXT "", 14015, 70, 80, 150, 10
LTEXT "Modied:", 14016, 10, 90, 45, 10
LTEXT "", 14017, 70, 90, 150, 10
LTEXT "Accessed:", 14018, 10, 100, 45, 10
LTEXT "", 14019, 70, 100, 150, 10
LTEXT "Attributes:", 14020, 10, 115, 45, 10
CHECKBOX "&Read-only", 14021, 70, 115, 45, 10
CHECKBOX "&Hidden", 14022, 130, 115, 50, 10
CHECKBOX "&Archive", 14023, 180, 115, 45, 10
}
SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Version"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
LTEXT "File version: ", 14000, 10, 10, 45, 10
LTEXT "", 14001, 70, 10, 150, 10
LTEXT "Description: ", 14002, 10, 20, 45, 10
LTEXT "", 14003, 70, 20, 150, 10
LTEXT "Copyright: ", 14004, 10, 30, 45, 10
LTEXT "", 14005, 70, 30, 150, 10
GROUPBOX "Other version information: ", 14006, 10, 45, 220, 90
LTEXT "Item name: ", 14007, 20, 55, 50, 10
LTEXT "Value: ", 14008, 130, 55, 45, 10
LISTBOX 14009,20,65,95,60, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY
EDITTEXT 14010, 130, 65, 95, 60, ES_LEFT|WS_BORDER|WS_VSCROLL|WS_GROUP|ES_MULTILINE|ES_READONLY
}
DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "General"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
EDITTEXT 14001, 40, 20, 190, 10, ES_LEFT|WS_BORDER|WS_GROUP
LTEXT "Type:", -1, 15, 55, 40, 10
LTEXT "", 14002, 110, 55, 100, 10
LTEXT "File system:", -1, 15, 70, 100, 10
LTEXT "", 14003, 110, 70, 100, 10
CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10
LTEXT "Used space:", -1, 25, 90, 120, 10
LTEXT "", 14004, 110, 90, 120, 10
LTEXT "", 14005, 200, 90, 40, 10
CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10
LTEXT "Free space:", -1, 25, 105, 70, 10
LTEXT "", 14006, 110, 105, 120, 10
LTEXT "", 14007, 200, 105, 40, 10
LTEXT "Capacity:", -1, 25, 125, 80, 10
LTEXT "", 14008, 110, 125, 120, 10
LTEXT "", 14009, 200, 125, 40, 10
CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20
LTEXT "Drive %s", 14010, 100, 170, 40, 10
PUSHBUTTON "Disk Cleanup", 14011, 180, 175, 50, 15, WS_TABSTOP
CHECKBOX "Compress drive to save disk space", 14012, 15, 205, 165, 10, WS_DISABLED
CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED
}
DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Tools"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
GROUPBOX "Error-checking", -1, 5, 5, 230, 60
LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20
PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP
GROUPBOX "Defragmentation", -1, 5, 65, 230, 60
LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20
PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP
GROUPBOX "Backup", -1, 5, 130, 230, 60
LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20
PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP
}
DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Version"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
/*
context menus
*/
STRINGTABLE DISCARDABLE
{
IDS_VIEW_LARGE "&Âåëèê³ ²êîíêè"
IDS_VIEW_SMALL "&Ìàë³ ²êîíêè"
IDS_VIEW_LIST "&Ñïèñîê"
IDS_VIEW_DETAILS "&Ïîäðîáèö³"
IDS_SELECT "Âè&áðàòè"
IDS_OPEN "³&äêðèòè"
}
STRINGTABLE DISCARDABLE
{
/* columns in the shellview */
IDS_CREATEFOLDER_DENIED "Íå âäàëîñÿ ñòâîðèòè íîâó òåêó: ³äìîâà ó äîñòóï³."
IDS_CREATEFOLDER_CAPTION "Ïîìèëêà ïðè ñòâîðåíí³ íîâî¿ òåêè"
IDS_DELETEITEM_CAPTION "ϳäòâåðäæåííÿ âèëó÷åííÿ ôàéëó"
IDS_DELETEFOLDER_CAPTION "ϳäòâåðäæåííÿ âèëó÷åííÿ òåêè"
IDS_DELETEITEM_TEXT "Âè âïåâíåí³, ùî õî÷åòå âèëó÷èòè '%1'?"
IDS_DELETEMULTIPLE_TEXT "Âè âïåâíåí³, ùî õî÷åòå âèëó÷èòè ö³ %1 åëåìåíòè(³â)?"
IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?"
IDS_OVERWRITEFILE_CAPTION "ϳäòâåðäæåííÿ Ïåðåçàïèñó Ôàéëó"
IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\
"If the files in the destination folder have the same names as files in the\n"\
"selected folder they will be replaced. Do you still want to move or copy\n"\
"the folder?"
}
/* columns in the shellview */
STRINGTABLE
BEGIN
IDS_SHV_COLUMN1 "Ôàéë"
IDS_SHV_COLUMN2 "Ðîçì³ð"
IDS_SHV_COLUMN3 "Òèï"
@ -274,67 +179,4 @@ STRINGTABLE DISCARDABLE
IDS_SHV_COLUMN5 "Àòðèáóòè"
IDS_SHV_COLUMN6 "Ðîçì³ð"
IDS_SHV_COLUMN7 "³ëüíèé Ðîçì³ð"
IDS_SHV_COLUMN8 "²ì'ÿ"
IDS_SHV_COLUMN9 "Ïðèì³òêà"
IDS_SHV_COLUMN10 "Âëàñíèê"
IDS_SHV_COLUMN11 "Ãðóïà"
/* special folders */
IDS_DESKTOP "Ðîáî÷èé ñò³ë"
IDS_MYCOMPUTER "̳é Êîìï'þòåð"
/* context menus */
IDS_VIEW_LARGE "&Âåëèê³ çíà÷êè"
IDS_VIEW_SMALL "&Äð³áí³ çíà÷êè"
IDS_VIEW_LIST "Ñïèñ&îê"
IDS_VIEW_DETAILS "&Ïîäðîáèö³"
IDS_SELECT "Âè&áðàòè"
IDS_OPEN "³äêðèòè"
IDS_CREATEFOLDER_DENIED "Íå âäàëîñÿ ñòâîðèòè íîâó ïàïêó: ³äìîâà ó äîñòóï³."
IDS_CREATEFOLDER_CAPTION "Ïîìèëêà ïðè ñòâîðåíí³ íîâî¿ ïàïêè"
IDS_DELETEITEM_CAPTION "ϳäòâåðäæåííÿ âèëó÷åííÿ ôàéëó"
IDS_DELETEFOLDER_CAPTION "ϳäòâåðäæåííÿ âèëó÷åííÿ ïàïêè"
IDS_DELETEITEM_TEXT "Âè âïåâíåí³, ùî õî÷åòå âèëó÷èòè '%1'?"
IDS_DELETEMULTIPLE_TEXT "Âè âïåâíåí³, ùî õî÷åòå âèëó÷èòè ö³ %1 åëåìåíòè(³â)?"
IDS_OVERWRITEFILE_TEXT "Ïåðåïèñàòè Ôàéë %1?"
IDS_OVERWRITEFILE_CAPTION "ϳäòâåðäæåííÿ Ïåðåçàïèñó Ôàéëó"
/* message box strings */
IDS_RESTART_TITLE "Ïåðåçàâàíòàæèòè"
IDS_RESTART_PROMPT "Âè ä³éñíî õî÷åòå ïåðåçàâàíòàæèòè ñèñòåìó?"
IDS_SHUTDOWN_TITLE "Âèìêíóòè"
IDS_SHUTDOWN_PROMPT "Âè ä³éñíî õî÷åòå âèìêíóòè êîìï'þòåð?"
/* shell folder path default values */
IDS_PROGRAMS "Start Menu\\Programs"
IDS_PERSONAL "My Documents"
IDS_FAVORITES "Favorites"
IDS_STARTUP "Start Menu\\Programs\\StartUp"
IDS_RECENT "Recent"
IDS_SENDTO "SendTo"
IDS_STARTMENU "Start Menu"
IDS_MYMUSIC "My Documents\\My Music"
IDS_MYVIDEO "My Documents\\My Video"
IDS_DESKTOPDIRECTORY "Desktop"
IDS_NETHOOD "NetHood"
IDS_TEMPLATES "Templates"
IDS_APPDATA "Application Data"
IDS_PRINTHOOD "PrintHood"
IDS_LOCAL_APPDATA "Local Settings\\Application Data"
IDS_INTERNET_CACHE "Local Settings\\Temporary Internet Files"
IDS_COOKIES "Cookies"
IDS_HISTORY "Local Settings\\History"
IDS_PROGRAM_FILES "Program Files"
IDS_MYPICTURES "My Documents\\My Pictures"
IDS_PROGRAM_FILES_COMMON "Program Files\\Common Files"
IDS_COMMON_DOCUMENTS "Documents"
IDS_ADMINTOOLS "Start Menu\\Programs\\Administrative Tools"
IDS_COMMON_MUSIC "Documents\\My Music"
IDS_COMMON_PICTURES "Documents\\My Pictures"
IDS_COMMON_VIDEO "Documents\\My Video"
IDS_CDBURN_AREA "Local Settings\\Application Data\\Microsoft\\CD Burning"
IDS_DRIVE_FIXED "Local Disk"
IDS_DRIVE_CDROM "CDROM"
IDS_DRIVE_NETWORK "Network Disk"
}
END

View file

@ -13,7 +13,7 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_WALON, SUBLANG_DEFAULT
@ -33,7 +33,7 @@ FONT 10, "MS Shell Dlg"
ICON "", 1088, 10, 10, 14, 16
LTEXT "", 100, 30, 10, 137, 10
LTEXT "", 101, 30, 22, 137, 10
LTEXT "ReactOS a estu fwait par:", 98, 8, 55, 137, 10
LTEXT "Wine a estu fwait par:", 98, 8, 55, 137, 10
}
SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95
@ -42,142 +42,10 @@ CAPTION ""
FONT 8, "MS Shell Dlg"
{
ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE
LTEXT "Type the name of a program, folder, document, or Internet resource, and ReactOS will open it for you.", 12289, 36, 11, 182, 18
LTEXT "Type the name of a program, folder, document, or Internet resource, and Wine will open it for you.", 12289, 36, 11, 182, 18
LTEXT "&Open:", 12305, 7, 39, 24, 10
CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "Cancel", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP
PUSHBUTTON "&Browse...", 12288, 170, 63, 50, 14, WS_TABSTOP
}
SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Shortcut"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
LTEXT "Target type:", 14004, 10, 30, 50, 10
LTEXT "", 14005, 70, 30, 150, 10
LTEXT "Target location:", 14006, 10, 40, 70, 10
LTEXT "", 14007, 70, 40, 150, 10
LTEXT "Target:", 14008, 10, 55, 45, 10
EDITTEXT 14009, 70, 55, 150, 10, ES_LEFT
LTEXT "&Start in:",14010, 10, 65, 45, 10
EDITTEXT 14011, 70, 65, 150, 10, ES_LEFT
LTEXT "Shortcut &key:", 14014, 10, 80, 45, 10
EDITTEXT 14015, 70, 80, 150, 10, ES_LEFT
LTEXT "Run:", 14016, 10, 90, 45, 10
EDITTEXT 14017, 70, 90, 150, 10
LTEXT "C&omment:", 14018, 10, 100, 45, 10
EDITTEXT 14019, 70, 100, 150, 10, ES_LEFT
PUSHBUTTON "&Find Target...", 14020, 10, 115, 60, 14, ES_LEFT
PUSHBUTTON "&Change Icon...", 14021, 80, 115, 60, 14, ES_LEFT
PUSHBUTTON "A&dvanced...", 14022, 150, 115, 60, 14, ES_LEFT
}
SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "General"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
EDITTEXT 14001, 70, 5, 100, 10, ES_LEFT | ES_READONLY
LTEXT "Type of file:", 14004, 10, 30, 50, 10
LTEXT "%s File", 14005, 70, 30, 150, 10
LTEXT "Opens with:", 14006, 10, 40, 50, 10
LTEXT "", 14007, 70, 40, 150, 10
LTEXT "Location:", 14008, 10, 55, 45, 10
LTEXT "", 14009, 70, 55, 200, 10
LTEXT "Size:",14010, 10, 65, 45, 10
LTEXT "", 14011, 70, 65, 150, 10
LTEXT "Created:", 14014, 10, 80, 45, 10
LTEXT "", 14015, 70, 80, 150, 10
LTEXT "Modied:", 14016, 10, 90, 45, 10
LTEXT "", 14017, 70, 90, 150, 10
LTEXT "Accessed:", 14018, 10, 100, 45, 10
LTEXT "", 14019, 70, 100, 150, 10
LTEXT "Attributes:", 14020, 10, 115, 45, 10
CHECKBOX "&Read-only", 14021, 70, 115, 45, 10
CHECKBOX "&Hidden", 14022, 130, 115, 50, 10
CHECKBOX "&Archive", 14023, 180, 115, 45, 10
}
SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Version"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
LTEXT "File version: ", 14000, 10, 10, 45, 10
LTEXT "", 14001, 70, 10, 150, 10
LTEXT "Description: ", 14002, 10, 20, 45, 10
LTEXT "", 14003, 70, 20, 150, 10
LTEXT "Copyright: ", 14004, 10, 30, 45, 10
LTEXT "", 14005, 70, 30, 150, 10
GROUPBOX "Other version information: ", 14006, 10, 45, 220, 90
LTEXT "Item name: ", 14007, 20, 55, 50, 10
LTEXT "Value: ", 14008, 130, 55, 45, 10
LISTBOX 14009,20,65,95,60, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY
EDITTEXT 14010, 130, 65, 95, 60, ES_LEFT|WS_BORDER|WS_VSCROLL|WS_GROUP|ES_MULTILINE|ES_READONLY
}
DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "General"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
EDITTEXT 14001, 40, 20, 190, 10, ES_LEFT|WS_BORDER|WS_GROUP
LTEXT "Type:", -1, 15, 55, 40, 10
LTEXT "", 14002, 110, 55, 100, 10
LTEXT "File system:", -1, 15, 70, 100, 10
LTEXT "", 14003, 110, 70, 100, 10
CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10
LTEXT "Used space:", -1, 25, 90, 120, 10
LTEXT "", 14004, 110, 90, 120, 10
LTEXT "", 14005, 200, 90, 40, 10
CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10
LTEXT "Free space:", -1, 25, 105, 70, 10
LTEXT "", 14006, 110, 105, 120, 10
LTEXT "", 14007, 200, 105, 40, 10
LTEXT "Capacity:", -1, 25, 125, 80, 10
LTEXT "", 14008, 110, 125, 120, 10
LTEXT "", 14009, 200, 125, 40, 10
CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20
LTEXT "Drive %s", 14010, 100, 170, 40, 10
PUSHBUTTON "Disk Cleanup", 14011, 180, 175, 50, 15, WS_TABSTOP
CHECKBOX "Compress drive to save disk space", 14012, 15, 205, 165, 10, WS_DISABLED
CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED
}
DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Tools"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
GROUPBOX "Error-checking", -1, 5, 5, 230, 60
LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20
PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP
GROUPBOX "Defragmentation", -1, 5, 65, 230, 60
LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20
PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP
GROUPBOX "Backup", -1, 5, 130, 230, 60
LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20
PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP
}
DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Version"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
}

View file

@ -13,7 +13,7 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
@ -28,7 +28,7 @@ FONT 8, "MS Shell Dlg"
LISTBOX 99, 8, 65, 137, 82, LBS_NOTIFY | WS_VSCROLL | WS_BORDER
ICON "", 1088, 10, 10, 14, 16
LTEXT "", 100, 35, 10, 137, 10
LTEXT "ReactOS was brought to you by:", 98, 8, 55, 137, 10
LTEXT "Wine was brought to you by:", 98, 8, 55, 137, 10
}
SHELL_RUN_DLG DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95
@ -37,7 +37,7 @@ CAPTION ""
FONT 8, "MS Shell Dlg"
{
ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE
LTEXT "Type the name of a program, folder, document, or Internet resource, and ReactOS will open it for you.", 12289, 36, 11, 182, 18
LTEXT "Type the name of a program, folder, document, or Internet resource, and Wine will open it for you.", 12289, 36, 11, 182, 18
LTEXT "&Open:", 12305, 7, 39, 24, 10
CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100
DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP
@ -45,137 +45,6 @@ FONT 8, "MS Shell Dlg"
PUSHBUTTON "&Browse...", 12288, 170, 63, 50, 14, WS_TABSTOP
}
SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Shortcut"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
LTEXT "Target type:", 14004, 10, 30, 50, 10
LTEXT "", 14005, 70, 30, 150, 10
LTEXT "Target location:", 14006, 10, 40, 70, 10
LTEXT "", 14007, 70, 40, 150, 10
LTEXT "Target:", 14008, 10, 55, 45, 10
EDITTEXT 14009, 70, 55, 150, 10, ES_LEFT
LTEXT "&Start in:",14010, 10, 65, 45, 10
EDITTEXT 14011, 70, 65, 150, 10, ES_LEFT
LTEXT "Shortcut &key:", 14014, 10, 80, 45, 10
EDITTEXT 14015, 70, 80, 150, 10, ES_LEFT
LTEXT "Run:", 14016, 10, 90, 45, 10
EDITTEXT 14017, 70, 90, 150, 10
LTEXT "C&omment:", 14018, 10, 100, 45, 10
EDITTEXT 14019, 70, 100, 150, 10, ES_LEFT
PUSHBUTTON "&Find Target...", 14020, 10, 115, 60, 14, ES_LEFT
PUSHBUTTON "&Change Icon...", 14021, 80, 115, 60, 14, ES_LEFT
PUSHBUTTON "A&dvanced...", 14022, 150, 115, 60, 14, ES_LEFT
}
SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "General"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE
EDITTEXT 14001, 70, 5, 100, 10, ES_LEFT | ES_READONLY
LTEXT "Type of file:", 14004, 10, 30, 50, 10
LTEXT "%s File", 14005, 70, 30, 150, 10
LTEXT "Opens with:", 14006, 10, 40, 50, 10
LTEXT "", 14007, 70, 40, 150, 10
LTEXT "Location:", 14008, 10, 55, 45, 10
LTEXT "", 14009, 70, 55, 200, 10
LTEXT "Size:",14010, 10, 65, 45, 10
LTEXT "", 14011, 70, 65, 150, 10
LTEXT "Created:", 14014, 10, 80, 45, 10
LTEXT "", 14015, 70, 80, 150, 10
LTEXT "Modied:", 14016, 10, 90, 45, 10
LTEXT "", 14017, 70, 90, 150, 10
LTEXT "Accessed:", 14018, 10, 100, 45, 10
LTEXT "", 14019, 70, 100, 150, 10
LTEXT "Attributes:", 14020, 10, 115, 45, 10
CHECKBOX "&Read-only", 14021, 70, 115, 45, 10
CHECKBOX "&Hidden", 14022, 130, 115, 50, 10
CHECKBOX "&Archive", 14023, 180, 115, 45, 10
}
SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Version"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
LTEXT "File version: ", 14000, 10, 10, 45, 10
LTEXT "", 14001, 70, 10, 150, 10
LTEXT "Description: ", 14002, 10, 20, 45, 10
LTEXT "", 14003, 70, 20, 150, 10
LTEXT "Copyright: ", 14004, 10, 30, 45, 10
LTEXT "", 14005, 70, 30, 150, 10
GROUPBOX "Other version information: ", 14006, 10, 45, 220, 90
LTEXT "Item name: ", 14007, 20, 55, 50, 10
LTEXT "Value: ", 14008, 130, 55, 45, 10
LISTBOX 14009,20,65,95,60, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY
EDITTEXT 14010, 130, 65, 95, 60, ES_LEFT|WS_BORDER|WS_VSCROLL|WS_GROUP|ES_MULTILINE|ES_READONLY
}
DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "General"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
EDITTEXT 14001, 40, 20, 190, 10, ES_LEFT|WS_BORDER|WS_GROUP
LTEXT "Type:", -1, 15, 55, 40, 10
LTEXT "", 14002, 110, 55, 100, 10
LTEXT "File system:", -1, 15, 70, 100, 10
LTEXT "", 14003, 110, 70, 100, 10
CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10
LTEXT "Used space:", -1, 25, 90, 120, 10
LTEXT "", 14004, 110, 90, 120, 10
LTEXT "", 14005, 200, 90, 40, 10
CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10
LTEXT "Free space:", -1, 25, 105, 70, 10
LTEXT "", 14006, 110, 105, 120, 10
LTEXT "", 14007, 200, 105, 40, 10
LTEXT "Capacity:", -1, 25, 125, 80, 10
LTEXT "", 14008, 110, 125, 120, 10
LTEXT "", 14009, 200, 125, 40, 10
CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20
LTEXT "Drive %s", 14010, 100, 170, 40, 10
PUSHBUTTON "Disk Cleanup", 14011, 180, 175, 50, 15, WS_TABSTOP
CHECKBOX "Compress drive to save disk space", 14012, 15, 205, 165, 10, WS_DISABLED
CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED
}
DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Tools"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
GROUPBOX "Error-checking", -1, 5, 5, 230, 60
LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20
PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP
GROUPBOX "Defragmentation", -1, 5, 65, 230, 60
LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20
PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP
GROUPBOX "Backup", -1, 5, 130, 230, 60
LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20
PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP
}
DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 130
STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_DISABLED | WS_CAPTION
CAPTION "Version"
FONT 8, "MS Shell Dlg", 0, 0, 0x0
{
}
/* columns in the shellview */
STRINGTABLE LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL
BEGIN

View file

@ -16,7 +16,7 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef __WINE_SHELL_MAIN_H
@ -57,14 +57,15 @@ 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_GetDefaultIconW(LPCWSTR szClass, LPWSTR szDest, DWORD len, LPDWORD dwNr);
BOOL HCR_GetDefaultIconFromGUIDW(REFIID riid, LPWSTR szDest, DWORD len, LPDWORD dwNr);
BOOL HCR_GetDefaultIconW(LPCWSTR szClass, LPWSTR szDest, DWORD len, int* picon_idx);
BOOL HCR_GetDefaultIconFromGUIDW(REFIID riid, LPWSTR szDest, 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_GetDefaultIconA(LPCSTR szClass, LPSTR szDest, DWORD len, LPDWORD dwNr);
BOOL HCR_GetDefaultIconA(LPCSTR szClass, LPSTR szDest, DWORD len, int* picon_idx);
BOOL HCR_GetClassNameA(REFIID riid, LPSTR szDest, DWORD len);
BOOL HCR_GetFolderAttributes(LPCITEMIDLIST pidlFolder, LPDWORD dwAttributes);
@ -96,7 +97,9 @@ HRESULT WINAPI UnixFolder_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID
HRESULT WINAPI UnixDosFolder_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID *ppv);
HRESULT WINAPI FolderShortcut_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID *ppv);
HRESULT WINAPI MyDocuments_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID *ppv);
extern HRESULT CPanel_GetIconLocationW(LPITEMIDLIST, LPWSTR, UINT, int*);
HRESULT WINAPI RecycleBin_Constructor(IUnknown * pUnkOuter, REFIID riif, LPVOID *ppv);
HRESULT WINAPI ShellFSFolder_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID *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);
@ -125,6 +128,7 @@ HRESULT WINAPI Shell_MergeMenus (HMENU hmDst, HMENU hmSrc, UINT uInsert, UINT uI
(((kst)&(MK_CONTROL|MK_SHIFT)) ? DROPEFFECT_COPY :\
DROPEFFECT_MOVE))
HGLOBAL RenderHDROP(LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl);
HGLOBAL RenderSHELLIDLIST (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl);
HGLOBAL RenderSHELLIDLISTOFFSET (LPITEMIDLIST pidlRoot, LPITEMIDLIST * apidl, UINT cidl);
@ -144,10 +148,15 @@ void FreeChangeNotifications(void);
#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_DeleteDirectoryA(LPCSTR pszDir, BOOL bShowUI);
BOOL SHELL_DeleteFileA(LPCSTR pszFile, BOOL bShowUI);
BOOL SHELL_ConfirmDialog(int nKindOfDialog, LPCSTR szDir);
BOOL SHELL_DeleteDirectoryW(HWND hwnd, LPCWSTR pwszDir, BOOL bShowUI);
BOOL SHELL_ConfirmYesNoW(HWND hWnd, int nKindOfDialog, LPCWSTR szDir);
/* 16-bit functions */
void WINAPI DragAcceptFiles16(HWND16 hWnd, BOOL16 b);
@ -166,7 +175,7 @@ BOOL16 WINAPI AboutDlgProc16(HWND16,UINT16,WPARAM16,LPARAM);
void WINAPI _InsertMenuItem (HMENU hmenu, UINT indexMenu, BOOL fByPosition,
UINT wID, UINT fType, LPCSTR dwTypeData, UINT fState);
inline static BOOL SHELL_OsIsUnicode(void)
static inline BOOL SHELL_OsIsUnicode(void)
{
/* if high-bit of version is 0, we are emulating NT */
return !(GetVersion() & 0x80000000);
@ -177,26 +186,26 @@ inline static BOOL SHELL_OsIsUnicode(void)
SHFree(*ptr); \
*ptr = NULL; \
};
inline static void __SHCloneStrA(char ** target,const char * source)
static inline void __SHCloneStrA(char ** target,const char * source)
{
*target = (char*)SHAlloc(strlen(source)+1);
*target = SHAlloc(strlen(source)+1);
strcpy(*target, source);
}
inline static void __SHCloneStrWtoA(char ** target, const WCHAR * source)
static inline void __SHCloneStrWtoA(char ** target, const WCHAR * source)
{
int len = WideCharToMultiByte(CP_ACP, 0, source, -1, NULL, 0, NULL, NULL);
*target = SHAlloc(len);
WideCharToMultiByte(CP_ACP, 0, source, -1, *target, len, NULL, NULL);
}
inline static void __SHCloneStrW(WCHAR ** target, const WCHAR * source)
static inline void __SHCloneStrW(WCHAR ** target, const WCHAR * source)
{
*target = (WCHAR*)SHAlloc( (strlenW(source)+1) * sizeof(WCHAR) );
strcpyW(*target, source);
*target = SHAlloc( (lstrlenW(source)+1) * sizeof(WCHAR) );
lstrcpyW(*target, source);
}
inline static WCHAR * __SHCloneStrAtoW(WCHAR ** target, const char * source)
static inline WCHAR * __SHCloneStrAtoW(WCHAR ** target, const char * source)
{
int len = MultiByteToWideChar(CP_ACP, 0, source, -1, NULL, 0);
*target = SHAlloc(len*sizeof(WCHAR));
@ -230,7 +239,6 @@ HRESULT SHELL_RegisterShellFolders(void);
/* Detect Shell Links */
BOOL SHELL_IsShortcut(LPCITEMIDLIST);
#define MAX_PROPERTY_SHEET_PAGE 32
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(LPSTR resname, DLGPROC dlgproc, LPARAM lParam);

View file

@ -15,6 +15,6 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL

View file

@ -15,7 +15,7 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef __WINE_SHELLFOLDER_HELP_H
@ -46,8 +46,8 @@ DECLARE_INTERFACE_(ISFHelper,IUnknown)
STDMETHOD_(ULONG,AddRef)(THIS) PURE;
STDMETHOD_(ULONG,Release)(THIS) PURE;
/*** ISFHelper methods ***/
STDMETHOD(GetUniqueName)(THIS_ LPSTR lpName, UINT uLen) PURE;
STDMETHOD(AddFolder)(THIS_ HWND hwnd, LPCSTR lpName, LPITEMIDLIST * ppidlOut) PURE;
STDMETHOD(GetUniqueName)(THIS_ LPWSTR lpName, UINT uLen) PURE;
STDMETHOD(AddFolder)(THIS_ HWND hwnd, LPCWSTR lpName, LPITEMIDLIST * ppidlOut) PURE;
STDMETHOD(DeleteItems)(THIS_ UINT cidl, LPCITEMIDLIST * apidl) PURE;
STDMETHOD(CopyItems)(THIS_ IShellFolder * pSFFrom, UINT cidl, LPCITEMIDLIST * apidl) PURE;
};

View file

@ -16,10 +16,10 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*
* NOTES
* Nearly complete informations about the binary formats
* Nearly complete information about the binary formats
* of .lnk files available at http://www.wotsit.org
*
* You can use winedump to examine the contents of a link file:
@ -87,6 +87,7 @@ typedef struct _LINK_HEADER
#define SHLINK_LOCAL 0
#define SHLINK_REMOTE 1
#define MAX_PROPERTY_SHEET_PAGE 32
typedef struct _LOCATION_INFO
{
@ -140,7 +141,7 @@ typedef struct
LONG ref;
/* data structures according to the informations in the link */
/* data structures according to the information in the link */
LPITEMIDLIST pPidl;
WORD wHotKey;
SYSTEMTIME time1;
@ -157,13 +158,12 @@ typedef struct
LPWSTR sPathRel;
LPWSTR sProduct;
LPWSTR sComponent;
volume_info volume;
LPWSTR sLinkPath;
BOOL bRunAs;
volume_info volume;
BOOL bDirty;
INT iIdOpen; /* id of the "Open" entry in the context menu */
INT iIdProperties;
INT iIdProperties; /* id of the "Properties" entry in the context menu */
IUnknown *site;
} IShellLinkImpl;
@ -202,10 +202,10 @@ static inline IShellLinkImpl *impl_from_IObjectWithSite( IObjectWithSite *iface
return (IShellLinkImpl *)((char*)iface - FIELD_OFFSET(IShellLinkImpl, lpvtblObjectWithSite));
}
static HRESULT ShellLink_UpdatePath(LPWSTR sPathRel, LPCWSTR path, LPCWSTR sWorkDir, LPWSTR* psPath);
static HRESULT ShellLink_UpdatePath(LPCWSTR sPathRel, LPCWSTR path, LPCWSTR sWorkDir, LPWSTR* psPath);
/* strdup on the process heap */
inline static LPWSTR HEAP_strdupAtoW( HANDLE heap, DWORD flags, LPCSTR str)
static inline LPWSTR HEAP_strdupAtoW( HANDLE heap, DWORD flags, LPCSTR str)
{
INT len = MultiByteToWideChar( CP_ACP, 0, str, -1, NULL, 0 );
LPWSTR p = HeapAlloc( heap, flags, len*sizeof (WCHAR) );
@ -215,7 +215,7 @@ inline static LPWSTR HEAP_strdupAtoW( HANDLE heap, DWORD flags, LPCSTR str)
return p;
}
inline static LPWSTR strdupW( LPCWSTR src )
static inline LPWSTR strdupW( LPCWSTR src )
{
LPWSTR dest;
if (!src) return NULL;
@ -284,7 +284,7 @@ static ULONG ShellLink_AddRef( IShellLinkImpl *This )
{
ULONG refCount = InterlockedIncrement(&This->ref);
TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
TRACE("(%p)->(count=%u)\n", This, refCount - 1);
return refCount;
}
@ -296,7 +296,7 @@ static ULONG ShellLink_Release( IShellLinkImpl *This )
{
ULONG refCount = InterlockedDecrement(&This->ref);
TRACE("(%p)->(count=%lu)\n", This, refCount + 1);
TRACE("(%p)->(count=%u)\n", This, refCount + 1);
if (refCount)
return refCount;
@ -310,7 +310,6 @@ static ULONG ShellLink_Release( IShellLinkImpl *This )
HeapFree(GetProcessHeap(),0,This->sPath);
HeapFree(GetProcessHeap(),0,This->sLinkPath);
if (This->site)
IUnknown_Release( This->site );
@ -385,7 +384,7 @@ static HRESULT WINAPI IPersistFile_fnLoad(IPersistFile* iface, LPCOLESTR pszFile
HRESULT r;
IStream *stm;
TRACE("(%p, %s, %lx)\n",This, debugstr_w(pszFileName), dwMode);
TRACE("(%p, %s, %x)\n",This, debugstr_w(pszFileName), dwMode);
if( dwMode == 0 )
dwMode = STGM_READ | STGM_SHARE_DENY_WRITE;
@ -399,7 +398,7 @@ static HRESULT WINAPI IPersistFile_fnLoad(IPersistFile* iface, LPCOLESTR pszFile
IStream_Release( stm );
This->bDirty = FALSE;
}
TRACE("-- returning hr %08lx\n", r);
TRACE("-- returning hr %08x\n", r);
return r;
}
@ -407,11 +406,12 @@ static BOOL StartLinkProcessor( LPCOLESTR szLink )
{
static const WCHAR szFormat[] = {
'w','i','n','e','m','e','n','u','b','u','i','l','d','e','r','.','e','x','e',
' ','-','r',' ','"','%','s','"',0 };
' ','-','w',' ','"','%','s','"',0 };
LONG len;
LPWSTR buffer;
STARTUPINFOW si;
PROCESS_INFORMATION pi;
BOOL ret;
len = sizeof(szFormat) + lstrlenW( szLink ) * sizeof(WCHAR);
buffer = HeapAlloc( GetProcessHeap(), 0, len );
@ -424,16 +424,18 @@ static BOOL StartLinkProcessor( LPCOLESTR szLink )
memset(&si, 0, sizeof(si));
si.cb = sizeof(si);
if (!CreateProcessW( NULL, buffer, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) return FALSE;
/* wait for a while to throttle the creation of linker processes */
if( WAIT_OBJECT_0 != WaitForSingleObject( pi.hProcess, 10000 ) )
WARN("Timed out waiting for shell linker\n");
ret = CreateProcessW( NULL, buffer, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi );
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
HeapFree( GetProcessHeap(), 0, buffer );
return TRUE;
if (ret)
{
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}
return ret;
}
static HRESULT WINAPI IPersistFile_fnSave(IPersistFile* iface, LPCOLESTR pszFileName, BOOL fRemember)
@ -592,8 +594,12 @@ static HRESULT Stream_LoadString( IStream* stm, BOOL unicode, LPWSTR *pstr )
{
count = MultiByteToWideChar( CP_ACP, 0, (LPSTR) temp, len, NULL, 0 );
str = HeapAlloc( GetProcessHeap(), 0, (count+1)*sizeof (WCHAR) );
if( str )
MultiByteToWideChar( CP_ACP, 0, (LPSTR) temp, len, str, count );
if( !str )
{
HeapFree( GetProcessHeap(), 0, temp );
return E_OUTOFMEMORY;
}
MultiByteToWideChar( CP_ACP, 0, (LPSTR) temp, len, str, count );
HeapFree( GetProcessHeap(), 0, temp );
}
else
@ -636,7 +642,7 @@ static HRESULT Stream_ReadChunk( IStream* stm, LPVOID *data )
return E_FAIL;
}
TRACE("Read %ld bytes\n",chunk->size);
TRACE("Read %d bytes\n",chunk->size);
*data = (LPVOID) chunk;
@ -665,7 +671,7 @@ static BOOL Stream_LoadVolume( LOCAL_VOLUME_INFO *vol, volume_info *volume )
return TRUE;
}
static LPWSTR Stream_LoadPath( LPSTR p, DWORD maxlen )
static LPWSTR Stream_LoadPath( LPCSTR p, DWORD maxlen )
{
int len = 0, wlen;
LPWSTR path;
@ -694,7 +700,7 @@ static HRESULT Stream_LoadLocation( IStream *stm,
return r;
loc = (LOCATION_INFO*) p;
if (loc->dwTotalSize < sizeof(LOCATION_INFO) - sizeof(DWORD))
if (loc->dwTotalSize < sizeof(LOCATION_INFO))
{
HeapFree( GetProcessHeap(), 0, p );
return E_FAIL;
@ -715,7 +721,7 @@ static HRESULT Stream_LoadLocation( IStream *stm,
if( n && (n < loc->dwTotalSize) )
*path = Stream_LoadPath( &p[n], loc->dwTotalSize - n );
TRACE("type %ld serial %08lx name %s path %s\n", volume->type,
TRACE("type %d serial %08x name %s path %s\n", volume->type,
volume->serial, debugstr_w(volume->label), debugstr_w(*path));
HeapFree( GetProcessHeap(), 0, p );
@ -764,11 +770,11 @@ static HRESULT Stream_LoadAdvertiseInfo( IStream* stm, LPWSTR *str )
if( count != size )
return E_FAIL;
TRACE("magic %08lx string = %s\n", buffer.dbh.dwSignature, debugstr_w(buffer.szwDarwinID));
TRACE("magic %08x string = %s\n", buffer.dbh.dwSignature, debugstr_w(buffer.szwDarwinID));
if( (buffer.dbh.dwSignature&0xffff0000) != 0xa0000000 )
{
ERR("Unknown magic number %08lx in advertised shortcut\n", buffer.dbh.dwSignature);
ERR("Unknown magic number %08x in advertised shortcut\n", buffer.dbh.dwSignature);
return E_FAIL;
}
@ -1066,10 +1072,7 @@ static HRESULT WINAPI IPersistStream_fnSave(
IStream* stm,
BOOL fClearDirty)
{
static const WCHAR wOpen[] = {'o','p','e','n',0};
LINK_HEADER header;
WCHAR exePath[MAX_PATH];
ULONG count;
DWORD zero;
HRESULT r;
@ -1078,20 +1081,6 @@ static HRESULT WINAPI IPersistStream_fnSave(
TRACE("%p %p %x\n", This, stm, fClearDirty);
*exePath = '\0';
if (This->sPath)
{
SHELL_FindExecutable(NULL, This->sPath, wOpen, exePath, MAX_PATH,
NULL, NULL, NULL, NULL);
/*
* windows can create lnk files to executables that do not exist yet
* so if the executable does not exist the just trust the path they
* gave us
*/
if (!*exePath) lstrcpyW(exePath,This->sPath);
}
memset(&header, 0, sizeof(header));
header.dwSize = sizeof(header);
header.fStartup = This->iShowCmd;
@ -1145,7 +1134,7 @@ static HRESULT WINAPI IPersistStream_fnSave(
}
if( This->sPath )
Stream_WriteLocationInfo( stm, exePath, &This->volume );
Stream_WriteLocationInfo( stm, This->sPath, &This->volume );
if( This->sDescription )
r = Stream_WriteString( stm, This->sDescription );
@ -1231,9 +1220,9 @@ HRESULT WINAPI IShellLink_Constructor( IUnknown *pUnkOuter,
sl->lpvtblObjectWithSite = &owsvt;
sl->iShowCmd = SW_SHOWNORMAL;
sl->bDirty = FALSE;
sl->bRunAs = FALSE;
sl->iIdOpen = -1;
sl->site = NULL;
sl->bRunAs = FALSE;
TRACE("(%p)->()\n",sl);
@ -1254,7 +1243,7 @@ static BOOL SHELL_ExistsFileW(LPCWSTR path)
* ShellLink_UpdatePath
* update absolute path in sPath using relative path in sPathRel
*/
static HRESULT ShellLink_UpdatePath(LPWSTR sPathRel, LPCWSTR path, LPCWSTR sWorkDir, LPWSTR* psPath)
static HRESULT ShellLink_UpdatePath(LPCWSTR sPathRel, LPCWSTR path, LPCWSTR sWorkDir, LPWSTR* psPath)
{
if (!path || !psPath)
return E_INVALIDARG;
@ -1371,7 +1360,7 @@ static HRESULT WINAPI IShellLinkA_fnGetPath(IShellLinkA * iface, LPSTR pszFile,
{
IShellLinkImpl *This = (IShellLinkImpl *)iface;
TRACE("(%p)->(pfile=%p len=%u find_data=%p flags=%lu)(%s)\n",
TRACE("(%p)->(pfile=%p len=%u find_data=%p flags=%u)(%s)\n",
This, pszFile, cchMaxPath, pfd, fFlags, debugstr_w(This->sPath));
if (This->sComponent || This->sProduct)
@ -1548,7 +1537,8 @@ static HRESULT WINAPI IShellLinkA_fnSetShowCmd(IShellLinkA * iface, INT iShowCmd
return NOERROR;
}
static HRESULT SHELL_PidlGeticonLocationA(IShellFolder* psf, LPITEMIDLIST pidl, LPSTR pszIconPath, int cchIconPath, int* piIcon)
static HRESULT SHELL_PidlGeticonLocationA(IShellFolder* psf, LPCITEMIDLIST pidl,
LPSTR pszIconPath, int cchIconPath, int* piIcon)
{
LPCITEMIDLIST pidlLast;
@ -1643,7 +1633,7 @@ static HRESULT WINAPI IShellLinkA_fnSetRelativePath(IShellLinkA * iface, LPCSTR
{
IShellLinkImpl *This = (IShellLinkImpl *)iface;
TRACE("(%p)->(path=%s %lx)\n",This, pszPathRel, dwReserved);
TRACE("(%p)->(path=%s %x)\n",This, pszPathRel, dwReserved);
HeapFree(GetProcessHeap(), 0, This->sPathRel);
This->sPathRel = HEAP_strdupAtoW(GetProcessHeap(), 0, pszPathRel);
@ -1656,7 +1646,7 @@ static HRESULT WINAPI IShellLinkA_fnResolve(IShellLinkA * iface, HWND hwnd, DWOR
{
IShellLinkImpl *This = (IShellLinkImpl *)iface;
TRACE("(%p)->(hwnd=%p flags=%lx)\n",This, hwnd, fFlags);
TRACE("(%p)->(hwnd=%p flags=%x)\n",This, hwnd, fFlags);
return IShellLinkW_Resolve( (IShellLinkW*)&(This->lpvtblw), hwnd, fFlags );
}
@ -1741,7 +1731,7 @@ static HRESULT WINAPI IShellLinkW_fnGetPath(IShellLinkW * iface, LPWSTR pszFile,
{
IShellLinkImpl *This = impl_from_IShellLinkW(iface);
TRACE("(%p)->(pfile=%p len=%u find_data=%p flags=%lu)(%s)\n",
TRACE("(%p)->(pfile=%p len=%u find_data=%p flags=%u)(%s)\n",
This, pszFile, cchMaxPath, pfd, fFlags, debugstr_w(This->sPath));
if (This->sComponent || This->sProduct)
@ -1764,7 +1754,10 @@ static HRESULT WINAPI IShellLinkW_fnGetIDList(IShellLinkW * iface, LPITEMIDLIST
TRACE("(%p)->(ppidl=%p)\n",This, ppidl);
if (!This->pPidl)
{
*ppidl = NULL;
return S_FALSE;
}
*ppidl = ILClone(This->pPidl);
return S_OK;
}
@ -1923,7 +1916,8 @@ static HRESULT WINAPI IShellLinkW_fnSetShowCmd(IShellLinkW * iface, INT iShowCmd
return S_OK;
}
static HRESULT SHELL_PidlGeticonLocationW(IShellFolder* psf, LPITEMIDLIST pidl, LPWSTR pszIconPath, int cchIconPath, int* piIcon)
static HRESULT SHELL_PidlGeticonLocationW(IShellFolder* psf, LPCITEMIDLIST pidl,
LPWSTR pszIconPath, int cchIconPath, int* piIcon)
{
LPCITEMIDLIST pidlLast;
@ -2020,7 +2014,7 @@ static HRESULT WINAPI IShellLinkW_fnSetRelativePath(IShellLinkW * iface, LPCWSTR
{
IShellLinkImpl *This = impl_from_IShellLinkW(iface);
TRACE("(%p)->(path=%s %lx)\n",This, debugstr_w(pszPathRel), dwReserved);
TRACE("(%p)->(path=%s %x)\n",This, debugstr_w(pszPathRel), dwReserved);
HeapFree(GetProcessHeap(), 0, This->sPathRel);
This->sPathRel = HeapAlloc( GetProcessHeap(), 0,
@ -2040,7 +2034,7 @@ static HRESULT WINAPI IShellLinkW_fnResolve(IShellLinkW * iface, HWND hwnd, DWOR
IShellLinkImpl *This = impl_from_IShellLinkW(iface);
TRACE("(%p)->(hwnd=%p flags=%lx)\n",This, hwnd, fFlags);
TRACE("(%p)->(hwnd=%p flags=%x)\n",This, hwnd, fFlags);
/*FIXME: use IResolveShellLink interface */
@ -2158,7 +2152,7 @@ static HRESULT ShellLink_SetAdvertiseInfo(IShellLinkImpl *This, LPCWSTR str)
return S_OK;
}
static BOOL ShellLink_GetVolumeInfo(LPWSTR path, volume_info *volume)
static BOOL ShellLink_GetVolumeInfo(LPCWSTR path, volume_info *volume)
{
const int label_sz = sizeof volume->label/sizeof volume->label[0];
WCHAR drive[4] = { path[0], ':', '\\', 0 };
@ -2167,7 +2161,7 @@ static BOOL ShellLink_GetVolumeInfo(LPWSTR path, volume_info *volume)
volume->type = GetDriveTypeW(drive);
r = GetVolumeInformationW(drive, volume->label, label_sz,
&volume->serial, NULL, NULL, NULL, 0);
TRACE("r = %d type %ld serial %08lx name %s\n", r,
TRACE("r = %d type %d serial %08x name %s\n", r,
volume->type, volume->serial, debugstr_w(volume->label));
return r;
}
@ -2176,11 +2170,25 @@ static HRESULT WINAPI IShellLinkW_fnSetPath(IShellLinkW * iface, LPCWSTR pszFile
{
IShellLinkImpl *This = impl_from_IShellLinkW(iface);
WCHAR buffer[MAX_PATH];
LPWSTR fname;
LPWSTR fname, unquoted = NULL;
HRESULT hr = S_OK;
UINT len;
TRACE("(%p)->(path=%s)\n",This, debugstr_w(pszFile));
/* quotes at the ends of the string are stripped */
len = lstrlenW(pszFile);
if (pszFile[0] == '"' && pszFile[len-1] == '"')
{
unquoted = strdupW(pszFile);
PathUnquoteSpacesW(unquoted);
pszFile = unquoted;
}
/* any other quote marks are invalid */
if (strchrW(pszFile, '"'))
return S_FALSE;
HeapFree(GetProcessHeap(), 0, This->sPath);
This->sPath = NULL;
@ -2197,8 +2205,9 @@ static HRESULT WINAPI IShellLinkW_fnSetPath(IShellLinkW * iface, LPCWSTR pszFile
*buffer = '\0';
else if (!GetFullPathNameW(pszFile, MAX_PATH, buffer, &fname))
return E_FAIL;
else if(!PathFileExistsW(buffer))
hr = S_FALSE;
else if(!PathFileExistsW(buffer) &&
!SearchPathW(NULL, pszFile, NULL, MAX_PATH, buffer, NULL))
hr = S_FALSE;
This->pPidl = SHSimpleIDListFromPathW(pszFile);
ShellLink_GetVolumeInfo(buffer, &This->volume);
@ -2211,6 +2220,7 @@ static HRESULT WINAPI IShellLinkW_fnSetPath(IShellLinkW * iface, LPCWSTR pszFile
lstrcpyW(This->sPath, buffer);
}
This->bDirty = TRUE;
HeapFree(GetProcessHeap(), 0, unquoted);
return hr;
}
@ -2279,7 +2289,7 @@ ShellLink_CopyDataBlock( IShellLinkDataList* iface, DWORD dwSig, void** ppDataBl
LPVOID block = NULL;
HRESULT r = E_FAIL;
TRACE("%p %08lx %p\n", iface, dwSig, ppDataBlock );
TRACE("%p %08x %p\n", iface, dwSig, ppDataBlock );
switch (dwSig)
{
@ -2294,10 +2304,10 @@ ShellLink_CopyDataBlock( IShellLinkDataList* iface, DWORD dwSig, void** ppDataBl
case NT_FE_CONSOLE_PROPS_SIG:
case EXP_SPECIAL_FOLDER_SIG:
case EXP_SZ_ICON_SIG:
FIXME("valid but unhandled datablock %08lx\n", dwSig);
FIXME("valid but unhandled datablock %08x\n", dwSig);
break;
default:
ERR("unknown datablock %08lx\n", dwSig);
ERR("unknown datablock %08x\n", dwSig);
}
*ppDataBlock = block;
return r;
@ -2460,12 +2470,12 @@ ShellLink_QueryContextMenu( IContextMenu* iface, HMENU hmenu, UINT indexMenu,
UINT idCmdFirst, UINT idCmdLast, UINT uFlags )
{
IShellLinkImpl *This = impl_from_IContextMenu(iface);
static const WCHAR szOpen[] = { 'O','p','e','n',0 };
static const WCHAR szProperties[] = { 'P','r','o','p','e','r','t','i','e','s',0 };
static WCHAR szOpen[] = { 'O','p','e','n',0 };
static WCHAR szProperties[] = { 'P','r','o','p','e','r','t','i','e','s',0 };
MENUITEMINFOW mii;
int id = 1;
TRACE("ShellLink_QueryContextMenu %p %p %u %u %u %u\n", This,
TRACE("%p %p %u %u %u %u\n", This,
hmenu, indexMenu, idCmdFirst, idCmdLast, uFlags );
if ( !hmenu )
@ -2480,13 +2490,9 @@ ShellLink_QueryContextMenu( IContextMenu* iface, HMENU hmenu, UINT indexMenu,
mii.fState = MFS_DEFAULT | MFS_ENABLED;
mii.fType = MFT_STRING;
if (!InsertMenuItemW( hmenu, indexMenu, TRUE, &mii ))
{
TRACE("ShellLink_QueryContextMenu failed to insert item open");
return E_FAIL;
}
This->iIdOpen = 0;
mii.fState = MFS_ENABLED;
mii.dwTypeData = (LPWSTR)szProperties;
mii.cch = strlenW( mii.dwTypeData );
@ -2498,18 +2504,19 @@ ShellLink_QueryContextMenu( IContextMenu* iface, HMENU hmenu, UINT indexMenu,
}
This->iIdProperties = 1;
id++;
return MAKE_HRESULT( SEVERITY_SUCCESS, 0, id );
}
static LPWSTR
shelllink_get_msi_component_path( LPWSTR component )
{
LPWSTR path = NULL;
LPWSTR path;
DWORD r, sz = 0;
r = CommandLineFromMsiDescriptor( component, NULL, &sz );
if (r != ERROR_SUCCESS)
return path;
return NULL;
sz++;
path = HeapAlloc( GetProcessHeap(), 0, sz*sizeof(WCHAR) );
@ -2525,45 +2532,6 @@ shelllink_get_msi_component_path( LPWSTR component )
return path;
}
/*************************************************************************
*
* SH_CreatePropertySheetPage [Internal]
*
* creates a property sheet page from an resource name
*
*/
HPROPSHEETPAGE
SH_CreatePropertySheetPage(LPSTR resname, DLGPROC dlgproc, LPARAM lParam)
{
HRSRC hRes;
LPVOID lpsztemplate;
PROPSHEETPAGEW ppage;
if (resname == NULL)
return (HPROPSHEETPAGE)0;
hRes = FindResourceA(shell32_hInstance, resname, (LPSTR)RT_DIALOG);
if (hRes == NULL)
{
ERR("failed to find resource name\n");
return (HPROPSHEETPAGE)0;
}
lpsztemplate = LoadResource(shell32_hInstance, hRes);
if (lpsztemplate == NULL)
return (HPROPSHEETPAGE)0;
memset(&ppage, 0x0, sizeof(PROPSHEETPAGE));
ppage.dwSize = sizeof(PROPSHEETPAGEW);
ppage.dwFlags = PSP_DLGINDIRECT;
ppage.u.pResource = lpsztemplate;
ppage.pfnDlgProc = dlgproc;
ppage.lParam = lParam;
return CreatePropertySheetPageW(&ppage);
}
INT_PTR CALLBACK ExtendedShortcutProc(
HWND hwndDlg,
UINT uMsg,
@ -2791,7 +2759,7 @@ ShellLink_InvokeCommand( IContextMenu* iface, LPCMINVOKECOMMANDINFO lpici )
LPWSTR path = NULL;
HRESULT r;
TRACE("ShellLink_InvokeCommand %p %p\n", This, lpici );
TRACE("%p %p\n", This, lpici );
if ( lpici->cbSize < sizeof (CMINVOKECOMMANDINFO) )
return E_INVALIDARG;
@ -2802,7 +2770,6 @@ ShellLink_InvokeCommand( IContextMenu* iface, LPCMINVOKECOMMANDINFO lpici )
return S_OK;
}
if ( lpici->lpVerb != MAKEINTRESOURCEA(This->iIdOpen) )
{
ERR("Unknown id %d != %d\n", (INT)lpici->lpVerb, This->iIdOpen );
@ -2847,7 +2814,7 @@ ShellLink_InvokeCommand( IContextMenu* iface, LPCMINVOKECOMMANDINFO lpici )
memset( &sei, 0, sizeof sei );
sei.cbSize = sizeof sei;
sei.fMask = SEE_MASK_UNICODE;
sei.fMask = SEE_MASK_UNICODE | SEE_MASK_NOCLOSEPROCESS;
sei.lpFile = path;
sei.nShow = This->iShowCmd;
sei.lpIDList = This->pPidl;
@ -2855,8 +2822,15 @@ ShellLink_InvokeCommand( IContextMenu* iface, LPCMINVOKECOMMANDINFO lpici )
sei.lpParameters = args;
sei.lpVerb = szOpen;
if ( ShellExecuteExW( &sei ) && (UINT)sei.hInstApp > 32 )
if( ShellExecuteExW( &sei ) )
{
if ( sei.hProcess )
{
WaitForSingleObject( sei.hProcess, 10000 );
CloseHandle( sei.hProcess );
}
r = S_OK;
}
else
r = E_FAIL;
@ -2872,7 +2846,7 @@ ShellLink_GetCommandString( IContextMenu* iface, UINT_PTR idCmd, UINT uType,
{
IShellLinkImpl *This = impl_from_IContextMenu(iface);
FIXME("%p %u %u %p %p %u\n", This,
FIXME("%p %lu %u %p %p %u\n", This,
idCmd, uType, pwReserved, pszName, cchMax );
return E_NOTIMPL;

View file

@ -16,7 +16,7 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
@ -49,18 +49,16 @@ WINE_DEFAULT_DEBUG_CHANNEL(shell);
extern HRESULT WINAPI IFSFolder_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv);
const WCHAR sShell32[12] = {'S','H','E','L','L','3','2','.','D','L','L','\0'};
const WCHAR sOLE32[10] = {'O','L','E','3','2','.','D','L','L','\0'};
static const WCHAR sShell32[12] = {'S','H','E','L','L','3','2','.','D','L','L','\0'};
HINSTANCE hShellOle32 = 0;
/**************************************************************************
* Default ClassFactory types
*/
typedef HRESULT (CALLBACK *LPFNCREATEINSTANCE)(IUnknown* pUnkOuter, REFIID riid, LPVOID* ppvObject);
IClassFactory * IDefClF_fnConstructor(LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, REFIID riidInst);
static IClassFactory * IDefClF_fnConstructor(LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, REFIID riidInst);
/* this table contains all CLSID's of shell32 objects */
struct {
static const struct {
REFIID riid;
LPFNCREATEINSTANCE lpfnCI;
} InterfaceTable[] = {
@ -71,15 +69,16 @@ struct {
{&CLSID_DragDropHelper, &IDropTargetHelper_Constructor},
{&CLSID_ControlPanel, &IControlPanel_Constructor},
{&CLSID_AutoComplete, &IAutoComplete_Constructor},
#if 0
{&CLSID_UnixFolder, &UnixFolder_Constructor},
{&CLSID_UnixDosFolder, &UnixDosFolder_Constructor},
{&CLSID_FolderShortcut, &FolderShortcut_Constructor},
{&CLSID_MyDocuments, &MyDocuments_Constructor},
{&CLSID_RecycleBin, &RecycleBin_Constructor},
#endif
{NULL,NULL}
};
/*************************************************************************
* SHCoCreateInstance [SHELL32.102]
*
* NOTES
* exported by ordinal
*/
/* FIXME: this should be SHLWAPI.24 since we can't yet import by ordinal */
@ -99,8 +98,22 @@ DWORD WINAPI __SHGUIDToStringW (REFGUID guid, LPWSTR str)
}
/************************************************************************/
/*************************************************************************
* SHCoCreateInstance [SHELL32.102]
*
* Equivalent to CoCreateInstance. Under Windows 9x this function could sometimes
* use the shell32 built-in "mini-COM" without the need to load ole32.dll - see
* SHLoadOLE for details.
*
* Under wine if a "LoadWithoutCOM" value is present or the object resides in
* shell32.dll the function will load the object manually without the help of ole32
*
* NOTES
* exported by ordinal
*
* SEE ALSO
* CoCreateInstace, SHLoadOLE
*/
HRESULT WINAPI SHCoCreateInstance(
LPCWSTR aclsid,
const CLSID *clsid,
@ -110,7 +123,7 @@ HRESULT WINAPI SHCoCreateInstance(
{
DWORD hres;
IID iid;
CLSID * myclsid = (CLSID*)clsid;
const CLSID * myclsid = clsid;
WCHAR sKeyName[MAX_PATH];
const WCHAR sCLSID[7] = {'C','L','S','I','D','\\','\0'};
WCHAR sClassID[60];
@ -183,7 +196,7 @@ HRESULT WINAPI SHCoCreateInstance(
hres = E_ACCESSDENIED;
goto end;
} else if (! SUCCEEDED(hres = DllGetClassObject(myclsid, &IID_IClassFactory, (LPVOID*)&pcf))) {
TRACE("GetClassObject failed 0x%08lx\n", hres);
TRACE("GetClassObject failed 0x%08x\n", hres);
goto end;
}
@ -202,7 +215,7 @@ HRESULT WINAPI SHCoCreateInstance(
end:
if(hres!=S_OK)
{
ERR("failed (0x%08lx) to create CLSID:%s IID:%s\n",
ERR("failed (0x%08x) to create CLSID:%s IID:%s\n",
hres, shdebugstr_guid(myclsid), shdebugstr_guid(refiid));
ERR("class not found in registry\n");
}
@ -212,7 +225,8 @@ end:
}
/*************************************************************************
* DllGetClassObject [SHELL32.@]
* DllGetClassObject [SHELL32.@]
* SHDllGetClassObject [SHELL32.128]
*/
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv)
{
@ -248,8 +262,16 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv)
/*************************************************************************
* SHCLSIDFromString [SHELL32.147]
*
* Under Windows 9x this was an ANSI version of CLSIDFromString. It also allowed
* to avoid dependency on ole32.dll (see SHLoadOLE for details).
*
* Under Windows NT/2000/XP this is equivalent to CLSIDFromString
*
* NOTES
* exported by ordinal
*
* SEE ALSO
* CLSIDFromString, SHLoadOLE
*/
DWORD WINAPI SHCLSIDFromStringA (LPCSTR clsid, CLSID *id)
{
@ -264,143 +286,19 @@ DWORD WINAPI SHCLSIDFromStringW (LPCWSTR clsid, CLSID *id)
TRACE("(%p(%s) %p)\n", clsid, debugstr_w(clsid), id);
return CLSIDFromString((LPWSTR)clsid, id);
}
DWORD WINAPI SHCLSIDFromStringAW (LPVOID clsid, CLSID *id)
DWORD WINAPI SHCLSIDFromStringAW (LPCVOID clsid, CLSID *id)
{
if (SHELL_OsIsUnicode())
return SHCLSIDFromStringW (clsid, id);
return SHCLSIDFromStringA (clsid, id);
}
/*************************************************************************
* Shell Memory Allocator
*/
/* set the vtable later */
static const IMallocVtbl VT_Shell_IMalloc32;
/* this is the static object instance */
typedef struct {
const IMallocVtbl *lpVtbl;
DWORD dummy;
} _ShellMalloc;
static _ShellMalloc Shell_Malloc = { &VT_Shell_IMalloc32,1};
/* this is the global allocator of shell32 */
static IMalloc * ShellTaskAllocator = NULL;
/******************************************************************************
* IShellMalloc_QueryInterface [VTABLE]
*/
static HRESULT WINAPI IShellMalloc_fnQueryInterface(LPMALLOC iface, REFIID refiid, LPVOID *obj)
{
TRACE("(%s,%p)\n",shdebugstr_guid(refiid),obj);
if (IsEqualIID(refiid, &IID_IUnknown) || IsEqualIID(refiid, &IID_IMalloc)) {
*obj = (LPMALLOC) &Shell_Malloc;
return S_OK;
}
return E_NOINTERFACE;
}
/******************************************************************************
* IShellMalloc_AddRefRelease [VTABLE]
*/
static ULONG WINAPI IShellMalloc_fnAddRefRelease(LPMALLOC iface)
{
return 1;
}
/******************************************************************************
* IShellMalloc_Alloc [VTABLE]
*/
static LPVOID WINAPI IShellMalloc_fnAlloc(LPMALLOC iface, DWORD cb)
{
LPVOID addr;
addr = (LPVOID) LocalAlloc(LMEM_ZEROINIT, cb);
TRACE("(%p,%ld);\n",addr,cb);
return addr;
}
/******************************************************************************
* IShellMalloc_Realloc [VTABLE]
*/
static LPVOID WINAPI IShellMalloc_fnRealloc(LPMALLOC iface, LPVOID pv, DWORD cb)
{
LPVOID addr;
if (pv) {
if (cb) {
addr = (LPVOID) LocalReAlloc((HANDLE) pv, cb, LMEM_ZEROINIT | LMEM_MOVEABLE);
} else {
LocalFree((HANDLE) pv);
addr = NULL;
}
} else {
if (cb) {
addr = (LPVOID) LocalAlloc(LMEM_ZEROINIT, cb);
} else {
addr = NULL;
}
}
TRACE("(%p->%p,%ld)\n",pv,addr,cb);
return addr;
}
/******************************************************************************
* IShellMalloc_Free [VTABLE]
*/
static VOID WINAPI IShellMalloc_fnFree(LPMALLOC iface, LPVOID pv)
{
TRACE("(%p)\n",pv);
LocalFree((HANDLE) pv);
}
/******************************************************************************
* IShellMalloc_GetSize [VTABLE]
*/
static DWORD WINAPI IShellMalloc_fnGetSize(LPMALLOC iface, LPVOID pv)
{
DWORD cb = (DWORD) LocalSize((HANDLE)pv);
TRACE("(%p,%ld)\n", pv, cb);
return cb;
}
/******************************************************************************
* IShellMalloc_DidAlloc [VTABLE]
*/
static INT WINAPI IShellMalloc_fnDidAlloc(LPMALLOC iface, LPVOID pv)
{
TRACE("(%p)\n",pv);
return -1;
}
/******************************************************************************
* IShellMalloc_HeapMinimize [VTABLE]
*/
static VOID WINAPI IShellMalloc_fnHeapMinimize(LPMALLOC iface)
{
TRACE("()\n");
}
static const IMallocVtbl VT_Shell_IMalloc32 =
{
IShellMalloc_fnQueryInterface,
IShellMalloc_fnAddRefRelease,
IShellMalloc_fnAddRefRelease,
IShellMalloc_fnAlloc,
IShellMalloc_fnRealloc,
IShellMalloc_fnFree,
IShellMalloc_fnGetSize,
IShellMalloc_fnDidAlloc,
IShellMalloc_fnHeapMinimize
};
/*************************************************************************
* SHGetMalloc [SHELL32.@]
*
* Return the shell IMalloc interface.
* Equivalent to CoGetMalloc(MEMCTX_TASK, ...). Under Windows 9x this function
* could use the shell32 built-in "mini-COM" without the need to load ole32.dll -
* see SHLoadOLE for details.
*
* PARAMS
* lpmal [O] Destination for IMalloc interface.
@ -409,66 +307,54 @@ static const IMallocVtbl VT_Shell_IMalloc32 =
* Success: S_OK. lpmal contains the shells IMalloc interface.
* Failure. An HRESULT error code.
*
* NOTES
* This function will use CoGetMalloc() if OLE32.DLL is already loaded.
* If not it uses an internal implementation as a fallback.
* SEE ALSO
* CoGetMalloc, SHLoadOLE
*/
HRESULT WINAPI SHGetMalloc(LPMALLOC *lpmal)
{
TRACE("(%p)\n", lpmal);
if (!ShellTaskAllocator)
{
HMODULE hOle32 = GetModuleHandleA("OLE32.DLL");
/* this is very suspect. we should not being using a different
* allocator from deallocator based on something undeterministic
* like whether ole32 is loaded. as it happens currently, they
* both map to the same allocator deep down, but this could
* change in the future. */
if(hOle32) {
CoGetMalloc(MEMCTX_TASK, &ShellTaskAllocator);
TRACE("got ole32 IMalloc\n");
}
if(!ShellTaskAllocator) {
ShellTaskAllocator = (IMalloc* ) &Shell_Malloc;
TRACE("use fallback allocator\n");
}
}
*lpmal = ShellTaskAllocator;
return S_OK;
return CoGetMalloc(MEMCTX_TASK, lpmal);
}
/*************************************************************************
* SHAlloc [SHELL32.196]
*
* Equivalent to CoTaskMemAlloc. Under Windows 9x this function could use
* the shell32 built-in "mini-COM" without the need to load ole32.dll -
* see SHLoadOLE for details.
*
* NOTES
* exported by ordinal
*
* SEE ALSO
* CoTaskMemAlloc, SHLoadOLE
*/
LPVOID WINAPI SHAlloc(DWORD len)
{
IMalloc * ppv;
LPBYTE ret;
LPVOID ret;
if (!ShellTaskAllocator) SHGetMalloc(&ppv);
ret = (LPVOID) IMalloc_Alloc(ShellTaskAllocator, len);
TRACE("%lu bytes at %p\n",len, ret);
return (LPVOID)ret;
ret = CoTaskMemAlloc(len);
TRACE("%u bytes at %p\n",len, ret);
return ret;
}
/*************************************************************************
* SHFree [SHELL32.195]
*
* Equivalent to CoTaskMemFree. Under Windows 9x this function could use
* the shell32 built-in "mini-COM" without the need to load ole32.dll -
* see SHLoadOLE for details.
*
* NOTES
* exported by ordinal
*
* SEE ALSO
* CoTaskMemFree, SHLoadOLE
*/
void WINAPI SHFree(LPVOID pv)
{
IMalloc * ppv;
TRACE("%p\n",pv);
if (!ShellTaskAllocator) SHGetMalloc(&ppv);
IMalloc_Free(ShellTaskAllocator, pv);
CoTaskMemFree(pv);
}
/*************************************************************************
@ -513,7 +399,7 @@ static const IClassFactoryVtbl dclfvt;
* IDefClF_fnConstructor
*/
IClassFactory * IDefClF_fnConstructor(LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, REFIID riidInst)
static IClassFactory * IDefClF_fnConstructor(LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, REFIID riidInst)
{
IDefClFImpl* lpclf;
@ -558,7 +444,7 @@ static ULONG WINAPI IDefClF_fnAddRef(LPCLASSFACTORY iface)
IDefClFImpl *This = (IDefClFImpl *)iface;
ULONG refCount = InterlockedIncrement(&This->ref);
TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
TRACE("(%p)->(count=%u)\n", This, refCount - 1);
return refCount;
}
@ -570,7 +456,7 @@ static ULONG WINAPI IDefClF_fnRelease(LPCLASSFACTORY iface)
IDefClFImpl *This = (IDefClFImpl *)iface;
ULONG refCount = InterlockedDecrement(&This->ref);
TRACE("(%p)->(count=%lu)\n", This, refCount + 1);
TRACE("(%p)->(count=%u)\n", This, refCount + 1);
if (!refCount)
{
@ -737,10 +623,8 @@ UINT WINAPI DragQueryFileA(
}
i = strlen(lpDrop);
i++;
if (!lpszFile ) goto end; /* needed buffer size */
i = (lLength > i) ? i : lLength;
lstrcpynA (lpszFile, lpDrop, i);
lstrcpynA (lpszFile, lpDrop, lLength);
end:
GlobalUnlock(hDrop);
return i;
@ -795,11 +679,8 @@ UINT WINAPI DragQueryFileW(
}
i = strlenW(lpwDrop);
i++;
if ( !lpszwFile) goto end; /* needed buffer size */
i = (lLength > i) ? i : lLength;
lstrcpynW (lpszwFile, lpwDrop, i);
lstrcpynW (lpszwFile, lpwDrop, lLength);
end:
GlobalUnlock(hDrop);
return i;

View file

@ -17,7 +17,7 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
@ -104,7 +104,7 @@ DWORD WINAPI ParseFieldA(
LPSTR dst,
DWORD len)
{
WARN("(%s,0x%08lx,%p,%ld) semi-stub.\n",debugstr_a(src),nField,dst,len);
WARN("(%s,0x%08x,%p,%d) semi-stub.\n",debugstr_a(src),nField,dst,len);
if (!src || !src[0] || !dst || !len)
return 0;
@ -134,7 +134,7 @@ DWORD WINAPI ParseFieldA(
*/
DWORD WINAPI ParseFieldW(LPCWSTR src, DWORD nField, LPWSTR dst, DWORD len)
{
WARN("(%s,0x%08lx,%p,%ld) semi-stub.\n", debugstr_w(src), nField, dst, len);
WARN("(%s,0x%08x,%p,%d) semi-stub.\n", debugstr_w(src), nField, dst, len);
if (!src || !src[0] || !dst || !len)
return 0;
@ -183,7 +183,7 @@ BOOL WINAPI GetFileNameFromBrowse(
OPENFILENAMEA ofn;
BOOL ret;
TRACE("%p, %s, %ld, %s, %s, %s, %s)\n",
TRACE("%p, %s, %d, %s, %s, %s, %s)\n",
hwndOwner, lpstrFile, nMaxFile, lpstrInitialDir, lpstrDefExt,
lpstrFilter, lpstrTitle);
@ -220,7 +220,7 @@ VOID WINAPI SHGetSetSettings(LPSHELLSTATE lpss, DWORD dwMask, BOOL bSet)
{
if(bSet)
{
FIXME("%p 0x%08lx TRUE\n", lpss, dwMask);
FIXME("%p 0x%08x TRUE\n", lpss, dwMask);
}
else
{
@ -242,7 +242,7 @@ VOID WINAPI SHGetSettings(LPSHELLFLAGSTATE lpsfs, DWORD dwMask)
DWORD dwData;
DWORD dwDataSize = sizeof (DWORD);
TRACE("(%p 0x%08lx)\n",lpsfs,dwMask);
TRACE("(%p 0x%08x)\n",lpsfs,dwMask);
if (RegCreateKeyExA(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced",
0, 0, 0, KEY_ALL_ACCESS, 0, &hKey, 0))
@ -330,7 +330,7 @@ BOOL WINAPI RegisterShellHook(
HWND hWnd,
DWORD dwType)
{
FIXME("(%p,0x%08lx):stub.\n",hWnd, dwType);
FIXME("(%p,0x%08x):stub.\n",hWnd, dwType);
return TRUE;
}
@ -338,6 +338,12 @@ BOOL WINAPI RegisterShellHook(
* ShellMessageBoxW [SHELL32.182]
*
* See ShellMessageBoxA.
*
* NOTE:
* shlwapi.ShellMessageBoxWrapW is a duplicate of shell32.ShellMessageBoxW
* because we can't forward to it in the .spec file since it's exported by
* ordinal. If you change the implementation here please update the code in
* shlwapi as well.
*/
int WINAPIV ShellMessageBoxW(
HINSTANCE hInstance,
@ -348,7 +354,8 @@ int WINAPIV ShellMessageBoxW(
...)
{
WCHAR szText[100],szTitle[100];
LPCWSTR pszText = szText, pszTitle = szTitle, pszTemp;
LPCWSTR pszText = szText, pszTitle = szTitle;
LPWSTR pszTemp;
va_list args;
int ret;
@ -405,7 +412,8 @@ int WINAPIV ShellMessageBoxA(
...)
{
char szText[100],szTitle[100];
LPCSTR pszText = szText, pszTitle = szTitle, pszTemp;
LPCSTR pszText = szText, pszTitle = szTitle;
LPSTR pszTemp;
va_list args;
int ret;
@ -438,8 +446,15 @@ int WINAPIV ShellMessageBoxA(
/*************************************************************************
* SHRegisterDragDrop [SHELL32.86]
*
* Probably equivalent to RegisterDragDrop but under Windows 9x it could use the
* shell32 built-in "mini-COM" without the need to load ole32.dll - see SHLoadOLE
* for details
*
* NOTES
* exported by ordinal
*
* SEE ALSO
* RegisterDragDrop, SHLoadOLE
*/
HRESULT WINAPI SHRegisterDragDrop(
HWND hWnd,
@ -452,8 +467,15 @@ HRESULT WINAPI SHRegisterDragDrop(
/*************************************************************************
* SHRevokeDragDrop [SHELL32.87]
*
* Probably equivalent to RevokeDragDrop but under Windows 9x it could use the
* shell32 built-in "mini-COM" without the need to load ole32.dll - see SHLoadOLE
* for details
*
* NOTES
* exported by ordinal
*
* SEE ALSO
* RevokeDragDrop, SHLoadOLE
*/
HRESULT WINAPI SHRevokeDragDrop(HWND hWnd)
{
@ -464,8 +486,15 @@ HRESULT WINAPI SHRevokeDragDrop(HWND hWnd)
/*************************************************************************
* SHDoDragDrop [SHELL32.88]
*
* Probably equivalent to DoDragDrop but under Windows 9x it could use the
* shell32 built-in "mini-COM" without the need to load ole32.dll - see SHLoadOLE
* for details
*
* NOTES
* exported by ordinal
*
* SEE ALSO
* DoDragDrop, SHLoadOLE
*/
HRESULT WINAPI SHDoDragDrop(
HWND hWnd,
@ -474,7 +503,7 @@ HRESULT WINAPI SHDoDragDrop(
DWORD dwOKEffect,
LPDWORD pdwEffect)
{
FIXME("(%p %p %p 0x%08lx %p):stub.\n",
FIXME("(%p %p %p 0x%08x %p):stub.\n",
hWnd, lpDataObject, lpDropSource, dwOKEffect, pdwEffect);
return DoDragDrop(lpDataObject, lpDropSource, dwOKEffect, pdwEffect);
}
@ -490,7 +519,7 @@ WORD WINAPI ArrangeWindows(
WORD cKids,
CONST HWND * lpKids)
{
FIXME("(%p 0x%08lx %p 0x%04x %p):stub.\n",
FIXME("(%p 0x%08x %p 0x%04x %p):stub.\n",
hwndParent, dwReserved, lpRect, cKids, lpKids);
return 0;
}
@ -504,7 +533,7 @@ WORD WINAPI ArrangeWindows(
DWORD WINAPI
SignalFileOpen (DWORD dwParam1)
{
FIXME("(0x%08lx):stub.\n", dwParam1);
FIXME("(0x%08x):stub.\n", dwParam1);
return 0;
}
@ -522,7 +551,7 @@ SignalFileOpen (DWORD dwParam1)
* RETURNS
* result of the SHQueryValueEx call
*/
static INT SHADD_get_policy(LPSTR policy, LPDWORD type, LPVOID buffer, LPDWORD len)
static INT SHADD_get_policy(LPCSTR policy, LPDWORD type, LPVOID buffer, LPDWORD len)
{
HKEY Policy_basekey;
INT ret;
@ -580,7 +609,7 @@ static INT CALLBACK SHADD_compare_mru(LPCVOID data1, LPCVOID data2, DWORD cbData
* RETURNS
* position within MRU list that data was added.
*/
static INT SHADD_create_add_mru_data(HANDLE mruhandle, LPSTR doc_name, LPSTR new_lnk_name,
static INT SHADD_create_add_mru_data(HANDLE mruhandle, LPCSTR doc_name, LPCSTR new_lnk_name,
LPSTR buffer, INT *len)
{
LPSTR ptr;
@ -680,12 +709,12 @@ void WINAPI SHAddToRecentDocs (UINT uFlags,LPCVOID pv)
if (ret == ERROR_SUCCESS) {
if (!( (type == REG_DWORD) ||
((type == REG_BINARY) && (datalen == 4)) )) {
ERR("Error policy data for \"NoRecentDocsHistory\" not formatted correctly, type=%ld, len=%ld\n",
ERR("Error policy data for \"NoRecentDocsHistory\" not formatted correctly, type=%d, len=%d\n",
type, datalen);
return;
}
TRACE("policy value for NoRecentDocsHistory = %08lx\n", data[0]);
TRACE("policy value for NoRecentDocsHistory = %08x\n", data[0]);
/* now test the actual policy value */
if ( data[0] != 0)
return;
@ -814,7 +843,7 @@ void WINAPI SHAddToRecentDocs (UINT uFlags,LPCVOID pv)
mymru.dwFlags = MRUF_BINARY_LIST | MRUF_DELAYED_SAVE;
mymru.hKey = HCUbasekey;
mymru.lpszSubKey = "RecentDocs";
mymru.lpfnCompare = &SHADD_compare_mru;
mymru.lpfnCompare = (PROC)SHADD_compare_mru;
mruhandle = CreateMRUListA(&mymru);
if (!mruhandle) {
/* MRU failed */
@ -845,7 +874,7 @@ void WINAPI SHAddToRecentDocs (UINT uFlags,LPCVOID pv)
if (!DeleteFileA(old_lnk_name)) {
if ((attr = GetFileAttributesA(old_lnk_name)) == INVALID_FILE_ATTRIBUTES) {
if ((err = GetLastError()) != ERROR_FILE_NOT_FOUND) {
ERR("Delete for %s failed, err=%d, attr=%08lx\n",
ERR("Delete for %s failed, err=%d, attr=%08x\n",
old_lnk_name, err, attr);
}
else {
@ -854,7 +883,7 @@ void WINAPI SHAddToRecentDocs (UINT uFlags,LPCVOID pv)
}
}
else {
ERR("Delete for %s failed, attr=%08lx\n",
ERR("Delete for %s failed, attr=%08x\n",
old_lnk_name, attr);
}
}
@ -917,7 +946,7 @@ void WINAPI SHAddToRecentDocs (UINT uFlags,LPCVOID pv)
(LPVOID *)&pPf);
if(FAILED(hres)) {
/* bombed */
ERR("failed QueryInterface for IPersistFile %08lx\n", hres);
ERR("failed QueryInterface for IPersistFile %08x\n", hres);
goto fail;
}
@ -929,7 +958,7 @@ void WINAPI SHAddToRecentDocs (UINT uFlags,LPCVOID pv)
}
if(FAILED(hres)) {
/* bombed */
ERR("failed Set{IDList|Path} %08lx\n", hres);
ERR("failed Set{IDList|Path} %08x\n", hres);
goto fail;
}
@ -938,7 +967,7 @@ void WINAPI SHAddToRecentDocs (UINT uFlags,LPCVOID pv)
hres = IShellLinkA_SetDescription(psl, desc);
if(FAILED(hres)) {
/* bombed */
ERR("failed SetDescription %08lx\n", hres);
ERR("failed SetDescription %08x\n", hres);
goto fail;
}
@ -948,7 +977,7 @@ void WINAPI SHAddToRecentDocs (UINT uFlags,LPCVOID pv)
hres = IPersistFile_Save(pPf, widelink, TRUE);
if(FAILED(hres)) {
/* bombed */
ERR("failed IPersistFile::Save %08lx\n", hres);
ERR("failed IPersistFile::Save %08x\n", hres);
IPersistFile_Release(pPf);
IShellLinkA_Release(psl);
goto fail;
@ -956,11 +985,11 @@ void WINAPI SHAddToRecentDocs (UINT uFlags,LPCVOID pv)
hres = IPersistFile_SaveCompleted(pPf, widelink);
IPersistFile_Release(pPf);
IShellLinkA_Release(psl);
TRACE("shortcut %s has been created, result=%08lx\n",
TRACE("shortcut %s has been created, result=%08x\n",
new_lnk_filepath, hres);
}
else {
ERR("CoCreateInstance failed, hres=%08lx\n", hres);
ERR("CoCreateInstance failed, hres=%08x\n", hres);
}
}
@ -991,8 +1020,8 @@ HRESULT WINAPI SHCreateShellFolderViewEx(
IShellView * psf;
HRESULT hRes;
TRACE("sf=%p cb=%p mode=0x%08x parm=%p\n",
psvcbi->pshf, psvcbi->pfnCallback,
TRACE("sf=%p pidl=%p cb=%p mode=0x%08x parm=%p\n",
psvcbi->pshf, psvcbi->pidl, psvcbi->pfnCallback,
psvcbi->fvm, psvcbi->psvOuter);
psf = IShellView_Constructor(psvcbi->pshf);
@ -1011,7 +1040,7 @@ HRESULT WINAPI SHCreateShellFolderViewEx(
*
*/
HRESULT WINAPI SHWinHelp (DWORD v, DWORD w, DWORD x, DWORD z)
{ FIXME("0x%08lx 0x%08lx 0x%08lx 0x%08lx stub\n",v,w,x,z);
{ FIXME("0x%08x 0x%08x 0x%08x 0x%08x stub\n",v,w,x,z);
return 0;
}
/*************************************************************************
@ -1019,7 +1048,7 @@ HRESULT WINAPI SHWinHelp (DWORD v, DWORD w, DWORD x, DWORD z)
*
*/
HRESULT WINAPI SHRunControlPanel (DWORD x, DWORD z)
{ FIXME("0x%08lx 0x%08lx stub\n",x,z);
{ FIXME("0x%08x 0x%08x stub\n",x,z);
return 0;
}
@ -1040,7 +1069,7 @@ VOID WINAPI SHSetInstanceExplorer (LPUNKNOWN lpUnknown)
* NOTES
* gets the interface pointer of the explorer and a reference
*/
HRESULT WINAPI SHGetInstanceExplorer (LPUNKNOWN * lpUnknown)
HRESULT WINAPI SHGetInstanceExplorer (IUnknown **lpUnknown)
{ TRACE("%p\n", lpUnknown);
*lpUnknown = SHELL32_IExplorerInterface;
@ -1054,12 +1083,20 @@ HRESULT WINAPI SHGetInstanceExplorer (LPUNKNOWN * lpUnknown)
/*************************************************************************
* SHFreeUnusedLibraries [SHELL32.123]
*
* Probably equivalent to CoFreeUnusedLibraries but under Windows 9x it could use
* the shell32 built-in "mini-COM" without the need to load ole32.dll - see SHLoadOLE
* for details
*
* NOTES
* exported by name
* exported by ordinal
*
* SEE ALSO
* CoFreeUnusedLibraries, SHLoadOLE
*/
void WINAPI SHFreeUnusedLibraries (void)
{
FIXME("stub\n");
CoFreeUnusedLibraries();
}
/*************************************************************************
* DAD_AutoScroll [SHELL32.129]
@ -1085,7 +1122,7 @@ BOOL WINAPI DAD_DragEnter(HWND hwnd)
*/
BOOL WINAPI DAD_DragEnterEx(HWND hwnd, POINT p)
{
FIXME("hwnd = %p (%ld,%ld)\n",hwnd,p.x,p.y);
FIXME("hwnd = %p (%d,%d)\n",hwnd,p.x,p.y);
return FALSE;
}
/*************************************************************************
@ -1094,7 +1131,7 @@ BOOL WINAPI DAD_DragEnterEx(HWND hwnd, POINT p)
*/
BOOL WINAPI DAD_DragMove(POINT p)
{
FIXME("(%ld,%ld)\n",p.x,p.y);
FIXME("(%d,%d)\n",p.x,p.y);
return FALSE;
}
/*************************************************************************
@ -1225,17 +1262,10 @@ BOOL WINAPI FileIconInit(BOOL bFullInit)
return 0;
}
/*************************************************************************
* IsUserAnAdmin [SHELL32.680] NT 4.0
* IsUserAdmin [SHELL32.680] NT 4.0
*
* Checks whether the current user is a member of the Administrators group.
*
* PARAMS
* None
*
* RETURNS
* Success: TRUE
* Failure: FALSE
*/
BOOL WINAPI IsUserAnAdmin(VOID)
{
SID_IDENTIFIER_AUTHORITY Authority = {SECURITY_NT_AUTHORITY};
@ -1349,15 +1379,31 @@ BOOL WINAPI SHFreeShared(HANDLE hShared, DWORD dwProcId)
* SetAppStartingCursor [SHELL32.99]
*/
HRESULT WINAPI SetAppStartingCursor(HWND u, DWORD v)
{ FIXME("hwnd=%p 0x%04lx stub\n",u,v );
{ FIXME("hwnd=%p 0x%04x stub\n",u,v );
return 0;
}
/*************************************************************************
* SHLoadOLE [SHELL32.151]
*
* To reduce the memory usage of Windows 95, its shell32 contained an
* internal implementation of a part of COM (see e.g. SHGetMalloc, SHCoCreateInstance,
* SHRegisterDragDrop etc.) that allowed to use in-process STA objects without
* the need to load OLE32.DLL. If OLE32.DLL was already loaded, the SH* function
* would just call the Co* functions.
*
* The SHLoadOLE was called when OLE32.DLL was being loaded to transfer all the
* information from the shell32 "mini-COM" to ole32.dll.
*
* See http://blogs.msdn.com/oldnewthing/archive/2004/07/05/173226.aspx for a
* detailed description.
*
* Under wine ole32.dll is always loaded as it is imported by shlwapi.dll which is
* imported by shell32 and no "mini-COM" is used (except for the "LoadWithoutCOM"
* hack in SHCoCreateInstance)
*/
HRESULT WINAPI SHLoadOLE(LPARAM lParam)
{ FIXME("0x%04lx stub\n",lParam);
{ FIXME("0x%08lx stub\n",lParam);
return S_OK;
}
/*************************************************************************
@ -1365,7 +1411,15 @@ HRESULT WINAPI SHLoadOLE(LPARAM lParam)
*
*/
HRESULT WINAPI DriveType(DWORD u)
{ FIXME("0x%04lx stub\n",u);
{ FIXME("0x%04x stub\n",u);
return 0;
}
/*************************************************************************
* InvalidateDriveType [SHELL32.65]
*
*/
int WINAPI InvalidateDriveType(int u)
{ FIXME("0x%08x stub\n",u);
return 0;
}
/*************************************************************************
@ -1406,7 +1460,7 @@ BOOL WINAPI SHWaitForFileToOpen(
DWORD dwFlags,
DWORD dwTimeout)
{
FIXME("%p 0x%08lx 0x%08lx stub\n", pidl, dwFlags, dwTimeout);
FIXME("%p 0x%08x 0x%08x stub\n", pidl, dwFlags, dwTimeout);
return 0;
}
@ -1441,7 +1495,7 @@ DWORD WINAPI RLBuildListOfPaths (void)
*/
HRESULT WINAPI SHValidateUNC (DWORD x, DWORD y, DWORD z)
{
FIXME("0x%08lx 0x%08lx 0x%08lx stub\n",x,y,z);
FIXME("0x%08x 0x%08x 0x%08x stub\n",x,y,z);
return 0;
}
@ -1526,22 +1580,68 @@ DWORD WINAPI SHELL32_714(LPVOID x)
return 0;
}
typedef struct _PSXA
{
UINT uiCount;
UINT uiAllocated;
IShellPropSheetExt *pspsx[1];
} PSXA, *PPSXA;
typedef struct _PSXA_CALL
{
LPFNADDPROPSHEETPAGE lpfnAddReplaceWith;
LPARAM lParam;
BOOL bCalled;
BOOL bMultiple;
UINT uiCount;
} PSXA_CALL, *PPSXA_CALL;
static BOOL CALLBACK PsxaCall(HPROPSHEETPAGE hpage, LPARAM lParam)
{
PPSXA_CALL Call = (PPSXA_CALL)lParam;
if (Call != NULL)
{
if ((Call->bMultiple || !Call->bCalled) &&
Call->lpfnAddReplaceWith(hpage, Call->lParam))
{
Call->bCalled = TRUE;
Call->uiCount++;
return TRUE;
}
}
return FALSE;
}
/*************************************************************************
* SHAddFromPropSheetExtArray [SHELL32.167]
*/
UINT WINAPI SHAddFromPropSheetExtArray(HPSXA hpsxa, LPFNADDPROPSHEETPAGE lpfnAddPage, LPARAM lParam)
{
FIXME("(%p,%p,%08lx)stub\n", hpsxa, lpfnAddPage, lParam);
return 0;
}
PSXA_CALL Call;
UINT i;
PPSXA psxa = (PPSXA)hpsxa;
/*************************************************************************
* SHCreatePropSheetExtArray [SHELL32.168]
*/
HPSXA WINAPI SHCreatePropSheetExtArray(HKEY hKey, LPCWSTR pszSubKey, UINT max_iface)
{
FIXME("(%p,%s,%u)stub\n", hKey, debugstr_w(pszSubKey), max_iface);
return NULL;
TRACE("(%p,%p,%08lx)\n", hpsxa, lpfnAddPage, lParam);
if (psxa)
{
ZeroMemory(&Call, sizeof(Call));
Call.lpfnAddReplaceWith = lpfnAddPage;
Call.lParam = lParam;
Call.bMultiple = TRUE;
/* Call the AddPage method of all registered IShellPropSheetExt interfaces */
for (i = 0; i != psxa->uiCount; i++)
{
psxa->pspsx[i]->lpVtbl->AddPages(psxa->pspsx[i], PsxaCall, (LPARAM)&Call);
}
return Call.uiCount;
}
return 0;
}
/*************************************************************************
@ -1549,17 +1649,142 @@ HPSXA WINAPI SHCreatePropSheetExtArray(HKEY hKey, LPCWSTR pszSubKey, UINT max_if
*/
HPSXA WINAPI SHCreatePropSheetExtArrayEx(HKEY hKey, LPCWSTR pszSubKey, UINT max_iface, IDataObject *pDataObj)
{
FIXME("(%p,%s,%u,%p)stub\n", hKey, debugstr_w(pszSubKey), max_iface, pDataObj);
return NULL;
static const WCHAR szPropSheetSubKey[] = {'s','h','e','l','l','e','x','\\','P','r','o','p','e','r','t','y','S','h','e','e','t','H','a','n','d','l','e','r','s',0};
WCHAR szHandler[64];
DWORD dwHandlerLen;
WCHAR szClsidHandler[39];
DWORD dwClsidSize;
CLSID clsid;
LONG lRet;
DWORD dwIndex;
IShellExtInit *psxi;
IShellPropSheetExt *pspsx;
HKEY hkBase, hkPropSheetHandlers;
PPSXA psxa = NULL;
TRACE("(%p,%s,%u)\n", hKey, debugstr_w(pszSubKey), max_iface);
if (max_iface == 0)
return NULL;
/* Open the registry key */
lRet = RegOpenKeyW(hKey, pszSubKey, &hkBase);
if (lRet != ERROR_SUCCESS)
return NULL;
lRet = RegOpenKeyExW(hkBase, szPropSheetSubKey, 0, KEY_ENUMERATE_SUB_KEYS, &hkPropSheetHandlers);
RegCloseKey(hkBase);
if (lRet == ERROR_SUCCESS)
{
/* Create and initialize the Property Sheet Extensions Array */
psxa = (PPSXA)LocalAlloc(LMEM_FIXED, FIELD_OFFSET(PSXA, pspsx[max_iface]));
if (psxa)
{
ZeroMemory(psxa, FIELD_OFFSET(PSXA, pspsx[max_iface]));
psxa->uiAllocated = max_iface;
/* Enumerate all subkeys and attempt to load the shell extensions */
dwIndex = 0;
do
{
dwHandlerLen = sizeof(szHandler) / sizeof(szHandler[0]);
lRet = RegEnumKeyExW(hkPropSheetHandlers, dwIndex++, szHandler, &dwHandlerLen, NULL, NULL, NULL, NULL);
if (lRet != ERROR_SUCCESS)
{
if (lRet == ERROR_MORE_DATA)
continue;
if (lRet == ERROR_NO_MORE_ITEMS)
lRet = ERROR_SUCCESS;
break;
}
dwClsidSize = sizeof(szClsidHandler);
if (SHGetValueW(hkPropSheetHandlers, szHandler, NULL, NULL, szClsidHandler, &dwClsidSize) == ERROR_SUCCESS)
{
/* Force a NULL-termination and convert the string */
szClsidHandler[(sizeof(szClsidHandler) / sizeof(szClsidHandler[0])) - 1] = 0;
if (SUCCEEDED(SHCLSIDFromStringW(szClsidHandler, &clsid)))
{
/* Attempt to get an IShellPropSheetExt and an IShellExtInit instance.
Only if both interfaces are supported it's a real shell extension.
Then call IShellExtInit's Initialize method. */
if (SUCCEEDED(CoCreateInstance(&clsid, NULL, CLSCTX_INPROC_SERVER/* | CLSCTX_NO_CODE_DOWNLOAD */, &IID_IShellPropSheetExt, (LPVOID *)&pspsx)))
{
if (SUCCEEDED(pspsx->lpVtbl->QueryInterface(pspsx, &IID_IShellExtInit, (PVOID *)&psxi)))
{
if (SUCCEEDED(psxi->lpVtbl->Initialize(psxi, NULL, pDataObj, hKey)))
{
/* Add the IShellPropSheetExt instance to the array */
psxa->pspsx[psxa->uiCount++] = pspsx;
}
else
{
psxi->lpVtbl->Release(psxi);
pspsx->lpVtbl->Release(pspsx);
}
}
else
pspsx->lpVtbl->Release(pspsx);
}
}
}
} while (psxa->uiCount != psxa->uiAllocated);
}
else
lRet = ERROR_NOT_ENOUGH_MEMORY;
RegCloseKey(hkPropSheetHandlers);
}
if (lRet != ERROR_SUCCESS && psxa)
{
SHDestroyPropSheetExtArray((HPSXA)psxa);
psxa = NULL;
}
return (HPSXA)psxa;
}
/*************************************************************************
* SHCreatePropSheetExtArray [SHELL32.168]
*/
HPSXA WINAPI SHCreatePropSheetExtArray(HKEY hKey, LPCWSTR pszSubKey, UINT max_iface)
{
return SHCreatePropSheetExtArrayEx(hKey, pszSubKey, max_iface, NULL);
}
/*************************************************************************
* SHReplaceFromPropSheetExtArray [SHELL32.170]
*/
UINT WINAPI SHReplaceFromPropSheetExtArray(HPSXA hpsxa, UINT uPageID, LPFNADDPROPSHEETPAGE lpfnReplaceWith, LPARAM lParam)
{
FIXME("(%p,%u,%p,%08lx)stub\n", hpsxa, uPageID, lpfnReplaceWith, lParam);
return 0;
PSXA_CALL Call;
UINT i;
PPSXA psxa = (PPSXA)hpsxa;
TRACE("(%p,%u,%p,%08lx)\n", hpsxa, uPageID, lpfnReplaceWith, lParam);
if (psxa)
{
ZeroMemory(&Call, sizeof(Call));
Call.lpfnAddReplaceWith = lpfnReplaceWith;
Call.lParam = lParam;
/* Call the ReplacePage method of all registered IShellPropSheetExt interfaces.
Each shell extension is only allowed to call the callback once during the callback. */
for (i = 0; i != psxa->uiCount; i++)
{
Call.bCalled = FALSE;
psxa->pspsx[i]->lpVtbl->ReplacePage(psxa->pspsx[i], uPageID, PsxaCall, (LPARAM)&Call);
}
return Call.uiCount;
}
return 0;
}
/*************************************************************************
@ -1567,7 +1792,20 @@ UINT WINAPI SHReplaceFromPropSheetExtArray(HPSXA hpsxa, UINT uPageID, LPFNADDPRO
*/
void WINAPI SHDestroyPropSheetExtArray(HPSXA hpsxa)
{
FIXME("(%p)stub\n", hpsxa);
UINT i;
PPSXA psxa = (PPSXA)hpsxa;
TRACE("(%p)\n", hpsxa);
if (psxa)
{
for (i = 0; i != psxa->uiCount; i++)
{
psxa->pspsx[i]->lpVtbl->Release(psxa->pspsx[i]);
}
LocalFree((HLOCAL)psxa);
}
}
/*************************************************************************
@ -1584,7 +1822,7 @@ HRESULT WINAPI CIDLData_CreateFromIDArray(
UINT i;
HWND hwnd = 0; /*FIXME: who should be hwnd of owner? set to desktop */
TRACE("(%p, %ld, %p, %p)\n", pidlFolder, cpidlFiles, lppidlFiles, ppdataObject);
TRACE("(%p, %d, %p, %p)\n", pidlFolder, cpidlFiles, lppidlFiles, ppdataObject);
if (TRACE_ON(pidl))
{
pdump (pidlFolder);
@ -1609,7 +1847,7 @@ HRESULT WINAPI SHCreateStdEnumFmtEtc(
{
IEnumFORMATETC *pef;
HRESULT hRes;
TRACE("cf=%ld fe=%p pef=%p\n", cFormats, lpFormats, ppenumFormatetc);
TRACE("cf=%d fe=%p pef=%p\n", cFormats, lpFormats, ppenumFormatetc);
pef = IEnumFORMATETC_Constructor(cFormats, lpFormats);
if (!pef)
@ -1630,7 +1868,7 @@ HRESULT WINAPI SHELL32_256(LPDWORD lpdw0, LPDWORD lpdw1)
{
HRESULT ret = S_OK;
FIXME("stub %p 0x%08lx %p\n", lpdw0, lpdw0 ? *lpdw0 : 0, lpdw1);
FIXME("stub %p 0x%08x %p\n", lpdw0, lpdw0 ? *lpdw0 : 0, lpdw1);
if (!lpdw0 || *lpdw0 != 0x10)
ret = E_INVALIDARG;
@ -1699,13 +1937,9 @@ INT WINAPI SHHandleUpdateImage(LPCITEMIDLIST pidlExtra)
return -1;
}
BOOL WINAPI SHObjectProperties(HWND hwnd, DWORD dwType, LPCWSTR szObject, LPCWSTR szPage)
{
FIXME("%p, 0x%08lx, %s, %s - stub\n", hwnd, dwType, debugstr_w(szObject), debugstr_w(szPage));
MessageBox (NULL, TEXT("SHObjectProperties-WINAPI:\n\nTODO: Add the function code."), TEXT("SHObjectProperties; Dev: frik85"), 0);
FIXME("%p, 0x%08x, %s, %s - stub\n", hwnd, dwType, debugstr_w(szObject), debugstr_w(szPage));
return TRUE;
}
@ -1730,21 +1964,21 @@ BOOL WINAPI SHGetNewLinkInfoW(LPCWSTR pszLinkTo, LPCWSTR pszDir, LPWSTR pszName,
HRESULT WINAPI SHStartNetConnectionDialog(HWND hwnd, LPCSTR pszRemoteName, DWORD dwType)
{
FIXME("%p, %s, 0x%08lx - stub\n", hwnd, debugstr_a(pszRemoteName), dwType);
FIXME("%p, %s, 0x%08x - stub\n", hwnd, debugstr_a(pszRemoteName), dwType);
return S_OK;
}
HRESULT WINAPI SHEmptyRecycleBinA(HWND hwnd, LPCSTR pszRootPath, DWORD dwFlags)
{
FIXME("%p, %s, 0x%08lx - stub\n", hwnd, debugstr_a(pszRootPath), dwFlags);
FIXME("%p, %s, 0x%08x - stub\n", hwnd, debugstr_a(pszRootPath), dwFlags);
return S_OK;
}
HRESULT WINAPI SHEmptyRecycleBinW(HWND hwnd, LPCWSTR pszRootPath, DWORD dwFlags)
{
FIXME("%p, %s, 0x%08lx - stub\n", hwnd, debugstr_w(pszRootPath), dwFlags);
FIXME("%p, %s, 0x%08x - stub\n", hwnd, debugstr_w(pszRootPath), dwFlags);
return S_OK;
}
@ -1775,3 +2009,13 @@ HRESULT WINAPI SHQueryRecycleBinW(LPCWSTR pszRootPath, LPSHQUERYRBINFO pSHQueryR
return S_OK;
}
/*************************************************************************
* SHSetLocalizedName (SHELL32.@)
*/
HRESULT WINAPI SHSetLocalizedName(LPWSTR pszPath, LPCWSTR pszResModule, int idsRes)
{
FIXME("%p, %s, %d - stub\n", pszPath, debugstr_w(pszResModule), idsRes);
return S_OK;
}

View file

@ -16,7 +16,7 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*
* NOTES:
*
@ -24,9 +24,11 @@
*
*/
#define symlink(A, B)
#include "config.h"
#include "wine/port.h"
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <ctype.h>
@ -487,7 +489,7 @@ BOOL WINAPI PathMakeUniqueNameA(
LPCSTR lpszLongName,
LPCSTR lpszPathName)
{
FIXME("%p %lu %s %s %s stub\n",
FIXME("%p %u %s %s %s stub\n",
lpszBuffer, dwBuffSize, debugstr_a(lpszShortName),
debugstr_a(lpszLongName), debugstr_a(lpszPathName));
return TRUE;
@ -503,7 +505,7 @@ BOOL WINAPI PathMakeUniqueNameW(
LPCWSTR lpszLongName,
LPCWSTR lpszPathName)
{
FIXME("%p %lu %s %s %s stub\n",
FIXME("%p %u %s %s %s stub\n",
lpszBuffer, dwBuffSize, debugstr_w(lpszShortName),
debugstr_w(lpszLongName), debugstr_w(lpszPathName));
return TRUE;
@ -549,7 +551,7 @@ BOOL WINAPI PathYetAnotherMakeUniqueName(
/*************************************************************************
* PathFindOnPath [SHELL32.145]
*/
BOOL WINAPI PathFindOnPathAW(LPVOID sFile, LPCVOID sOtherDirs)
BOOL WINAPI PathFindOnPathAW(LPVOID sFile, LPCVOID *sOtherDirs)
{
if (SHELL_OsIsUnicode())
return PathFindOnPathW(sFile, (LPCWSTR *)sOtherDirs);
@ -599,7 +601,7 @@ int WINAPI PathCleanupSpec( LPCWSTR lpszPathW, LPWSTR lpszFileW )
else
{
LPSTR lpszFileA = (LPSTR)lpszFileW;
LPCSTR lpszPathA = (LPSTR)lpszPathW;
LPCSTR lpszPathA = (LPCSTR)lpszPathW;
LPSTR p = lpszFileA;
TRACE("Cleanup %s\n",debugstr_a(lpszFileA));
@ -666,7 +668,7 @@ BOOL WINAPI PathResolveA(
LPCSTR *alpszPaths,
DWORD dwFlags)
{
FIXME("(%s,%p,0x%08lx),stub!\n",
FIXME("(%s,%p,0x%08x),stub!\n",
lpszPath, *alpszPaths, dwFlags);
return 0;
}
@ -679,7 +681,7 @@ BOOL WINAPI PathResolveW(
LPCWSTR *alpszPaths,
DWORD dwFlags)
{
FIXME("(%s,%p,0x%08lx),stub!\n",
FIXME("(%s,%p,0x%08x),stub!\n",
debugstr_w(lpszPath), debugstr_w(*alpszPaths), dwFlags);
return 0;
}
@ -706,7 +708,7 @@ LONG WINAPI PathProcessCommandA (
DWORD dwBuffSize,
DWORD dwFlags)
{
FIXME("%s %p 0x%04lx 0x%04lx stub\n",
FIXME("%s %p 0x%04x 0x%04x stub\n",
lpszPath, lpszBuff, dwBuffSize, dwFlags);
if(!lpszPath) return -1;
if(lpszBuff) strcpy(lpszBuff, lpszPath);
@ -722,7 +724,7 @@ LONG WINAPI PathProcessCommandW (
DWORD dwBuffSize,
DWORD dwFlags)
{
FIXME("(%s, %p, 0x%04lx, 0x%04lx) stub\n",
FIXME("(%s, %p, 0x%04x, 0x%04x) stub\n",
debugstr_w(lpszPath), lpszBuff, dwBuffSize, dwFlags);
if(!lpszPath) return -1;
if(lpszBuff) strcpyW(lpszBuff, lpszPath);
@ -804,7 +806,6 @@ static const WCHAR ProfilesDirectoryW[] = {'P','r','o','f','i','l','e','s','D','
static const WCHAR AllUsersProfileValueW[] = {'A','l','l','U','s','e','r','s','P','r','o','f','i','l','e','\0'};
static const WCHAR szSHFolders[] = {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\','C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\','E','x','p','l','o','r','e','r','\\','S','h','e','l','l',' ','F','o','l','d','e','r','s','\0'};
static const WCHAR szSHUserFolders[] = {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\','C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\','E','x','p','l','o','r','e','r','\\','U','s','e','r',' ','S','h','e','l','l',' ','F','o','l','d','e','r','s','\0'};
static const WCHAR szSHSetupFolders[] = {'S','o','f','t','w','a','r','e','\\','M','i','c','r','o','s','o','f','t','\\','W','i','n','d','o','w','s','\\','C','u','r','r','e','n','t','V','e','r','s','i','o','n','\0'};
/* This defaults to L"Documents and Settings" on Windows 2000/XP, but we're
* acting more Windows 9x-like for now.
*/
@ -932,7 +933,7 @@ static const CSIDL_DATA CSIDL_Data[] =
},
{ /* 0x14 - CSIDL_FONTS */
CSIDL_Type_WindowsPath,
NULL,
FontsW,
FontsW
},
{ /* 0x15 - CSIDL_TEMPLATES */
@ -1226,7 +1227,7 @@ static HRESULT _SHGetUserShellFolderPath(HKEY rootKey, LPCWSTR userPrefix,
hr = E_FAIL;
RegCloseKey(shellFolderKey);
RegCloseKey(userShellFolderKey);
TRACE("returning 0x%08lx\n", hr);
TRACE("returning 0x%08x\n", hr);
return hr;
}
@ -1257,54 +1258,6 @@ static HRESULT _SHGetDefaultValue(BYTE folder, LPWSTR pszPath)
if (!pszPath)
return E_INVALIDARG;
/* Try special cases first */
hr = E_FAIL;
switch (folder)
{
case CSIDL_PERSONAL:
case CSIDL_MYMUSIC:
case CSIDL_MYPICTURES:
case CSIDL_MYVIDEO:
{
const char *home = getenv("HOME");
/* special case for "My Documents", map to $HOME */
if (home)
{
WCHAR homeW[MAX_PATH];
MultiByteToWideChar(CP_ACP, 0, home, -1, homeW, MAX_PATH);
if (GetFullPathNameW(homeW, MAX_PATH, pszPath, NULL) != 0 &&
PathIsDirectoryW(pszPath))
hr = S_OK;
}
break;
}
case CSIDL_DESKTOP:
case CSIDL_DESKTOPDIRECTORY:
{
const char *home = getenv("HOME");
/* special case for Desktop, map to $HOME/Desktop if it exists */
if (home)
{
WCHAR desktopW[MAX_PATH];
MultiByteToWideChar(CP_ACP, 0, home, -1, desktopW, MAX_PATH);
PathAppendW(desktopW, DesktopW);
if (GetFullPathNameW(desktopW, MAX_PATH, pszPath, NULL) != 0 &&
PathIsDirectoryW(pszPath))
hr = S_OK;
}
break;
}
}
if (SUCCEEDED(hr))
return hr;
/* Either the folder was unhandled, or a suitable default wasn't found,
* so use one of the resource-based defaults
*/
if (CSIDL_Data[folder].szDefaultPath &&
IS_INTRESOURCE(CSIDL_Data[folder].szDefaultPath))
{
@ -1348,7 +1301,7 @@ static HRESULT _SHGetDefaultValue(BYTE folder, LPWSTR pszPath)
strcatW(pszPath, pDefaultPath);
}
}
TRACE("returning 0x%08lx\n", hr);
TRACE("returning 0x%08x\n", hr);
return hr;
}
@ -1363,7 +1316,7 @@ static HRESULT _SHGetCurrentVersionPath(DWORD dwFlags, BYTE folder,
{
HRESULT hr;
TRACE("0x%08lx,0x%02x,%p\n", dwFlags, folder, pszPath);
TRACE("0x%08x,0x%02x,%p\n", dwFlags, folder, pszPath);
if (folder >= sizeof(CSIDL_Data) / sizeof(CSIDL_Data[0]))
return E_INVALIDARG;
@ -1403,7 +1356,7 @@ static HRESULT _SHGetCurrentVersionPath(DWORD dwFlags, BYTE folder,
RegCloseKey(hKey);
}
}
TRACE("returning 0x%08lx (output path is %s)\n", hr, debugstr_w(pszPath));
TRACE("returning 0x%08x (output path is %s)\n", hr, debugstr_w(pszPath));
return hr;
}
@ -1420,7 +1373,7 @@ static HRESULT _SHGetUserProfilePath(HANDLE hToken, DWORD dwFlags, BYTE folder,
{
HRESULT hr;
TRACE("%p,0x%08lx,0x%02x,%p\n", hToken, dwFlags, folder, pszPath);
TRACE("%p,0x%08x,0x%02x,%p\n", hToken, dwFlags, folder, pszPath);
if (folder >= sizeof(CSIDL_Data) / sizeof(CSIDL_Data[0]))
return E_INVALIDARG;
@ -1465,7 +1418,7 @@ static HRESULT _SHGetUserProfilePath(HANDLE hToken, DWORD dwFlags, BYTE folder,
if (FAILED(hr))
hr = _SHGetDefaultValue(folder, pszPath);
}
TRACE("returning 0x%08lx (output path is %s)\n", hr, debugstr_w(pszPath));
TRACE("returning 0x%08x (output path is %s)\n", hr, debugstr_w(pszPath));
return hr;
}
@ -1479,7 +1432,7 @@ static HRESULT _SHGetAllUsersProfilePath(DWORD dwFlags, BYTE folder,
{
HRESULT hr;
TRACE("0x%08lx,0x%02x,%p\n", dwFlags, folder, pszPath);
TRACE("0x%08x,0x%02x,%p\n", dwFlags, folder, pszPath);
if (folder >= sizeof(CSIDL_Data) / sizeof(CSIDL_Data[0]))
return E_INVALIDARG;
@ -1497,13 +1450,62 @@ static HRESULT _SHGetAllUsersProfilePath(DWORD dwFlags, BYTE folder,
if (FAILED(hr))
hr = _SHGetDefaultValue(folder, pszPath);
}
TRACE("returning 0x%08lx (output path is %s)\n", hr, debugstr_w(pszPath));
TRACE("returning 0x%08x (output path is %s)\n", hr, debugstr_w(pszPath));
return hr;
}
/* From the original Wine source:
*
* Attempts to expand environment variables from szSrc into szDest, which is
static HRESULT _SHOpenProfilesKey(PHKEY pKey)
{
LONG lRet;
DWORD disp;
lRet = RegCreateKeyExW(HKEY_LOCAL_MACHINE, ProfileListW, 0, NULL, 0,
KEY_ALL_ACCESS, NULL, pKey, &disp);
return HRESULT_FROM_WIN32(lRet);
}
/* Reads the value named szValueName from the key profilesKey (assumed to be
* opened by _SHOpenProfilesKey) into szValue, which is assumed to be MAX_PATH
* WCHARs in length. If it doesn't exist, returns szDefault (and saves
* szDefault to the registry).
*/
static HRESULT _SHGetProfilesValue(HKEY profilesKey, LPCWSTR szValueName,
LPWSTR szValue, LPCWSTR szDefault)
{
HRESULT hr;
DWORD type, dwPathLen = MAX_PATH * sizeof(WCHAR);
LONG lRet;
TRACE("%p,%s,%p,%s\n", profilesKey, debugstr_w(szValueName), szValue,
debugstr_w(szDefault));
lRet = RegQueryValueExW(profilesKey, szValueName, NULL, &type,
(LPBYTE)szValue, &dwPathLen);
if (!lRet && (type == REG_SZ || type == REG_EXPAND_SZ) && dwPathLen
&& *szValue)
{
dwPathLen /= sizeof(WCHAR);
szValue[dwPathLen] = '\0';
hr = S_OK;
}
else
{
/* Missing or invalid value, set a default */
lstrcpynW(szValue, szDefault, MAX_PATH);
TRACE("Setting missing value %s to %s\n", debugstr_w(szValueName),
debugstr_w(szValue));
lRet = RegSetValueExW(profilesKey, szValueName, 0, REG_EXPAND_SZ,
(LPBYTE)szValue,
(strlenW(szValue) + 1) * sizeof(WCHAR));
if (lRet)
hr = HRESULT_FROM_WIN32(lRet);
else
hr = S_OK;
}
TRACE("returning 0x%08x (output value is %s)\n", hr, debugstr_w(szValue));
return hr;
}
/* Attempts to expand environment variables from szSrc into szDest, which is
* assumed to be MAX_PATH characters in length. Before referring to the
* environment, handles a few variables directly, because the environment
* variables may not be set when this is called (as during Wine's installation
@ -1514,15 +1516,12 @@ static HRESULT _SHGetAllUsersProfilePath(DWORD dwFlags, BYTE folder,
* path
* If one of the directly handled environment variables is expanded, only
* expands a single variable, and only in the beginning of szSrc.
*
* That's fine for Wine, but it breaks in ReactOS where we have profile paths
* like "c:\documents and settings\Administrator.REACTOS". Anyway, we have the
* environment variables handy so we'll just use them instead of hacking around
*/
static HRESULT _SHExpandEnvironmentStrings(LPCWSTR szSrc, LPWSTR szDest)
{
HRESULT hr = S_OK;
WCHAR szTemp[MAX_PATH];
HRESULT hr;
WCHAR szTemp[MAX_PATH], szProfilesPrefix[MAX_PATH] = { 0 };
HKEY key = NULL;
TRACE("%s, %p\n", debugstr_w(szSrc), szDest);
@ -1535,29 +1534,80 @@ static HRESULT _SHExpandEnvironmentStrings(LPCWSTR szSrc, LPWSTR szDest)
hr = S_OK;
goto end;
}
/* Get the profile prefix, we'll probably be needing it */
hr = _SHOpenProfilesKey(&key);
if (SUCCEEDED(hr))
{
WCHAR szDefaultProfilesPrefix[MAX_PATH];
GetWindowsDirectoryW(szDefaultProfilesPrefix, MAX_PATH);
PathAddBackslashW(szDefaultProfilesPrefix);
PathAppendW(szDefaultProfilesPrefix, szDefaultProfileDirW);
hr = _SHGetProfilesValue(key, ProfilesDirectoryW, szProfilesPrefix,
szDefaultProfilesPrefix);
}
*szDest = 0;
strcpyW(szTemp, szSrc);
while (SUCCEEDED(hr) && szTemp[0] == '%')
{
DWORD ret = ExpandEnvironmentStringsW(szSrc, szDest, MAX_PATH);
if (ret > MAX_PATH)
hr = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
else if (ret == 0)
hr = HRESULT_FROM_WIN32(GetLastError());
else
hr = S_OK;
/* By default, terminate loop */
szTemp[0] = '\0';
if (SUCCEEDED(hr) && strcmpW(szSrc, szDest) != 0)
if (!strncmpiW(szTemp, AllUsersProfileW, strlenW(AllUsersProfileW)))
{
/* Continue the loop */
WCHAR szAllUsers[MAX_PATH];
strcpyW(szDest, szProfilesPrefix);
hr = _SHGetProfilesValue(key, AllUsersProfileValueW,
szAllUsers, AllUsersW);
PathAppendW(szDest, szAllUsers);
PathAppendW(szDest, szTemp + strlenW(AllUsersProfileW));
}
else if (!strncmpiW(szTemp, UserProfileW, strlenW(UserProfileW)))
{
WCHAR userName[MAX_PATH];
DWORD userLen = MAX_PATH;
strcpyW(szDest, szProfilesPrefix);
GetUserNameW(userName, &userLen);
PathAppendW(szDest, userName);
PathAppendW(szDest, szTemp + strlenW(UserProfileW));
}
else if (!strncmpiW(szTemp, SystemDriveW, strlenW(SystemDriveW)))
{
GetSystemDirectoryW(szDest, MAX_PATH);
if (szDest[1] != ':')
{
FIXME("non-drive system paths unsupported\n");
hr = E_FAIL;
}
else
{
strcpyW(szDest + 3, szTemp + strlenW(SystemDriveW) + 1);
hr = S_OK;
}
}
else
{
DWORD ret = ExpandEnvironmentStringsW(szSrc, szDest, MAX_PATH);
if (ret > MAX_PATH)
hr = HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
else if (ret == 0)
hr = HRESULT_FROM_WIN32(GetLastError());
else
hr = S_OK;
}
if (SUCCEEDED(hr) && szDest[0] == '%')
strcpyW(szTemp, szDest);
else
{
/* terminate loop */
szTemp[0] = '\0';
}
}
end:
TRACE("returning 0x%08lx (input was %s, output is %s)\n", hr,
if (key)
RegCloseKey(key);
TRACE("returning 0x%08x (input was %s, output is %s)\n", hr,
debugstr_w(szSrc), debugstr_w(szDest));
return hr;
}
@ -1599,7 +1649,7 @@ HRESULT WINAPI SHGetFolderPathW(
DWORD folder = nFolder & CSIDL_FOLDER_MASK;
CSIDL_Type type;
int ret;
TRACE("%p,%p,nFolder=0x%04x\n", hwndOwner,pszPath,nFolder);
/* Windows always NULL-terminates the resulting path regardless of success
@ -1685,14 +1735,14 @@ HRESULT WINAPI SHGetFolderPathW(
ret = SHCreateDirectoryExW(hwndOwner, szBuildPath, NULL);
if (ret && ret != ERROR_ALREADY_EXISTS)
{
ERR("Failed to create directory '%s'.\n", debugstr_w(szBuildPath));
ERR("Failed to create directory %s.\n", debugstr_w(szBuildPath));
hr = E_FAIL;
goto end;
}
TRACE("Created missing system directory '%s'\n", debugstr_w(szBuildPath));
TRACE("Created missing system directory %s\n", debugstr_w(szBuildPath));
end:
TRACE("returning 0x%08lx (final path is %s)\n", hr, debugstr_w(szBuildPath));
TRACE("returning 0x%08x (final path is %s)\n", hr, debugstr_w(szBuildPath));
return hr;
}
@ -1769,8 +1819,8 @@ static HRESULT _SHRegisterFolders(HKEY hRootKey, HANDLE hToken,
path);
else if (CSIDL_Data[folders[i]].type == CSIDL_Type_AllUsers)
_SHGetAllUsersProfilePath(SHGFP_TYPE_DEFAULT, folders[i], path);
else if (CSIDL_Data[folders[i]].type == CSIDL_Type_CurrVer)
_SHGetDefaultValue(folders[i], path);
else if (CSIDL_Data[folders[i]].type == CSIDL_Type_WindowsPath)
GetWindowsDirectoryW(path, MAX_PATH);
else
hr = E_FAIL;
if (*path)
@ -1798,7 +1848,7 @@ static HRESULT _SHRegisterFolders(HKEY hRootKey, HANDLE hToken,
if (hKey)
RegCloseKey(hKey);
TRACE("returning 0x%08lx\n", hr);
TRACE("returning 0x%08x\n", hr);
return hr;
}
@ -1824,7 +1874,7 @@ static HRESULT _SHRegisterUserShellFolders(BOOL bDefault)
CSIDL_COOKIES,
CSIDL_HISTORY,
CSIDL_MYPICTURES,
CSIDL_ADMINTOOLS
CSIDL_FONTS
};
WCHAR userShellFolderPath[MAX_PATH], shellFolderPath[MAX_PATH];
LPCWSTR pUserShellFolderPath, pShellFolderPath;
@ -1856,7 +1906,7 @@ static HRESULT _SHRegisterUserShellFolders(BOOL bDefault)
hr = _SHRegisterFolders(hRootKey, hToken, pUserShellFolderPath,
pShellFolderPath, folders, sizeof(folders) / sizeof(folders[0]));
TRACE("returning 0x%08lx\n", hr);
TRACE("returning 0x%08x\n", hr);
return hr;
}
@ -1877,38 +1927,210 @@ static HRESULT _SHRegisterCommonShellFolders(void)
TRACE("\n");
hr = _SHRegisterFolders(HKEY_LOCAL_MACHINE, NULL, szSHUserFolders,
szSHFolders, folders, sizeof(folders) / sizeof(folders[0]));
TRACE("returning 0x%08lx\n", hr);
TRACE("returning 0x%08x\n", hr);
return hr;
}
static HRESULT _SHRegisterSetupShellFolders(void)
/******************************************************************************
* _SHAppendToUnixPath [Internal]
*
* Helper function for _SHCreateSymbolicLinks. Appends pwszSubPath (or the
* corresponding resource, if IS_INTRESOURCE) to the unix base path 'szBasePath'
* and replaces backslashes with slashes.
*
* PARAMS
* szBasePath [IO] The unix base path, which will be appended to (CP_UNXICP).
* pwszSubPath [I] Sub-path or resource id (use MAKEINTRESOURCEW).
*
* RETURNS
* Success: TRUE,
* Failure: FALSE
*/
static inline BOOL _SHAppendToUnixPath(char *szBasePath, LPCWSTR pwszSubPath) {
WCHAR wszSubPath[MAX_PATH];
int cLen = strlen(szBasePath);
char *pBackslash;
if (IS_INTRESOURCE(pwszSubPath)) {
if (!LoadStringW(shell32_hInstance, LOWORD(pwszSubPath), wszSubPath, MAX_PATH)) {
/* Fall back to hard coded defaults. */
switch (LOWORD(pwszSubPath)) {
case IDS_PERSONAL:
lstrcpyW(wszSubPath, PersonalW);
break;
case IDS_MYMUSIC:
lstrcpyW(wszSubPath, My_MusicW);
break;
case IDS_MYPICTURES:
lstrcpyW(wszSubPath, My_PicturesW);
break;
case IDS_MYVIDEO:
lstrcpyW(wszSubPath, My_VideoW);
break;
default:
ERR("LoadString(%d) failed!\n", LOWORD(pwszSubPath));
return FALSE;
}
}
} else {
lstrcpyW(wszSubPath, pwszSubPath);
}
if (szBasePath[cLen-1] != '/') szBasePath[cLen++] = '/';
if (!WideCharToMultiByte(CP_ACP, 0, wszSubPath, -1, szBasePath + cLen,
FILENAME_MAX - cLen, NULL, NULL))
{
return FALSE;
}
pBackslash = szBasePath + cLen;
while ((pBackslash = strchr(pBackslash, '\\'))) *pBackslash = '/';
return TRUE;
}
#if 0
/******************************************************************************
* _SHCreateSymbolicLinks [Internal]
*
* Sets up symbol links for various shell folders to point into the users home
* directory. We do an educated guess about what the user would probably want:
* - If there is a 'My Documents' directory in $HOME, the user probably wants
* wine's 'My Documents' to point there. Furthermore, we imply that the user
* is a Windows lover and has no problem with wine creating 'My Pictures',
* 'My Music' and 'My Video' subfolders under '$HOME/My Documents', if those
* do not already exits. We put appropriate symbolic links in place for those,
* too.
* - If there is no 'My Documents' directory in $HOME, we let 'My Documents'
* point directly to $HOME. We assume the user to be a unix hacker who does not
* want wine to create anything anywhere besides the .wine directory. So, if
* there already is a 'My Music' directory in $HOME, we symlink the 'My Music'
* shell folder to it. But if not, we symlink it to $HOME directly. The same
* holds fo 'My Pictures' and 'My Video'.
* - The Desktop shell folder is symlinked to '$HOME/Desktop', if that does
* exists and left alone if not.
* ('My Music',... above in fact means LoadString(IDS_MYMUSIC))
*/
static void _SHCreateSymbolicLinks(void)
{
static const UINT folders[] = {
CSIDL_PROGRAM_FILES_COMMON,
CSIDL_PROGRAM_FILES,
};
UINT aidsMyStuff[] = { IDS_MYPICTURES, IDS_MYVIDEO, IDS_MYMUSIC }, i;
int acsidlMyStuff[] = { CSIDL_MYPICTURES, CSIDL_MYVIDEO, CSIDL_MYMUSIC };
WCHAR wszTempPath[MAX_PATH];
char szPersonalTarget[FILENAME_MAX], *pszPersonal;
char szMyStuffTarget[FILENAME_MAX], *pszMyStuff;
char szDesktopTarget[FILENAME_MAX], *pszDesktop;
struct stat statFolder;
const char *pszHome;
HRESULT hr;
TRACE("\n");
hr = _SHRegisterFolders(HKEY_LOCAL_MACHINE, NULL, szSHSetupFolders,
szSHSetupFolders, folders, sizeof(folders) / sizeof(folders[0]));
TRACE("returning 0x%08lx\n", hr);
return hr;
/* Create all necessary profile sub-dirs up to 'My Documents' and get the unix path. */
hr = SHGetFolderPathW(NULL, CSIDL_PERSONAL|CSIDL_FLAG_CREATE, NULL,
SHGFP_TYPE_DEFAULT, wszTempPath);
if (FAILED(hr)) return;
pszPersonal = wine_get_unix_file_name(wszTempPath);
if (!pszPersonal) return;
pszHome = getenv("HOME");
if (pszHome && !stat(pszHome, &statFolder) && S_ISDIR(statFolder.st_mode)) {
strcpy(szPersonalTarget, pszHome);
if (_SHAppendToUnixPath(szPersonalTarget, MAKEINTRESOURCEW(IDS_PERSONAL)) &&
!stat(szPersonalTarget, &statFolder) && S_ISDIR(statFolder.st_mode))
{
/* '$HOME/My Documents' exists. Create 'My Pictures', 'My Videos' and
* 'My Music' subfolders or fail silently if they already exist. */
for (i = 0; i < sizeof(aidsMyStuff)/sizeof(aidsMyStuff[0]); i++) {
strcpy(szMyStuffTarget, szPersonalTarget);
if (_SHAppendToUnixPath(szMyStuffTarget, MAKEINTRESOURCEW(aidsMyStuff[i])))
mkdir(szMyStuffTarget);
}
}
else
{
/* '$HOME/My Documents' doesn't exists, but '$HOME' does. */
strcpy(szPersonalTarget, pszHome);
}
/* Replace 'My Documents' directory with a symlink of fail silently if not empty. */
rmdir(pszPersonal);
symlink(szPersonalTarget, pszPersonal);
}
else
{
/* '$HOME' doesn't exist. Create 'My Pictures', 'My Videos' and 'My Music' subdirs
* in '%USERPROFILE%\\My Documents' or fail silently if they already exist. */
strcpy(szPersonalTarget, pszPersonal);
for (i = 0; i < sizeof(aidsMyStuff)/sizeof(aidsMyStuff[0]); i++) {
strcpy(szMyStuffTarget, szPersonalTarget);
if (_SHAppendToUnixPath(szMyStuffTarget, MAKEINTRESOURCEW(aidsMyStuff[i])))
mkdir(szMyStuffTarget);
}
}
HeapFree(GetProcessHeap(), 0, pszPersonal);
/* Create symbolic links for 'My Pictures', 'My Video' and 'My Music'. */
for (i=0; i < sizeof(aidsMyStuff)/sizeof(aidsMyStuff[0]); i++) {
/* Create the current 'My Whatever' folder and get it's unix path. */
hr = SHGetFolderPathW(NULL, acsidlMyStuff[i]|CSIDL_FLAG_CREATE, NULL,
SHGFP_TYPE_DEFAULT, wszTempPath);
if (FAILED(hr)) continue;
pszMyStuff = wine_get_unix_file_name(wszTempPath);
if (!pszMyStuff) continue;
strcpy(szMyStuffTarget, szPersonalTarget);
if (_SHAppendToUnixPath(szMyStuffTarget, MAKEINTRESOURCEW(aidsMyStuff[i])) &&
!stat(szMyStuffTarget, &statFolder) && S_ISDIR(statFolder.st_mode))
{
/* If there's a 'My Whatever' directory where 'My Documents' links to, link to it. */
rmdir(pszMyStuff);
symlink(szMyStuffTarget, pszMyStuff);
}
else
{
/* Else link to where 'My Documents' itself links to. */
rmdir(pszMyStuff);
symlink(szPersonalTarget, pszMyStuff);
}
HeapFree(GetProcessHeap(), 0, pszMyStuff);
}
/* Last but not least, the Desktop folder */
strcpy(szDesktopTarget, pszHome);
if (_SHAppendToUnixPath(szDesktopTarget, DesktopW) &&
!stat(szDesktopTarget, &statFolder) && S_ISDIR(statFolder.st_mode))
{
hr = SHGetFolderPathW(NULL, CSIDL_DESKTOPDIRECTORY|CSIDL_FLAG_CREATE, NULL,
SHGFP_TYPE_DEFAULT, wszTempPath);
if (SUCCEEDED(hr) && (pszDesktop = wine_get_unix_file_name(wszTempPath)))
{
rmdir(pszDesktop);
symlink(szDesktopTarget, pszDesktop);
HeapFree(GetProcessHeap(), 0, pszDesktop);
}
}
}
#endif
/* Register the default values in the registry, as some apps seem to depend
* on their presence. The set registered was taken from Windows XP.
*/
HRESULT SHELL_RegisterShellFolders(void)
{
HRESULT hr = _SHRegisterUserShellFolders(TRUE);
HRESULT hr;
/* Set up '$HOME' targeted symlinks for 'My Documents', 'My Pictures',
* 'My Video', 'My Music' and 'Desktop' in advance, so that the
* _SHRegister*ShellFolders() functions will find everything nice and clean
* and thus will not attempt to create them in the profile directory. */
#if 0
_SHCreateSymbolicLinks();
#endif
hr = _SHRegisterUserShellFolders(TRUE);
if (SUCCEEDED(hr))
hr = _SHRegisterUserShellFolders(FALSE);
if (SUCCEEDED(hr))
hr = _SHRegisterCommonShellFolders();
if (SUCCEEDED(hr))
hr = _SHRegisterSetupShellFolders();
return hr;
}
@ -1992,7 +2214,7 @@ HRESULT WINAPI SHGetFolderLocation(
{
HRESULT hr = E_INVALIDARG;
TRACE("%p 0x%08x %p 0x%08lx %p\n",
TRACE("%p 0x%08x %p 0x%08x %p\n",
hwndOwner, nFolder, hToken, dwReserved, ppidl);
if (!ppidl)
@ -2008,6 +2230,10 @@ HRESULT WINAPI SHGetFolderLocation(
*ppidl = _ILCreateDesktop();
break;
case CSIDL_PERSONAL:
*ppidl = _ILCreateMyDocuments();
break;
case CSIDL_INTERNET:
*ppidl = _ILCreateIExplore();
break;
@ -2020,10 +2246,6 @@ HRESULT WINAPI SHGetFolderLocation(
*ppidl = _ILCreatePrinters();
break;
case CSIDL_FONTS:
FIXME("virtual font folder");
break;
case CSIDL_BITBUCKET:
*ppidl = _ILCreateBitBucket();
break;

View file

@ -18,12 +18,9 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef __SHFLDR_H
#define __SHFLDR_H
#define CHARS_IN_GUID 39
typedef struct {
@ -42,7 +39,7 @@ LPCWSTR GetNextElementW (LPCWSTR pszNext, LPWSTR pszOut, DWORD dwOut);
HRESULT SHELL32_ParseNextElement (IShellFolder2 * psf, HWND hwndOwner, LPBC pbc, LPITEMIDLIST * pidlInOut,
LPOLESTR szNext, DWORD * pEaten, DWORD * pdwAttributes);
HRESULT SHELL32_GetItemAttributes (IShellFolder * psf, LPCITEMIDLIST pidl, LPDWORD pdwAttributes);
HRESULT SHELL32_GetDisplayNameOfChild (IShellFolder2 * psf, LPCITEMIDLIST pidl, DWORD dwFlags, LPSTR szOut,
HRESULT SHELL32_GetDisplayNameOfChild (IShellFolder2 * psf, LPCITEMIDLIST pidl, DWORD dwFlags, LPWSTR szOut,
DWORD dwOutLen);
HRESULT SHELL32_BindToChild (LPCITEMIDLIST pidlRoot,
@ -53,7 +50,7 @@ LPITEMIDLIST SHELL32_CreatePidlFromBindCtx(IBindCtx *pbc, LPCWSTR path);
static inline int SHELL32_GUIDToStringA (REFGUID guid, LPSTR str)
{
return sprintf(str, "{%08lx-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
return sprintf(str, "{%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}",
guid->Data1, guid->Data2, guid->Data3,
guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3],
guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7]);
@ -72,7 +69,8 @@ static inline int SHELL32_GUIDToStringW (REFGUID guid, LPWSTR str)
guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7]);
}
void SHELL_FS_ProcessDisplayFilename(LPSTR szPath, DWORD dwFlags);
void SHELL_FS_ProcessDisplayFilename(LPWSTR szPath, DWORD dwFlags);
BOOL SHELL_FS_HideExtension(LPWSTR pwszPath);
#endif /* __SHFLDR_H */
DEFINE_GUID( CLSID_UnixFolder, 0xcc702eb2, 0x7dc5, 0x11d9, 0xc6, 0x87, 0x00, 0x04, 0x23, 0x8a, 0x01, 0xcd );
DEFINE_GUID( CLSID_UnixDosFolder, 0x9d20aae8, 0x0625, 0x44b0, 0x9c, 0xa7, 0x71, 0x88, 0x9c, 0x22, 0x54, 0xd9 );

View file

@ -17,7 +17,7 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
@ -63,8 +63,6 @@ typedef struct {
const IShellFolder2Vtbl *lpVtbl;
LONG ref;
CLSID *pclsid;
/* both paths are parsible from the desktop */
LPWSTR sPathTarget; /* complete path to target used for enumeration and ChangeNotify */
LPITEMIDLIST pidlRoot; /* absolute pidl */
@ -76,7 +74,7 @@ typedef struct {
#define _IUnknown_(This) (IShellFolder*)&(This->lpVtbl)
#define _IShellFolder_(This) (IShellFolder*)&(This->lpVtbl)
static shvheader DesktopSFHeader[] = {
static const shvheader DesktopSFHeader[] = {
{IDS_SHV_COLUMN1, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15},
{IDS_SHV_COLUMN2, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10},
{IDS_SHV_COLUMN3, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10},
@ -119,32 +117,12 @@ static HRESULT WINAPI ISF_Desktop_fnQueryInterface(
static ULONG WINAPI ISF_Desktop_fnAddRef (IShellFolder2 * iface)
{
IGenericSFImpl *This = (IGenericSFImpl *)iface;
ULONG refCount = InterlockedIncrement(&This->ref);
TRACE ("(%p)->(count=%lu)\n", This, refCount - 1);
return refCount;
return 2; /* non-heap based object */
}
static ULONG WINAPI ISF_Desktop_fnRelease (IShellFolder2 * iface)
{
IGenericSFImpl *This = (IGenericSFImpl *)iface;
ULONG refCount = InterlockedDecrement(&This->ref);
TRACE ("(%p)->(count=%lu)\n", This, refCount + 1);
if (!refCount)
{
TRACE ("-- destroying IShellFolder(%p)\n", This);
if (This->pidlRoot)
SHFree (This->pidlRoot);
if (This->sPathTarget)
SHFree (This->sPathTarget);
LocalFree ((HLOCAL) This);
return 0;
}
return refCount;
return 1; /* non-heap based object */
}
/**************************************************************************
@ -186,8 +164,13 @@ static HRESULT WINAPI ISF_Desktop_fnParseDisplayName (IShellFolder2 * iface,
}
else if (PathGetDriveNumberW (lpszDisplayName) >= 0)
{
/* it's a filesystem path with a drive. Let MyComputer parse it */
pidlTemp = _ILCreateMyComputer ();
/* it's a filesystem path with a drive. Let MyComputer/UnixDosFolder parse it */
#if 0
if (UNIXFS_is_rooted_at_desktop())
pidlTemp = _ILCreateGuid(PT_GUID, &CLSID_UnixDosFolder);
else
#endif
pidlTemp = _ILCreateMyComputer ();
szNext = lpszDisplayName;
}
else if (PathIsUNCW(lpszDisplayName))
@ -246,7 +229,7 @@ static HRESULT WINAPI ISF_Desktop_fnParseDisplayName (IShellFolder2 * iface,
*ppidl = pidlTemp;
TRACE ("(%p)->(-- ret=0x%08lx)\n", This, hr);
TRACE ("(%p)->(-- ret=0x%08x)\n", This, hr);
return hr;
}
@ -265,7 +248,7 @@ static BOOL CreateDesktopEnumList(IEnumIDList *list, DWORD dwFlags)
BOOL ret = TRUE;
WCHAR szPath[MAX_PATH];
TRACE("(%p)->(flags=0x%08lx)\n", list, dwFlags);
TRACE("(%p)->(flags=0x%08x)\n", list, dwFlags);
/* enumerate the root folders */
if (dwFlags & SHCONTF_FOLDERS)
@ -320,7 +303,7 @@ static HRESULT WINAPI ISF_Desktop_fnEnumObjects (IShellFolder2 * iface,
{
IGenericSFImpl *This = (IGenericSFImpl *)iface;
TRACE ("(%p)->(HWND=%p flags=0x%08lx pplist=%p)\n",
TRACE ("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n",
This, hwndOwner, dwFlags, ppEnumIDList);
*ppEnumIDList = IEnumIDList_Constructor();
@ -432,7 +415,7 @@ static HRESULT WINAPI ISF_Desktop_fnGetAttributesOf (IShellFolder2 * iface,
SFGAO_CANRENAME | SFGAO_CANDELETE | SFGAO_HASPROPSHEET |
SFGAO_DROPTARGET | SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_HASSUBFOLDER;
TRACE ("(%p)->(cidl=%d apidl=%p mask=%p (0x%08lx))\n",
TRACE ("(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n",
This, cidl, apidl, rgfInOut, rgfInOut ? *rgfInOut : 0);
if (!rgfInOut)
@ -462,7 +445,7 @@ static HRESULT WINAPI ISF_Desktop_fnGetAttributesOf (IShellFolder2 * iface,
/* make sure SFGAO_VALIDATE is cleared, some apps depend on that */
*rgfInOut &= ~SFGAO_VALIDATE;
TRACE ("-- result=0x%08lx\n", *rgfInOut);
TRACE ("-- result=0x%08x\n", *rgfInOut);
return hr;
}
@ -544,7 +527,7 @@ static HRESULT WINAPI ISF_Desktop_fnGetUIObjectOf (IShellFolder2 * iface,
hr = E_OUTOFMEMORY;
*ppvOut = pObj;
TRACE ("(%p)->hr=0x%08lx\n", This, hr);
TRACE ("(%p)->hr=0x%08x\n", This, hr);
return hr;
}
@ -559,40 +542,25 @@ static HRESULT WINAPI ISF_Desktop_fnGetDisplayNameOf (IShellFolder2 * iface,
{
IGenericSFImpl *This = (IGenericSFImpl *)iface;
HRESULT hr = S_OK;
LPWSTR pszPath;
TRACE ("(%p)->(pidl=%p,0x%08lx,%p)\n", This, pidl, dwFlags, strRet);
TRACE ("(%p)->(pidl=%p,0x%08x,%p)\n", This, pidl, dwFlags, strRet);
pdump (pidl);
if (!strRet)
return E_INVALIDARG;
strRet->uType = STRRET_CSTR;
pszPath = CoTaskMemAlloc((MAX_PATH +1) * sizeof(WCHAR));
if (!pszPath)
return E_OUTOFMEMORY;
if (_ILIsDesktop (pidl))
{
if ((GET_SHGDN_RELATION (dwFlags) == SHGDN_NORMAL) &&
(GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING))
{
BOOL defCharUsed;
WideCharToMultiByte( CP_ACP, 0, This->sPathTarget, -1,
strRet->u.cStr, MAX_PATH, NULL, &defCharUsed );
if (defCharUsed)
{
strRet->u.pOleStr = SHAlloc((lstrlenW(This->sPathTarget)+1) *
sizeof(WCHAR));
if (!strRet->u.pOleStr)
hr = E_OUTOFMEMORY;
else
{
strcpyW(strRet->u.pOleStr, This->sPathTarget);
strRet->uType = STRRET_WSTR;
}
}
}
strcpyW(pszPath, This->sPathTarget);
else
{
HCR_GetClassNameA(&CLSID_ShellDesktop, strRet->u.cStr, MAX_PATH);
}
HCR_GetClassNameW(&CLSID_ShellDesktop, pszPath, MAX_PATH);
}
else if (_ILIsPidlSimple (pidl))
{
@ -647,50 +615,70 @@ static HRESULT WINAPI ISF_Desktop_fnGetDisplayNameOf (IShellFolder2 * iface,
* Only the folder itself can know it
*/
hr = SHELL32_GetDisplayNameOfChild (iface, pidl, dwFlags,
strRet->u.cStr,
pszPath,
MAX_PATH);
}
else
{
/* parsing name like ::{...} */
lstrcpyA (strRet->u.cStr, "::");
SHELL32_GUIDToStringA (clsid, &strRet->u.cStr[2]);
pszPath[0] = ':';
pszPath[1] = ':';
SHELL32_GUIDToStringW (clsid, &pszPath[2]);
}
}
else
{
/* user friendly name */
HCR_GetClassNameA (clsid, strRet->u.cStr, MAX_PATH);
HCR_GetClassNameW (clsid, pszPath, MAX_PATH);
}
}
else
{
int cLen = 0;
/* file system folder or file rooted at the desktop */
if ((GET_SHGDN_FOR(dwFlags) == SHGDN_FORPARSING) &&
(GET_SHGDN_RELATION(dwFlags) != SHGDN_INFOLDER))
{
WideCharToMultiByte(CP_ACP, 0, This->sPathTarget, -1, strRet->u.cStr, MAX_PATH,
NULL, NULL);
PathAddBackslashA(strRet->u.cStr);
cLen = lstrlenA(strRet->u.cStr);
lstrcpynW(pszPath, This->sPathTarget, MAX_PATH - 1);
PathAddBackslashW(pszPath);
cLen = lstrlenW(pszPath);
}
_ILSimpleGetText (pidl, strRet->u.cStr + cLen, MAX_PATH - cLen);
_ILSimpleGetTextW(pidl, pszPath + cLen, MAX_PATH - cLen);
if (!_ILIsFolder(pidl))
SHELL_FS_ProcessDisplayFilename(strRet->u.cStr, dwFlags);
SHELL_FS_ProcessDisplayFilename(pszPath, dwFlags);
}
}
else
{
/* a complex pidl, let the subfolder do the work */
hr = SHELL32_GetDisplayNameOfChild (iface, pidl, dwFlags,
strRet->u.cStr, MAX_PATH);
pszPath, MAX_PATH);
}
TRACE ("-- (%p)->(%s,0x%08lx)\n", This,
if (SUCCEEDED(hr))
{
/* Win9x always returns ANSI strings, NT always returns Unicode strings */
if (GetVersion() & 0x80000000)
{
strRet->uType = STRRET_CSTR;
if (!WideCharToMultiByte(CP_ACP, 0, pszPath, -1, strRet->u.cStr, MAX_PATH,
NULL, NULL))
strRet->u.cStr[0] = '\0';
CoTaskMemFree(pszPath);
}
else
{
strRet->uType = STRRET_WSTR;
strRet->u.pOleStr = pszPath;
}
}
else
CoTaskMemFree(pszPath);
TRACE ("-- (%p)->(%s,0x%08x)\n", This,
strRet->uType == STRRET_CSTR ? strRet->u.cStr :
debugstr_w(strRet->u.pOleStr), hr);
return hr;
@ -714,7 +702,7 @@ static HRESULT WINAPI ISF_Desktop_fnSetNameOf (IShellFolder2 * iface,
{
IGenericSFImpl *This = (IGenericSFImpl *)iface;
FIXME ("(%p)->(%p,pidl=%p,%s,%lu,%p)\n", This, hwndOwner, pidl,
FIXME ("(%p)->(%p,pidl=%p,%s,%u,%p)\n", This, hwndOwner, pidl,
debugstr_w (lpName), dwFlags, pPidlOut);
return E_FAIL;
@ -861,9 +849,8 @@ static const IShellFolder2Vtbl vt_MCFldr_ShellFolder2 =
HRESULT WINAPI ISF_Desktop_Constructor (
IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv)
{
IGenericSFImpl *sf;
static IGenericSFImpl *cached_sf;
WCHAR szMyPath[MAX_PATH];
HRESULT r;
TRACE ("unkOut=%p %s\n", pUnkOuter, shdebugstr_guid (riid));
@ -872,26 +859,31 @@ HRESULT WINAPI ISF_Desktop_Constructor (
if (pUnkOuter)
return CLASS_E_NOAGGREGATION;
if (!SHGetSpecialFolderPathW( 0, szMyPath, CSIDL_DESKTOPDIRECTORY, TRUE ))
return E_UNEXPECTED;
sf = LocalAlloc( LMEM_ZEROINIT, sizeof (IGenericSFImpl) );
if (!sf)
return E_OUTOFMEMORY;
sf->ref = 0;
sf->lpVtbl = &vt_MCFldr_ShellFolder2;
sf->pidlRoot = _ILCreateDesktop(); /* my qualified pidl */
sf->sPathTarget = SHAlloc( (lstrlenW(szMyPath) + 1)*sizeof(WCHAR) );
lstrcpyW( sf->sPathTarget, szMyPath );
r = IUnknown_QueryInterface( _IUnknown_(sf), riid, ppv );
if (!SUCCEEDED (r))
if (!cached_sf)
{
IUnknown_Release( _IUnknown_(sf) );
return r;
IGenericSFImpl *sf;
if (!SHGetSpecialFolderPathW( 0, szMyPath, CSIDL_DESKTOPDIRECTORY, TRUE ))
return E_UNEXPECTED;
sf = LocalAlloc( LMEM_ZEROINIT, sizeof (IGenericSFImpl) );
if (!sf)
return E_OUTOFMEMORY;
sf->ref = 1;
sf->lpVtbl = &vt_MCFldr_ShellFolder2;
sf->pidlRoot = _ILCreateDesktop(); /* my qualified pidl */
sf->sPathTarget = SHAlloc( (lstrlenW(szMyPath) + 1)*sizeof(WCHAR) );
lstrcpyW( sf->sPathTarget, szMyPath );
if (InterlockedCompareExchangePointer((void *)&cached_sf, sf, NULL) != NULL)
{
/* some other thread already been here */
SHFree( sf->pidlRoot );
SHFree( sf->sPathTarget );
LocalFree( sf );
}
}
TRACE ("--(%p)\n", sf);
return S_OK;
return IUnknown_QueryInterface( _IUnknown_(cached_sf), riid, ppv );
}

View file

@ -1,3 +1,4 @@
/*
* file system folder
*
@ -16,7 +17,7 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
@ -54,8 +55,6 @@
WINE_DEFAULT_DEBUG_CHANNEL (shell);
extern BOOL fileMoving;
/***********************************************************************
* IShellFolder implementation
*/
@ -73,7 +72,7 @@ typedef struct {
CLSID *pclsid;
/* both paths are parsible from the desktop */
LPSTR sPathTarget; /* complete path to target used for enumeration and ChangeNotify */
LPWSTR sPathTarget; /* complete path to target used for enumeration and ChangeNotify */
LPITEMIDLIST pidlRoot; /* absolute pidl */
@ -180,7 +179,7 @@ static ULONG WINAPI IUnknown_fnAddRef (IUnknown * iface)
IGenericSFImpl *This = (IGenericSFImpl *)iface;
ULONG refCount = InterlockedIncrement(&This->ref);
TRACE ("(%p)->(count=%lu)\n", This, refCount - 1);
TRACE ("(%p)->(count=%u)\n", This, refCount - 1);
return refCount;
}
@ -190,15 +189,13 @@ static ULONG WINAPI IUnknown_fnRelease (IUnknown * iface)
IGenericSFImpl *This = (IGenericSFImpl *)iface;
ULONG refCount = InterlockedDecrement(&This->ref);
TRACE ("(%p)->(count=%lu)\n", This, refCount + 1);
TRACE ("(%p)->(count=%u)\n", This, refCount + 1);
if (!refCount) {
TRACE ("-- destroying IShellFolder(%p)\n", This);
if (This->pidlRoot)
SHFree (This->pidlRoot);
if (This->sPathTarget)
SHFree (This->sPathTarget);
SHFree (This->pidlRoot);
SHFree (This->sPathTarget);
LocalFree ((HLOCAL) This);
}
return refCount;
@ -211,7 +208,7 @@ static const IUnknownVtbl unkvt =
IUnknown_fnRelease,
};
static shvheader GenericSFHeader[] = {
static const shvheader GenericSFHeader[] = {
{IDS_SHV_COLUMN1, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15},
{IDS_SHV_COLUMN2, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10},
{IDS_SHV_COLUMN3, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10},
@ -286,7 +283,7 @@ static ULONG WINAPI IShellFolder_fnAddRef (IShellFolder2 * iface)
{
IGenericSFImpl *This = impl_from_IShellFolder2(iface);
TRACE ("(%p)->(count=%lu)\n", This, This->ref);
TRACE ("(%p)->(count=%u)\n", This, This->ref);
return IUnknown_AddRef (This->pUnkOuter);
}
@ -298,7 +295,7 @@ static ULONG WINAPI IShellFolder_fnRelease (IShellFolder2 * iface)
{
IGenericSFImpl *This = impl_from_IShellFolder2(iface);
TRACE ("(%p)->(count=%lu)\n", This, This->ref);
TRACE ("(%p)->(count=%u)\n", This, This->ref);
return IUnknown_Release (This->pUnkOuter);
}
@ -312,7 +309,7 @@ static ULONG WINAPI IShellFolder_fnRelease (IShellFolder2 * iface)
*/
LPITEMIDLIST SHELL32_CreatePidlFromBindCtx(IBindCtx *pbc, LPCWSTR path)
{
static const WCHAR szfsbc[] = {
static WCHAR szfsbc[] = {
'F','i','l','e',' ','S','y','s','t','e','m',' ',
'B','i','n','d',' ','D','a','t','a',0 };
IFileSystemBindData *fsbd = NULL;
@ -406,8 +403,7 @@ IShellFolder_fnParseDisplayName (IShellFolder2 * iface,
szNext = GetNextElementW (lpszDisplayName, szElement, MAX_PATH);
/* build the full pathname to the element */
/* lstrcpyW(szPath, This->sPathTarget); */
MultiByteToWideChar(CP_ACP, 0, This->sPathTarget, -1, szPath, MAX_PATH);
lstrcpynW(szPath, This->sPathTarget, MAX_PATH - 1);
PathAddBackslashW(szPath);
len = lstrlenW(szPath);
lstrcpynW(szPath + len, szElement, MAX_PATH - len);
@ -435,7 +431,7 @@ IShellFolder_fnParseDisplayName (IShellFolder2 * iface,
else
*ppidl = NULL;
TRACE ("(%p)->(-- pidl=%p ret=0x%08lx)\n", This, ppidl ? *ppidl : 0, hr);
TRACE ("(%p)->(-- pidl=%p ret=0x%08x)\n", This, ppidl ? *ppidl : 0, hr);
return hr;
}
@ -453,16 +449,12 @@ IShellFolder_fnEnumObjects (IShellFolder2 * iface, HWND hwndOwner,
{
IGenericSFImpl *This = impl_from_IShellFolder2(iface);
TRACE ("(%p)->(HWND=%p flags=0x%08lx pplist=%p)\n", This, hwndOwner,
TRACE ("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n", This, hwndOwner,
dwFlags, ppEnumIDList);
*ppEnumIDList = IEnumIDList_Constructor();
if (*ppEnumIDList)
{
WCHAR path[MAX_PATH];
MultiByteToWideChar(CP_ACP, 0, This->sPathTarget, -1, path, MAX_PATH);
CreateFolderEnumList(*ppEnumIDList, path, dwFlags);
}
CreateFolderEnumList(*ppEnumIDList, This->sPathTarget, dwFlags);
TRACE ("-- (%p)->(new ID List: %p)\n", This, *ppEnumIDList);
@ -482,13 +474,11 @@ IShellFolder_fnBindToObject (IShellFolder2 * iface, LPCITEMIDLIST pidl,
LPBC pbc, REFIID riid, LPVOID * ppvOut)
{
IGenericSFImpl *This = impl_from_IShellFolder2(iface);
WCHAR szPath[MAX_PATH];
TRACE ("(%p)->(pidl=%p,%p,%s,%p)\n", This, pidl, pbc,
shdebugstr_guid (riid), ppvOut);
MultiByteToWideChar(CP_ACP, 0, This->sPathTarget, -1, szPath, MAX_PATH);
return SHELL32_BindToChild (This->pidlRoot, szPath, pidl, riid,
return SHELL32_BindToChild (This->pidlRoot, This->sPathTarget, pidl, riid,
ppvOut);
}
@ -583,7 +573,7 @@ IShellFolder_fnGetAttributesOf (IShellFolder2 * iface, UINT cidl,
HRESULT hr = S_OK;
TRACE ("(%p)->(cidl=%d apidl=%p mask=%p (0x%08lx))\n", This, cidl, apidl,
TRACE ("(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n", This, cidl, apidl,
rgfInOut, rgfInOut ? *rgfInOut : 0);
if (!rgfInOut)
@ -615,7 +605,7 @@ IShellFolder_fnGetAttributesOf (IShellFolder2 * iface, UINT cidl,
/* make sure SFGAO_VALIDATE is cleared, some apps depend on that */
*rgfInOut &= ~SFGAO_VALIDATE;
TRACE ("-- result=0x%08lx\n", *rgfInOut);
TRACE ("-- result=0x%08x\n", *rgfInOut);
return hr;
}
@ -696,7 +686,7 @@ IShellFolder_fnGetUIObjectOf (IShellFolder2 * iface,
*ppvOut = pObj;
}
TRACE ("(%p)->hr=0x%08lx\n", This, hr);
TRACE ("(%p)->hr=0x%08x\n", This, hr);
return hr;
}
@ -753,16 +743,13 @@ BOOL SHELL_FS_HideExtension(LPWSTR szPath)
return doHide;
}
void SHELL_FS_ProcessDisplayFilename(LPSTR szPath, DWORD dwFlags)
void SHELL_FS_ProcessDisplayFilename(LPWSTR szPath, DWORD dwFlags)
{
WCHAR pathW[MAX_PATH];
/*FIXME: MSDN also mentions SHGDN_FOREDITING which is not yet handled. */
if (!(dwFlags & SHGDN_FORPARSING) &&
((dwFlags & SHGDN_INFOLDER) || (dwFlags == SHGDN_NORMAL))) {
MultiByteToWideChar(CP_ACP, 0, szPath, -1, pathW, MAX_PATH);
if (SHELL_FS_HideExtension(pathW) && szPath[0] != '.')
PathRemoveExtensionA (szPath);
if (SHELL_FS_HideExtension(szPath) && szPath[0] != '.')
PathRemoveExtensionW(szPath);
}
}
@ -784,23 +771,27 @@ IShellFolder_fnGetDisplayNameOf (IShellFolder2 * iface, LPCITEMIDLIST pidl,
DWORD dwFlags, LPSTRRET strRet)
{
IGenericSFImpl *This = impl_from_IShellFolder2(iface);
LPWSTR pszPath;
HRESULT hr = S_OK;
int len = 0;
TRACE ("(%p)->(pidl=%p,0x%08lx,%p)\n", This, pidl, dwFlags, strRet);
TRACE ("(%p)->(pidl=%p,0x%08x,%p)\n", This, pidl, dwFlags, strRet);
pdump (pidl);
if (!pidl || !strRet)
return E_INVALIDARG;
strRet->uType = STRRET_CSTR;
pszPath = CoTaskMemAlloc((MAX_PATH +1) * sizeof(WCHAR));
if (!pszPath)
return E_OUTOFMEMORY;
if (_ILIsDesktop(pidl)) { /* empty pidl */
if ((GET_SHGDN_FOR(dwFlags) & SHGDN_FORPARSING) &&
(GET_SHGDN_RELATION(dwFlags) != SHGDN_INFOLDER))
{
if (This->sPathTarget)
lstrcpynA(strRet->u.cStr, This->sPathTarget, MAX_PATH);
lstrcpynW(pszPath, This->sPathTarget, MAX_PATH);
} else {
/* pidl has to contain exactly one non null SHITEMID */
hr = E_INVALIDARG;
@ -810,17 +801,32 @@ IShellFolder_fnGetDisplayNameOf (IShellFolder2 * iface, LPCITEMIDLIST pidl,
(GET_SHGDN_RELATION(dwFlags) != SHGDN_INFOLDER) &&
This->sPathTarget)
{
lstrcpynA(strRet->u.cStr, This->sPathTarget, MAX_PATH);
PathAddBackslashA(strRet->u.cStr);
len = lstrlenA(strRet->u.cStr);
lstrcpynW(pszPath, This->sPathTarget, MAX_PATH);
PathAddBackslashW(pszPath);
len = lstrlenW(pszPath);
}
_ILSimpleGetText(pidl, strRet->u.cStr + len, MAX_PATH - len);
if (!_ILIsFolder(pidl)) SHELL_FS_ProcessDisplayFilename(strRet->u.cStr, dwFlags);
_ILSimpleGetTextW(pidl, pszPath + len, MAX_PATH + 1 - len);
if (!_ILIsFolder(pidl)) SHELL_FS_ProcessDisplayFilename(pszPath, dwFlags);
} else {
hr = SHELL32_GetDisplayNameOfChild(iface, pidl, dwFlags, strRet->u.cStr, MAX_PATH);
hr = SHELL32_GetDisplayNameOfChild(iface, pidl, dwFlags, pszPath, MAX_PATH);
}
TRACE ("-- (%p)->(%s)\n", This, strRet->u.cStr);
if (SUCCEEDED(hr)) {
/* Win9x always returns ANSI strings, NT always returns Unicode strings */
if (GetVersion() & 0x80000000) {
strRet->uType = STRRET_CSTR;
if (!WideCharToMultiByte(CP_ACP, 0, pszPath, -1, strRet->u.cStr, MAX_PATH,
NULL, NULL))
strRet->u.cStr[0] = '\0';
CoTaskMemFree(pszPath);
} else {
strRet->uType = STRRET_WSTR;
strRet->u.pOleStr = pszPath;
}
} else
CoTaskMemFree(pszPath);
TRACE ("-- (%p)->(%s)\n", This, strRet->uType == STRRET_CSTR ? strRet->u.cStr : debugstr_w(strRet->u.pOleStr));
return hr;
}
@ -844,25 +850,25 @@ static HRESULT WINAPI IShellFolder_fnSetNameOf (IShellFolder2 * iface,
LPITEMIDLIST * pPidlOut)
{
IGenericSFImpl *This = impl_from_IShellFolder2(iface);
WCHAR szSrc[MAX_PATH], szDest[MAX_PATH];
WCHAR szSrc[MAX_PATH + 1], szDest[MAX_PATH + 1];
LPWSTR ptr;
BOOL bIsFolder = _ILIsFolder (ILFindLastID (pidl));
TRACE ("(%p)->(%p,pidl=%p,%s,%lu,%p)\n", This, hwndOwner, pidl,
TRACE ("(%p)->(%p,pidl=%p,%s,%u,%p)\n", This, hwndOwner, pidl,
debugstr_w (lpName), dwFlags, pPidlOut);
/* build source path */
MultiByteToWideChar(CP_ACP, 0, This->sPathTarget, -1, szSrc, MAX_PATH);
lstrcpynW(szSrc, This->sPathTarget, MAX_PATH);
ptr = PathAddBackslashW (szSrc);
if (ptr)
_ILSimpleGetTextW (pidl, ptr, MAX_PATH - (ptr - szSrc));
_ILSimpleGetTextW (pidl, ptr, MAX_PATH + 1 - (ptr - szSrc));
/* build destination path */
if (dwFlags == SHGDN_NORMAL || dwFlags & SHGDN_INFOLDER) {
MultiByteToWideChar(CP_ACP, 0, This->sPathTarget, -1, szDest, MAX_PATH);
lstrcpynW(szDest, This->sPathTarget, MAX_PATH);
ptr = PathAddBackslashW (szDest);
if (ptr)
lstrcpynW(ptr, lpName, MAX_PATH - (ptr - szDest));
lstrcpynW(ptr, lpName, MAX_PATH + 1 - (ptr - szDest));
} else
lstrcpynW(szDest, lpName, MAX_PATH);
@ -969,6 +975,8 @@ IShellFolder_fnGetDetailsOf (IShellFolder2 * iface, LPCITEMIDLIST pidl,
psd->str.u.cStr, MAX_PATH);
return S_OK;
} else {
hr = S_OK;
psd->str.uType = STRRET_CSTR;
/* the data from the pidl */
switch (iColumn) {
case 0: /* name */
@ -988,8 +996,6 @@ IShellFolder_fnGetDetailsOf (IShellFolder2 * iface, LPCITEMIDLIST pidl,
_ILGetFileAttributes (pidl, psd->str.u.cStr, MAX_PATH);
break;
}
hr = S_OK;
psd->str.uType = STRRET_CSTR;
}
return hr;
@ -1038,7 +1044,7 @@ ISFHelper_fnQueryInterface (ISFHelper * iface, REFIID riid, LPVOID * ppvObj)
{
IGenericSFImpl *This = impl_from_ISFHelper(iface);
TRACE ("(%p)->(count=%lu)\n", This, This->ref);
TRACE ("(%p)->(count=%u)\n", This, This->ref);
return IUnknown_QueryInterface (This->pUnkOuter, riid, ppvObj);
}
@ -1047,7 +1053,7 @@ static ULONG WINAPI ISFHelper_fnAddRef (ISFHelper * iface)
{
IGenericSFImpl *This = impl_from_ISFHelper(iface);
TRACE ("(%p)->(count=%lu)\n", This, This->ref);
TRACE ("(%p)->(count=%u)\n", This, This->ref);
return IUnknown_AddRef (This->pUnkOuter);
}
@ -1068,20 +1074,21 @@ static ULONG WINAPI ISFHelper_fnRelease (ISFHelper * iface)
*/
static HRESULT WINAPI
ISFHelper_fnGetUniqueName (ISFHelper * iface, LPSTR lpName, UINT uLen)
ISFHelper_fnGetUniqueName (ISFHelper * iface, LPWSTR pwszName, UINT uLen)
{
IGenericSFImpl *This = impl_from_ISFHelper(iface);
IEnumIDList *penum;
HRESULT hr;
char szText[MAX_PATH];
const char *szNewFolder = "New Folder";
WCHAR wszText[MAX_PATH];
const WCHAR wszNewFolder[] = {'N','e','w',' ','F','o','l','d','e','r',0 };
const WCHAR wszFormat[] = {'%','s',' ','%','d',0 };
TRACE ("(%p)(%s %u)\n", This, lpName, uLen);
TRACE ("(%p)(%p %u)\n", This, pwszName, uLen);
if (uLen < strlen (szNewFolder) + 4)
if (uLen < sizeof(wszNewFolder)/sizeof(WCHAR) + 3)
return E_POINTER;
strcpy (lpName, szNewFolder);
lstrcpynW (pwszName, wszNewFolder, uLen);
hr = IShellFolder_fnEnumObjects (_IShellFolder2_ (This), 0,
SHCONTF_FOLDERS | SHCONTF_NONFOLDERS | SHCONTF_INCLUDEHIDDEN, &penum);
@ -1094,9 +1101,9 @@ next:
IEnumIDList_Reset (penum);
while (S_OK == IEnumIDList_Next (penum, 1, &pidl, &dwFetched) &&
dwFetched) {
_ILSimpleGetText (pidl, szText, MAX_PATH);
if (0 == strcasecmp (szText, lpName)) {
sprintf (lpName, "%s %d", szNewFolder, i++);
_ILSimpleGetTextW (pidl, wszText, MAX_PATH);
if (0 == lstrcmpiW (wszText, pwszName)) {
snprintfW (pwszName, uLen, wszFormat, wszNewFolder, i++);
if (i > 99) {
hr = E_FAIL;
break;
@ -1117,44 +1124,76 @@ next:
*/
static HRESULT WINAPI
ISFHelper_fnAddFolder (ISFHelper * iface, HWND hwnd, LPCSTR lpName,
ISFHelper_fnAddFolder (ISFHelper * iface, HWND hwnd, LPCWSTR pwszName,
LPITEMIDLIST * ppidlOut)
{
IGenericSFImpl *This = impl_from_ISFHelper(iface);
char lpstrNewDir[MAX_PATH];
WCHAR wszNewDir[MAX_PATH];
DWORD bRes;
HRESULT hres = E_FAIL;
TRACE ("(%p)(%s %p)\n", This, lpName, ppidlOut);
TRACE ("(%p)(%s %p)\n", This, debugstr_w(pwszName), ppidlOut);
strcpy (lpstrNewDir, This->sPathTarget);
PathAppendA(lpstrNewDir, lpName);
wszNewDir[0] = 0;
if (This->sPathTarget)
lstrcpynW(wszNewDir, This->sPathTarget, MAX_PATH);
PathAppendW(wszNewDir, pwszName);
bRes = CreateDirectoryA (lpstrNewDir, NULL);
bRes = CreateDirectoryW (wszNewDir, NULL);
if (bRes) {
SHChangeNotify (SHCNE_MKDIR, SHCNF_PATHA, lpstrNewDir, NULL);
SHChangeNotify (SHCNE_MKDIR, SHCNF_PATHW, wszNewDir, NULL);
hres = S_OK;
if (ppidlOut)
hres = _ILCreateFromPathA(lpstrNewDir, ppidlOut);
hres = _ILCreateFromPathW(wszNewDir, ppidlOut);
} else {
char lpstrText[128 + MAX_PATH];
char lpstrTempText[128];
char lpstrCaption[256];
WCHAR wszText[128 + MAX_PATH];
WCHAR wszTempText[128];
WCHAR wszCaption[256];
/* Cannot Create folder because of permissions */
LoadStringA (shell32_hInstance, IDS_CREATEFOLDER_DENIED, lpstrTempText,
sizeof (lpstrTempText));
LoadStringA (shell32_hInstance, IDS_CREATEFOLDER_CAPTION, lpstrCaption,
sizeof (lpstrCaption));
sprintf (lpstrText, lpstrTempText, lpstrNewDir);
MessageBoxA (hwnd, lpstrText, lpstrCaption, MB_OK | MB_ICONEXCLAMATION);
LoadStringW (shell32_hInstance, IDS_CREATEFOLDER_DENIED, wszTempText,
sizeof (wszTempText));
LoadStringW (shell32_hInstance, IDS_CREATEFOLDER_CAPTION, wszCaption,
sizeof (wszCaption));
sprintfW (wszText, wszTempText, wszNewDir);
MessageBoxW (hwnd, wszText, wszCaption, MB_OK | MB_ICONEXCLAMATION);
}
return hres;
}
/****************************************************************************
* build_paths_list
*
* Builds a list of paths like the one used in SHFileOperation from a table of
* PIDLs relative to the given base folder
*/
static WCHAR *build_paths_list(LPCWSTR wszBasePath, int cidl, LPCITEMIDLIST *pidls)
{
WCHAR *wszPathsList;
WCHAR *wszListPos;
int iPathLen;
int i;
iPathLen = lstrlenW(wszBasePath);
wszPathsList = HeapAlloc(GetProcessHeap(), 0, MAX_PATH*sizeof(WCHAR)*cidl+1);
wszListPos = wszPathsList;
for (i = 0; i < cidl; i++) {
if (!_ILIsFolder(pidls[i]) && !_ILIsValue(pidls[i]))
continue;
lstrcpynW(wszListPos, wszBasePath, MAX_PATH);
/* FIXME: abort if path too long */
_ILSimpleGetTextW(pidls[i], wszListPos+iPathLen, MAX_PATH-iPathLen);
wszListPos += lstrlenW(wszListPos)+1;
}
*wszListPos=0;
return wszPathsList;
}
/****************************************************************************
* ISFHelper_fnDeleteItems
*
@ -1165,52 +1204,60 @@ ISFHelper_fnDeleteItems (ISFHelper * iface, UINT cidl, LPCITEMIDLIST * apidl)
{
IGenericSFImpl *This = impl_from_ISFHelper(iface);
UINT i;
char szPath[MAX_PATH];
BOOL bConfirm = TRUE;
SHFILEOPSTRUCTW op;
WCHAR wszPath[MAX_PATH];
WCHAR *wszPathsList;
HRESULT ret;
WCHAR *wszCurrentPath;
TRACE ("(%p)(%u %p)\n", This, cidl, apidl);
if (cidl==0) return S_OK;
/* deleting multiple items so give a slightly different warning */
if (cidl != 1) {
char tmp[8];
if (This->sPathTarget)
lstrcpynW(wszPath, This->sPathTarget, MAX_PATH);
else
wszPath[0] = '\0';
PathAddBackslashW(wszPath);
wszPathsList = build_paths_list(wszPath, cidl, apidl);
snprintf (tmp, sizeof (tmp), "%d", cidl);
if (!SHELL_ConfirmDialog(ASK_DELETE_MULTIPLE_ITEM, tmp))
return E_FAIL;
bConfirm = FALSE;
ZeroMemory(&op, sizeof(op));
op.hwnd = GetActiveWindow();
op.wFunc = FO_DELETE;
op.pFrom = wszPathsList;
op.fFlags = FOF_ALLOWUNDO;
if (SHFileOperationW(&op))
{
WARN("SHFileOperation failed\n");
ret = E_FAIL;
}
else
ret = S_OK;
for (i = 0; i < cidl; i++) {
strcpy (szPath, This->sPathTarget);
PathAddBackslashA (szPath);
_ILSimpleGetText (apidl[i], szPath + strlen (szPath), MAX_PATH);
/* we currently need to manually send the notifies */
wszCurrentPath = wszPathsList;
for (i = 0; i < cidl; i++)
{
LONG wEventId;
if (_ILIsFolder (apidl[i])) {
LPITEMIDLIST pidl;
if (_ILIsFolder(apidl[i]))
wEventId = SHCNE_RMDIR;
else if (_ILIsValue(apidl[i]))
wEventId = SHCNE_DELETE;
else
continue;
TRACE ("delete %s\n", szPath);
if (!SHELL_DeleteDirectoryA (szPath, bConfirm)) {
TRACE ("delete %s failed, bConfirm=%d\n", szPath, bConfirm);
return E_FAIL;
}
pidl = ILCombine (This->pidlRoot, apidl[i]);
SHChangeNotify (SHCNE_RMDIR, SHCNF_IDLIST, pidl, NULL);
SHFree (pidl);
} else if (_ILIsValue (apidl[i])) {
LPITEMIDLIST pidl;
TRACE ("delete %s\n", szPath);
if (!SHELL_DeleteFileA (szPath, bConfirm)) {
TRACE ("delete %s failed, bConfirm=%d\n", szPath, bConfirm);
return E_FAIL;
}
pidl = ILCombine (This->pidlRoot, apidl[i]);
SHChangeNotify (SHCNE_DELETE, SHCNF_IDLIST, pidl, NULL);
SHFree (pidl);
/* check if file exists */
if (GetFileAttributesW(wszCurrentPath) == INVALID_FILE_ATTRIBUTES)
{
LPITEMIDLIST pidl = ILCombine(This->pidlRoot, apidl[i]);
SHChangeNotify(wEventId, SHCNF_IDLIST, pidl, NULL);
SHFree(pidl);
}
wszCurrentPath += lstrlenW(wszCurrentPath)+1;
}
return S_OK;
HeapFree(GetProcessHeap(), 0, wszPathsList);
return ret;
}
/****************************************************************************
@ -1233,59 +1280,22 @@ ISFHelper_fnCopyItems (ISFHelper * iface, IShellFolder * pSFFrom, UINT cidl,
IShellFolder_QueryInterface (pSFFrom, &IID_IPersistFolder2,
(LPVOID *) & ppf2);
if (ppf2)
{
if (ppf2) {
LPITEMIDLIST pidl;
if (SUCCEEDED (IPersistFolder2_GetCurFolder (ppf2, &pidl)))
{
for (i = 0; i < cidl; i++)
{
if (SUCCEEDED (IPersistFolder2_GetCurFolder (ppf2, &pidl))) {
for (i = 0; i < cidl; i++) {
SHGetPathFromIDListA (pidl, szSrcPath);
PathAddBackslashA (szSrcPath);
_ILSimpleGetText (apidl[i], szSrcPath + strlen (szSrcPath),
MAX_PATH);
strcpy (szDstPath, This->sPathTarget);
if (!WideCharToMultiByte(CP_ACP, 0, This->sPathTarget, -1, szDstPath, MAX_PATH, NULL, NULL))
szDstPath[0] = '\0';
PathAddBackslashA (szDstPath);
_ILSimpleGetText (apidl[i], szDstPath + strlen (szDstPath),
MAX_PATH);
TRACE ("copy %s to %s\n", szSrcPath, szDstPath);
if (fileMoving)
{
fileMoving = FALSE;
SHNotifyMoveFileA(szSrcPath, szDstPath);
}
else
{
SHNotifyCopyFileA(szSrcPath, szDstPath, TRUE);
}
/* FIXME: to work with folders we need SHFileOperation!
SHFILEOPSTRUCTA op;
if (fileMoving)
{
op.wFunc = FO_MOVE;
fileMoving = FALSE;
}
else
{
op.wFunc = FO_COPY;
}
op.pTo = szDstPath;
op.pFrom = szSrcPath;
op.fFlags = FOF_SIMPLEPROGRESS;
op.hwnd = NULL;
op.hNameMappings = NULL;
op.lpszProgressTitle = NULL;
UINT bRes = SHFileOperationA(&op);
DbgPrint("CopyItems SHFileOperationA 0x%08x\n", bRes);
*/
MESSAGE ("would copy %s to %s\n", szSrcPath, szDstPath);
}
SHFree (pidl);
}
@ -1329,7 +1339,7 @@ IFSFldr_PersistFolder3_AddRef (IPersistFolder3 * iface)
{
IGenericSFImpl *This = impl_from_IPersistFolder3(iface);
TRACE ("(%p)->(count=%lu)\n", This, This->ref);
TRACE ("(%p)->(count=%u)\n", This, This->ref);
return IUnknown_AddRef (This->pUnkOuter);
}
@ -1343,7 +1353,7 @@ IFSFldr_PersistFolder3_Release (IPersistFolder3 * iface)
{
IGenericSFImpl *This = impl_from_IPersistFolder3(iface);
TRACE ("(%p)->(count=%lu)\n", This, This->ref);
TRACE ("(%p)->(count=%u)\n", This, This->ref);
return IUnknown_Release (This->pUnkOuter);
}
@ -1374,26 +1384,28 @@ IFSFldr_PersistFolder3_GetClassID (IPersistFolder3 * iface, CLSID * lpClassId)
static HRESULT WINAPI
IFSFldr_PersistFolder3_Initialize (IPersistFolder3 * iface, LPCITEMIDLIST pidl)
{
char sTemp[MAX_PATH];
WCHAR wszTemp[MAX_PATH];
IGenericSFImpl *This = impl_from_IPersistFolder3(iface);
TRACE ("(%p)->(%p)\n", This, pidl);
if (This->pidlRoot)
SHFree (This->pidlRoot); /* free the old pidl */
SHFree (This->pidlRoot); /* free the old pidl */
This->pidlRoot = ILClone (pidl); /* set my pidl */
if (This->sPathTarget)
SHFree (This->sPathTarget);
SHFree (This->sPathTarget);
This->sPathTarget = NULL;
/* set my path */
if (SHGetPathFromIDListA (pidl, sTemp)) {
This->sPathTarget = SHAlloc (strlen (sTemp) + 1);
strcpy (This->sPathTarget, sTemp);
if (SHGetPathFromIDListW (pidl, wszTemp)) {
int len = strlenW(wszTemp);
This->sPathTarget = SHAlloc((len + 1) * sizeof(WCHAR));
if (!This->sPathTarget)
return E_OUTOFMEMORY;
memcpy(This->sPathTarget, wszTemp, (len + 1) * sizeof(WCHAR));
}
TRACE ("--(%p)->(%s)\n", This, This->sPathTarget);
TRACE ("--(%p)->(%s)\n", This, debugstr_w(This->sPathTarget));
return S_OK;
}
@ -1423,13 +1435,13 @@ IFSFldr_PersistFolder3_InitializeEx (IPersistFolder3 * iface,
IBindCtx * pbc, LPCITEMIDLIST pidlRoot,
const PERSIST_FOLDER_TARGET_INFO * ppfti)
{
char sTemp[MAX_PATH];
WCHAR wszTemp[MAX_PATH];
IGenericSFImpl *This = impl_from_IPersistFolder3(iface);
TRACE ("(%p)->(%p,%p,%p)\n", This, pbc, pidlRoot, ppfti);
if (ppfti)
TRACE ("--%p %s %s 0x%08lx 0x%08x\n",
TRACE ("--%p %s %s 0x%08x 0x%08x\n",
ppfti->pidlTargetFolder, debugstr_w (ppfti->szTargetParsingName),
debugstr_w (ppfti->szNetworkProvider), ppfti->dwAttributes,
ppfti->csidl);
@ -1454,20 +1466,33 @@ IFSFldr_PersistFolder3_InitializeEx (IPersistFolder3 * iface,
*/
if (ppfti) {
if (ppfti->csidl != -1) {
if (SHGetSpecialFolderPathA (0, sTemp, ppfti->csidl,
if (SHGetSpecialFolderPathW (0, wszTemp, ppfti->csidl,
ppfti->csidl & CSIDL_FLAG_CREATE)) {
__SHCloneStrA (&This->sPathTarget, sTemp);
int len = strlenW(wszTemp);
This->sPathTarget = SHAlloc((len + 1) * sizeof(WCHAR));
if (!This->sPathTarget)
return E_OUTOFMEMORY;
memcpy(This->sPathTarget, wszTemp, (len + 1) * sizeof(WCHAR));
}
} else if (ppfti->szTargetParsingName[0]) {
__SHCloneStrWtoA (&This->sPathTarget, ppfti->szTargetParsingName);
int len = strlenW(ppfti->szTargetParsingName);
This->sPathTarget = SHAlloc((len + 1) * sizeof(WCHAR));
if (!This->sPathTarget)
return E_OUTOFMEMORY;
memcpy(This->sPathTarget, ppfti->szTargetParsingName,
(len + 1) * sizeof(WCHAR));
} else if (ppfti->pidlTargetFolder) {
if (SHGetPathFromIDListA (ppfti->pidlTargetFolder, sTemp)) {
__SHCloneStrA (&This->sPathTarget, sTemp);
if (SHGetPathFromIDListW(ppfti->pidlTargetFolder, wszTemp)) {
int len = strlenW(wszTemp);
This->sPathTarget = SHAlloc((len + 1) * sizeof(WCHAR));
if (!This->sPathTarget)
return E_OUTOFMEMORY;
memcpy(This->sPathTarget, wszTemp, (len + 1) * sizeof(WCHAR));
}
}
}
TRACE ("--(%p)->(target=%s)\n", This, debugstr_a (This->sPathTarget));
TRACE ("--(%p)->(target=%s)\n", This, debugstr_w(This->sPathTarget));
pdump (This->pidlRoot);
return (This->sPathTarget) ? S_OK : E_FAIL;
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -18,7 +18,7 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
@ -109,7 +109,7 @@ BOOL SHELL32_GetCustomFolderAttribute(
/***************************************************************************
* GetNextElement (internal function)
*
* gets a part of a string till the first backslash
* Gets a part of a string till the first backslash.
*
* PARAMETERS
* pszNext [IN] string to get the element from
@ -125,7 +125,7 @@ LPCWSTR GetNextElementW (LPCWSTR pszNext, LPWSTR pszOut, DWORD dwOut)
LPCWSTR pszTail = pszNext;
DWORD dwCopy;
TRACE ("(%s %p 0x%08lx)\n", debugstr_w (pszNext), pszOut, dwOut);
TRACE ("(%s %p 0x%08x)\n", debugstr_w (pszNext), pszOut, dwOut);
*pszOut = 0x0000;
@ -143,7 +143,7 @@ LPCWSTR GetNextElementW (LPCWSTR pszNext, LPWSTR pszOut, DWORD dwOut)
else
pszTail = NULL;
TRACE ("--(%s %s 0x%08lx %p)\n", debugstr_w (pszNext), debugstr_w (pszOut), dwOut, pszTail);
TRACE ("--(%s %s 0x%08x %p)\n", debugstr_w (pszNext), debugstr_w (pszOut), dwOut, pszTail);
return pszTail;
}
@ -178,7 +178,7 @@ HRESULT SHELL32_ParseNextElement (IShellFolder2 * psf, HWND hwndOwner, LPBC pbc,
ILFree (*pidlInOut);
*pidlInOut = pidlTemp;
TRACE ("-- pidl=%p ret=0x%08lx\n", pidlInOut ? *pidlInOut : NULL, hr);
TRACE ("-- pidl=%p ret=0x%08x\n", pidlInOut ? *pidlInOut : NULL, hr);
return hr;
}
@ -189,17 +189,19 @@ HRESULT SHELL32_ParseNextElement (IShellFolder2 * psf, HWND hwndOwner, LPBC pbc,
* via IPersistFolder3 or IPersistFolder.
*
* NOTES
* pathRoot can be NULL for Folders beeing a drive.
* In this case the absolute path is build from pidlChild (eg. C:)
* pathRoot can be NULL for Folders being a drive.
* In this case the absolute path is built from pidlChild (eg. C:)
*/
static HRESULT SHELL32_CoCreateInitSF (LPCITEMIDLIST pidlRoot, LPCWSTR pathRoot,
LPCITEMIDLIST pidlChild, REFCLSID clsid, REFIID riid, LPVOID * ppvOut)
LPCITEMIDLIST pidlChild, REFCLSID clsid, LPVOID * ppvOut)
{
HRESULT hr;
TRACE ("%p %s %p\n", pidlRoot, debugstr_w(pathRoot), pidlChild);
if (SUCCEEDED ((hr = SHCoCreateInstance (NULL, clsid, NULL, riid, ppvOut)))) {
hr = SHCoCreateInstance(NULL, clsid, NULL, &IID_IShellFolder, ppvOut);
if (SUCCEEDED (hr))
{
LPITEMIDLIST pidlAbsolute = ILCombine (pidlRoot, pidlChild);
IPersistFolder *pPF;
IPersistFolder3 *ppf;
@ -222,13 +224,10 @@ static HRESULT SHELL32_CoCreateInitSF (LPCITEMIDLIST pidlRoot, LPCWSTR pathRoot,
}
if (pidlChild) {
LPCSTR pszChild = _ILGetTextPointer(pidlChild);
int len = lstrlenW(ppfti.szTargetParsingName);
if (pszChild)
MultiByteToWideChar (CP_ACP, 0, pszChild, -1, ppfti.szTargetParsingName + len, MAX_PATH - len);
else
hr = E_INVALIDARG;
if (!_ILSimpleGetTextW(pidlChild, ppfti.szTargetParsingName + len, MAX_PATH - len))
hr = E_INVALIDARG;
}
IPersistFolder3_InitializeEx (ppf, NULL, pidlAbsolute, &ppfti);
@ -240,7 +239,7 @@ static HRESULT SHELL32_CoCreateInitSF (LPCITEMIDLIST pidlRoot, LPCWSTR pathRoot,
}
ILFree (pidlAbsolute);
}
TRACE ("-- (%p) ret=0x%08lx\n", *ppvOut, hr);
TRACE ("-- (%p) ret=0x%08x\n", *ppvOut, hr);
return hr;
}
@ -278,7 +277,7 @@ HRESULT SHELL32_BindToChild (LPCITEMIDLIST pidlRoot,
if ((clsid = _ILGetGUIDPointer (pidlChild))) {
/* virtual folder */
hr = SHELL32_CoCreateInitSF (pidlRoot, pathRoot, pidlChild, clsid, &IID_IShellFolder, (LPVOID *) & pSF);
hr = SHELL32_CoCreateInitSF (pidlRoot, pathRoot, pidlChild, clsid, (LPVOID *)&pSF);
} else {
/* file system folder */
CLSID clsidFolder = CLSID_ShellFSFolder;
@ -290,13 +289,15 @@ HRESULT SHELL32_BindToChild (LPCITEMIDLIST pidlRoot,
lstrcpynW(wszFolderPath, pathRoot, MAX_PATH);
pwszPathTail = PathAddBackslashW(wszFolderPath);
}
MultiByteToWideChar(CP_ACP, 0, _ILGetTextPointer(pidlChild), -1, pwszPathTail, MAX_PATH - (int)(pwszPathTail - wszFolderPath));
_ILSimpleGetTextW(pidlChild,pwszPathTail,MAX_PATH - (int)(pwszPathTail - wszFolderPath));
if (SHELL32_GetCustomFolderAttributeFromPath (wszFolderPath,
wszDotShellClassInfo, wszCLSID, wszCLSIDValue, CHARS_IN_GUID))
CLSIDFromString (wszCLSIDValue, &clsidFolder);
hr = SHELL32_CoCreateInitSF (pidlRoot, pathRoot, pidlChild,
&clsidFolder, &IID_IShellFolder, (LPVOID *)&pSF);
hr = SHELL32_CoCreateInitSF (pidlRoot, pathRoot, pidlChild,
&clsidFolder, (LPVOID *)&pSF);
}
ILFree (pidlChild);
@ -311,7 +312,7 @@ HRESULT SHELL32_BindToChild (LPCITEMIDLIST pidlRoot,
IShellFolder_Release (pSF);
}
TRACE ("-- returning (%p) %08lx\n", *ppvOut, hr);
TRACE ("-- returning (%p) %08x\n", *ppvOut, hr);
return hr;
}
@ -319,7 +320,7 @@ HRESULT SHELL32_BindToChild (LPCITEMIDLIST pidlRoot,
/***********************************************************************
* SHELL32_GetDisplayNameOfChild
*
* Retrives the display name of a child object of a shellfolder.
* Retrieves the display name of a child object of a shellfolder.
*
* For a pidl eg. [subpidl1][subpidl2][subpidl3]:
* - it binds to the child shellfolder [subpidl1]
@ -331,12 +332,12 @@ HRESULT SHELL32_BindToChild (LPCITEMIDLIST pidlRoot,
* virtual folders with the registry key WantsFORPARSING set.
*/
HRESULT SHELL32_GetDisplayNameOfChild (IShellFolder2 * psf,
LPCITEMIDLIST pidl, DWORD dwFlags, LPSTR szOut, DWORD dwOutLen)
LPCITEMIDLIST pidl, DWORD dwFlags, LPWSTR szOut, DWORD dwOutLen)
{
LPITEMIDLIST pidlFirst;
HRESULT hr = E_INVALIDARG;
TRACE ("(%p)->(pidl=%p 0x%08lx %p 0x%08lx)\n", psf, pidl, dwFlags, szOut, dwOutLen);
TRACE ("(%p)->(pidl=%p 0x%08x %p 0x%08x)\n", psf, pidl, dwFlags, szOut, dwOutLen);
pdump (pidl);
pidlFirst = ILCloneFirst (pidl);
@ -350,7 +351,8 @@ HRESULT SHELL32_GetDisplayNameOfChild (IShellFolder2 * psf,
hr = IShellFolder_GetDisplayNameOf (psfChild, pidlNext, dwFlags, &strTemp);
if (SUCCEEDED (hr)) {
hr = StrRetToStrNA (szOut, dwOutLen, &strTemp, pidlNext);
if(!StrRetToStrNW (szOut, dwOutLen, &strTemp, pidlNext))
hr = E_FAIL;
}
IShellFolder_Release (psfChild);
}
@ -358,7 +360,7 @@ HRESULT SHELL32_GetDisplayNameOfChild (IShellFolder2 * psf,
} else
hr = E_OUTOFMEMORY;
TRACE ("-- ret=0x%08lx %s\n", hr, szOut);
TRACE ("-- ret=0x%08x %s\n", hr, debugstr_w(szOut));
return hr;
}
@ -367,7 +369,7 @@ HRESULT SHELL32_GetDisplayNameOfChild (IShellFolder2 * psf,
* SHELL32_GetItemAttributes
*
* NOTES
* observerd values:
* Observed values:
* folder: 0xE0000177 FILESYSTEM | HASSUBFOLDER | FOLDER
* file: 0x40000177 FILESYSTEM
* drive: 0xf0000144 FILESYSTEM | HASSUBFOLDER | FOLDER | FILESYSANCESTOR
@ -379,11 +381,13 @@ HRESULT SHELL32_GetDisplayNameOfChild (IShellFolder2 * psf,
* file: 0x40400177 FILESYSTEM | CANMONIKER
* drive 0xF0400154 FILESYSTEM | HASSUBFOLDER | FOLDER | FILESYSANCESTOR | CANMONIKER | CANRENAME (LABEL)
*
* This function does not set flags!! It only resets flags when necessary.
* According to the MSDN documentation this function should not set flags. It claims only to reset flags when necessary.
* However it turns out the native shell32.dll _sets_ flags in several cases - so do we.
*/
HRESULT SHELL32_GetItemAttributes (IShellFolder * psf, LPCITEMIDLIST pidl, LPDWORD pdwAttributes)
{
DWORD dwAttributes;
BOOL has_guid;
static const DWORD dwSupportedAttr=
SFGAO_CANCOPY | /*0x00000001 */
SFGAO_CANMOVE | /*0x00000002 */
@ -400,24 +404,43 @@ HRESULT SHELL32_GetItemAttributes (IShellFolder * psf, LPCITEMIDLIST pidl, LPDWO
SFGAO_FILESYSTEM | /*0x40000000 */
SFGAO_HASSUBFOLDER; /*0x80000000 */
TRACE ("0x%08lx\n", *pdwAttributes);
TRACE ("0x%08x\n", *pdwAttributes);
if (*pdwAttributes & ~dwSupportedAttr)
{
WARN ("attributes 0x%08lx not implemented\n", (*pdwAttributes & ~dwSupportedAttr));
WARN ("attributes 0x%08x not implemented\n", (*pdwAttributes & ~dwSupportedAttr));
*pdwAttributes &= dwSupportedAttr;
}
has_guid = _ILGetGUIDPointer(pidl) != NULL;
dwAttributes = *pdwAttributes;
if (_ILIsDrive (pidl)) {
*pdwAttributes &= SFGAO_HASSUBFOLDER|SFGAO_FILESYSTEM|SFGAO_FOLDER|SFGAO_FILESYSANCESTOR|
SFGAO_DROPTARGET|SFGAO_HASPROPSHEET|SFGAO_CANLINK;
} else if (_ILGetGUIDPointer (pidl) && HCR_GetFolderAttributes(pidl, &dwAttributes)) {
} else if (has_guid && HCR_GetFolderAttributes(pidl, &dwAttributes)) {
*pdwAttributes = dwAttributes;
} else if (_ILGetDataPointer (pidl)) {
dwAttributes = _ILGetFileAttributes (pidl, NULL, 0);
if (!dwAttributes && has_guid) {
WCHAR path[MAX_PATH];
STRRET strret;
/* File attributes are not present in the internal PIDL structure, so get them from the file system. */
HRESULT hr = IShellFolder_GetDisplayNameOf(psf, pidl, SHGDN_FORPARSING, &strret);
if (SUCCEEDED(hr)) {
hr = StrRetToBufW(&strret, pidl, path, MAX_PATH);
/* call GetFileAttributes() only for file system paths, not for parsing names like "::{...}" */
if (SUCCEEDED(hr) && path[0]!=':')
dwAttributes = GetFileAttributesW(path);
}
}
/* Set common attributes */
*pdwAttributes |= SFGAO_FILESYSTEM | SFGAO_DROPTARGET | SFGAO_HASPROPSHEET | SFGAO_CANDELETE |
SFGAO_CANRENAME | SFGAO_CANLINK | SFGAO_CANMOVE | SFGAO_CANCOPY;
@ -462,7 +485,7 @@ HRESULT SHELL32_GetItemAttributes (IShellFolder * psf, LPCITEMIDLIST pidl, LPDWO
} else {
*pdwAttributes &= SFGAO_HASSUBFOLDER|SFGAO_FOLDER|SFGAO_FILESYSANCESTOR|SFGAO_DROPTARGET|SFGAO_HASPROPSHEET|SFGAO_CANRENAME|SFGAO_CANLINK;
}
TRACE ("-- 0x%08lx\n", *pdwAttributes);
TRACE ("-- 0x%08x\n", *pdwAttributes);
return S_OK;
}

View file

@ -15,7 +15,7 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "windef.h"
@ -88,6 +88,7 @@ END
#include "shell32_Si.rc"
#include "shell32_Sk.rc"
#include "shell32_Sv.rc"
#include "shell32_Tr.rc"
#include "shell32_Uk.rc"
#include "shell32_Wa.rc"
#include "shell32_Zh.rc"

View file

@ -1,6 +1,5 @@
/*
* Copyright 2000 Juergen Schmied
* Copyright 2006 Ged Murphy
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@ -14,7 +13,7 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef __WINE_SHELL_RES_H
@ -34,6 +33,8 @@
#define IDS_SHV_COLUMN9 15
#define IDS_SHV_COLUMN10 16
#define IDS_SHV_COLUMN11 17
#define IDS_SHV_COLUMN_DELFROM 18
#define IDS_SHV_COLUMN_DELDATE 19
#define IDS_DESKTOP 20
#define IDS_MYCOMPUTER 21
@ -45,15 +46,6 @@
#define IDS_VIEW_LIST 26
#define IDS_VIEW_DETAILS 27
#define IDS_CREATEFOLDER_DENIED 30
#define IDS_CREATEFOLDER_CAPTION 31
#define IDS_DELETEITEM_CAPTION 32
#define IDS_DELETEFOLDER_CAPTION 33
#define IDS_DELETEITEM_TEXT 34
#define IDS_DELETEMULTIPLE_TEXT 35
#define IDS_OVERWRITEFILE_CAPTION 36
#define IDS_OVERWRITEFILE_TEXT 37
#define IDS_RESTART_TITLE 40
#define IDS_RESTART_PROMPT 41
#define IDS_SHUTDOWN_TITLE 42
@ -90,166 +82,82 @@
#define IDS_DRIVE_CDROM 73
#define IDS_DRIVE_NETWORK 74
#define IDS_CREATEFOLDER_DENIED 128
#define IDS_CREATEFOLDER_CAPTION 129
#define IDS_DELETEITEM_CAPTION 130
#define IDS_DELETEFOLDER_CAPTION 131
#define IDS_DELETEITEM_TEXT 132
#define IDS_DELETEMULTIPLE_TEXT 133
#define IDS_OVERWRITEFILE_CAPTION 134
#define IDS_OVERWRITEFILE_TEXT 135
#define IDS_DELETESELECTED_TEXT 136
#define IDS_TRASHFOLDER_TEXT 137
#define IDS_TRASHITEM_TEXT 138
#define IDS_TRASHMULTIPLE_TEXT 139
#define IDS_CANTTRASH_TEXT 140
#define IDS_OVERWRITEFOLDER_TEXT 141
/* Note: this string is referenced from the registry*/
#define IDS_RECYCLEBIN_FOLDER_NAME 8964
#define IDD_ICON 0x4300
#define IDD_MESSAGE 0x4301
/* these IDs are the same as on native */
#define IDD_YESTOALL 0x3207
/* browse for folder dialog box */
#define IDD_MAKENEWFOLDER 0x3746
#define IDD_FOLDERTEXT 0x3745
#define IDD_FOLDER 0x3744
#define IDD_STATUS 0x3743
#define IDD_TITLE 0x3742
#define IDD_TREEVIEW 0x3741
#define SHELL_EXTENDED_SHORTCUT_DLG 0x4000
#define RUN_AS_DIALOG 0x4001
/*
* Do not alter the icon, bitmap + avi resource
* numbers they sync with the Windows counterpart
*/
/* ICONS */
#define IDI_SHELL_DOCUMENT 1
#define IDI_SHELL_RICH_TEXT 2
#define IDI_SHELL_EXE 3
#define IDI_SHELL_FOLDER 4
#define IDI_SHELL_FOLDER_OPEN 5
#define IDI_SHELL_5_12_FLOPPY 6
#define IDI_SHELL_3_14_FLOPPY 7
#define IDI_SHELL_FLOPPY 8
#define IDI_SHELL_DRIVE 9
#define IDI_SHELL_DOCUMENT 1
#define IDI_SHELL_FOLDER 4
#define IDI_SHELL_FOLDER_OPEN 5
#define IDI_SHELL_5_12_FLOPPY 6
#define IDI_SHELL_3_14_FLOPPY 7
#define IDI_SHELL_FLOPPY 8
#define IDI_SHELL_DRIVE 9
#define IDI_SHELL_NETDRIVE 10
#define IDI_SHELL_NETDRIVE2 11 //THIS SHOULD BE #define IDI_SHELL_NETDRIVE_OFF
#define IDI_SHELL_NETDRIVE2 11
#define IDI_SHELL_CDROM 12
#define IDI_SHELL_RAMDISK 13
#define IDI_SHELL_ENTIRE_NETWORK 14
#define IDI_SHELL_NETWORK 15
#define IDI_SHELL_MY_COMPUTER 16
#define IDI_SHELL_PRINTER 17
#define IDI_SHELL_MY_NETWORK_PLACES 18
#define IDI_SHELL_COMPUTERS_NEAR_ME 19
#define IDI_SHELL_PROGRAMS_FOLDER 20
#define IDI_SHELL_RECENT_DOCUMENTS 21
#define IDI_SHELL_CONTROL_PANEL 22
#define IDI_SHELL_FOLDER_SMALL_XP 20
#define IDI_SHELL_SEARCH 23
#define IDI_SHELL_HELP 24
#define IDI_SHELL_RUN 25
#define IDI_SHELL_SHUTDOWN 28
#define IDI_SHELL_SHARE 29
#define IDI_SHELL_FOLDER_OPEN_LARGE 29
#define IDI_SHELL_SHORTCUT 30
#define IDI_SHELL_FOLDER_OPEN_SMALL 31
#define IDI_SHELL_EMPTY_RECYCLE_BIN 32
#define IDI_SHELL_FULL_RECYCLE_BIN 33
#define IDI_SHELL_DESKTOP 35
#define IDI_SHELL_CONTROL_PANEL2 36
#define IDI_SHELL_PROGRAMS_FOLDER2 37
#define IDI_SHELL_CONTROL_PANEL 36
#define IDI_SHELL_PRINTERS_FOLDER 38
#define IDI_SHELL_FONTS_FOLDER 39
#define IDI_SHELL_TSKBAR_STARTMENU 40
#define IDI_SHELL_CD_MUSIC 41
#define IDI_SHELL_FAVORITES 44
#define IDI_SHELL_LOGOFF 45
#define IDI_SHELL_EXPLORER 46
#define IDI_SHELL_TRASH_FILE 142
#define IDI_SHELL_CONFIRM_DELETE 161
#define IDI_SHELL_MY_DOCUMENTS 235
#define IDI_SHELL_LOCKED 48
#define IDI_SHELL_FIND_IN_FILE 134
#define IDI_SHELL_CONTROL_PANEL3 137
#define IDI_SHELL_PRINTER2 138
#define IDI_SHELL_INF_FILE 151
#define IDI_SHELL_TEXT_FILE 152
#define IDI_SHELL_BAT_FILE 153
#define IDI_SHELL_SYSTEM_FILE 154
#define IDI_SHELL_FONT_FILE 155
#define IDI_SHELL_TT_FONT_FILE 156
#define IDI_SHELL_FONT_FILE2 157
#define IDI_SHELL_RUN2 160
#define IDI_SHELL_NETWORK_FOLDER 172
#define IDI_SHELL_EMPTY_RECYCLE_BIN1 191
#define IDI_SHELL_FULL_RECYCLE_BIN1 192
#define IDI_SHELL_TURN_OFF 221
#define IDI_SHELL_DVD_ROM 222
#define IDI_SHELL_MOVIE_FILE 224
#define IDI_SHELL_MUSIC_FILE 225
#define IDI_SHELL_CD_MUSIC2 228
#define IDI_SHELL_MY_DOCUMENTS 235
#define IDI_SHELL_MY_PICTURES 236
#define IDI_SHELL_MY_MUSIC 237
#define IDI_SHELL_MY_MOVIES 238
#define IDI_SHELL_PRINTER3 245
#define IDI_SHELL_CAMERA 248
#define IDI_SHELL_OVER_HEAD_PROJ 249
#define IDI_SHELL_DISPLAY 250
#define IDI_SHELL_PRINT_PICS 252
#define IDI_SHELL_EMPTY_RECYCLE_BIN3 254
#define IDI_SHELL_HELP1 263
#define IDI_SHELL_SENDMAIL 265
#define IDI_SHELL_ACCESSABILITY 268
#define IDI_SHELL_USERS 269
#define IDI_SHELL_SCREEN_COLORS 270
#define IDI_SHELL_ADD_REM_PROGRAMS 271
#define IDI_SHELL_TUNES 277
#define IDI_SHELL_USER_ACCOUNTS 279
#define IDI_SHELL_HELP_FILE 289
#define IDI_SHELL_GO 290
#define IDI_SHELL_DVD_DRIVE 291
#define IDI_SHELL_CD_ADD_MUSIC 292
#define IDI_SHELL_CD 293
#define IDI_SHELL_CD_ROM 294
#define IDI_SHELL_CDR 295
#define IDI_SHELL_CDRW 296
#define IDI_SHELL_DVD_RAM 297
#define IDI_SHELL_DVDR_ROM 298
#define IDI_SHELL_MP3_PLAYER 299
#define IDI_SHELL_CD_ROM1 302
#define IDI_SHELL_DVD_ROM1 304
#define IDI_SHELL_CAMERA1 309
#define IDI_SHELL_SCANNER 315
#define IDI_SHELL_CAMCORDER 317
#define IDI_SHELL_DVDRW_ROM 318
#define IDI_SHELL_NEW_FOLDER 319
#define IDI_SHELL_FAVOTITES 322
#define IDI_SHELL_SEARCH1 323
#define IDI_SHELL_HELP2 324
#define IDI_SHELL_LOGOFF1 325
#define IDI_SHELL_PROGRAMS_FOLDER1 326
#define IDI_SHELL_RECENT_DOCUMENTS1 327
#define IDI_SHELL_RUN1 328
#define IDI_SHELL_SHUTDOWN1 329
#define IDI_SHELL_CONTROL_PANEL1 330
#define IDI_SHELL_IDEA 1001
#define IDI_SHELL_HELP_FILE1 1004
#define IDI_SHELL_SHUTDOWN2 8240
/* BITMAPS */
#define IDB_SHELL_IEXPLORE_LG 204
#define IDB_SHELL_IEXPLORE1_LG 205
#define IDB_SHELL_IEXPLORE_SM 206
#define IDB_SHELL_IEXPLORE1_SM 207
#define IDB_SHELL_EXPLORER_LG 214
#define IDB_SHELL_EXPLORER1_LG 215
#define IDB_SHELL_EXPLORER_SM 216
#define IDB_SHELL_EXPLORER1_SM 217
#define IDB_SHELL_UNKNOWN1 225
#define IDB_SHELL_UNKNOWN2 226
#define IDB_SHELL_UNKNOWN3 227
#define IDB_SHELL_UNKNOWN4 228
#define IDB_SHELL_UNKNOWN5 230
#define IDB_SHELL_UNKNOWN6 231
#define IDB_SHELL_UNKNOWN7 245
/* AVI */
#define IDA_SHELL_COPY 160
#define IDA_SHELL_COPY1 161
#define IDA_SHELL_COPY2 167
#define IDA_SHELL_COPY3 168
#define IDA_SHELL_RECYCLE 162
#define IDA_SHELL_EMPTY_RECYCLE 163
#define IDA_SHELL_DELETE 164
#define IDA_SHELL_DELETE1 169
#define IDA_SHELL_DOWNLOAD 170
/*
AVI resources, windows shell32 has 14 of them: 150-152 and 160-170
FIXME: Need to add them, but for now just let them use the same: searching.avi
(also to limit shell32's size)
*/
#define IDR_AVI_SEARCH 150
#define IDR_AVI_SEARCHING 151
#define IDR_AVI_FINDCOMPUTER 152
#define IDR_AVI_FILEMOVE 160
#define IDR_AVI_FILECOPY 161
#define IDR_AVI_FILENUKE 163
#define IDR_AVI_FILEDELETE 164
#endif

View file

@ -16,9 +16,8 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include <string.h>
#define COBJMACROS
@ -30,7 +29,6 @@
#include "windef.h"
#include "wingdi.h"
#include "pidl.h"
#include "shlguid.h"
#include "shlobj.h"
#include "shell32_main.h"
@ -39,8 +37,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(shell);
extern BOOL fileMoving;
/**************************************************************************
* IContextMenu Implementation
*/
@ -113,7 +109,7 @@ static ULONG WINAPI ISVBgCm_fnAddRef(IContextMenu2 *iface)
BgCmImpl *This = (BgCmImpl *)iface;
ULONG refCount = InterlockedIncrement(&This->ref);
TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
TRACE("(%p)->(count=%u)\n", This, refCount - 1);
return refCount;
}
@ -126,7 +122,7 @@ static ULONG WINAPI ISVBgCm_fnRelease(IContextMenu2 *iface)
BgCmImpl *This = (BgCmImpl *)iface;
ULONG refCount = InterlockedDecrement(&This->ref);
TRACE("(%p)->(count=%li)\n", This, refCount + 1);
TRACE("(%p)->(count=%i)\n", This, refCount + 1);
if (!refCount)
{
@ -183,7 +179,7 @@ static HRESULT WINAPI ISVBgCm_fnQueryContextMenu(
}
DestroyMenu(hMyMenu);
TRACE("(%p)->returning 0x%lx\n",This,hr);
TRACE("(%p)->returning 0x%x\n",This,hr);
return hr;
}
@ -196,14 +192,14 @@ static void DoNewFolder(
{
BgCmImpl *This = (BgCmImpl *)iface;
ISFHelper * psfhlp;
char szName[MAX_PATH];
WCHAR wszName[MAX_PATH];
IShellFolder_QueryInterface(This->pSFParent, &IID_ISFHelper, (LPVOID*)&psfhlp);
if (psfhlp)
{
LPITEMIDLIST pidl;
ISFHelper_GetUniqueName(psfhlp, szName, MAX_PATH);
ISFHelper_AddFolder(psfhlp, 0, szName, &pidl);
ISFHelper_GetUniqueName(psfhlp, wszName, MAX_PATH);
ISFHelper_AddFolder(psfhlp, 0, wszName, &pidl);
if(psv)
{
@ -218,192 +214,6 @@ static void DoNewFolder(
}
}
/***************************************************************************/
static BOOL DoLink(LPCSTR pSrcFile, LPCSTR pDstFile)
{
IShellLinkA *psl = NULL;
IPersistFile *pPf = NULL;
HRESULT hres;
WCHAR widelink[MAX_PATH];
BOOL ret = FALSE;
CoInitialize(0);
hres = CoCreateInstance( &CLSID_ShellLink,
NULL,
CLSCTX_INPROC_SERVER,
&IID_IShellLinkA,
(LPVOID )&psl);
if(SUCCEEDED(hres))
{
hres = IShellLinkA_QueryInterface(psl, &IID_IPersistFile, (LPVOID *)&pPf);
if(FAILED(hres))
{
ERR("failed QueryInterface for IPersistFile %08lx\n", hres);
goto fail;
}
TRACE("shortcut point to %s\n", pSrcFile);
hres = IShellLinkA_SetPath(psl, pSrcFile);
if(FAILED(hres))
{
ERR("failed Set{IDList|Path} %08lx\n", hres);
goto fail;
}
MultiByteToWideChar(CP_ACP, 0, pDstFile, -1, widelink, MAX_PATH);
/* create the short cut */
hres = IPersistFile_Save(pPf, widelink, TRUE);
if(FAILED(hres))
{
ERR("failed IPersistFile::Save %08lx\n", hres);
IPersistFile_Release(pPf);
IShellLinkA_Release(psl);
goto fail;
}
hres = IPersistFile_SaveCompleted(pPf, widelink);
IPersistFile_Release(pPf);
IShellLinkA_Release(psl);
TRACE("shortcut %s has been created, result=%08lx\n", pDstFile, hres);
ret = TRUE;
}
else
{
ERR("CoCreateInstance failed, hres=%08lx\n", hres);
}
fail:
CoUninitialize();
return ret;
}
static BOOL MakeLink(IContextMenu2 *iface)
{
BgCmImpl *This = (BgCmImpl *)iface;
BOOL bSuccess = FALSE;
IDataObject * pda;
TRACE("\n");
if(SUCCEEDED(OleGetClipboard(&pda)))
{
STGMEDIUM medium;
FORMATETC formatetc;
TRACE("pda=%p\n", pda);
/* Set the FORMATETC structure*/
InitFormatEtc(formatetc, RegisterClipboardFormatA(CFSTR_SHELLIDLIST), TYMED_HGLOBAL);
/* Get the pidls from IDataObject */
if(SUCCEEDED(IDataObject_GetData(pda, &formatetc, &medium)))
{
LPITEMIDLIST * apidl;
LPITEMIDLIST pidl;
IShellFolder *psfFrom = NULL, *psfDesktop;
LPIDA lpcida = GlobalLock(medium.u.hGlobal);
TRACE("cida=%p\n", lpcida);
apidl = _ILCopyCidaToaPidl(&pidl, lpcida);
/* bind to the source shellfolder */
SHGetDesktopFolder(&psfDesktop);
if(psfDesktop)
{
IShellFolder_BindToObject(psfDesktop, pidl, NULL, &IID_IShellFolder, (LPVOID*)&psfFrom);
IShellFolder_Release(psfDesktop);
}
if (psfFrom)
{
/* get source and destination shellfolder */
IPersistFolder2 *ppfdst = NULL;
IPersistFolder2 *ppfsrc = NULL;
IShellFolder_QueryInterface(This->pSFParent, &IID_IPersistFolder2, (LPVOID*)&ppfdst);
IShellFolder_QueryInterface(psfFrom, &IID_IPersistFolder2, (LPVOID*)&ppfsrc);
TRACE("[%p,%p]\n",ppfdst,ppfsrc);
/* do the link/s */
/* hack to get desktop path */
if ( (ppfdst && ppfsrc) || (This->bDesktop && ppfsrc) )
{
int i;
char szSrcPath[MAX_PATH];
char szDstPath[MAX_PATH];
BOOL ret = FALSE;
LPITEMIDLIST pidl2;
char filename[MAX_PATH];
char linkFilename[MAX_PATH];
char srcFilename[MAX_PATH];
IPersistFolder2_GetCurFolder(ppfsrc, &pidl2);
SHGetPathFromIDListA (pidl2, szSrcPath);
if (This->bDesktop)
{
SHGetSpecialFolderLocation(0, CSIDL_DESKTOPDIRECTORY, &pidl2);
SHGetPathFromIDListA (pidl2, szDstPath);
}
else
{
IPersistFolder2_GetCurFolder(ppfdst, &pidl2);
SHGetPathFromIDListA (pidl2, szDstPath);
}
for (i = 0; i < lpcida->cidl; i++)
{
_ILSimpleGetText (apidl[i], filename, MAX_PATH);
TRACE("filename %s\n", filename);
lstrcpyA(linkFilename, szDstPath);
PathAddBackslashA(linkFilename);
lstrcatA(linkFilename, "Shortcut to ");
lstrcatA(linkFilename, filename);
lstrcatA(linkFilename, ".lnk");
TRACE("linkFilename %s\n", linkFilename);
lstrcpyA(srcFilename, szSrcPath);
PathAddBackslashA(srcFilename);
lstrcatA(srcFilename, filename);
TRACE("srcFilename %s\n", srcFilename);
ret = DoLink(srcFilename, linkFilename);
if (ret)
{
SHChangeNotify(SHCNE_CREATE, SHCNF_PATHA, linkFilename, NULL);
}
}
}
if(ppfdst) IPersistFolder2_Release(ppfdst);
if(ppfsrc) IPersistFolder2_Release(ppfsrc);
IShellFolder_Release(psfFrom);
}
_ILFreeaPidl(apidl, lpcida->cidl);
SHFree(pidl);
/* release the medium*/
ReleaseStgMedium(&medium);
}
IDataObject_Release(pda);
}
return bSuccess;
}
/**************************************************************************
* DoPaste
*/
@ -450,27 +260,16 @@ static BOOL DoPaste(
{
/* get source and destination shellfolder */
ISFHelper *psfhlpdst, *psfhlpsrc;
if (This->bDesktop)
{
/* unimplemented
SHGetDesktopFolder(&psfDesktop);
IFSFolder_Constructor(psfDesktop, &IID_ISFHelper, (LPVOID*)&psfhlpdst);
IShellFolder_QueryInterface(psfhlpdst, &IID_ISFHelper, (LPVOID*)&psfhlpdst);
*/
IShellFolder_QueryInterface(This->pSFParent, &IID_ISFHelper, (LPVOID*)&psfhlpdst);
}
else
{
IShellFolder_QueryInterface(This->pSFParent, &IID_ISFHelper, (LPVOID*)&psfhlpdst);
}
IShellFolder_QueryInterface(This->pSFParent, &IID_ISFHelper, (LPVOID*)&psfhlpdst);
IShellFolder_QueryInterface(psfFrom, &IID_ISFHelper, (LPVOID*)&psfhlpsrc);
/* do the copy/move */
if (psfhlpdst && psfhlpsrc)
{
ISFHelper_CopyItems(psfhlpdst, psfFrom, lpcida->cidl, (LPCITEMIDLIST*)apidl);
/* FIXME handle move
ISFHelper_DeleteItems(psfhlpsrc, lpcida->cidl, apidl);
*/
}
if(psfhlpdst) ISFHelper_Release(psfhlpdst);
if(psfhlpsrc) ISFHelper_Release(psfhlpsrc);
@ -485,7 +284,30 @@ static BOOL DoPaste(
}
IDataObject_Release(pda);
}
#if 0
HGLOBAL hMem;
OpenClipboard(NULL);
hMem = GetClipboardData(CF_HDROP);
if(hMem)
{
char * pDropFiles = (char *)GlobalLock(hMem);
if(pDropFiles)
{
int len, offset = sizeof(DROPFILESTRUCT);
while( pDropFiles[offset] != 0)
{
len = strlen(pDropFiles + offset);
TRACE("%s\n", pDropFiles + offset);
offset += len+1;
}
}
GlobalUnlock(hMem);
}
CloseClipboard();
#endif
return bSuccess;
}
@ -550,10 +372,6 @@ static HRESULT WINAPI ISVBgCm_fnInvokeCommand(
DoPaste(iface);
break;
case FCIDM_SHVIEW_INSERTLINK:
MakeLink(iface);
break;
case FCIDM_SHVIEW_PROPERTIES:
if (This->bDesktop) {
ShellExecuteA(lpcmi->hwnd, "open", "rundll32.exe shell32.dll,Control_RunDLL desk.cpl", NULL, NULL, SW_SHOWNORMAL);
@ -589,7 +407,7 @@ static HRESULT WINAPI ISVBgCm_fnGetCommandString(
{
BgCmImpl *This = (BgCmImpl *)iface;
TRACE("(%p)->(idcom=%x flags=%x %p name=%p len=%x)\n",This, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen);
TRACE("(%p)->(idcom=%lx flags=%x %p name=%p len=%x)\n",This, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen);
/* test the existence of the menu items, the file dialog enables
the buttons according to this */
@ -621,7 +439,7 @@ static HRESULT WINAPI ISVBgCm_fnHandleMenuMsg(
{
BgCmImpl *This = (BgCmImpl *)iface;
FIXME("(%p)->(msg=%x wp=%x lp=%lx)\n",This, uMsg, wParam, lParam);
FIXME("(%p)->(msg=%x wp=%lx lp=%lx)\n",This, uMsg, wParam, lParam);
return E_NOTIMPL;
}

View file

@ -1,11 +1,9 @@
/*
* Systray
* Systray handling
*
* Copyright 1999 Kai Morich <kai.morich@bigfoot.de>
*
* Manage the systray window. That it actually appears in the docking
* area of KDE is handled in dlls/x11drv/window.c,
* X11DRV_set_wm_hints using KWM_DOCKWINDOW.
* Copyright 1999 Kai Morich <kai.morich@bigfoot.de>
* Copyright 2004 Mike Hearn, for CodeWeavers
* Copyright 2005 Robert Shearman
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@ -19,381 +17,175 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#include "config.h"
#define NONAMELESSUNION
#define NONAMELESSSTRUCT
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
#include <stdarg.h>
#include <string.h>
#include "windef.h"
#include "winbase.h"
#include "winnls.h"
#include "wingdi.h"
#include "winnls.h"
#include "winuser.h"
#include "shlobj.h"
#include "shellapi.h"
#include "shell32_main.h"
#include "commctrl.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(shell);
typedef struct SystrayItem {
HWND hWnd;
HWND hWndToolTip;
NOTIFYICONDATAW notifyIcon;
struct SystrayItem *nextTrayItem;
} SystrayItem;
static SystrayItem *systray=NULL;
static int firstSystray=TRUE; /* defer creation of window class until first systray item is created */
#define ICON_SIZE GetSystemMetrics(SM_CXSMICON)
/* space around icon (forces icon to center of KDE systray area) */
#define ICON_BORDER 4
static BOOL SYSTRAY_ItemIsEqual(PNOTIFYICONDATAW pnid1, PNOTIFYICONDATAW pnid2)
{
if (pnid1->hWnd != pnid2->hWnd) return FALSE;
if (pnid1->uID != pnid2->uID) return FALSE;
return TRUE;
}
static void SYSTRAY_ItemTerm(SystrayItem *ptrayItem)
{
if(ptrayItem->notifyIcon.hIcon)
DestroyIcon(ptrayItem->notifyIcon.hIcon);
if(ptrayItem->hWndToolTip)
DestroyWindow(ptrayItem->hWndToolTip);
if(ptrayItem->hWnd)
DestroyWindow(ptrayItem->hWnd);
return;
}
static BOOL SYSTRAY_Delete(PNOTIFYICONDATAW pnid)
{
SystrayItem **ptrayItem = &systray;
while (*ptrayItem) {
if (SYSTRAY_ItemIsEqual(pnid, &(*ptrayItem)->notifyIcon)) {
SystrayItem *next = (*ptrayItem)->nextTrayItem;
TRACE("%p: %p %s\n", *ptrayItem, (*ptrayItem)->notifyIcon.hWnd, debugstr_w((*ptrayItem)->notifyIcon.szTip));
SYSTRAY_ItemTerm(*ptrayItem);
HeapFree(GetProcessHeap(),0,*ptrayItem);
*ptrayItem = next;
return TRUE;
}
ptrayItem = &((*ptrayItem)->nextTrayItem);
}
return FALSE; /* not found */
}
static LRESULT CALLBACK SYSTRAY_WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
switch (message) {
case WM_PAINT:
{
RECT rc;
SystrayItem *ptrayItem = systray;
while (ptrayItem) {
if (ptrayItem->hWnd==hWnd) {
if (ptrayItem->notifyIcon.hIcon) {
hdc = BeginPaint(hWnd, &ps);
GetClientRect(hWnd, &rc);
if (!DrawIconEx(hdc, rc.left+ICON_BORDER, rc.top+ICON_BORDER, ptrayItem->notifyIcon.hIcon,
ICON_SIZE, ICON_SIZE, 0, 0, DI_DEFAULTSIZE|DI_NORMAL)) {
ERR("Paint(SystrayWindow %p) failed -> removing SystrayItem %p\n", hWnd, ptrayItem);
SYSTRAY_Delete(&ptrayItem->notifyIcon);
}
}
break;
}
ptrayItem = ptrayItem->nextTrayItem;
}
EndPaint(hWnd, &ps);
}
break;
case WM_MOUSEMOVE:
case WM_LBUTTONDOWN:
case WM_LBUTTONUP:
case WM_RBUTTONDOWN:
case WM_RBUTTONUP:
case WM_MBUTTONDOWN:
case WM_MBUTTONUP:
{
MSG msg;
SystrayItem *ptrayItem = systray;
while ( ptrayItem ) {
if (ptrayItem->hWnd == hWnd) {
msg.hwnd=hWnd;
msg.message=message;
msg.wParam=wParam;
msg.lParam=lParam;
msg.time = GetMessageTime ();
msg.pt.x = LOWORD(GetMessagePos ());
msg.pt.y = HIWORD(GetMessagePos ());
SendMessageW(ptrayItem->hWndToolTip, TTM_RELAYEVENT, 0, (LPARAM)&msg);
}
ptrayItem = ptrayItem->nextTrayItem;
}
}
/* fall through */
case WM_LBUTTONDBLCLK:
case WM_RBUTTONDBLCLK:
case WM_MBUTTONDBLCLK:
{
SystrayItem *ptrayItem = systray;
while (ptrayItem) {
if (ptrayItem->hWnd == hWnd) {
if (ptrayItem->notifyIcon.hWnd && ptrayItem->notifyIcon.uCallbackMessage) {
if (!PostMessageW(ptrayItem->notifyIcon.hWnd, ptrayItem->notifyIcon.uCallbackMessage,
(WPARAM)ptrayItem->notifyIcon.uID, (LPARAM)message)) {
ERR("PostMessage(SystrayWindow %p) failed -> removing SystrayItem %p\n", hWnd, ptrayItem);
SYSTRAY_Delete(&ptrayItem->notifyIcon);
}
}
break;
}
ptrayItem = ptrayItem->nextTrayItem;
}
}
break;
default:
return (DefWindowProcW(hWnd, message, wParam, lParam));
}
return (0);
}
static BOOL SYSTRAY_RegisterClass(void)
{
WNDCLASSW wc;
static const WCHAR WineSystrayW[] = { 'W','i','n','e','S','y','s','t','r','a','y',0 };
wc.style = CS_SAVEBITS|CS_DBLCLKS;
wc.lpfnWndProc = SYSTRAY_WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = 0;
wc.hIcon = 0;
wc.hCursor = LoadCursorW(0, (LPWSTR)IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.lpszMenuName = NULL;
wc.lpszClassName = WineSystrayW;
if (!RegisterClassW(&wc)) {
ERR("RegisterClass(WineSystray) failed\n");
return FALSE;
}
return TRUE;
}
static BOOL SYSTRAY_ItemInit(SystrayItem *ptrayItem)
{
RECT rect;
static const WCHAR WineSystrayW[] = { 'W','i','n','e','S','y','s','t','r','a','y',0 };
static const WCHAR Wine_SystrayW[] = { 'W','i','n','e','-','S','y','s','t','r','a','y',0 };
/* Register the class if this is our first tray item. */
if ( firstSystray ) {
firstSystray = FALSE;
if ( !SYSTRAY_RegisterClass() ) {
ERR( "RegisterClass(WineSystray) failed\n" );
return FALSE;
}
}
/* Initialize the window size. */
rect.left = 0;
rect.top = 0;
rect.right = ICON_SIZE+2*ICON_BORDER;
rect.bottom = ICON_SIZE+2*ICON_BORDER;
ZeroMemory( ptrayItem, sizeof(SystrayItem) );
/* Create tray window for icon. */
ptrayItem->hWnd = CreateWindowExW( WS_EX_TRAYWINDOW,
WineSystrayW, Wine_SystrayW,
WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT,
rect.right-rect.left, rect.bottom-rect.top,
0, 0, 0, 0 );
if ( !ptrayItem->hWnd ) {
ERR( "CreateWindow(WineSystray) failed\n" );
return FALSE;
}
/* Create tooltip for icon. */
ptrayItem->hWndToolTip = CreateWindowW( TOOLTIPS_CLASSW,NULL,TTS_ALWAYSTIP,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
ptrayItem->hWnd, 0, 0, 0 );
if ( !ptrayItem->hWndToolTip ) {
ERR( "CreateWindow(TOOLTIP) failed\n" );
return FALSE;
}
return TRUE;
}
static void SYSTRAY_ItemSetMessage(SystrayItem *ptrayItem, UINT uCallbackMessage)
{
ptrayItem->notifyIcon.uCallbackMessage = uCallbackMessage;
}
static void SYSTRAY_ItemSetIcon(SystrayItem *ptrayItem, HICON hIcon)
{
if(ptrayItem->notifyIcon.hIcon)
DestroyIcon(ptrayItem->notifyIcon.hIcon);
ptrayItem->notifyIcon.hIcon = CopyIcon(hIcon);
InvalidateRect(ptrayItem->hWnd, NULL, TRUE);
}
static void SYSTRAY_ItemSetTip(SystrayItem *ptrayItem, const WCHAR* szTip, int modify)
{
TTTOOLINFOW ti;
lstrcpynW(ptrayItem->notifyIcon.szTip, szTip, sizeof(ptrayItem->notifyIcon.szTip)/sizeof(WCHAR));
ti.cbSize = sizeof(TTTOOLINFOW);
ti.uFlags = 0;
ti.hwnd = ptrayItem->hWnd;
ti.hinst = 0;
ti.uId = 0;
ti.lpszText = ptrayItem->notifyIcon.szTip;
ti.rect.left = 0;
ti.rect.top = 0;
ti.rect.right = ICON_SIZE+2*ICON_BORDER;
ti.rect.bottom = ICON_SIZE+2*ICON_BORDER;
if(modify)
SendMessageW(ptrayItem->hWndToolTip, TTM_UPDATETIPTEXTW, 0, (LPARAM)&ti);
else
SendMessageW(ptrayItem->hWndToolTip, TTM_ADDTOOLW, 0, (LPARAM)&ti);
}
static BOOL SYSTRAY_Add(PNOTIFYICONDATAW pnid)
{
SystrayItem **ptrayItem = &systray;
static const WCHAR emptyW[] = { 0 };
/* Find last element. */
while( *ptrayItem ) {
if ( SYSTRAY_ItemIsEqual(pnid, &(*ptrayItem)->notifyIcon) )
return FALSE;
ptrayItem = &((*ptrayItem)->nextTrayItem);
}
/* Allocate SystrayItem for element and add to end of list. */
(*ptrayItem) = HeapAlloc(GetProcessHeap(),0,sizeof(SystrayItem));
/* Initialize and set data for the tray element. */
SYSTRAY_ItemInit( (*ptrayItem) );
(*ptrayItem)->notifyIcon.uID = pnid->uID; /* only needed for callback message */
(*ptrayItem)->notifyIcon.hWnd = pnid->hWnd; /* only needed for callback message */
SYSTRAY_ItemSetIcon (*ptrayItem, (pnid->uFlags&NIF_ICON) ?pnid->hIcon :0);
SYSTRAY_ItemSetMessage(*ptrayItem, (pnid->uFlags&NIF_MESSAGE)?pnid->uCallbackMessage:0);
SYSTRAY_ItemSetTip (*ptrayItem, (pnid->uFlags&NIF_TIP) ?pnid->szTip :emptyW, FALSE);
TRACE("%p: %p %s\n", (*ptrayItem), (*ptrayItem)->notifyIcon.hWnd,
debugstr_w((*ptrayItem)->notifyIcon.szTip));
return TRUE;
}
static BOOL SYSTRAY_Modify(PNOTIFYICONDATAW pnid)
{
SystrayItem *ptrayItem = systray;
while ( ptrayItem ) {
if ( SYSTRAY_ItemIsEqual(pnid, &ptrayItem->notifyIcon) ) {
if (pnid->uFlags & NIF_ICON)
SYSTRAY_ItemSetIcon(ptrayItem, pnid->hIcon);
if (pnid->uFlags & NIF_MESSAGE)
SYSTRAY_ItemSetMessage(ptrayItem, pnid->uCallbackMessage);
if (pnid->uFlags & NIF_TIP)
SYSTRAY_ItemSetTip(ptrayItem, pnid->szTip, TRUE);
TRACE("%p: %p %s\n", ptrayItem, ptrayItem->notifyIcon.hWnd, debugstr_w(ptrayItem->notifyIcon.szTip));
return TRUE;
}
ptrayItem = ptrayItem->nextTrayItem;
}
return FALSE; /* not found */
}
WINE_DEFAULT_DEBUG_CHANNEL(systray);
static const WCHAR classname[] = /* Shell_TrayWnd */ {'S','h','e','l','l','_','T','r','a','y','W','n','d','\0'};
/*************************************************************************
*
* Shell_NotifyIcon [SHELL32.296]
* Shell_NotifyIconA [SHELL32.297]
*/
BOOL SYSTRAY_Init(void)
BOOL WINAPI Shell_NotifyIconA(DWORD dwMessage, PNOTIFYICONDATAA pnid)
{
return TRUE;
NOTIFYICONDATAW nidW;
INT cbSize;
/* Validate the cbSize as Windows XP does */
if (pnid->cbSize != NOTIFYICONDATAA_V1_SIZE &&
pnid->cbSize != NOTIFYICONDATAA_V2_SIZE &&
pnid->cbSize != NOTIFYICONDATAA_V3_SIZE &&
pnid->cbSize != sizeof(NOTIFYICONDATAA))
{
WARN("Invalid cbSize (%d) - using only Win95 fields (size=%d)\n",
pnid->cbSize, NOTIFYICONDATAA_V1_SIZE);
cbSize = NOTIFYICONDATAA_V1_SIZE;
}
else
cbSize = pnid->cbSize;
ZeroMemory(&nidW, sizeof(nidW));
nidW.cbSize = sizeof(nidW);
nidW.hWnd = pnid->hWnd;
nidW.uID = pnid->uID;
nidW.uFlags = pnid->uFlags;
nidW.uCallbackMessage = pnid->uCallbackMessage;
nidW.hIcon = pnid->hIcon;
/* szTip */
if (pnid->uFlags & NIF_TIP)
MultiByteToWideChar(CP_ACP, 0, pnid->szTip, -1, nidW.szTip, sizeof(nidW.szTip)/sizeof(WCHAR));
if (cbSize >= NOTIFYICONDATAA_V2_SIZE)
{
nidW.dwState = pnid->dwState;
nidW.dwStateMask = pnid->dwStateMask;
/* szInfo, szInfoTitle */
if (pnid->uFlags & NIF_INFO)
{
MultiByteToWideChar(CP_ACP, 0, pnid->szInfo, -1, nidW.szInfo, sizeof(nidW.szInfo)/sizeof(WCHAR));
MultiByteToWideChar(CP_ACP, 0, pnid->szInfoTitle, -1, nidW.szInfoTitle, sizeof(nidW.szInfoTitle)/sizeof(WCHAR));
}
nidW.u.uTimeout = pnid->u.uTimeout;
nidW.dwInfoFlags = pnid->dwInfoFlags;
}
if (cbSize >= NOTIFYICONDATAA_V3_SIZE)
nidW.guidItem = pnid->guidItem;
if (cbSize >= sizeof(NOTIFYICONDATAA))
nidW.hBalloonIcon = pnid->hBalloonIcon;
return Shell_NotifyIconW(dwMessage, &nidW);
}
/*************************************************************************
* Shell_NotifyIconW [SHELL32.298]
*/
BOOL WINAPI Shell_NotifyIconW(DWORD dwMessage, PNOTIFYICONDATAW pnid )
BOOL WINAPI Shell_NotifyIconW(DWORD dwMessage, PNOTIFYICONDATAW nid)
{
BOOL flag=FALSE;
TRACE("enter %p %d %ld\n", pnid->hWnd, pnid->uID, dwMessage);
switch(dwMessage) {
case NIM_ADD:
flag = SYSTRAY_Add(pnid);
break;
case NIM_MODIFY:
flag = SYSTRAY_Modify(pnid);
break;
case NIM_DELETE:
flag = SYSTRAY_Delete(pnid);
break;
}
TRACE("leave %p %d %ld=%d\n", pnid->hWnd, pnid->uID, dwMessage, flag);
return flag;
}
/*************************************************************************
* Shell_NotifyIconA [SHELL32.297]
* Shell_NotifyIcon [SHELL32.296]
*/
BOOL WINAPI Shell_NotifyIconA (DWORD dwMessage, PNOTIFYICONDATAA pnid )
{
BOOL ret;
PNOTIFYICONDATAW p = HeapAlloc(GetProcessHeap(),0,sizeof(NOTIFYICONDATAW));
memcpy(p, pnid, sizeof(NOTIFYICONDATAW));
MultiByteToWideChar( CP_ACP, 0, pnid->szTip, -1, p->szTip, sizeof(p->szTip)/sizeof(WCHAR) );
p->szTip[sizeof(p->szTip)/sizeof(WCHAR)-1] = 0;
ret = Shell_NotifyIconW(dwMessage, p );
HeapFree(GetProcessHeap(),0,p);
return ret;
HWND tray;
COPYDATASTRUCT cds;
char *buffer = NULL;
TRACE("dwMessage = %d, nid->cbSize=%d\n", dwMessage, nid->cbSize);
/* Validate the cbSize so that WM_COPYDATA doesn't crash the application */
if (nid->cbSize != NOTIFYICONDATAW_V1_SIZE &&
nid->cbSize != NOTIFYICONDATAW_V2_SIZE &&
nid->cbSize != NOTIFYICONDATAW_V3_SIZE &&
nid->cbSize != sizeof(NOTIFYICONDATAW))
{
NOTIFYICONDATAW newNid;
WARN("Invalid cbSize (%d) - using only Win95 fields (size=%d)\n",
nid->cbSize, NOTIFYICONDATAW_V1_SIZE);
CopyMemory(&newNid, nid, NOTIFYICONDATAW_V1_SIZE);
newNid.cbSize = NOTIFYICONDATAW_V1_SIZE;
return Shell_NotifyIconW(dwMessage, &newNid);
}
tray = FindWindowExW(0, NULL, classname, NULL);
if (!tray) return FALSE;
cds.dwData = dwMessage;
/* FIXME: if statement only needed because we don't support interprocess
* icon handles */
if (nid->uFlags & NIF_ICON)
{
ICONINFO iconinfo;
BITMAP bmMask;
BITMAP bmColour;
LONG cbMaskBits;
LONG cbColourBits;
if (!GetIconInfo(nid->hIcon, &iconinfo))
goto noicon;
if (!GetObjectW(iconinfo.hbmMask, sizeof(bmMask), &bmMask) ||
!GetObjectW(iconinfo.hbmColor, sizeof(bmColour), &bmColour))
{
DeleteObject(iconinfo.hbmMask);
DeleteObject(iconinfo.hbmColor);
goto noicon;
}
cbMaskBits = (bmMask.bmPlanes * bmMask.bmWidth * bmMask.bmHeight * bmMask.bmBitsPixel) / 8;
cbColourBits = (bmColour.bmPlanes * bmColour.bmWidth * bmColour.bmHeight * bmColour.bmBitsPixel) / 8;
cds.cbData = nid->cbSize + 2*sizeof(BITMAP) + cbMaskBits + cbColourBits;
buffer = HeapAlloc(GetProcessHeap(), 0, cds.cbData);
if (!buffer)
{
DeleteObject(iconinfo.hbmMask);
DeleteObject(iconinfo.hbmColor);
return FALSE;
}
cds.lpData = buffer;
memcpy(buffer, nid, nid->cbSize);
buffer += nid->cbSize;
memcpy(buffer, &bmMask, sizeof(bmMask));
buffer += sizeof(bmMask);
memcpy(buffer, &bmColour, sizeof(bmColour));
buffer += sizeof(bmColour);
GetBitmapBits(iconinfo.hbmMask, cbMaskBits, buffer);
buffer += cbMaskBits;
GetBitmapBits(iconinfo.hbmColor, cbColourBits, buffer);
buffer += cbColourBits;
DeleteObject(iconinfo.hbmMask);
DeleteObject(iconinfo.hbmColor);
}
else
{
noicon:
cds.cbData = nid->cbSize;
cds.lpData = nid;
}
SendMessageW(tray, WM_COPYDATA, (WPARAM)nid->hWnd, (LPARAM)&cds);
/* FIXME: if statement only needed because we don't support interprocess
* icon handles */
HeapFree(GetProcessHeap(), 0, buffer);
return TRUE;
}

View file

@ -13,7 +13,7 @@
*
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef __WINE_UNDOCSHELL_H
@ -455,7 +455,7 @@ int WINAPI PathParseIconLocationAW(LPVOID lpszPath);
BOOL WINAPI PathIsSameRootAW(LPCVOID lpszPath1, LPCVOID lpszPath2);
BOOL WINAPI PathFindOnPathAW(LPVOID sFile, LPCVOID sOtherDirs);
BOOL WINAPI PathFindOnPathAW(LPVOID sFile, LPCVOID *sOtherDirs);
/****************************************************************************
* Shell Namespace Routines