55#define NONAMELESSUNION
65#define _WIN32_WINNT 0x0600
81#include "wine/unicode.h"
88#define UNIMPLEMENTED_FLAGS \
89(OFN_DONTADDTORECENT |\
90OFN_NODEREFERENCELINKS | OFN_NOREADONLYRETURN |\
114static HHOOK s_hFileDialogHook =
NULL;
115static LONG s_nFileDialogHookCount = 0;
117#define MAX_TRANSLATE 8
118static HWND s_ahwndTranslate[MAX_TRANSLATE] = {
NULL };
120static void FILEDLG95_AddRemoveTranslate(
HWND hwndOld,
HWND hwndNew)
123 for (
i = 0;
i < MAX_TRANSLATE; ++
i)
125 if (s_ahwndTranslate[
i] == hwndOld)
127 s_ahwndTranslate[
i] = hwndNew;
139 if (s_ahwndTranslate[
i] ==
NULL)
143 if (fodInfos ==
NULL)
147 if (hwndView == hwndFocus ||
IsChild(hwndView, hwndFocus))
149 IShellView_TranslateAccelerator(fodInfos->
Shell.FOIShellView, pMsg);
172 for (
i = 0;
i < MAX_TRANSLATE; ++
i)
174 if (FILEDLG95_DoTranslate(
i, hwndFocus, pMsg))
197#define ITEM_NOTFOUND -1
200#define WM_GETISHELLBROWSER WM_USER+7
202#define TBPLACES_CMDID_PLACE0 0xa064
203#define TBPLACES_CMDID_PLACE1 0xa065
204#define TBPLACES_CMDID_PLACE2 0xa066
205#define TBPLACES_CMDID_PLACE3 0xa067
206#define TBPLACES_CMDID_PLACE4 0xa068
214#define CBGetItemDataPtr(hwnd,iItemId) \
215 SendMessageW(hwnd, CB_GETITEMDATA, (WPARAM)(iItemId), 0)
221 {
'S',
'o',
'f',
't',
'w',
'a',
'r',
'e',
'\\',
'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
'\\',
222 'W',
'i',
'n',
'd',
'o',
'w',
's',
'\\',
'C',
'u',
'r',
'r',
'e',
'n',
't',
'V',
'e',
'r',
's',
'i',
'o',
'n',
'\\',
223 'E',
'x',
'p',
'l',
'o',
'r',
'e',
'r',
'\\',
'C',
'o',
'm',
'D',
'l',
'g',
'3',
'2',
'\\',
224 'L',
'a',
's',
't',
'V',
'i',
's',
'i',
't',
'e',
'd',
'M',
'R',
'U',0};
227static const WCHAR filedlg_info_propnameW[] = {
'F',
'i',
'l',
'e',
'O',
'p',
'e',
'n',
'D',
'l',
'g',
'I',
'n',
'f',
'o',
's',0};
358 static const WCHAR noplacesbarW[] = {
'N',
'o',
'P',
'l',
'a',
'c',
'e',
's',
'B',
'a',
'r',0};
380 static const int default_places[] =
402 static const WCHAR placeW[] = {
'P',
'l',
'a',
'c',
'e',
'%',
'd',0};
413 WARN(
"Unrecognized special folder %u.\n",
value);
455 FIXME(
"Flags 0x%08x not yet implemented\n",
462 templateid = NEWFILEOPENV2ORD;
464 templateid = NEWFILEOPENORD;
561 info->defext = pszExt;
681 if (
ret &&
info->ofnInfos->lpstrFile &&
info->ofnInfos->lpstrFileTitle)
732 LPSHELLFOLDER psfDesktop;
739 IShellFolder_Release(psfDesktop);
743 IShellFolder_Release(psfDesktop);
770 lstrcatW(lpstrPathAndFile, lpstrFile);
776 lstrcpyW(lpstrPathAndFile+2, lpstrFile);
778 lstrcpyW(lpstrPathAndFile, lpstrFile);
783 lstrcpyW(lpstrPathAndFile, lpstrTemp);
794 UINT nStrCharCount = 0;
804 while ( nStrCharCount <= nStrLen )
806 if ( lpstrEdit[nStrCharCount]==
'"' )
809 while ((nStrCharCount <= nStrLen) && (lpstrEdit[nStrCharCount]!=
'"'))
811 (*lpstrFileList)[nFileIndex++] = lpstrEdit[nStrCharCount];
814 (*lpstrFileList)[nFileIndex++] = 0;
821 if ((nStrLen > 0) && (nFileIndex == 0) )
823 lstrcpyW(*lpstrFileList, lpstrEdit);
824 nFileIndex =
lstrlenW(lpstrEdit) + 1;
829 (*lpstrFileList)[nFileIndex++] =
'\0';
831 *sizeUsed = nFileIndex;
842 HWND hwndChild, hwndStc32;
843 RECT rectParent, rectChild, rectStc32;
852 RECT rectHelp, rectCancel;
877 rectParent.
bottom -= help_fixup;
900 if (hwndChild != hwndStc32)
906 if (hwndStc32 && rectChild.left > rectStc32.
right)
909 rectChild.left += rectParent.
right;
910 rectChild.left -= rectStc32.
right;
913 if (rectChild.top >= rectStc32.
bottom)
916 rectChild.top += rectParent.
bottom;
917 rectChild.top -= rectStc32.
bottom - rectStc32.
top;
920 SetWindowPos(hwndChild, 0, rectChild.left, rectChild.top,
930 if (hwndChild != hwndChildDlg)
938 rectChild.left += rectStc32.
left;
939 rectChild.top += rectStc32.
top;
941 SetWindowPos(hwndChild, 0, rectChild.left, rectChild.top,
964 chgy = rectChild.
bottom - ( rectStc32.
bottom - rectStc32.
top) - help_fixup;
974 chgy = rectChild.
bottom - help_fixup;
980 rectParent.
right - rectParent.
left + chgx,
981 rectParent.
bottom - rectParent.
top + chgy,
1064 temp.tmplate.dwExtendedStyle = 0;
1065 temp.tmplate.cdit = 0;
1068 temp.tmplate.cx = 0;
1069 temp.tmplate.cy = 0;
1092 TRACE(
"%p %d\n", hwndParentDlg, uCode);
1094 if (!fodInfos || !fodInfos->
DlgInfos.hwndCustomDlg)
1097 TRACE(
"CALL NOTIFY for %d\n", uCode);
1110 TRACE(
"RET NOTIFY retval %#lx\n", hook_result);
1121 TRACE(
"CDM_GETFILEPATH:\n");
1163 if(!fodInfos)
return FALSE;
1172 TRACE(
"CDM_GETFOLDERPATH:\n");
1192 TRACE(
"CDM_GETSPEC:\n");
1204 TRACE(
"CDM_SETCONTROLTEXT:\n");
1256 FIXME(
"message CDM_FIRST+%04x not implemented\n", uMsg -
CDM_FIRST);
1333 else if( rc.top > rcview.
bottom)
1344 rc.right - rc.left + chgx, rc.bottom - rc.top,
1361 else if( rc.left > rcview.
right)
1377 rc.right - rc.left + chgx, rc.bottom - rc.top,
1391 rc.right - rc.left + chgx,
1392 rc.bottom - rc.top + chgy,
1402 if(fodInfos->
DlgInfos.hwndCustomDlg &&
1410 if( rc.top > rcview.
bottom)
1415 rc.right - rc.left, rc.bottom - rc.top,
1418 else if( rc.left > rcview.
right)
1423 rc.right - rc.left, rc.bottom - rc.top,
1479 style &= ~WS_SIZEBOX;
1508 if( fodInfos->
DlgInfos.hwndCustomDlg)
1524 rcstc.left, rcstc.top, rcstc.right - rcstc.left, rcstc.bottom - rcstc.top,
1552 if (++s_nFileDialogHookCount == 1)
1557 FILEDLG95_AddRemoveTranslate(
NULL,
hwnd);
1600 FILEDLG95_AddRemoveTranslate(
hwnd,
NULL);
1601 if (--s_nFileDialogHookCount == 0)
1604 s_hFileDialogHook =
NULL;
1679 static const WCHAR szwSlash[] = {
'\\', 0 };
1680 static const WCHAR szwStar[] = {
'*',0 };
1705 TRACE(
"%p\n", fodInfos);
1714 if (win2000plus) win98plus =
TRUE;
1716 TRACE(
"Running on 2000+ %d, 98+ %d\n", win2000plus, win98plus);
1745 rectTB.
top = rectlook.
top-1;
1834 handledPath =
FALSE;
1863 TRACE(
"Value in Filename includes path, overriding InitialDir: %s, %s\n",
1905 TRACE(
"Value in InitDir is not an existing path, changed to (nil)\n");
1932 if (!win2000plus && fodInfos->
filename &&
1954 TRACE(
"Value in Filename includes path, overriding initdir: %s, %s\n",
1961 if (!handledPath && win2000plus) {
1977 if (win98plus && !handledPath && fodInfos->
filter && *fodInfos->
filter) {
1988 if(! *lpstrPos)
break;
1989 lpstrPos +=
lstrlenW(lpstrPos) + 1;
1992 if(! *lpstrPos)
break;
1998 lpstrPos +=
lstrlenW(lpstrPos) + 1;
2007 TRACE(
"No initial dir specified, but files of type %s found in current, so using it\n",
2016 if (!handledPath && (win2000plus || win98plus)) {
2034 }
else if (!handledPath) {
2096 if (fodInfos->
DlgInfos.hwndCustomDlg)
2127 RECT rectDlg, rectHelp, rectCancel;
2153 TRACE(
"dir=%s file=%s\n",
2173 IShellBrowser_BrowseObject(fodInfos->
Shell.FOIShellBrowser,pidlItemId, SBSP_ABSOLUTE);
2197 TRACE(
"%p, %p\n",
info->ShellInfos.hwndOwner, pidl);
2199 IShellBrowser_BrowseObject(
info->Shell.FOIShellBrowser, pidl, SBSP_ABSOLUTE);
2278 fodInfos->
DlgInfos.dwDlgProp &= ~FODPROP_USEVIEW;
2321 TRACE(
"canceled\n");
2330 TRACE(
"canceled\n");
2349 UINT nCount, nSizePath;
2370 LPWSTR lpstrTemp = lpstrFileList;
2372 for ( nCount = 0; nCount < nFileCount; nCount++ )
2379 WCHAR lpstrNotFound[100];
2380 WCHAR lpstrMsg[100];
2382 static const WCHAR nl[] = {
'\n',0};
2398 lpstrTemp +=
lstrlenW(lpstrTemp) + 1;
2403 nSizePath =
lstrlenW(lpstrPathSpec) + 1;
2409 FIXME(
"Components have to be separated by blanks\n");
2460 WCHAR mru_list[32], *cur_mru_slot;
2461 BOOL taken[25] = {0};
2462 DWORD mru_list_size =
sizeof(mru_list), key_type = -1,
i;
2463 HKEY hkey_tmp, *hkey;
2472 *stored_path =
'\0';
2476 WARN(
"Unable to create MRU key: %d\n",
ret);
2481 (
LPBYTE)mru_list, &mru_list_size);
2486 WARN(
"Error getting MRUList data: type: %d, ret: %d\n", key_type,
ret);
2491 for(cur_mru_slot = mru_list; *cur_mru_slot; ++cur_mru_slot){
2493 DWORD value_data_size =
sizeof(value_data);
2495 *value_name = *cur_mru_slot;
2498 &key_type, (
LPBYTE)value_data, &value_data_size);
2500 WARN(
"Error getting MRU slot data: type: %d, ret: %d\n", key_type,
ret);
2517 for(cur_mru_slot = mru_list; *cur_mru_slot; ++cur_mru_slot)
2518 taken[*cur_mru_slot -
'a'] =
TRUE;
2519 for(
i = 0;
i < 25; ++
i){
2526 return *cur_mru_slot;
2554 WCHAR *path_ends, *
final;
2568 final[final_len-1] =
'\0';
2571 final_len *
sizeof(
WCHAR));
2583 WCHAR old_mru_list[32], new_mru_list[32];
2584 WCHAR *old_mru_slot, *new_mru_slot = new_mru_list;
2585 DWORD mru_list_size =
sizeof(old_mru_list), key_type;
2588 (
LPBYTE)old_mru_list, &mru_list_size);
2591 new_mru_list[0] =
slot;
2592 new_mru_list[1] =
'\0';
2594 WARN(
"Error getting MRUList data: type: %d, ret: %d\n", key_type,
ret);
2601 *new_mru_slot++ =
slot;
2602 for(old_mru_slot = old_mru_list; *old_mru_slot; ++old_mru_slot){
2603 if(*old_mru_slot !=
slot)
2604 *new_mru_slot++ = *old_mru_slot;
2606 *new_mru_slot =
'\0';
2612 WARN(
"Error saving MRUList data: %d\n",
ret);
2641static const WCHAR s_subkey[] =
2643 'S',
'o',
'f',
't',
'w',
'a',
'r',
'e',
'\\',
'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
'\\',
2644 'W',
'i',
'n',
'd',
'o',
'w',
's',
'\\',
'C',
'u',
'r',
'r',
'e',
'n',
't',
'V',
'e',
'r',
's',
2645 'i',
'o',
'n',
'\\',
'E',
'x',
'p',
'l',
'o',
'r',
'e',
'r',
'\\',
'C',
'o',
'm',
'D',
'l',
'g',
2646 '3',
'2',
'\\',
'O',
'p',
'e',
'n',
'S',
'a',
'v',
'e',
'M',
'R',
'U',0
2648static const WCHAR s_szAst[] = {
'*', 0 };
2669#define MRU_STRING 0x0000
2670#define MRU_BINARY 0x0001
2671#define MRU_CACHEWRITE 0x0002
2677static CREATEMRULISTW s_pCreateMRUListW =
NULL;
2681static ADDMRUSTRINGW s_pAddMRUStringW =
NULL;
2685static FINDMRUSTRINGW s_pFindMRUStringW =
NULL;
2689static ENUMMRULISTW s_pEnumMRUListW =
NULL;
2693static FREEMRULIST s_pFreeMRUList =
NULL;
2695static BOOL FILEDLG_InitMRUList(
void)
2709 if (!s_pCreateMRUListW ||
2710 !s_pAddMRUStringW ||
2711 !s_pFindMRUStringW ||
2724 static const WCHAR s_image_exts[][6] =
2729 {
'j',
'p',
'e',
'g',0 },
2731 {
'j',
'f',
'i',
'f',0 },
2735 {
't',
'i',
'f',
'f',0 }
2760 if (!defext || !*defext || !FILEDLG_InitMRUList())
2769 if (!
result && hOpenSaveMRT)
2775 mi.hKey = hOpenSaveMRT;
2776 mi.lpszSubKey = defext;
2778 hList = (*s_pCreateMRUListW)(&
mi);
2781 ret = (*s_pEnumMRUListW)(
hList, 0, szText,
sizeof(szText));
2787 (*s_pFreeMRUList)(
hList);
2793 if (stored_path[0] == 0)
2796 if (ExtIsPicture(defext))
2817 if (!defext || !*defext || !FILEDLG_InitMRUList())
2826 if (!
result && hOpenSaveMRT)
2832 mi.hKey = hOpenSaveMRT;
2833 mi.lpszSubKey = defext;
2835 hList = (*s_pCreateMRUListW)(&
mi);
2839 (*s_pFreeMRUList)(
hList);
2845 mi.hKey = hOpenSaveMRT;
2846 mi.lpszSubKey = s_szAst;
2848 hList = (*s_pCreateMRUListW)(&
mi);
2852 (*s_pFreeMRUList)(
hList);
2868 strMsgTitle[0] =
'\0';
2886 if (lpstrFilter != (
LPWSTR)
CB_ERR && lpstrFilter && *lpstrFilter)
2893 pchDot =
wcschr(lpstrFilter,
L'.');
2895 if (pchDot && pchDot[1] && !
wcschr(pchDot,
L'*') && !
wcschr(pchDot,
L'?'))
2896 the_ext =
StrDupW(pchDot + 1);
2899 *pchSemicolon =
L';';
2902 if (!the_ext && (!pchDot || pchDot[1]))
2917 LPWSTR the_ext = FILEDLG95_GetFallbackExtension(fodInfos, lpstrPathAndFile);
2919 if (the_ext && *the_ext &&
2929 lstrcatW(lpstrPathAndFile, the_ext);
2966 int nOpenAction = defAction;
2967 LPWSTR lpszTemp, lpszTemp1;
2969 static const WCHAR szwInvalid[] = {
'/',
':',
'<',
'>',
'|', 0};
2980 lpszTemp1 = lpszTemp = lpstrPathAndFile;
2983 LPSHELLFOLDER lpsfChild;
2994 lpszTemp = lpszTemp +
lstrlenW(lpwstrTemp);
2999 static const WCHAR wszWild[] = {
'*',
'?', 0 };
3007 lpszTemp1 = lpszTemp;
3012 if(
lstrlenW(lpwstrTemp)==2 && lpwstrTemp[1] ==
':' &&
3013 ((lpwstrTemp[0] >=
'a' && lpwstrTemp[0] <=
'z') ||
3014 (lpwstrTemp[0] >=
'A' && lpwstrTemp[0] <=
'Z')))
3024 if((
dwAttributes & (SFGAO_FOLDER | SFGAO_FILESYSANCESTOR)) == (SFGAO_FOLDER | SFGAO_FILESYSANCESTOR))
3026 if(
FAILED(IShellFolder_BindToObject(*ppsf, pidl, 0, &IID_IShellFolder, (
LPVOID*)&lpsfChild)))
3028 ERR(
"bind to failed\n");
3031 IShellFolder_Release(*ppsf);
3049 (lpwstrTemp[
lstrlenW(lpwstrTemp)-1] ==
'\\'))
3062 FILEDLG95_AddDotExtIfNeeded(fodInfos, lpstrPathAndFile);
3100 UINT nFileCount = 0;
3104 LPSHELLFOLDER lpsf =
NULL;
3125 TRACE(
"count=%u len=%u file=%s\n", nFileCount, sizeUsed,
debugstr_w(lpstrFileList));
3176 TRACE(
"end validate sf=%p\n", lpsf);
3199 TRACE(
"ONOPEN_BROWSE\n");
3202 if(
SUCCEEDED(IShellFolder_QueryInterface( lpsf, &IID_IPersistFolder2, (
LPVOID*)&ppf2)))
3205 IPersistFolder2_GetCurFolder(ppf2, &pidlCurrent);
3206 IPersistFolder2_Release(ppf2);
3209 if (
SUCCEEDED(IShellBrowser_BrowseObject(fodInfos->
Shell.FOIShellBrowser, pidlCurrent, SBSP_ABSOLUTE))
3218 if (fodInfos->
Shell.FOIShellView)
3219 IShellView_Refresh(fodInfos->
Shell.FOIShellView);
3251 FILEDLG95_AddDotExtIfNeeded(fodInfos, lpstrPathAndFile);
3263 static const WCHAR szwDot[] = {
'.',0};
3272 WCHAR* filterSearchIndex;
3279 filterSearchIndex =
wcschr(filterExt,
';');
3280 if (filterSearchIndex)
3282 filterSearchIndex[0] =
'\0';
3288 filterSearchIndex =
wcschr(filterExt,
'.');
3289 if (filterSearchIndex++ && !
wcschr(filterSearchIndex,
'*') && !
wcschr(filterSearchIndex,
'?'))
3291 lstrcpyW(filterExt, filterSearchIndex);
3310 lstrcatW(lpstrPathAndFile, szwDot);
3312 lstrcatW(lpstrPathAndFile, filterExt);
3336 WCHAR lpstrOverwrite[100];
3354 WCHAR lpstrCreate[100];
3414 tempFileA,
sizeof(tempFileA),
NULL,
NULL);
3446 FILEDLG95_MRU_save_ext(lpstrPathAndFile);
3472 if(lpsf) IShellFolder_Release(lpsf);
3523 if(
SUCCEEDED(IShellView_GetItemObject(fodInfos->
Shell.FOIShellView,
3528 CMINVOKECOMMANDINFO ci;
3529 ZeroMemory(&ci,
sizeof(CMINVOKECOMMANDINFO));
3530 ci.cbSize =
sizeof(CMINVOKECOMMANDINFO);
3534 IContextMenu_InvokeCommand(pcm, &ci);
3535 IContextMenu_Release(pcm);
3553 if(
SUCCEEDED(IShellBrowser_BrowseObject(fodInfos->
Shell.FOIShellBrowser,
3577 if (fodInfos->
Shell.FOIShellView)
3579 IShellView_DestroyViewWindow(fodInfos->
Shell.FOIShellView);
3580 IShellView_Release(fodInfos->
Shell.FOIShellView);
3582 if (fodInfos->
Shell.FOIShellFolder)
3583 IShellFolder_Release(fodInfos->
Shell.FOIShellFolder);
3584 IShellBrowser_Release(fodInfos->
Shell.FOIShellBrowser);
3585 if (fodInfos->
Shell.FOIDataObject)
3586 IDataObject_Release(fodInfos->
Shell.FOIDataObject);
3614 if (! *lpstrPos)
return E_FAIL;
3638 if(! *lpstrPos)
break;
3639 lpstrDisplay = lpstrPos;
3640 lpstrPos +=
lstrlenW(lpstrPos) + 1;
3649 lpstrPos +=
lstrlenW(lpstrPos) + 1;
3655 if (!*lpstrExt)
break;
3744 if (fodInfos->
Shell.FOIShellView)
3745 IShellView_Refresh(fodInfos->
Shell.FOIShellView);
3765 for(
i=0;
i<iCount;
i++)
3792 for(iPos = iCount-1;iPos>=0;iPos--)
3813 static const WCHAR wszRootedAtDesktop[] = {
'S',
'o',
'f',
't',
'w',
'a',
'r',
'e',
'\\',
3814 'M',
'i',
'c',
'r',
'o',
's',
'o',
'f',
't',
'\\',
'W',
'i',
'n',
'd',
'o',
'w',
's',
'\\',
3815 'C',
'u',
'r',
'r',
'e',
'n',
't',
'V',
'e',
'r',
's',
'i',
'o',
'n',
'\\',
3816 'E',
'x',
'p',
'l',
'o',
'r',
'e',
'r',
'\\',
'D',
'e',
's',
'k',
't',
'o',
'p',
'\\',
3817 'N',
'a',
'm',
'e',
'S',
'p',
'a',
'c',
'e',
'\\',
'{',
'9',
'D',
'2',
'0',
'A',
'A',
'E',
'8',
3818 '-',
'0',
'6',
'2',
'5',
'-',
'4',
'4',
'B',
'0',
'-',
'9',
'C',
'A',
'7',
'-',
3819 '7',
'1',
'8',
'8',
'9',
'C',
'2',
'2',
'5',
'4',
'D',
'9',
'}',0 };
3832 LPITEMIDLIST pidlDrives, pidlTmp, pidlTmp1, pidlAbsTmp;
3835 LookInInfos *liInfos = heap_alloc_zero(
sizeof(*liInfos));
3837 TRACE(
"%p\n", hwndCombo);
3867 if(
SUCCEEDED(IShellFolder_EnumObjects(psfRoot, hwndCombo, SHCONTF_FOLDERS, &lpeRoot)))
3869 while (
S_OK == IEnumIDList_Next(lpeRoot, 1, &pidlTmp,
NULL))
3879 if(
SUCCEEDED(IShellFolder_BindToObject(psfRoot, pidlTmp,
NULL, &IID_IShellFolder, (
LPVOID*)&psfDrives)))
3882 if(
SUCCEEDED(IShellFolder_EnumObjects(psfDrives, hwndCombo,SHCONTF_FOLDERS, &lpeDrives)))
3884 while (
S_OK == IEnumIDList_Next(lpeDrives, 1, &pidlTmp1,
NULL))
3886 pidlAbsTmp =
ILCombine(pidlTmp, pidlTmp1);
3891 IEnumIDList_Release(lpeDrives);
3893 IShellFolder_Release(psfDrives);
3900 IEnumIDList_Release(lpeRoot);
3902 IShellFolder_Release(psfRoot);
3926 UINT icon_width, icon_height;
3930 if(pDIStruct->
itemID == -1)
3948 0, &sfi,
sizeof (sfi), shgfi_flags );
3965 if(pDIStruct->
itemState & ODS_COMBOBOXEDIT)
3973 rectIcon.
left = pDIStruct->
rcItem.
left + 1 + icon_width/2 * iIndentation;
4010 TRACE(
"%p\n", fodInfos);
4028 if(
SUCCEEDED(IShellBrowser_BrowseObject(fodInfos->
Shell.FOIShellBrowser,
4056 TRACE(
"%p, %p, %d\n",
hwnd, pidl, iInsertId);
4064 tmpFolder = heap_alloc_zero(
sizeof(*tmpFolder));
4069 while ((pidlNext =
ILGetNext(pidlNext)))
4079 sfi.
dwAttributes = SFGAO_FILESYSANCESTOR | SFGAO_FILESYSTEM;
4128 if (pidl == pidlParent)
4175 if(iRemovedItem < iItemPos)
4229 TRACE(
"0x%08lx 0x%x\n",searchArg, iSearchMethod);
4265 for(iPos = iCount-1;iPos>=0;iPos--)
4286 static CLIPFORMAT cfFormat;
4287 FORMATETC formatetc;
4290 formatetc.cfFormat = cfFormat;
4292 formatetc.dwAspect = DVASPECT_CONTENT;
4293 formatetc.lindex = -1;
4294 formatetc.tymed = TYMED_HGLOBAL;
4307 LPWSTR lpstrAllFiles, lpstrTmp;
4308 UINT nFiles = 0, nFileToOpen, nFileSelected, nAllFilesLength = 0, nThisFileLength, nAllFilesMaxLength;
4315 if (
FAILED(IDataObject_GetData(fodInfos->
Shell.FOIDataObject, &formatetc, &medium)))
4319 nFileSelected = cida->
cidl;
4323 lpstrAllFiles = heap_alloc_zero(nAllFilesMaxLength *
sizeof(
WCHAR));
4328 for (nFileToOpen = 0; nFileToOpen < nFileSelected; nFileToOpen++)
4335 if (nAllFilesLength +
MAX_PATH + 3 > nAllFilesMaxLength)
4337 nAllFilesMaxLength *= 2;
4341 lpstrAllFiles = lpstrTmp;
4344 lpstrAllFiles[nAllFilesLength++] =
'"';
4345 GetName(fodInfos->
Shell.FOIShellFolder, pidl, SHGDN_INFOLDER | SHGDN_FORPARSING, lpstrAllFiles + nAllFilesLength);
4346 nThisFileLength =
lstrlenW(lpstrAllFiles + nAllFilesLength);
4347 nAllFilesLength += nThisFileLength;
4348 lpstrAllFiles[nAllFilesLength++] =
'"';
4349 lpstrAllFiles[nAllFilesLength++] =
' ';
4357 lpstrTmp = lpstrAllFiles;
4361 lpstrTmp[nThisFileLength] = 0;
4399 FIXME(
"unknown type %x!\n",
src->uType);
4414 UINT nFileCount = 0;
4443 if(medium.pUnkForRelease)
4445 IUnknown_Release(medium.pUnkForRelease);
4468 TRACE(
"sv=%p index=%u\n", doSelected, nPidlIndex);
4474 if(
SUCCEEDED(IDataObject_GetData(doSelected,&formatetc,&medium)))
4477 if(nPidlIndex <= cida->cidl)
4498 TRACE(
"sv=%p\n", doSelected);
4500 if (!doSelected)
return 0;
4503 if(
SUCCEEDED(IDataObject_GetData(doSelected,&formatetc,&medium)))
4506 retVal = cida->
cidl;
4532 TRACE(
"sf=%p pidl=%p\n", lpsf, pidl);
4538 IShellFolder_Release(lpsf);
4560 TRACE(
"%p\n", pidlAbs);
4565 if(pidlAbs && pidlAbs->mkid.cb)
4567 if(
SUCCEEDED(IShellFolder_BindToObject(psfParent, pidlAbs,
NULL, &IID_IShellFolder, (
LPVOID*)&psf)))
4569 IShellFolder_Release(psfParent);
4588 TRACE(
"%p\n", pidl);
4609 if(!lpcstrFileName)
return NULL;
4610 if(!*lpcstrFileName)
return NULL;
4616 IShellFolder_Release(lpsf);
4630 ULONG uAttr = SFGAO_FOLDER | SFGAO_HASSUBFOLDER | SFGAO_FILESYSANCESTOR;
4633 TRACE(
"%p, %p\n", psf, pidl);
4635 ret = IShellFolder_GetAttributesOf( psf, 1, &pidl, &uAttr );
4637 TRACE(
"-- 0x%08x 0x%08x\n", uAttr,
ret);
4639 return (uAttr & (SFGAO_FOLDER | SFGAO_HASSUBFOLDER)) && (uAttr & SFGAO_FILESYSANCESTOR);
4660 if (
FAILED( IShellBrowser_BrowseObject( fodInfos->
Shell.FOIShellBrowser,
4661 pidlSelection, SBSP_RELATIVE ) ) )
4667 bBrowseSelFolder =
TRUE;
4674 return bBrowseSelFolder;
4859 static const WCHAR brkpoint[] = {
'*',
'[',
']',0};
4875 if(lpFile[
len] ==
'/' || lpFile[
len] ==
'\\' || lpFile[
len] ==
':')
4878 for(
i =
len;
i >= 0;
i--)
4880 if (lpFile[
i] ==
'/' || lpFile[
i] ==
'\\' || lpFile[
i] ==
':')
HRESULT WINAPI SHGetDesktopFolder(IShellFolder **psf)
ACPI_SIZE strlen(const char *String)
static void * heap_alloc(size_t len)
static BOOL heap_free(void *mem)
static const char * wine_dbgstr_rect(const RECT *prc)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static const WCHAR nameW[]
#define RegCloseKey(hKey)
#define FNERR_BUFFERTOOSMALL
#define CDERR_LOADRESFAILURE
#define CDERR_FINDRESFAILURE
DECLSPEC_HIDDEN HINSTANCE COMDLG32_hInstance
void COMDLG32_SetCommDlgExtendedError(DWORD err) DECLSPEC_HIDDEN
BOOL GetFileName31A(OPENFILENAMEA *lpofn, UINT dlgType) DECLSPEC_HIDDEN
BOOL GetFileName31W(OPENFILENAMEW *lpofn, UINT dlgType) DECLSPEC_HIDDEN
struct tagMRUINFOW MRUINFOW
struct tagMRUINFOW * LPMRUINFOW
INT(CALLBACK * MRUBinaryCmpFn)(LPCVOID lhs, LPCVOID rhs, DWORD length)
INT(CALLBACK * MRUStringCmpFnW)(LPCWSTR lhs, LPCWSTR rhs)
EXTERN_C HRESULT DoInitAutoCompleteWithCWD(FileOpenDlgInfos *pInfo, HWND hwndEdit)
EXTERN_C HRESULT DoReleaseAutoCompleteWithCWD(FileOpenDlgInfos *pInfo)
BOOL WINAPI InitCommonControlsEx(const INITCOMMONCONTROLSEX *lpInitCtrls)
#define OFN_OVERWRITEPROMPT
#define OFN_EXTENSIONDIFFERENT
#define CDM_SETCONTROLTEXT
#define OFN_ENABLETEMPLATEHANDLE
struct tagOFNA * LPOPENFILENAMEA
#define OPENFILENAME_SIZE_VERSION_400W
#define CDM_GETFOLDERIDLIST
#define OFN_FILEMUSTEXIST
#define OFN_ENABLETEMPLATE
#define OFN_EX_NOPLACESBAR
#define OFN_PATHMUSTEXIST
#define CDM_GETFOLDERPATH
struct tagOFNW OPENFILENAMEW
#define OFN_ALLOWMULTISELECT
static LPCWSTR LPCWSTR module_name
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
LONG WINAPI RegOpenKeyA(HKEY hKey, LPCSTR lpSubKey, PHKEY phkResult)
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
LONG WINAPI RegCreateKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
BOOL WINAPI ImageList_Draw(HIMAGELIST himl, INT i, HDC hdc, INT x, INT y, UINT fStyle)
BOOL WINAPI ImageList_Destroy(HIMAGELIST himl)
HIMAGELIST WINAPI ImageList_Create(INT cx, INT cy, UINT flags, INT cInitial, INT cGrow)
static UINT GetNumSelected(IDataObject *doSelected)
int COMDLG32_SplitFileNames(LPWSTR lpstrEdit, UINT nStrLen, LPWSTR *lpstrFileList, UINT *sizeUsed)
LPITEMIDLIST GetParentPidl(LPITEMIDLIST pidl)
void FILEDLG95_FILENAME_FillFromSelection(HWND hwnd)
static void ArrangeCtrlPositions(HWND hwndChildDlg, HWND hwndParentDlg, BOOL hide_help)
#define TBPLACES_CMDID_PLACE0
static void FILEDLG95_FILETYPE_Clean(HWND hwnd)
static const WCHAR filedlg_info_propnameW[]
static BOOL COMDLG32_GetDisplayNameOf(LPCITEMIDLIST pidl, LPWSTR pwszPath)
void COMDLG32_GetCanonicalPath(PCIDLIST_ABSOLUTE pidlAbsCurrent, LPWSTR lpstrFile, LPWSTR lpstrPathAndFile)
#define TBPLACES_CMDID_PLACE1
static const WCHAR MRUListW[]
static LRESULT FILEDLG95_LOOKIN_DrawItem(LPDRAWITEMSTRUCT pDIStruct)
static void FILEDLG95_LOOKIN_Clean(HWND hwnd)
#define UNIMPLEMENTED_FLAGS
static WCHAR * heap_strdupAtoW(const char *str)
static void FILEDLG95_Clean(HWND hwnd)
static const WCHAR LastVisitedMRUW[]
static LRESULT FILEDLG95_SHELL_Init(HWND hwnd)
int FILEDLG95_ValidatePathAction(LPWSTR lpstrPathAndFile, IShellFolder **ppsf, HWND hwnd, DWORD flags, BOOL isSaveDlg, int defAction)
#define TBPLACES_CMDID_PLACE3
static SIZE MemDialogSize
static HRESULT GetName(LPSHELLFOLDER lpsf, LPITEMIDLIST pidl, DWORD dwFlags, LPWSTR lpstrFileName)
static int FILEDLG95_FILENAME_GetFileNames(HWND hwnd, LPWSTR *lpstrFileList, UINT *sizeUsed)
static BOOL FILEDLG95_SHELL_ExecuteCommand(HWND hwnd, LPCSTR lpVerb)
static INT_PTR FILEDLG95_Handle_GetFilePath(HWND hwnd, DWORD size, LPVOID result)
static LRESULT FILEDLG95_ResizeControls(HWND hwnd, WPARAM wParam, LPARAM lParam)
static LRESULT FILEDLG95_OnWMSize(HWND hwnd, WPARAM wParam)
static void FILEDLG95_SHELL_Clean(HWND hwnd)
static void filedlg_browse_to_pidl(const FileOpenDlgInfos *info, LPITEMIDLIST pidl)
void FILEDLG95_OnOpenMessage(HWND hwnd, int idCaption, int idText)
static BOOL GetFileName95(FileOpenDlgInfos *fodInfos)
#define TBPLACES_CMDID_PLACE4
static BOOL BrowseSelectedFolder(HWND hwnd)
static WCHAR FILEDLG95_MRU_get_slot(LPCWSTR module_name, LPWSTR stored_path, PHKEY hkey_ret)
short WINAPI GetFileTitleW(LPCWSTR lpFile, LPWSTR lpTitle, WORD cbBuf)
static BOOL FILEDLG95_SendFileOK(HWND hwnd, FileOpenDlgInfos *fodInfos)
static BOOL FILEDLG95_SHELL_UpFolder(HWND hwnd)
#define TBPLACES_CMDID_PLACE2
BOOL WINAPI GetOpenFileNameW(OPENFILENAMEW *ofn)
static void FILEDLG95_MRU_load_filename(LPWSTR stored_path)
static int FILEDLG95_LOOKIN_RemoveMostExpandedItem(HWND hwnd)
static void filedlg_collect_places_pidls(FileOpenDlgInfos *fodInfos)
#define WM_GETISHELLBROWSER
static BOOL get_config_key_dword(HKEY hkey, const WCHAR *name, DWORD *value)
static LRESULT FILEDLG95_OnWMGetIShellBrowser(HWND hwnd)
static FORMATETC get_def_format(void)
short WINAPI GetFileTitleA(LPCSTR lpFile, LPSTR lpTitle, WORD cbBuf)
FileOpenDlgInfos * get_filedlg_infoptr(HWND hwnd)
static int FILEDLG95_LOOKIN_AddItem(HWND hwnd, LPITEMIDLIST pidl, int iInsertId)
static int FILEDLG95_LOOKIN_SearchItem(HWND hwnd, WPARAM searchArg, int iSearchMethod)
static BOOL valid_struct_size(DWORD size)
static void FILEDLG95_LOOKIN_Init(HWND hwndCombo)
IShellFolder * GetShellFolderFromPidl(LPITEMIDLIST pidlAbs)
static INT_PTR FILEDLG95_HandleCustomDialogMessages(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
static BOOL FILEDLG95_unixfs_is_rooted_at_desktop(void)
static LRESULT FILEDLG95_InitControls(HWND hwnd)
static LRESULT FILEDLG95_FillControls(HWND hwnd, WPARAM wParam, LPARAM lParam)
static BOOL is_places_bar_enabled(const FileOpenDlgInfos *fodInfos)
static HWND CreateTemplateDialog(FileOpenDlgInfos *fodInfos, HWND hwnd)
static BOOL IsPidlFolder(LPSHELLFOLDER psf, LPCITEMIDLIST pidl)
LRESULT SendCustomDlgNotificationMessage(HWND hwndParentDlg, UINT uCode)
static BOOL filename_is_edit(const FileOpenDlgInfos *info)
BOOL WINAPI GetSaveFileNameA(OPENFILENAMEA *ofn)
static BOOL FILEDLG95_LOOKIN_OnCommand(HWND hwnd, WORD wNotifyCode)
static void init_filedlg_infoA(OPENFILENAMEA *ofn, FileOpenDlgInfos *info)
BOOL WINAPI GetOpenFileNameA(OPENFILENAMEA *ofn)
static const char LookInInfosStr[]
static HRESULT FILEDLG95_FILETYPE_Init(HWND hwnd)
static BOOL FILEDLG95_OnOpenMultipleFiles(HWND hwnd, LPWSTR lpstrFileList, UINT nFileCount, UINT sizeUsed)
static HRESULT COMDLG32_StrRetToStrNW(LPWSTR dest, DWORD len, LPSTRRET src, const ITEMIDLIST *pidl)
static LPITEMIDLIST GetPidlFromName(IShellFolder *psf, LPWSTR lpcstrFileName)
static BOOL get_config_key_as_dword(HKEY hkey, const WCHAR *name, DWORD *value)
static INT_PTR CALLBACK FileOpenDlgProcUserTemplate(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
static void FILEDLG95_MRU_save_filename(LPCWSTR filename)
static LRESULT FILEDLG95_OnWMCommand(HWND hwnd, WPARAM wParam)
static INT_PTR CALLBACK FileOpenDlgProc95(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
static BOOL filedialog_is_readonly_hidden(const FileOpenDlgInfos *info)
static BOOL GetFileDialog95(FileOpenDlgInfos *info, UINT dlg_type)
struct tagLookInInfo LookInInfos
LPITEMIDLIST GetPidlFromDataObject(IDataObject *doSelected, UINT nPidlIndex)
static void init_filedlg_infoW(OPENFILENAMEW *ofn, FileOpenDlgInfos *info)
static int FILEDLG95_LOOKIN_InsertItemAfterParent(HWND hwnd, LPITEMIDLIST pidl)
BOOL WINAPI GetSaveFileNameW(LPOPENFILENAMEW ofn)
static int FILEDLG95_FILETYPE_SearchExt(HWND hwnd, LPCWSTR lpstrExt)
static BOOL is_dialog_hooked(const FileOpenDlgInfos *info)
int FILEDLG95_LOOKIN_SelectItem(HWND hwnd, LPITEMIDLIST pidl)
static BOOL FILEDLG95_FILETYPE_OnCommand(HWND hwnd, WORD wNotifyCode)
static BOOL is_win16_looks(DWORD flags)
static LRESULT FILEDLG95_OnWMGetMMI(HWND hwnd, LPMINMAXINFO mmiptr)
static void COMCTL32_ReleaseStgMedium(STGMEDIUM medium)
static BOOL FILEDLG95_OnOpen(HWND hwnd)
struct SFolder * LPSFOLDER
static BOOL get_config_key_string(HKEY hkey, const WCHAR *name, WCHAR **value)
#define CBGetItemDataPtr(hwnd, iItemId)
#define GetCurrentDirectoryW(x, y)
#define GetProcAddress(x, y)
#define INVALID_HANDLE_VALUE
#define WideCharToMultiByte
#define MultiByteToWideChar
static const WCHAR *const ext[]
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
BOOL WINAPI FindClose(HANDLE hFindFile)
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
BOOL WINAPI SetCurrentDirectoryW(IN LPCWSTR lpPathName)
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
BOOL WINAPI GetVersionExW(IN LPOSVERSIONINFOW lpVersionInformation)
HRSRC WINAPI FindResourceW(HINSTANCE hModule, LPCWSTR name, LPCWSTR type)
HRSRC WINAPI FindResourceA(HMODULE hModule, LPCSTR name, LPCSTR type)
LPVOID WINAPI LockResource(HGLOBAL handle)
HGLOBAL WINAPI LoadResource(HINSTANCE hModule, HRSRC hRsrc)
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
HRESULT WINAPI DECLSPEC_HOTPATCH OleInitialize(LPVOID reserved)
void WINAPI DECLSPEC_HOTPATCH OleUninitialize(void)
#define RRF_RT_REG_BINARY
HRESULT WINAPI SHGetSpecialFolderLocation(HWND hwndOwner, INT nFolder, LPITEMIDLIST *ppidl)
HRESULT WINAPI SHGetFolderPathW(HWND hwndOwner, int nFolder, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath)
LPSTR WINAPI PathFindFileNameA(LPCSTR lpszPath)
int WINAPI PathGetDriveNumberW(const WCHAR *path)
BOOL WINAPI PathRemoveFileSpecW(LPWSTR lpszPath)
LPWSTR WINAPI PathFindFileNameW(LPCWSTR lpszPath)
LPWSTR WINAPI PathFindExtensionW(LPCWSTR lpszPath)
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
LPSTR WINAPI PathFindExtensionA(LPCSTR lpszPath)
LPWSTR WINAPI PathFindNextComponentW(LPCWSTR lpszPath)
BOOL WINAPI PathIsDirectoryW(LPCWSTR lpszPath)
BOOL WINAPI PathIsRelativeW(LPCWSTR lpszPath)
HRESULT WINAPI StrRetToBufW(LPSTRRET src, const ITEMIDLIST *pidl, LPWSTR dest, UINT len)
LPWSTR WINAPI StrDupW(LPCWSTR lpszStr)
#define IShellFolder_ParseDisplayName
#define IShellFolder_GetDisplayNameOf
#define IDS_INVALID_FILENAME_TITLE
#define IDS_PATHNOTEXISTING
#define IDC_TOOLBARPLACES
#define IDS_FILENOTEXISTING
#define IDC_TOOLBARSTATIC
#define IDS_OVERWRITEFILE
#define IDS_INVALID_FILENAME
GLuint GLuint GLsizei GLenum type
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum GLuint GLenum GLsizei const GLchar * buf
GLuint GLsizei GLsizei * length
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
LPVOID NTAPI GlobalLock(HGLOBAL hMem)
HGLOBAL NTAPI GlobalFree(HGLOBAL hMem)
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
HLOCAL NTAPI LocalFree(HLOCAL hMem)
VOID WINAPI CoTaskMemFree(LPVOID ptr)
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
int WINAPI lstrlenA(LPCSTR lpString)
#define memcpy(s1, s2, n)
#define ERROR_FILE_NOT_FOUND
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeStringFromAsciiz(_Out_ PUNICODE_STRING Destination, _In_ PCSZ Source)
#define VER_PLATFORM_WIN32_NT
#define VER_PLATFORM_WIN32_WINDOWS
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
#define PathCanonicalizeW
#define PathAddBackslashW
LPITEMIDLIST WINAPI ILClone(LPCITEMIDLIST pidl)
void WINAPI ILFree(LPITEMIDLIST pidl)
HRESULT WINAPI SHParseDisplayName(LPCWSTR pszName, IBindCtx *pbc, LPITEMIDLIST *ppidl, SFGAOF sfgaoIn, SFGAOF *psfgaoOut)
LPITEMIDLIST WINAPI ILCombine(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
BOOL WINAPI ILRemoveLastID(LPITEMIDLIST pidl)
BOOL WINAPI SHGetPathFromIDListW(LPCITEMIDLIST pidl, LPWSTR pszPath)
LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST pidl)
BOOL WINAPI ILIsEqual(LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
#define VIEW_PARENTFOLDER
#define ICC_USEREX_CLASSES
struct _IMAGELIST * HIMAGELIST
#define IDB_VIEW_SMALL_COLOR
#define TB_BUTTONSTRUCTSIZE
#define TOOLBARCLASSNAMEW
#define ImageList_AddIcon(himl, hicon)
#define TB_SETBUTTONWIDTH
#define TB_SETMAXTEXTROWS
#define TOOLBARCLASSNAMEA
struct tagNMTTDISPINFOA * LPNMTTDISPINFOA
#define CBEM_GETEDITCONTROL
_Check_return_ _CRTIMP _CONST_RETURN wchar_t *__cdecl wcspbrk(_In_z_ const wchar_t *_Str, _In_z_ const wchar_t *_Control)
DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path, DWORD dwFileAttributes, SHFILEINFOW *psfi, UINT sizeofpsfi, UINT flags)
#define SHGFI_ATTR_SPECIFIED
#define SHGFI_SYSICONINDEX
#define SHGFI_DISPLAYNAME
#define CSIDL_FLAG_CREATE
#define CSIDL_DESKTOPDIRECTORY
#define CSIDL_MYDOCUMENTS
#define CFSTR_SHELLIDLISTA
static IShellBrowser * IShellBrowserImpl_Construct(void)
#define FCIDM_TB_NEWFOLDER
#define FCIDM_TB_SMALLICON
#define FCIDM_TB_UPFOLDER
#define FCIDM_TB_REPORTVIEW
ITEMIDLIST UNALIGNED * LPITEMIDLIST
const ITEMIDLIST UNALIGNED * LPCITEMIDLIST
struct FileOpenDlgInfos::@348 DlgInfos
struct FileOpenDlgInfos::@349 HookMsg
struct FileOpenDlgInfos::@346 Shell
struct FileOpenDlgInfos::@347 ShellInfos
ULONG dwOSVersionInfoSize
WCHAR szDisplayName[MAX_PATH]
union tagMRUINFOW::@339 u
MRUBinaryCmpFn binary_cmpfn
MRUStringCmpFnW string_cmpfn
int WINAPI GetWindowTextW(HWND hWnd, LPWSTR lpString, int nMaxCount)
DWORD WINAPI GetLastError(void)
DWORD WINAPI GetCurrentThreadId(void)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
BOOL WINAPI GetTextMetricsW(_In_ HDC, _Out_ LPTEXTMETRICW)
COLORREF WINAPI SetBkColor(_In_ HDC, _In_ COLORREF)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
BOOL WINAPI TextOutW(_In_ HDC hdc, _In_ int x, _In_ int y, _In_reads_(c) LPCWSTR lpString, _In_ int c)
int WINAPI FillRect(HDC, LPCRECT, HBRUSH)
COLORREF WINAPI SetTextColor(_In_ HDC, _In_ COLORREF)
#define HKEY_LOCAL_MACHINE
#define HKEY_CURRENT_USER
HWND WINAPI GetFocus(void)
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
DWORD WINAPI GetSysColor(_In_ int)
BOOL WINAPI RedrawWindow(_In_opt_ HWND, _In_opt_ LPCRECT, _In_opt_ HRGN, _In_ UINT)
HWND WINAPI CreateWindowExA(_In_ DWORD dwExStyle, _In_opt_ LPCSTR lpClassName, _In_opt_ LPCSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
INT_PTR WINAPI DialogBoxIndirectParamW(_In_opt_ HINSTANCE, _In_ LPCDLGTEMPLATE, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
HANDLE WINAPI GetPropA(_In_ HWND, _In_ LPCSTR)
HANDLE WINAPI RemovePropW(_In_ HWND, _In_ LPCWSTR)
BOOL WINAPI SetPropA(_In_ HWND, _In_ LPCSTR, _In_opt_ HANDLE)
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
HBRUSH WINAPI GetSysColorBrush(_In_ int)
LONG WINAPI SetWindowLongW(_In_ HWND, _In_ int, _In_ LONG)
LONG WINAPI GetWindowLongW(_In_ HWND, _In_ int)
LPWSTR WINAPI CharLowerW(_Inout_ LPWSTR)
BOOL WINAPI AdjustWindowRectEx(_Inout_ LPRECT, _In_ DWORD, _In_ BOOL, _In_ DWORD)
LRESULT WINAPI SendMessageA(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI SetDlgItemTextW(_In_ HWND, _In_ int, _In_ LPCWSTR)
BOOL WINAPI EndDeferWindowPos(_In_ HDWP)
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
int WINAPI MessageBoxW(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
LRESULT WINAPI SendDlgItemMessageW(_In_ HWND, _In_ int, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
BOOL WINAPI SetWindowTextW(_In_ HWND, _In_opt_ LPCWSTR)
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
HWND WINAPI SetFocus(_In_opt_ HWND)
BOOL WINAPI UnhookWindowsHookEx(_In_ HHOOK)
BOOL WINAPI IsChild(_In_ HWND, _In_ HWND)
HWND WINAPI CreateWindowExW(_In_ DWORD dwExStyle, _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, _In_ int Y, _In_ int nWidth, _In_ int nHeight, _In_opt_ HWND hWndParent, _In_opt_ HMENU hMenu, _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam)
HWND WINAPI CreateDialogIndirectParamA(_In_opt_ HINSTANCE, _In_ LPCDLGTEMPLATE, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
BOOL WINAPI SetPropW(_In_ HWND, _In_ LPCWSTR, _In_opt_ HANDLE)
struct tagNMHDR * LPNMHDR
UINT WINAPI RegisterWindowMessageW(_In_ LPCWSTR)
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
HDC WINAPI GetDC(_In_opt_ HWND)
int WINAPI GetWindowTextLengthW(_In_ HWND)
BOOL WINAPI SetDlgItemTextA(_In_ HWND, _In_ int, _In_ LPCSTR)
#define MB_ICONEXCLAMATION
INT_PTR WINAPI DialogBoxIndirectParamA(_In_opt_ HINSTANCE, _In_ LPCDLGTEMPLATE, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
BOOL WINAPI SetRectEmpty(_Out_ LPRECT)
#define MAKEINTRESOURCEA(i)
HANDLE WINAPI GetPropW(_In_ HWND, _In_ LPCWSTR)
LRESULT WINAPI CallNextHookEx(_In_opt_ HHOOK, _In_ int, _In_ WPARAM, _In_ LPARAM)
HWND WINAPI GetWindow(_In_ HWND, _In_ UINT)
#define SBS_SIZEBOXBOTTOMRIGHTALIGN
int WINAPI GetDlgCtrlID(_In_ HWND)
HDWP WINAPI DeferWindowPos(_In_ HDWP, _In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define MAKEINTRESOURCEW(i)
#define SetWindowLongPtrW
UINT WINAPI RegisterClipboardFormatA(_In_ LPCSTR)
BOOL WINAPI DestroyWindow(_In_ HWND)
BOOL WINAPI EqualRect(_In_ LPCRECT, _In_ LPCRECT)
int WINAPI GetSystemMetrics(_In_ int)
HWND WINAPI CreateDialogIndirectParamW(_In_opt_ HINSTANCE, _In_ LPCDLGTEMPLATE, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
HANDLE WINAPI RemovePropA(_In_ HWND, _In_ LPCSTR)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
HDWP WINAPI BeginDeferWindowPos(_In_ int)
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
BOOL WINAPI DestroyIcon(_In_ HICON)