ReactOS  0.4.15-dev-3456-g4a17d4b
CFileDefExt Class Reference

#include <filedefext.h>

Inheritance diagram for CFileDefExt:
Collaboration diagram for CFileDefExt:

Public Member Functions

 CFileDefExt ()
 
 ~CFileDefExt ()
 
BOOL OnFolderCustApply (HWND hwndDlg)
 
void OnFolderCustChangeIcon (HWND hwndDlg)
 
void OnFolderCustDestroy (HWND hwndDlg)
 
void UpdateFolderIcon (HWND hwndDlg)
 
virtual HRESULT STDMETHODCALLTYPE Initialize (PCIDLIST_ABSOLUTE pidlFolder, IDataObject *pdtobj, HKEY hkeyProgID)
 
virtual HRESULT WINAPI QueryContextMenu (HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags)
 
virtual HRESULT WINAPI InvokeCommand (LPCMINVOKECOMMANDINFO lpici)
 
virtual HRESULT WINAPI GetCommandString (UINT_PTR idCmd, UINT uType, UINT *pwReserved, LPSTR pszName, UINT cchMax)
 
virtual HRESULT WINAPI AddPages (LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lParam)
 
virtual HRESULT WINAPI ReplacePage (UINT uPageID, LPFNADDPROPSHEETPAGE pfnReplacePage, LPARAM lParam)
 
virtual HRESULT WINAPI SetSite (IUnknown *punk)
 
virtual HRESULT WINAPI GetSite (REFIID iid, void **ppvSite)
 
- Public Member Functions inherited from ATL::CComObjectRootEx< CComMultiThreadModelNoCS >
 ~CComObjectRootEx ()
 
ULONG InternalAddRef ()
 
ULONG InternalRelease ()
 
void Lock ()
 
void Unlock ()
 
HRESULT _AtlInitialConstruct ()
 
- Public Member Functions inherited from ATL::CComObjectRootBase
 CComObjectRootBase ()
 
 ~CComObjectRootBase ()
 
void SetVoid (void *)
 
HRESULT _AtlFinalConstruct ()
 
HRESULT FinalConstruct ()
 
void InternalFinalConstructAddRef ()
 
void InternalFinalConstructRelease ()
 
void FinalRelease ()
 
- Public Member Functions inherited from IUnknown
HRESULT QueryInterface ([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
 
ULONG AddRef ()
 
ULONG Release ()
 
- Public Member Functions inherited from IShellPropSheetExt
HRESULT AddPages ([in] LPFNSVADDPROPSHEETPAGE pfnAddPage, [in] LPARAM lParam)
 
HRESULT ReplacePage ([in] EXPPS uPageID, [in] LPFNSVADDPROPSHEETPAGE pfnReplaceWith, [in] LPARAM lParam)
 
- Public Member Functions inherited from IObjectWithSite
HRESULT GetSite ([in] REFIID riid, [out, iid_is(riid)] PVOID *ppvSite)
 

Private Member Functions

VOID InitOpensWithField (HWND hwndDlg)
 
BOOL InitFileType (HWND hwndDlg)
 
BOOL InitFilePath (HWND hwndDlg)
 
BOOL InitFileAttr (HWND hwndDlg)
 
BOOL InitGeneralPage (HWND hwndDlg)
 
BOOL SetVersionLabel (HWND hwndDlg, DWORD idCtrl, LPCWSTR pwszName)
 
BOOL AddVersionString (HWND hwndDlg, LPCWSTR pwszName)
 
BOOL InitVersionPage (HWND hwndDlg)
 
BOOL InitFolderCustomizePage (HWND hwndDlg)
 
BOOL CountFolderAndFiles (HWND hwndDlg, LPCWSTR pwszBuf, LPDWORD ticks)
 

Static Private Member Functions

static BOOL GetFileTimeString (LPFILETIME lpFileTime, LPWSTR pwszResult, UINT cchResult)
 
static INT_PTR CALLBACK GeneralPageProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
static INT_PTR CALLBACK VersionPageProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
static INT_PTR CALLBACK FolderCustomizePageProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
static DWORD WINAPI _CountFolderAndFilesThreadProc (LPVOID lpParameter)
 

Private Attributes

WCHAR m_wszPath [MAX_PATH]
 
CFileVersionInfo m_VerInfo
 
BOOL m_bDir
 
DWORD m_cFiles
 
DWORD m_cFolders
 
ULARGE_INTEGER m_DirSize
 
ULARGE_INTEGER m_DirSizeOnDisc
 
WCHAR m_szFolderIconPath [MAX_PATH]
 
INT m_nFolderIconIndex
 
HICON m_hFolderIcon
 
BOOL m_bFolderIconIsSet
 

Additional Inherited Members

- Public Types inherited from IShellExtInit
typedef IShellExtInitLPSHELLEXTINIT
 
- Public Types inherited from IUnknown
typedef IUnknownLPUNKNOWN
 
- Public Types inherited from IContextMenu
typedef struct IContextMenu::tagCMINVOKECOMMANDINFO CMINVOKECOMMANDINFO
 
typedef struct IContextMenu::tagCMINVOKECOMMANDINFOLPCMINVOKECOMMANDINFO
 
typedef struct IContextMenu::tagCMInvokeCommandInfoEx CMINVOKECOMMANDINFOEX
 
typedef struct IContextMenu::tagCMInvokeCommandInfoExLPCMINVOKECOMMANDINFOEX
 
- Public Types inherited from IShellPropSheetExt
enum  tagSHELLPROPSHEETEXTPAGEID { EXPPS_FILETYPES = 0x1 }
 
typedef UINT EXPPS
 
- Public Types inherited from IObjectWithSite
typedef IObjectWithSiteLPOBJECTWITHSITE
 
- Static Public Member Functions inherited from ATL::CComObjectRootBase
static void WINAPI ObjectMain (bool)
 
static const struct _ATL_CATMAP_ENTRYGetCategoryMap ()
 
static HRESULT WINAPI InternalQueryInterface (void *pThis, const _ATL_INTMAP_ENTRY *pEntries, REFIID iid, void **ppvObject)
 
- Public Attributes inherited from ATL::CComObjectRootBase
LONG m_dwRef
 
- Public Attributes inherited from IContextMenu
CMIC_MASK_NOZONECHECKS typedef IContextMenuLPCONTEXTMENU
 
- Static Public Attributes inherited from IContextMenu
static CMDSTR_VIEWDETAILSW(const WCHAR []) const WCHAR CMDSTR_NEWFOLDERW [] = {'N','e','w','F','o','l','d','e','r',0}
 
static const WCHAR CMDSTR_VIEWLISTW [] = {'V','i','e','w','L','i','s','t',0}
 
static const WCHAR CMDSTR_VIEWDETAILSW [] = {'V','i','e','w','D','e','t','a','i','l','s',0}
 

Detailed Description

Definition at line 56 of file filedefext.h.

Constructor & Destructor Documentation

◆ CFileDefExt()

CFileDefExt::CFileDefExt ( )

Definition at line 1223 of file filedefext.cpp.

1223  :
1224  m_bDir(FALSE), m_cFiles(0), m_cFolders(0)
1225 {
1226  m_wszPath[0] = L'\0';
1227  m_DirSize.QuadPart = 0ull;
1228  m_DirSizeOnDisc.QuadPart = 0ull;
1229 
1230  m_szFolderIconPath[0] = 0;
1231  m_nFolderIconIndex = 0;
1232  m_hFolderIcon = NULL;
1234 }
#define L(x)
Definition: ntvdm.h:50
ULONGLONG QuadPart
Definition: ms-dtyp.idl:185
#define FALSE
Definition: types.h:117
INT m_nFolderIconIndex
Definition: filedefext.h:93
DWORD m_cFolders
Definition: filedefext.h:85
DWORD m_cFiles
Definition: filedefext.h:84
ULARGE_INTEGER m_DirSize
Definition: filedefext.h:86
BOOL m_bFolderIconIsSet
Definition: filedefext.h:95
ULARGE_INTEGER m_DirSizeOnDisc
Definition: filedefext.h:87
WCHAR m_szFolderIconPath[MAX_PATH]
Definition: filedefext.h:92
#define NULL
Definition: types.h:112
WCHAR m_wszPath[MAX_PATH]
Definition: filedefext.h:80
HICON m_hFolderIcon
Definition: filedefext.h:94
BOOL m_bDir
Definition: filedefext.h:82

◆ ~CFileDefExt()

CFileDefExt::~CFileDefExt ( )

Definition at line 1236 of file filedefext.cpp.

1237 {
1238 
1239 }

Member Function Documentation

◆ _CountFolderAndFilesThreadProc()

DWORD WINAPI CFileDefExt::_CountFolderAndFilesThreadProc ( LPVOID  lpParameter)
staticprivate

Definition at line 1359 of file filedefext.cpp.

1360 {
1361  _CountFolderAndFilesData *data = static_cast<_CountFolderAndFilesData*>(lpParameter);
1362  DWORD ticks = 0;
1363  data->This->CountFolderAndFiles(data->hwndDlg, data->pwszBuf, &ticks);
1364 
1365  //Release the CFileDefExt and data object holds in the copying thread.
1366  data->This->Release();
1367  HeapFree(GetProcessHeap(), 0, data->pwszBuf);
1368  HeapFree(GetProcessHeap(), 0, data);
1369 
1370  return 0;
1371 }
#define GetProcessHeap()
Definition: compat.h:595
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
LPVOID lpParameter
Definition: kernel32.h:241
#define HeapFree(x, y, z)
Definition: compat.h:594

Referenced by InitFileAttr().

◆ AddPages()

HRESULT WINAPI CFileDefExt::AddPages ( LPFNADDPROPSHEETPAGE  pfnAddPage,
LPARAM  lParam 
)
virtual

Definition at line 1302 of file filedefext.cpp.

1303 {
1304  HPROPSHEETPAGE hPage;
1306 
1307  hPage = SH_CreatePropertySheetPage(wResId,
1309  (LPARAM)this,
1310  NULL);
1311  if (hPage)
1312  pfnAddPage(hPage, lParam);
1313 
1315  {
1318  (LPARAM)this,
1319  NULL);
1320  if (hPage)
1321  pfnAddPage(hPage, lParam);
1322  }
1323 
1324  if (m_bDir)
1325  {
1328  (LPARAM)this,
1329  NULL);
1330  if (hPage)
1331  pfnAddPage(hPage, lParam);
1332  }
1333 
1334  return S_OK;
1335 }
static INT_PTR CALLBACK VersionPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: filedefext.cpp:931
#define IDD_FOLDER_CUSTOMIZE
Definition: shresdef.h:494
struct _PSP * HPROPSHEETPAGE
Definition: mstask.idl:90
LONG_PTR LPARAM
Definition: windef.h:208
static INT_PTR CALLBACK GeneralPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: filedefext.cpp:720
static INT_PTR CALLBACK FolderCustomizePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: filedefext.cpp:987
unsigned short WORD
Definition: ntddk_ex.h:93
#define IDD_FOLDER_PROPERTIES
Definition: shresdef.h:365
DWORD WINAPI GetFileVersionInfoSizeW(LPCWSTR filename, LPDWORD handle)
Definition: version.c:611
#define S_OK
Definition: intsafe.h:52
#define IDD_FILE_PROPERTIES
Definition: shresdef.h:364
#define NULL
Definition: types.h:112
WCHAR m_wszPath[MAX_PATH]
Definition: filedefext.h:80
HPROPSHEETPAGE SH_CreatePropertySheetPage(WORD wDialogId, DLGPROC pfnDlgProc, LPARAM lParam, LPCWSTR pwszTitle)
Definition: filedefext.cpp:302
BOOL m_bDir
Definition: filedefext.h:82
LPARAM lParam
Definition: combotst.c:139
#define IDD_FILE_VERSION
Definition: shresdef.h:373

◆ AddVersionString()

BOOL CFileDefExt::AddVersionString ( HWND  hwndDlg,
LPCWSTR  pwszName 
)
private

Definition at line 902 of file filedefext.cpp.

903 {
904  TRACE("pwszName %s, hwndDlg %p\n", debugstr_w(pwszName), hwndDlg);
905 
906  if (hwndDlg == NULL || pwszName == NULL)
907  return FALSE;
908 
909  LPCWSTR pwszValue = m_VerInfo.GetString(pwszName);
910  if (pwszValue)
911  {
912  /* listbox name property */
913  HWND hDlgCtrl = GetDlgItem(hwndDlg, 14009);
914  TRACE("%s :: %s\n", debugstr_w(pwszName), debugstr_w(pwszValue));
915  UINT Index = SendMessageW(hDlgCtrl, LB_ADDSTRING, (WPARAM) -1, (LPARAM)pwszName);
916  SendMessageW(hDlgCtrl, LB_SETITEMDATA, (WPARAM)Index, (LPARAM)(WCHAR *)pwszValue);
917  return TRUE;
918  }
919 
920  return FALSE;
921 }
CFileVersionInfo m_VerInfo
Definition: filedefext.h:81
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define LB_ADDSTRING
Definition: winuser.h:2018
#define TRUE
Definition: types.h:120
UINT_PTR WPARAM
Definition: windef.h:207
#define FALSE
Definition: types.h:117
#define debugstr_w
Definition: kernel32.h:32
LONG_PTR LPARAM
Definition: windef.h:208
#define TRACE(s)
Definition: solgame.cpp:4
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
__wchar_t WCHAR
Definition: xmlstorage.h:180
_In_ WDFCOLLECTION _In_ ULONG Index
#define LB_SETITEMDATA
Definition: winuser.h:2052
LPCWSTR GetString(LPCWSTR pwszName)
Definition: filedefext.cpp:123
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
unsigned int UINT
Definition: ndis.h:50
#define NULL
Definition: types.h:112

Referenced by InitVersionPage().

◆ CountFolderAndFiles()

BOOL CFileDefExt::CountFolderAndFiles ( HWND  hwndDlg,
LPCWSTR  pwszBuf,
LPDWORD  ticks 
)
private

Definition at line 1374 of file filedefext.cpp.

1375 {
1376  CString sBuf = pwszBuf;
1377  sBuf += L"\\" ;
1378  CString sSearch = sBuf;
1379  sSearch += L"*" ;
1380  CString sFileName;
1381 
1382  WIN32_FIND_DATAW wfd;
1383  HANDLE hFind = FindFirstFileW(sSearch, &wfd);
1384  if (hFind == INVALID_HANDLE_VALUE)
1385  {
1386  ERR("FindFirstFileW %ls failed\n", sSearch.GetString());
1387  return FALSE;
1388  }
1389 
1390  BOOL root = FALSE;
1391  if (*ticks == 0) {
1392  *ticks = GetTickCount();
1393  root = TRUE;
1394  }
1395 
1396  do
1397  {
1398  sFileName = sBuf;
1399  sFileName += wfd.cFileName;
1400  if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
1401  {
1402  /* Don't process "." and ".." items */
1403  if (!wcscmp(wfd.cFileName, L".") || !wcscmp(wfd.cFileName, L".."))
1404  continue;
1405 
1406  ++m_cFolders;
1407 
1408  CountFolderAndFiles(hwndDlg, sFileName, ticks);
1409  }
1410  else
1411  {
1412  m_cFiles++;
1413 
1415  FileSize.u.LowPart = wfd.nFileSizeLow;
1416  FileSize.u.HighPart = wfd.nFileSizeHigh;
1418  // Calculate size on disc
1419  if (!GetPhysicalFileSize(sFileName.GetString(), &FileSize))
1420  ERR("GetPhysicalFileSize failed for %ls\n", sFileName.GetString());
1422  }
1423  if (GetTickCount() - *ticks > (DWORD) 300)
1424  {
1425  /* FIXME Using IsWindow is generally ill advised */
1426  if (IsWindow(hwndDlg))
1427  {
1428  WCHAR wszBuf[100];
1429 
1430  if (SH_FormatFileSizeWithBytes(&m_DirSize, wszBuf, _countof(wszBuf)))
1431  SetDlgItemTextW(hwndDlg, 14011, wszBuf);
1432 
1433  if (SH_FormatFileSizeWithBytes(&m_DirSizeOnDisc, wszBuf, _countof(wszBuf)))
1434  SetDlgItemTextW(hwndDlg, 14012, wszBuf);
1435 
1436  /* Display files and folders count */
1437  WCHAR wszFormat[100];
1438  LoadStringW(shell32_hInstance, IDS_FILE_FOLDER, wszFormat, _countof(wszFormat));
1439  StringCchPrintfW(wszBuf, _countof(wszBuf), wszFormat, m_cFiles, m_cFolders);
1440  SetDlgItemTextW(hwndDlg, 14027, wszBuf);
1441  *ticks = GetTickCount();
1442  }
1443  else
1444  break;
1445  }
1446  } while(FindNextFileW(hFind, &wfd));
1447 
1448  if (root && IsWindow(hwndDlg))
1449  {
1450  WCHAR wszBuf[100];
1451 
1452  if (SH_FormatFileSizeWithBytes(&m_DirSize, wszBuf, _countof(wszBuf)))
1453  SetDlgItemTextW(hwndDlg, 14011, wszBuf);
1454 
1455  if (SH_FormatFileSizeWithBytes(&m_DirSizeOnDisc, wszBuf, _countof(wszBuf)))
1456  SetDlgItemTextW(hwndDlg, 14012, wszBuf);
1457 
1458  /* Display files and folders count */
1459  WCHAR wszFormat[100];
1460  LoadStringW(shell32_hInstance, IDS_FILE_FOLDER, wszFormat, _countof(wszFormat));
1461  StringCchPrintfW(wszBuf, _countof(wszBuf), wszFormat, m_cFiles, m_cFolders);
1462  SetDlgItemTextW(hwndDlg, 14027, wszBuf);
1463  }
1464 
1465  FindClose(hFind);
1466  return TRUE;
1467 }
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:382
BOOL WINAPI IsWindow(_In_opt_ HWND)
#define TRUE
Definition: types.h:120
DWORD WINAPI GetTickCount(VOID)
Definition: time.c:455
#define INVALID_HANDLE_VALUE
Definition: compat.h:590
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
#define DWORD
Definition: nt_native.h:44
BOOL WINAPI SetDlgItemTextW(_In_ HWND, _In_ int, _In_ LPCWSTR)
#define L(x)
Definition: ntvdm.h:50
ULONGLONG QuadPart
Definition: ms-dtyp.idl:185
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
#define IDS_FILE_FOLDER
Definition: shresdef.h:217
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
DWORD m_cFolders
Definition: filedefext.h:85
CStringA CString
Definition: atlstr.h:139
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define _countof(array)
Definition: sndvol32.h:68
DWORD m_cFiles
Definition: filedefext.h:84
ULARGE_INTEGER m_DirSize
Definition: filedefext.h:86
ULARGE_INTEGER m_DirSizeOnDisc
Definition: filedefext.h:87
BOOL GetPhysicalFileSize(LPCWSTR PathBuffer, PULARGE_INTEGER Size)
Definition: filedefext.cpp:32
_Must_inspect_result_ _Out_ PLARGE_INTEGER FileSize
Definition: fsrtlfuncs.h:108
#define ERR(fmt,...)
Definition: debug.h:110
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define shell32_hInstance
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:530
struct _LARGE_INTEGER::@2240 u
BOOL CountFolderAndFiles(HWND hwndDlg, LPCWSTR pwszBuf, LPDWORD ticks)
LPWSTR SH_FormatFileSizeWithBytes(const PULARGE_INTEGER lpQwSize, LPWSTR pwszResult, UINT cchResultMax)
Definition: filedefext.cpp:266
LONGLONG QuadPart
Definition: typedefs.h:114
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:320
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502

◆ FolderCustomizePageProc()

INT_PTR CALLBACK CFileDefExt::FolderCustomizePageProc ( HWND  hwndDlg,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
staticprivate

Definition at line 987 of file filedefext.cpp.

988 {
989  CFileDefExt *pFileDefExt = reinterpret_cast<CFileDefExt *>(GetWindowLongPtr(hwndDlg, DWLP_USER));
990  switch (uMsg)
991  {
992  case WM_INITDIALOG:
993  {
995 
996  if (ppsp == NULL || !ppsp->lParam)
997  break;
998 
999  TRACE("WM_INITDIALOG hwnd %p lParam %p ppsplParam %x\n", hwndDlg, lParam, ppsp->lParam);
1000 
1001  pFileDefExt = reinterpret_cast<CFileDefExt *>(ppsp->lParam);
1002  return pFileDefExt->InitFolderCustomizePage(hwndDlg);
1003  }
1004 
1005  case WM_COMMAND:
1006  switch (LOWORD(wParam))
1007  {
1009  pFileDefExt->OnFolderCustChangeIcon(hwndDlg);
1010  break;
1011 
1013  // TODO:
1014  break;
1015 
1017  // TODO:
1018  break;
1019  }
1020  break;
1021 
1022  case WM_NOTIFY:
1023  {
1024  LPPSHNOTIFY lppsn = (LPPSHNOTIFY)lParam;
1025  if (lppsn->hdr.code == PSN_APPLY)
1026  {
1027  // apply or not
1028  if (pFileDefExt->OnFolderCustApply(hwndDlg))
1029  {
1031  }
1032  else
1033  {
1035  }
1036  return TRUE;
1037  }
1038  break;
1039  }
1040 
1041  case PSM_QUERYSIBLINGS:
1042  return FALSE; // continue
1043 
1044  case WM_DESTROY:
1045  pFileDefExt->OnFolderCustDestroy(hwndDlg);
1046  break;
1047 
1048  default:
1049  break;
1050  }
1051 
1052  return FALSE;
1053 }
#define IDC_FOLDERCUST_CHOOSE_PIC
Definition: shresdef.h:500
struct _PSHNOTIFY * LPPSHNOTIFY
#define TRUE
Definition: types.h:120
#define IDC_FOLDERCUST_RESTORE_DEFAULTS
Definition: shresdef.h:501
#define PSN_APPLY
Definition: prsht.h:117
#define SetWindowLongPtr
Definition: treelist.c:70
WPARAM wParam
Definition: combotst.c:138
void OnFolderCustChangeIcon(HWND hwndDlg)
#define DWLP_MSGRESULT
Definition: winuser.h:864
UINT code
Definition: winuser.h:3139
NMHDR hdr
Definition: prsht.h:330
#define FALSE
Definition: types.h:117
BOOL InitFolderCustomizePage(HWND hwndDlg)
void OnFolderCustDestroy(HWND hwndDlg)
BOOL OnFolderCustApply(HWND hwndDlg)
#define LPPROPSHEETPAGE
Definition: prsht.h:390
#define PSNRET_INVALID_NOCHANGEPAGE
Definition: prsht.h:131
#define WM_DESTROY
Definition: winuser.h:1596
#define TRACE(s)
Definition: solgame.cpp:4
#define PSNRET_NOERROR
Definition: prsht.h:129
#define DWLP_USER
Definition: winuser.h:866
#define WM_COMMAND
Definition: winuser.h:1727
#define IDC_FOLDERCUST_CHANGE_ICON
Definition: shresdef.h:504
#define NULL
Definition: types.h:112
#define PSM_QUERYSIBLINGS
Definition: prsht.h:160
#define GetWindowLongPtr
Definition: treelist.c:73
#define WM_INITDIALOG
Definition: winuser.h:1726
LPARAM lParam
Definition: combotst.c:139
#define LOWORD(l)
Definition: pedump.c:82
#define WM_NOTIFY
Definition: richedit.h:61

Referenced by AddPages().

◆ GeneralPageProc()

INT_PTR CALLBACK CFileDefExt::GeneralPageProc ( HWND  hwndDlg,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
staticprivate

Definition at line 720 of file filedefext.cpp.

721 {
722  CFileDefExt *pFileDefExt = reinterpret_cast<CFileDefExt *>(GetWindowLongPtr(hwndDlg, DWLP_USER));
723  switch (uMsg)
724  {
725  case WM_INITDIALOG:
726  {
728 
729  if (ppsp == NULL || !ppsp->lParam)
730  break;
731 
732  TRACE("WM_INITDIALOG hwnd %p lParam %p ppsplParam %S\n", hwndDlg, lParam, ppsp->lParam);
733 
734  pFileDefExt = reinterpret_cast<CFileDefExt *>(ppsp->lParam);
735  SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pFileDefExt);
736  pFileDefExt->InitGeneralPage(hwndDlg);
737  break;
738  }
739  case WM_COMMAND:
740  if (LOWORD(wParam) == 14024) /* Opens With - Change */
741  {
742  OPENASINFO oainfo;
743  oainfo.pcszFile = pFileDefExt->m_wszPath;
744  oainfo.pcszClass = NULL;
746  return SUCCEEDED(SHOpenWithDialog(hwndDlg, &oainfo));
747  }
748  else if (LOWORD(wParam) == 14021 || LOWORD(wParam) == 14022 || LOWORD(wParam) == 14023) /* checkboxes */
749  PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
750  else if (LOWORD(wParam) == 14001) /* Name */
751  {
752  if (HIWORD(wParam) == EN_CHANGE)
753  PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
754  }
755  break;
756  case WM_NOTIFY:
757  {
758  LPPSHNOTIFY lppsn = (LPPSHNOTIFY)lParam;
759  if (lppsn->hdr.code == PSN_APPLY)
760  {
761  /* Update attributes first */
762  DWORD dwAttr = GetFileAttributesW(pFileDefExt->m_wszPath);
763  if (dwAttr)
764  {
766 
767  if (BST_CHECKED == SendDlgItemMessageW(hwndDlg, 14021, BM_GETCHECK, 0, 0))
768  dwAttr |= FILE_ATTRIBUTE_READONLY;
769  if (BST_CHECKED == SendDlgItemMessageW(hwndDlg, 14022, BM_GETCHECK, 0, 0))
770  dwAttr |= FILE_ATTRIBUTE_HIDDEN;
771  if (BST_CHECKED == SendDlgItemMessageW(hwndDlg, 14023, BM_GETCHECK, 0, 0))
772  dwAttr |= FILE_ATTRIBUTE_ARCHIVE;
773 
774  if (!SetFileAttributesW(pFileDefExt->m_wszPath, dwAttr))
775  ERR("SetFileAttributesW failed\n");
776  }
777 
778  /* Update filename now */
779  WCHAR wszBuf[MAX_PATH];
780  StringCchCopyW(wszBuf, _countof(wszBuf), pFileDefExt->m_wszPath);
781  LPWSTR pwszFilename = PathFindFileNameW(wszBuf);
782  UINT cchFilenameMax = _countof(wszBuf) - (pwszFilename - wszBuf);
783  if (GetDlgItemTextW(hwndDlg, 14001, pwszFilename, cchFilenameMax))
784  {
785  if (!MoveFileW(pFileDefExt->m_wszPath, wszBuf))
786  ERR("MoveFileW failed\n");
787  }
788 
790  return TRUE;
791  }
792  break;
793  }
794  case PSM_QUERYSIBLINGS:
795  {
796  // reset icon
797  HWND hIconCtrl = GetDlgItem(hwndDlg, 14025);
798  HICON hIcon = (HICON)SendMessageW(hIconCtrl, STM_GETICON, 0, 0);
800  hIcon = NULL;
801  SendMessageW(hIconCtrl, STM_SETICON, (WPARAM)hIcon, 0);
802 
803  // refresh the page
804  pFileDefExt->InitGeneralPage(hwndDlg);
805  return FALSE; // continue
806  }
807  default:
808  break;
809  }
810 
811  return FALSE;
812 }
BOOL WINAPI SetFileAttributesW(LPCWSTR lpFileName, DWORD dwFileAttributes)
Definition: fileinfo.c:794
#define STM_SETICON
Definition: winuser.h:2079
static HICON
Definition: imagelist.c:84
UINT WINAPI GetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPWSTR lpString, int nMaxCount)
Definition: dialog.c:2263
LPCWSTR pcszFile
Definition: shlobj.h:2510
struct _PSHNOTIFY * LPPSHNOTIFY
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2022
#define TRUE
Definition: types.h:120
OPEN_AS_INFO_FLAGS oaifInFlags
Definition: shlobj.h:2512
BOOL InitGeneralPage(HWND hwndDlg)
Definition: filedefext.cpp:664
UINT_PTR WPARAM
Definition: windef.h:207
#define PSN_APPLY
Definition: prsht.h:117
#define SetWindowLongPtr
Definition: treelist.c:70
WPARAM wParam
Definition: combotst.c:138
#define DWLP_MSGRESULT
Definition: winuser.h:864
LPCWSTR pcszClass
Definition: shlobj.h:2511
UINT code
Definition: winuser.h:3139
NMHDR hdr
Definition: prsht.h:330
#define FALSE
Definition: types.h:117
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
Definition: fileinfo.c:652
if SUCCEEDED(hr)
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
BOOL WINAPI MoveFileW(IN LPCWSTR lpExistingFileName, IN LPCWSTR lpNewFileName)
Definition: move.c:1044
struct _PROPSHEETPAGEW * LPPROPSHEETPAGEW
LPWSTR WINAPI PathFindFileNameW(LPCWSTR lpszPath)
Definition: path.c:394
#define BM_GETCHECK
Definition: winuser.h:1905
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT WINAPI SHOpenWithDialog(HWND hwndParent, const OPENASINFO *poainfo)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define PropSheet_Changed(d, w)
Definition: prsht.h:344
#define _countof(array)
Definition: sndvol32.h:68
#define MAX_PATH
Definition: compat.h:34
#define FILE_ATTRIBUTE_READONLY
Definition: nt_native.h:702
unsigned long DWORD
Definition: ntddk_ex.h:95
LRESULT WINAPI SendDlgItemMessageW(_In_ HWND, _In_ int, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define STM_GETICON
Definition: winuser.h:2077
#define PSNRET_NOERROR
Definition: prsht.h:129
#define FILE_ATTRIBUTE_ARCHIVE
Definition: nt_native.h:706
LPARAM lParam
Definition: prsht.h:227
#define DWLP_USER
Definition: winuser.h:866
#define WM_COMMAND
Definition: winuser.h:1727
#define ERR(fmt,...)
Definition: debug.h:110
HWND WINAPI GetParent(_In_ HWND)
HICON hIcon
Definition: msconfig.c:44
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
#define FILE_ATTRIBUTE_HIDDEN
Definition: nt_native.h:703
unsigned int UINT
Definition: ndis.h:50
#define NULL
Definition: types.h:112
WCHAR m_wszPath[MAX_PATH]
Definition: filedefext.h:80
#define BST_CHECKED
Definition: winuser.h:197
#define PSM_QUERYSIBLINGS
Definition: prsht.h:160
#define HIWORD(l)
Definition: typedefs.h:247
#define GetWindowLongPtr
Definition: treelist.c:73
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define WM_INITDIALOG
Definition: winuser.h:1726
LPARAM lParam
Definition: combotst.c:139
#define LOWORD(l)
Definition: pedump.c:82
#define WM_NOTIFY
Definition: richedit.h:61
#define EN_CHANGE
Definition: winuser.h:2009

Referenced by AddPages().

◆ GetCommandString()

HRESULT WINAPI CFileDefExt::GetCommandString ( UINT_PTR  idCmd,
UINT  uType,
UINT pwReserved,
LPSTR  pszName,
UINT  cchMax 
)
virtual

Implements IContextMenu.

Definition at line 1295 of file filedefext.cpp.

1296 {
1297  UNIMPLEMENTED;
1298  return E_NOTIMPL;
1299 }
#define E_NOTIMPL
Definition: ddrawi.h:99
#define UNIMPLEMENTED
Definition: debug.h:115

◆ GetFileTimeString()

BOOL CFileDefExt::GetFileTimeString ( LPFILETIME  lpFileTime,
LPWSTR  pwszResult,
UINT  cchResult 
)
staticprivate

Definition at line 498 of file filedefext.cpp.

499 {
500  FILETIME ft;
501  SYSTEMTIME st;
502 
503  if (!FileTimeToLocalFileTime(lpFileTime, &ft) || !FileTimeToSystemTime(&ft, &st))
504  return FALSE;
505 
506  size_t cchRemaining = cchResult;
507  LPWSTR pwszEnd = pwszResult;
508  int cchWritten = GetDateFormatW(LOCALE_USER_DEFAULT, DATE_LONGDATE, &st, NULL, pwszEnd, cchRemaining);
509  if (cchWritten)
510  --cchWritten; // GetDateFormatW returns count with terminating zero
511  else
512  ERR("GetDateFormatW failed\n");
513  cchRemaining -= cchWritten;
514  pwszEnd += cchWritten;
515 
516  StringCchCopyExW(pwszEnd, cchRemaining, L", ", &pwszEnd, &cchRemaining, 0);
517 
518  cchWritten = GetTimeFormatW(LOCALE_USER_DEFAULT, 0, &st, NULL, pwszEnd, cchRemaining);
519  if (cchWritten)
520  --cchWritten; // GetTimeFormatW returns count with terminating zero
521  else
522  ERR("GetTimeFormatW failed\n");
523  TRACE("result %s\n", debugstr_w(pwszResult));
524  return TRUE;
525 }
#define TRUE
Definition: types.h:120
#define LOCALE_USER_DEFAULT
BOOL WINAPI FileTimeToLocalFileTime(IN CONST FILETIME *lpFileTime, OUT LPFILETIME lpLocalFileTime)
Definition: time.c:221
#define L(x)
Definition: ntvdm.h:50
#define FALSE
Definition: types.h:117
#define debugstr_w
Definition: kernel32.h:32
#define TRACE(s)
Definition: solgame.cpp:4
BOOL WINAPI FileTimeToSystemTime(IN CONST FILETIME *lpFileTime, OUT LPSYSTEMTIME lpSystemTime)
Definition: time.c:188
STRSAFEAPI StringCchCopyExW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc, STRSAFE_LPWSTR *ppszDestEnd, size_t *pcchRemaining, STRSAFE_DWORD dwFlags)
Definition: strsafe.h:184
INT WINAPI GetDateFormatW(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCWSTR lpFormat, LPWSTR lpDateStr, INT cchOut)
Definition: lcformat.c:979
#define ERR(fmt,...)
Definition: debug.h:110
#define DATE_LONGDATE
Definition: winnls.h:197
#define NULL
Definition: types.h:112
WCHAR * LPWSTR
Definition: xmlstorage.h:184
INT WINAPI GetTimeFormatW(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCWSTR lpFormat, LPWSTR lpTimeStr, INT cchOut)
Definition: lcformat.c:1079

Referenced by InitFileAttr().

◆ GetSite()

HRESULT WINAPI CFileDefExt::GetSite ( REFIID  iid,
void **  ppvSite 
)
virtual

Definition at line 1352 of file filedefext.cpp.

1353 {
1354  UNIMPLEMENTED;
1355  return E_NOTIMPL;
1356 }
#define E_NOTIMPL
Definition: ddrawi.h:99
#define UNIMPLEMENTED
Definition: debug.h:115

◆ InitFileAttr()

BOOL CFileDefExt::InitFileAttr ( HWND  hwndDlg)
private

Definition at line 536 of file filedefext.cpp.

537 {
538  BOOL Success;
539  WIN32_FIND_DATAW FileInfo; // WIN32_FILE_ATTRIBUTE_DATA
540  WCHAR wszBuf[MAX_PATH];
541 
542  TRACE("InitFileAttr %ls\n", m_wszPath);
543 
544  /*
545  * There are situations where GetFileAttributes(Ex) can fail even if the
546  * specified path represents a file. This happens when e.g. the file is a
547  * locked system file, such as C:\pagefile.sys . In this case, the function
548  * returns INVALID_FILE_ATTRIBUTES and GetLastError returns ERROR_SHARING_VIOLATION.
549  * (this would allow us to distinguish between this failure and a failure
550  * due to the fact that the path actually refers to a directory).
551  *
552  * Because we really want to retrieve the file attributes/size/date&time,
553  * we do the following trick:
554  * - First we call GetFileAttributesEx. If it succeeds we know we have
555  * a file or a directory, and we have retrieved its attributes.
556  * - If GetFileAttributesEx fails, we call FindFirstFile on the full path.
557  * While we could have called FindFirstFile at first and skip GetFileAttributesEx
558  * altogether, we do it after GetFileAttributesEx because it performs more
559  * work to retrieve the file attributes. However it actually works even
560  * for locked system files.
561  * - If FindFirstFile succeeds we have retrieved its attributes.
562  * - Otherwise (FindFirstFile has failed), we do not retrieve anything.
563  *
564  * The following code also relies on the fact that the first 6 members
565  * of WIN32_FIND_DATA are *exactly* the same as the WIN32_FILE_ATTRIBUTE_DATA
566  * structure. Therefore it is safe to use a single WIN32_FIND_DATA
567  * structure for both the GetFileAttributesEx and FindFirstFile calls.
568  */
569 
573  if (!Success)
574  {
576  Success = (hFind != INVALID_HANDLE_VALUE);
577  if (Success)
578  FindClose(hFind);
579  }
580 
581  if (Success)
582  {
583  /* Update attribute checkboxes */
584  if (FileInfo.dwFileAttributes & FILE_ATTRIBUTE_READONLY)
585  SendDlgItemMessage(hwndDlg, 14021, BM_SETCHECK, BST_CHECKED, 0);
586  if (FileInfo.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)
587  SendDlgItemMessage(hwndDlg, 14022, BM_SETCHECK, BST_CHECKED, 0);
588  if (FileInfo.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE)
589  SendDlgItemMessage(hwndDlg, 14023, BM_SETCHECK, BST_CHECKED, 0);
590 
591  /* Update creation time */
592  if (GetFileTimeString(&FileInfo.ftCreationTime, wszBuf, _countof(wszBuf)))
593  SetDlgItemTextW(hwndDlg, 14015, wszBuf);
594 
595  /* For files display last access and last write time */
596  if (!m_bDir)
597  {
598  if (GetFileTimeString(&FileInfo.ftLastAccessTime, wszBuf, _countof(wszBuf)))
599  SetDlgItemTextW(hwndDlg, 14019, wszBuf);
600 
601  if (GetFileTimeString(&FileInfo.ftLastWriteTime, wszBuf, _countof(wszBuf)))
602  SetDlgItemTextW(hwndDlg, 14017, wszBuf);
603 
604  /* Update size of file */
606  FileSize.u.LowPart = FileInfo.nFileSizeLow;
607  FileSize.u.HighPart = FileInfo.nFileSizeHigh;
608  if (SH_FormatFileSizeWithBytes(&FileSize, wszBuf, _countof(wszBuf)))
609  {
610  SetDlgItemTextW(hwndDlg, 14011, wszBuf);
611 
612  // Compute file on disk. If fails, use logical size
614  SH_FormatFileSizeWithBytes(&FileSize, wszBuf, _countof(wszBuf));
615  else
616  ERR("Unreliable size on disk\n");
617 
618  SetDlgItemTextW(hwndDlg, 14012, wszBuf);
619  }
620  }
621  }
622 
623  if (m_bDir)
624  {
625  /* For directories files have to be counted */
626 
627  _CountFolderAndFilesData *data = static_cast<_CountFolderAndFilesData*>(HeapAlloc(GetProcessHeap(), 0, sizeof(_CountFolderAndFilesData)));
628  data->This = this;
629  data->pwszBuf = static_cast<LPWSTR>(HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WCHAR) * MAX_PATH));
630  data->hwndDlg = hwndDlg;
631  this->AddRef();
633 
635 
636  /* Update size field */
637  if (SH_FormatFileSizeWithBytes(&m_DirSize, wszBuf, _countof(wszBuf)))
638  SetDlgItemTextW(hwndDlg, 14011, wszBuf);
639 
640  if (SH_FormatFileSizeWithBytes(&m_DirSizeOnDisc, wszBuf, _countof(wszBuf)))
641  SetDlgItemTextW(hwndDlg, 14012, wszBuf);
642 
643  /* Display files and folders count */
644  WCHAR wszFormat[256];
645  LoadStringW(shell32_hInstance, IDS_FILE_FOLDER, wszFormat, _countof(wszFormat));
646  StringCchPrintfW(wszBuf, _countof(wszBuf), wszFormat, m_cFiles, m_cFolders);
647  SetDlgItemTextW(hwndDlg, 14027, wszBuf);
648  }
649 
650  /* Hide Advanced button. TODO: Implement advanced dialog and enable this button if filesystem supports compression or encryption */
651  ShowWindow(GetDlgItem(hwndDlg, 14028), SW_HIDE);
652 
653  return TRUE;
654 }
#define TRUE
Definition: types.h:120
#define SW_HIDE
Definition: winuser.h:762
#define INVALID_HANDLE_VALUE
Definition: compat.h:590
#define SendDlgItemMessage
Definition: winuser.h:5822
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
BOOL WINAPI SetDlgItemTextW(_In_ HWND, _In_ int, _In_ LPCWSTR)
unsigned int BOOL
Definition: ntddk_ex.h:94
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
#define IDS_FILE_FOLDER
Definition: shresdef.h:217
DWORD m_cFolders
Definition: filedefext.h:85
#define BM_SETCHECK
Definition: winuser.h:1908
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define _countof(array)
Definition: sndvol32.h:68
DWORD m_cFiles
Definition: filedefext.h:84
#define MAX_PATH
Definition: compat.h:34
ULARGE_INTEGER m_DirSize
Definition: filedefext.h:86
#define FILE_ATTRIBUTE_READONLY
Definition: nt_native.h:702
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
ULONG AddRef()
#define FILE_ATTRIBUTE_ARCHIVE
Definition: nt_native.h:706
ULARGE_INTEGER m_DirSizeOnDisc
Definition: filedefext.h:87
BOOL GetPhysicalFileSize(LPCWSTR PathBuffer, PULARGE_INTEGER Size)
Definition: filedefext.cpp:32
_Must_inspect_result_ _Out_ PLARGE_INTEGER FileSize
Definition: fsrtlfuncs.h:108
#define ERR(fmt,...)
Definition: debug.h:110
#define shell32_hInstance
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:530
#define FILE_ATTRIBUTE_HIDDEN
Definition: nt_native.h:703
#define NULL
Definition: types.h:112
WCHAR m_wszPath[MAX_PATH]
Definition: filedefext.h:80
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
#define BST_CHECKED
Definition: winuser.h:197
struct FileInfo FileInfo
static DWORD WINAPI _CountFolderAndFilesThreadProc(LPVOID lpParameter)
struct _LARGE_INTEGER::@2240 u
static BOOL GetFileTimeString(LPFILETIME lpFileTime, LPWSTR pwszResult, UINT cchResult)
Definition: filedefext.cpp:498
BOOL WINAPI GetFileAttributesExW(LPCWSTR lpFileName, GET_FILEEX_INFO_LEVELS fInfoLevelId, LPVOID lpFileInformation)
Definition: fileinfo.c:552
BOOL m_bDir
Definition: filedefext.h:82
BOOL WINAPI SHCreateThread(LPTHREAD_START_ROUTINE pfnThreadProc, VOID *pData, DWORD dwFlags, LPTHREAD_START_ROUTINE pfnCallback)
Definition: thread.c:356
LPWSTR SH_FormatFileSizeWithBytes(const PULARGE_INTEGER lpQwSize, LPWSTR pwszResult, UINT cchResultMax)
Definition: filedefext.cpp:266
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:320
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502

Referenced by InitGeneralPage().

◆ InitFilePath()

BOOL CFileDefExt::InitFilePath ( HWND  hwndDlg)
private

Definition at line 469 of file filedefext.cpp.

470 {
471  /* Find the filename */
472  WCHAR *pwszFilename = PathFindFileNameW(m_wszPath);
473 
474  if (pwszFilename > m_wszPath)
475  {
476  /* Location field */
477  WCHAR wszLocation[MAX_PATH];
478  StringCchCopyNW(wszLocation, _countof(wszLocation), m_wszPath, pwszFilename - m_wszPath);
479  PathRemoveBackslashW(wszLocation);
480 
481  SetDlgItemTextW(hwndDlg, 14009, wszLocation);
482  }
483 
484  /* Filename field */
485  SetDlgItemTextW(hwndDlg, 14001, pwszFilename);
486 
487  return TRUE;
488 }
STRSAFEAPI StringCchCopyNW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc, size_t cchToCopy)
Definition: strsafe.h:236
#define TRUE
Definition: types.h:120
BOOL WINAPI SetDlgItemTextW(_In_ HWND, _In_ int, _In_ LPCWSTR)
LPWSTR WINAPI PathFindFileNameW(LPCWSTR lpszPath)
Definition: path.c:394
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define _countof(array)
Definition: sndvol32.h:68
#define MAX_PATH
Definition: compat.h:34
LPWSTR WINAPI PathRemoveBackslashW(LPWSTR lpszPath)
Definition: path.c:867
WCHAR m_wszPath[MAX_PATH]
Definition: filedefext.h:80

Referenced by InitGeneralPage().

◆ InitFileType()

BOOL CFileDefExt::InitFileType ( HWND  hwndDlg)
private

Definition at line 410 of file filedefext.cpp.

411 {
412  TRACE("path %s\n", debugstr_w(m_wszPath));
413 
414  HWND hDlgCtrl = GetDlgItem(hwndDlg, 14005);
415  if (hDlgCtrl == NULL)
416  return FALSE;
417 
418  /* Get file information */
419  SHFILEINFOW fi;
420  if (!SHGetFileInfoW(m_wszPath, 0, &fi, sizeof(fi), SHGFI_TYPENAME|SHGFI_ICON))
421  {
422  ERR("SHGetFileInfoW failed for %ls (%lu)\n", m_wszPath, GetLastError());
423  fi.szTypeName[0] = L'\0';
424  fi.hIcon = NULL;
425  }
426 
428  if (pwszExt[0])
429  {
430  WCHAR wszBuf[256];
431 
432  if (!fi.szTypeName[0])
433  {
434  /* The file type is unknown, so default to string "FileExtension File" */
435  size_t cchRemaining = 0;
436  LPWSTR pwszEnd = NULL;
437 
438  StringCchPrintfExW(wszBuf, _countof(wszBuf), &pwszEnd, &cchRemaining, 0, L"%s ", pwszExt + 1);
439  SendMessageW(hDlgCtrl, WM_GETTEXT, (WPARAM)cchRemaining, (LPARAM)pwszEnd);
440 
441  SendMessageW(hDlgCtrl, WM_SETTEXT, (WPARAM)NULL, (LPARAM)wszBuf);
442  }
443  else
444  {
445  /* Update file type */
446  StringCbPrintfW(wszBuf, sizeof(wszBuf), L"%s (%s)", fi.szTypeName, pwszExt);
447  SendMessageW(hDlgCtrl, WM_SETTEXT, (WPARAM)NULL, (LPARAM)wszBuf);
448  }
449  }
450 
451  /* Update file icon */
452  if (fi.hIcon)
453  SendDlgItemMessageW(hwndDlg, 14000, STM_SETICON, (WPARAM)fi.hIcon, 0);
454  else
455  ERR("No icon %ls\n", m_wszPath);
456 
457  return TRUE;
458 }
#define STM_SETICON
Definition: winuser.h:2079
#define SHGFI_TYPENAME
Definition: shellapi.h:165
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define TRUE
Definition: types.h:120
#define WM_GETTEXT
Definition: winuser.h:1605
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1040
UINT_PTR WPARAM
Definition: windef.h:207
WCHAR szTypeName[80]
Definition: shellapi.h:374
STRSAFEAPI StringCchPrintfExW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPWSTR *ppszDestEnd, size_t *pcchRemaining, STRSAFE_DWORD dwFlags, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:585
#define L(x)
Definition: ntvdm.h:50
#define FALSE
Definition: types.h:117
#define debugstr_w
Definition: kernel32.h:32
STRSAFEAPI StringCbPrintfW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:557
LONG_PTR LPARAM
Definition: windef.h:208
LPWSTR WINAPI PathFindExtensionW(LPCWSTR lpszPath)
Definition: path.c:447
#define WM_SETTEXT
Definition: winuser.h:1604
#define TRACE(s)
Definition: solgame.cpp:4
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
__wchar_t WCHAR
Definition: xmlstorage.h:180
DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path, DWORD dwFileAttributes, SHFILEINFOW *psfi, UINT sizeofpsfi, UINT flags)
Definition: shell32_main.c:414
#define _countof(array)
Definition: sndvol32.h:68
LRESULT WINAPI SendDlgItemMessageW(_In_ HWND, _In_ int, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
HICON hIcon
Definition: shellapi.h:370
#define ERR(fmt,...)
Definition: debug.h:110
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define NULL
Definition: types.h:112
WCHAR m_wszPath[MAX_PATH]
Definition: filedefext.h:80
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define SHGFI_ICON
Definition: shellapi.h:162

Referenced by InitGeneralPage().

◆ InitFolderCustomizePage()

BOOL CFileDefExt::InitFolderCustomizePage ( HWND  hwndDlg)
private

Definition at line 1089 of file filedefext.cpp.

1090 {
1091  /* Attach the object to dialog window */
1092  SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)this);
1093 
1098 
1099  // build the desktop.ini file path
1102  PathAppendW(szIniFile, L"desktop.ini");
1103 
1104  // desktop.ini --> m_szFolderIconPath, m_nFolderIconIndex
1105  m_szFolderIconPath[0] = 0;
1106  m_nFolderIconIndex = 0;
1109  {
1111  }
1114  {
1116  }
1117 
1118  // update icon
1119  UpdateFolderIcon(hwndDlg);
1120 
1121  return TRUE;
1122 }
#define IDC_FOLDERCUST_CHOOSE_PIC
Definition: shresdef.h:500
INT WINAPI GetPrivateProfileStringW(LPCWSTR section, LPCWSTR entry, LPCWSTR def_val, LPWSTR buffer, UINT len, LPCWSTR filename)
Definition: profile.c:1142
void UpdateFolderIcon(HWND hwndDlg)
static const WCHAR s_szIconResource[]
Definition: filedefext.cpp:983
#define TRUE
Definition: types.h:120
#define IDC_FOLDERCUST_RESTORE_DEFAULTS
Definition: shresdef.h:501
#define SetWindowLongPtr
Definition: treelist.c:70
BOOL WINAPI PathAppendW(LPWSTR lpszPath, LPCWSTR lpszAppend)
Definition: path.c:126
UINT WINAPI GetPrivateProfileIntW(LPCWSTR section, LPCWSTR entry, INT def_val, LPCWSTR filename)
Definition: profile.c:1297
#define L(x)
Definition: ntvdm.h:50
TCHAR szIniFile[]
Definition: scrnsave.c:28
#define FALSE
Definition: types.h:117
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
INT m_nFolderIconIndex
Definition: filedefext.h:93
#define IDC_FOLDERCUST_CHECKBOX
Definition: shresdef.h:499
static const WCHAR s_szIconIndex[]
Definition: filedefext.cpp:981
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define _countof(array)
Definition: sndvol32.h:68
#define MAX_PATH
Definition: compat.h:34
#define IDC_FOLDERCUST_COMBOBOX
Definition: shresdef.h:498
#define DWLP_USER
Definition: winuser.h:866
WCHAR m_szFolderIconPath[MAX_PATH]
Definition: filedefext.h:92
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)
int WINAPI PathParseIconLocationW(LPWSTR lpszPath)
Definition: path.c:1092
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
#define NULL
Definition: types.h:112
WCHAR m_wszPath[MAX_PATH]
Definition: filedefext.h:80
static const WCHAR s_szIconFile[]
Definition: filedefext.cpp:982
static const WCHAR s_szShellClassInfo[]
Definition: filedefext.cpp:980

Referenced by FolderCustomizePageProc().

◆ InitGeneralPage()

BOOL CFileDefExt::InitGeneralPage ( HWND  hwndDlg)
private

Definition at line 664 of file filedefext.cpp.

665 {
666  /* Set general text properties filename filelocation and icon */
667  InitFilePath(hwndDlg);
668 
669  /* Set file type and icon */
670  InitFileType(hwndDlg);
671 
672  /* Set open with application */
673  if (!m_bDir)
674  {
675  if (!PathIsExeW(m_wszPath))
676  InitOpensWithField(hwndDlg);
677  else
678  {
679  WCHAR wszBuf[MAX_PATH];
681  SetDlgItemTextW(hwndDlg, 14006, wszBuf);
682  ShowWindow(GetDlgItem(hwndDlg, 14024), SW_HIDE);
683 
684  /* hidden button 14024 allows to draw edit 14007 larger than defined in resources , we use edit 14009 as idol */
685  RECT rectIdol, rectToAdjust;
686  GetClientRect(GetDlgItem(hwndDlg, 14009), &rectIdol);
687  GetClientRect(GetDlgItem(hwndDlg, 14007), &rectToAdjust);
688  SetWindowPos(GetDlgItem(hwndDlg, 14007), HWND_TOP, 0, 0,
689  rectIdol.right-rectIdol.left /* make it as wide as its idol */,
690  rectToAdjust.bottom-rectToAdjust.top /* but keep its current height */,
692 
693  LPCWSTR pwszDescr = m_VerInfo.GetString(L"FileDescription");
694  if (pwszDescr)
695  SetDlgItemTextW(hwndDlg, 14007, pwszDescr);
696  else
697  {
698  StringCbCopyW(wszBuf, sizeof(wszBuf), PathFindFileNameW(m_wszPath));
699  PathRemoveExtension(wszBuf);
700  SetDlgItemTextW(hwndDlg, 14007, wszBuf);
701  }
702  }
703  }
704 
705  /* Set file created/modfied/accessed time, size and attributes */
706  InitFileAttr(hwndDlg);
707 
708  return TRUE;
709 }
CFileVersionInfo m_VerInfo
Definition: filedefext.h:81
VOID InitOpensWithField(HWND hwndDlg)
Definition: filedefext.cpp:322
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define TRUE
Definition: types.h:120
#define IDS_EXE_DESCRIPTION
Definition: shresdef.h:207
#define SW_HIDE
Definition: winuser.h:762
LONG top
Definition: windef.h:307
#define HWND_TOP
Definition: winuser.h:1197
#define PathRemoveExtension
Definition: shlwapi.h:1031
LONG left
Definition: windef.h:306
#define SWP_NOZORDER
Definition: winuser.h:1237
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
LONG right
Definition: windef.h:308
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
BOOL WINAPI SetDlgItemTextW(_In_ HWND, _In_ int, _In_ LPCWSTR)
#define L(x)
Definition: ntvdm.h:50
BOOL InitFileAttr(HWND hwndDlg)
Definition: filedefext.cpp:536
LPWSTR WINAPI PathFindFileNameW(LPCWSTR lpszPath)
Definition: path.c:394
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define _countof(array)
Definition: sndvol32.h:68
BOOL InitFileType(HWND hwndDlg)
Definition: filedefext.cpp:410
#define MAX_PATH
Definition: compat.h:34
BOOL InitFilePath(HWND hwndDlg)
Definition: filedefext.cpp:469
LPCWSTR GetString(LPCWSTR pwszName)
Definition: filedefext.cpp:123
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define shell32_hInstance
WCHAR m_wszPath[MAX_PATH]
Definition: filedefext.h:80
LONG bottom
Definition: windef.h:309
#define SWP_NOMOVE
Definition: winuser.h:1234
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
BOOL m_bDir
Definition: filedefext.h:82
STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:166
EXTERN_C BOOL PathIsExeW(LPCWSTR lpszPath)
Definition: shellpath.c:368

Referenced by GeneralPageProc().

◆ Initialize()

HRESULT WINAPI CFileDefExt::Initialize ( PCIDLIST_ABSOLUTE  pidlFolder,
IDataObject pdtobj,
HKEY  hkeyProgID 
)
virtual

Implements IShellExtInit.

Definition at line 1242 of file filedefext.cpp.

1243 {
1244  FORMATETC format;
1245  STGMEDIUM stgm;
1246  HRESULT hr;
1247 
1248  TRACE("%p %p %p %p\n", this, pidlFolder, pDataObj, hkeyProgID);
1249 
1250  if (!pDataObj)
1251  return E_FAIL;
1252 
1253  format.cfFormat = CF_HDROP;
1254  format.ptd = NULL;
1255  format.dwAspect = DVASPECT_CONTENT;
1256  format.lindex = -1;
1257  format.tymed = TYMED_HGLOBAL;
1258 
1259  hr = pDataObj->GetData(&format, &stgm);
1260  if (FAILED_UNEXPECTEDLY(hr))
1261  return hr;
1262 
1263  if (!DragQueryFileW((HDROP)stgm.hGlobal, 0, m_wszPath, _countof(m_wszPath)))
1264  {
1265  ERR("DragQueryFileW failed\n");
1266  ReleaseStgMedium(&stgm);
1267  return E_FAIL;
1268  }
1269 
1270  ReleaseStgMedium(&stgm);
1271 
1272  TRACE("File properties %ls\n", m_wszPath);
1274  if (!m_bDir)
1276 
1277  return S_OK;
1278 }
BOOL WINAPI PathIsDirectoryW(LPCWSTR lpszPath)
Definition: path.c:1722
BOOL Load(LPCWSTR pwszPath)
Definition: filedefext.cpp:82
CFileVersionInfo m_VerInfo
Definition: filedefext.h:81
HRESULT hr
Definition: shlfolder.c:183
void WINAPI ReleaseStgMedium(STGMEDIUM *pmedium)
Definition: ole2.c:2033
#define TRUE
Definition: types.h:120
#define E_FAIL
Definition: ddrawi.h:102
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: gl.h:1546
#define FALSE
Definition: types.h:117
#define CF_HDROP
Definition: constants.h:410
#define TRACE(s)
Definition: solgame.cpp:4
LONG HRESULT
Definition: typedefs.h:79
#define _countof(array)
Definition: sndvol32.h:68
#define FAILED_UNEXPECTEDLY(hr)
Definition: shellutils.h:82
#define ERR(fmt,...)
Definition: debug.h:110
#define S_OK
Definition: intsafe.h:52
#define NULL
Definition: types.h:112
WCHAR m_wszPath[MAX_PATH]
Definition: filedefext.h:80
BOOL m_bDir
Definition: filedefext.h:82
UINT WINAPI DragQueryFileW(HDROP hDrop, UINT lFile, LPWSTR lpszwFile, UINT lLength)
Definition: shellole.c:627

◆ InitOpensWithField()

VOID CFileDefExt::InitOpensWithField ( HWND  hwndDlg)
private

Definition at line 322 of file filedefext.cpp.

323 {
324  WCHAR wszBuf[MAX_PATH] = L"";
325  WCHAR wszPath[MAX_PATH] = L"";
326  DWORD dwSize = sizeof(wszBuf);
327  BOOL bUnknownApp = TRUE;
329 
330  if (RegGetValueW(HKEY_CLASSES_ROOT, pwszExt, L"", RRF_RT_REG_SZ, NULL, wszBuf, &dwSize) == ERROR_SUCCESS)
331  {
332  bUnknownApp = FALSE;
333  StringCbCatW(wszBuf, sizeof(wszBuf), L"\\shell\\open\\command");
334  dwSize = sizeof(wszPath);
335  if (RegGetValueW(HKEY_CLASSES_ROOT, wszBuf, L"", RRF_RT_REG_SZ, NULL, wszPath, &dwSize) == ERROR_SUCCESS)
336  {
337  /* Get path from command line */
338  ExpandEnvironmentStringsW(wszPath, wszBuf, _countof(wszBuf));
339  PathRemoveArgs(wszBuf);
340  PathUnquoteSpacesW(wszBuf);
341  PathSearchAndQualify(wszBuf, wszPath, _countof(wszPath));
342 
343  HICON hIcon;
344  if (ExtractIconExW(wszPath, 0, NULL, &hIcon, 1))
345  {
346  HWND hIconCtrl = GetDlgItem(hwndDlg, 14025);
347  HWND hDescrCtrl = GetDlgItem(hwndDlg, 14007);
348  ShowWindow(hIconCtrl, SW_SHOW);
349  RECT rcIcon, rcDescr;
350  GetWindowRect(hIconCtrl, &rcIcon);
351 
352  rcIcon.right = rcIcon.left + GetSystemMetrics(SM_CXSMICON);
353  rcIcon.bottom = rcIcon.top + GetSystemMetrics(SM_CYSMICON);
354 
355  MapWindowPoints(NULL, hwndDlg, (LPPOINT)&rcIcon, 2);
356  GetWindowRect(hDescrCtrl, &rcDescr);
357  MapWindowPoints(NULL, hwndDlg, (LPPOINT)&rcDescr, 2);
358  INT cxOffset = rcIcon.right + 2 - rcDescr.left;
359  SetWindowPos(hDescrCtrl, NULL,
360  rcDescr.left + cxOffset, rcDescr.top,
361  rcDescr.right - rcDescr.left - cxOffset, rcDescr.bottom - rcDescr.top,
362  SWP_NOZORDER);
363  SendMessageW(hIconCtrl, STM_SETICON, (WPARAM)hIcon, 0);
364  } else
365  ERR("Failed to extract icon\n");
366 
367  if (PathFileExistsW(wszPath))
368  {
369  /* Get file description */
370  CFileVersionInfo VerInfo;
371  VerInfo.Load(wszPath);
372  LPCWSTR pwszDescr = VerInfo.GetString(L"FileDescription");
373  if (pwszDescr)
374  SetDlgItemTextW(hwndDlg, 14007, pwszDescr);
375  else
376  {
377  /* File has no description - display filename */
378  LPWSTR pwszFilename = PathFindFileNameW(wszPath);
379  PathRemoveExtension(pwszFilename);
380  pwszFilename[0] = towupper(pwszFilename[0]);
381  SetDlgItemTextW(hwndDlg, 14007, pwszFilename);
382  }
383  }
384  else
385  bUnknownApp = TRUE;
386  } else
387  WARN("RegGetValueW %ls failed\n", wszBuf);
388  } else
389  WARN("RegGetValueW %ls failed\n", pwszExt);
390 
391  if (bUnknownApp)
392  {
393  /* Unknown application */
395  SetDlgItemTextW(hwndDlg, 14007, wszBuf);
396  }
397 }
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
Definition: reg.c:1965
#define STM_SETICON
Definition: winuser.h:2079
static HICON
Definition: imagelist.c:84
BOOL Load(LPCWSTR pwszPath)
Definition: filedefext.cpp:82
#define ERROR_SUCCESS
Definition: deptool.c:10
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define TRUE
Definition: types.h:120
#define WARN(fmt,...)
Definition: debug.h:112
LONG top
Definition: windef.h:307
#define RRF_RT_REG_SZ
Definition: driver.c:575
#define SM_CYSMICON
Definition: winuser.h:1007
UINT_PTR WPARAM
Definition: windef.h:207
#define PathRemoveExtension
Definition: shlwapi.h:1031
LONG left
Definition: windef.h:306
#define SWP_NOZORDER
Definition: winuser.h:1237
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
LONG right
Definition: windef.h:308
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
int32_t INT
Definition: typedefs.h:58
STRSAFEAPI StringCbCatW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:342
BOOL WINAPI SetDlgItemTextW(_In_ HWND, _In_ int, _In_ LPCWSTR)
#define L(x)
Definition: ntvdm.h:50
#define FALSE
Definition: types.h:117
#define PathRemoveArgs
Definition: shlwapi.h:1019
unsigned int BOOL
Definition: ntddk_ex.h:94
UINT WINAPI ExtractIconExW(LPCWSTR lpszFile, INT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIcons)
Definition: iconcache.cpp:872
LPWSTR WINAPI PathFindFileNameW(LPCWSTR lpszPath)
Definition: path.c:394
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
Definition: path.c:1776
#define SW_SHOW
Definition: winuser.h:769
LPWSTR WINAPI PathFindExtensionW(LPCWSTR lpszPath)
Definition: path.c:447
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define _countof(array)
Definition: sndvol32.h:68
#define MAX_PATH
Definition: compat.h:34
int WINAPI GetSystemMetrics(_In_ int)
unsigned long DWORD
Definition: ntddk_ex.h:95
#define SM_CXSMICON
Definition: winuser.h:1006
LPCWSTR GetString(LPCWSTR pwszName)
Definition: filedefext.cpp:123
#define IDS_UNKNOWN_APP
Definition: shresdef.h:206
#define ERR(fmt,...)
Definition: debug.h:110
#define shell32_hInstance
HICON hIcon
Definition: msconfig.c:44
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
VOID WINAPI PathUnquoteSpacesW(LPWSTR lpszPath)
Definition: path.c:1034
#define NULL
Definition: types.h:112
WCHAR m_wszPath[MAX_PATH]
Definition: filedefext.h:80
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
Definition: environ.c:519
LONG bottom
Definition: windef.h:309
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
#define towupper(c)
Definition: wctype.h:99
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define PathSearchAndQualify
Definition: shlwapi.h:1065
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56

Referenced by InitGeneralPage().

◆ InitVersionPage()

BOOL CFileDefExt::InitVersionPage ( HWND  hwndDlg)
private

Definition at line 822 of file filedefext.cpp.

823 {
824  /* Get fixed info */
826  if (pInfo)
827  {
828  WCHAR wszVersion[256];
829  swprintf(wszVersion, L"%u.%u.%u.%u", HIWORD(pInfo->dwFileVersionMS),
830  LOWORD(pInfo->dwFileVersionMS),
831  HIWORD(pInfo->dwFileVersionLS),
832  LOWORD(pInfo->dwFileVersionLS));
833  TRACE("MS %x LS %x ver %s \n", pInfo->dwFileVersionMS, pInfo->dwFileVersionLS, debugstr_w(wszVersion));
834  SetDlgItemTextW(hwndDlg, 14001, wszVersion);
835  }
836 
837  /* Update labels */
838  SetVersionLabel(hwndDlg, 14003, L"FileDescription");
839  SetVersionLabel(hwndDlg, 14005, L"LegalCopyright");
840 
841  /* Add items to listbox */
842  AddVersionString(hwndDlg, L"CompanyName");
843  LPCWSTR pwszLang = m_VerInfo.GetLangName();
844  if (pwszLang)
845  {
846  HWND hDlgCtrl = GetDlgItem(hwndDlg, 14009);
847  UINT Index = SendMessageW(hDlgCtrl, LB_ADDSTRING, (WPARAM)-1, (LPARAM)L"Language");
848  SendMessageW(hDlgCtrl, LB_SETITEMDATA, (WPARAM)Index, (LPARAM)(WCHAR *)pwszLang);
849  }
850  AddVersionString(hwndDlg, L"ProductName");
851  AddVersionString(hwndDlg, L"InternalName");
852  AddVersionString(hwndDlg, L"OriginalFilename");
853  AddVersionString(hwndDlg, L"FileVersion");
854  AddVersionString(hwndDlg, L"ProductVersion");
855 
856  /* Attach file version to dialog window */
857  SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)this);
858 
859  /* Select first item */
860  HWND hDlgCtrl = GetDlgItem(hwndDlg, 14009);
861  SendMessageW(hDlgCtrl, LB_SETCURSEL, 0, 0);
862  LPCWSTR pwszText = (LPCWSTR)SendMessageW(hDlgCtrl, LB_GETITEMDATA, (WPARAM)0, (LPARAM)NULL);
863  if (pwszText && pwszText != (LPCWSTR)LB_ERR)
864  SetDlgItemTextW(hwndDlg, 14010, pwszText);
865 
866  return TRUE;
867 }
#define LB_SETCURSEL
Definition: winuser.h:2050
CFileVersionInfo m_VerInfo
Definition: filedefext.h:81
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define LB_ADDSTRING
Definition: winuser.h:2018
BOOL AddVersionString(HWND hwndDlg, LPCWSTR pwszName)
Definition: filedefext.cpp:902
#define TRUE
Definition: types.h:120
#define LB_GETITEMDATA
Definition: winuser.h:2028
DWORD dwFileVersionLS
Definition: compat.h:762
UINT_PTR WPARAM
Definition: windef.h:207
#define swprintf
Definition: precomp.h:40
#define SetWindowLongPtr
Definition: treelist.c:70
BOOL WINAPI SetDlgItemTextW(_In_ HWND, _In_ int, _In_ LPCWSTR)
#define L(x)
Definition: ntvdm.h:50
#define LB_ERR
Definition: winuser.h:2412
#define debugstr_w
Definition: kernel32.h:32
LONG_PTR LPARAM
Definition: windef.h:208
#define TRACE(s)
Definition: solgame.cpp:4
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
__wchar_t WCHAR
Definition: xmlstorage.h:180
_In_ WDFCOLLECTION _In_ ULONG Index
BOOL SetVersionLabel(HWND hwndDlg, DWORD idCtrl, LPCWSTR pwszName)
Definition: filedefext.cpp:877
DWORD dwFileVersionMS
Definition: compat.h:761
#define LB_SETITEMDATA
Definition: winuser.h:2052
#define DWLP_USER
Definition: winuser.h:866
VS_FIXEDFILEINFO * GetFixedInfo()
Definition: filedefext.cpp:153
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
unsigned int UINT
Definition: ndis.h:50
#define NULL
Definition: types.h:112
#define HIWORD(l)
Definition: typedefs.h:247
LPCWSTR GetLangName()
Definition: filedefext.cpp:165
#define LOWORD(l)
Definition: pedump.c:82

Referenced by VersionPageProc().

◆ InvokeCommand()

HRESULT WINAPI CFileDefExt::InvokeCommand ( LPCMINVOKECOMMANDINFO  lpici)
virtual

Implements IContextMenu.

Definition at line 1288 of file filedefext.cpp.

1289 {
1290  UNIMPLEMENTED;
1291  return E_NOTIMPL;
1292 }
#define E_NOTIMPL
Definition: ddrawi.h:99
#define UNIMPLEMENTED
Definition: debug.h:115

◆ OnFolderCustApply()

BOOL CFileDefExt::OnFolderCustApply ( HWND  hwndDlg)

Definition at line 1157 of file filedefext.cpp.

1158 {
1159  // build the desktop.ini file path
1162  PathAppendW(szIniFile, L"desktop.ini");
1163 
1164  if (m_bFolderIconIsSet) // it is set!
1165  {
1166  DWORD attrs;
1167 
1168  // change folder attributes (-S -R)
1169  attrs = GetFileAttributesW(m_wszPath);
1171  SetFileAttributesW(m_wszPath, attrs);
1172 
1173  // change desktop.ini attributes (-S -H -R)
1174  attrs = GetFileAttributesW(szIniFile);
1176  SetFileAttributesW(szIniFile, attrs);
1177 
1178  if (m_szFolderIconPath[0])
1179  {
1180  // write IconFile and IconIndex
1182 
1183  WCHAR szInt[32];
1184  StringCchPrintfW(szInt, _countof(szInt), L"%d", m_nFolderIconIndex);
1186 
1187  // flush!
1189  }
1190  else
1191  {
1192  // erase three values
1196 
1197  // flush!
1199  }
1200 
1201  // change desktop.ini attributes (+S +H)
1202  attrs = GetFileAttributesW(szIniFile);
1204  SetFileAttributesW(szIniFile, attrs);
1205 
1206  // change folder attributes (+R)
1207  attrs = GetFileAttributesW(m_wszPath);
1208  attrs |= FILE_ATTRIBUTE_READONLY;
1209  SetFileAttributesW(m_wszPath, attrs);
1210 
1211  // notify to the siblings
1212  PropSheet_QuerySiblings(GetParent(hwndDlg), 0, 0);
1213 
1214  // done!
1216  }
1217 
1218  return TRUE;
1219 }
BOOL WINAPI SetFileAttributesW(LPCWSTR lpFileName, DWORD dwFileAttributes)
Definition: fileinfo.c:794
static const WCHAR s_szIconResource[]
Definition: filedefext.cpp:983
#define TRUE
Definition: types.h:120
#define FILE_ATTRIBUTE_SYSTEM
Definition: nt_native.h:704
BOOL WINAPI PathAppendW(LPWSTR lpszPath, LPCWSTR lpszAppend)
Definition: path.c:126
#define L(x)
Definition: ntvdm.h:50
TCHAR szIniFile[]
Definition: scrnsave.c:28
#define FALSE
Definition: types.h:117
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
Definition: fileinfo.c:652
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
INT m_nFolderIconIndex
Definition: filedefext.h:93
static const WCHAR s_szIconIndex[]
Definition: filedefext.cpp:981
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define _countof(array)
Definition: sndvol32.h:68
#define MAX_PATH
Definition: compat.h:34
BOOL m_bFolderIconIsSet
Definition: filedefext.h:95
#define FILE_ATTRIBUTE_READONLY
Definition: nt_native.h:702
unsigned long DWORD
Definition: ntddk_ex.h:95
#define PropSheet_QuerySiblings(d, w, l)
Definition: prsht.h:349
WCHAR m_szFolderIconPath[MAX_PATH]
Definition: filedefext.h:92
BOOL WINAPI WritePrivateProfileStringW(LPCWSTR section, LPCWSTR entry, LPCWSTR string, LPCWSTR filename)
Definition: profile.c:1453
HWND WINAPI GetParent(_In_ HWND)
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:530
#define FILE_ATTRIBUTE_HIDDEN
Definition: nt_native.h:703
#define NULL
Definition: types.h:112
WCHAR m_wszPath[MAX_PATH]
Definition: filedefext.h:80
static const WCHAR s_szIconFile[]
Definition: filedefext.cpp:982
static const WCHAR s_szShellClassInfo[]
Definition: filedefext.cpp:980

Referenced by FolderCustomizePageProc().

◆ OnFolderCustChangeIcon()

void CFileDefExt::OnFolderCustChangeIcon ( HWND  hwndDlg)

Definition at line 1125 of file filedefext.cpp.

1126 {
1128  INT nIconIndex;
1129 
1130  // m_szFolderIconPath, m_nFolderIconIndex --> szPath, nIconIndex
1131  if (m_szFolderIconPath[0])
1132  {
1134  nIconIndex = m_nFolderIconIndex;
1135  }
1136  else
1137  {
1138  szPath[0] = 0;
1139  nIconIndex = 0;
1140  }
1141 
1142  // let the user choose the icon
1143  if (PickIconDlg(hwndDlg, szPath, _countof(szPath), &nIconIndex))
1144  {
1145  // changed
1147  PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
1148 
1149  // update
1151  m_nFolderIconIndex = nIconIndex;
1152  UpdateFolderIcon(hwndDlg);
1153  }
1154 }
void UpdateFolderIcon(HWND hwndDlg)
#define TRUE
Definition: types.h:120
int32_t INT
Definition: typedefs.h:58
BOOL WINAPI PickIconDlg(HWND hWndOwner, LPWSTR lpstrFile, UINT nMaxFile, INT *lpdwIconIndex)
Definition: dialogs.cpp:364
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
INT m_nFolderIconIndex
Definition: filedefext.h:93
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define PropSheet_Changed(d, w)
Definition: prsht.h:344
#define _countof(array)
Definition: sndvol32.h:68
#define MAX_PATH
Definition: compat.h:34
BOOL m_bFolderIconIsSet
Definition: filedefext.h:95
WCHAR m_szFolderIconPath[MAX_PATH]
Definition: filedefext.h:92
HWND WINAPI GetParent(_In_ HWND)
LPCWSTR szPath
Definition: env.c:37

Referenced by FolderCustomizePageProc().

◆ OnFolderCustDestroy()

void CFileDefExt::OnFolderCustDestroy ( HWND  hwndDlg)

Definition at line 1056 of file filedefext.cpp.

1057 {
1059  m_hFolderIcon = NULL;
1060 
1061  /* Detach the object from dialog window */
1062  SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)0);
1063 }
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2022
#define SetWindowLongPtr
Definition: treelist.c:70
#define DWLP_USER
Definition: winuser.h:866
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
#define NULL
Definition: types.h:112
HICON m_hFolderIcon
Definition: filedefext.h:94

Referenced by FolderCustomizePageProc().

◆ QueryContextMenu()

HRESULT WINAPI CFileDefExt::QueryContextMenu ( HMENU  hmenu,
UINT  indexMenu,
UINT  idCmdFirst,
UINT  idCmdLast,
UINT  uFlags 
)
virtual

Implements IContextMenu.

Definition at line 1281 of file filedefext.cpp.

1282 {
1283  UNIMPLEMENTED;
1284  return E_NOTIMPL;
1285 }
#define E_NOTIMPL
Definition: ddrawi.h:99
#define UNIMPLEMENTED
Definition: debug.h:115

◆ ReplacePage()

HRESULT WINAPI CFileDefExt::ReplacePage ( UINT  uPageID,
LPFNADDPROPSHEETPAGE  pfnReplacePage,
LPARAM  lParam 
)
virtual

Definition at line 1338 of file filedefext.cpp.

1339 {
1340  UNIMPLEMENTED;
1341  return E_NOTIMPL;
1342 }
#define E_NOTIMPL
Definition: ddrawi.h:99
#define UNIMPLEMENTED
Definition: debug.h:115

◆ SetSite()

HRESULT WINAPI CFileDefExt::SetSite ( IUnknown punk)
virtual

Implements IObjectWithSite.

Definition at line 1345 of file filedefext.cpp.

1346 {
1347  UNIMPLEMENTED;
1348  return E_NOTIMPL;
1349 }
#define E_NOTIMPL
Definition: ddrawi.h:99
#define UNIMPLEMENTED
Definition: debug.h:115

◆ SetVersionLabel()

BOOL CFileDefExt::SetVersionLabel ( HWND  hwndDlg,
DWORD  idCtrl,
LPCWSTR  pwszName 
)
private

Definition at line 877 of file filedefext.cpp.

878 {
879  if (hwndDlg == NULL || pwszName == NULL)
880  return FALSE;
881 
882  LPCWSTR pwszValue = m_VerInfo.GetString(pwszName);
883  if (pwszValue)
884  {
885  /* file description property */
886  TRACE("%s :: %s\n", debugstr_w(pwszName), debugstr_w(pwszValue));
887  SetDlgItemTextW(hwndDlg, idCtrl, pwszValue);
888  return TRUE;
889  }
890 
891  return FALSE;
892 }
CFileVersionInfo m_VerInfo
Definition: filedefext.h:81
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define TRUE
Definition: types.h:120
BOOL WINAPI SetDlgItemTextW(_In_ HWND, _In_ int, _In_ LPCWSTR)
#define FALSE
Definition: types.h:117
#define debugstr_w
Definition: kernel32.h:32
#define TRACE(s)
Definition: solgame.cpp:4
LPCWSTR GetString(LPCWSTR pwszName)
Definition: filedefext.cpp:123
#define NULL
Definition: types.h:112

Referenced by InitVersionPage().

◆ UpdateFolderIcon()

void CFileDefExt::UpdateFolderIcon ( HWND  hwndDlg)

Definition at line 1065 of file filedefext.cpp.

1066 {
1067  // destroy icon if any
1068  if (m_hFolderIcon)
1069  {
1071  m_hFolderIcon = NULL;
1072  }
1073 
1074  // create the icon
1075  if (m_szFolderIconPath[0] == 0 && m_nFolderIconIndex == 0)
1076  {
1078  }
1079  else
1080  {
1082  }
1083 
1084  // set icon
1086 }
#define STM_SETICON
Definition: winuser.h:2079
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2022
#define IDC_FOLDERCUST_ICON
Definition: shresdef.h:503
UINT_PTR WPARAM
Definition: windef.h:207
UINT WINAPI ExtractIconExW(LPCWSTR lpszFile, INT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIcons)
Definition: iconcache.cpp:872
INT m_nFolderIconIndex
Definition: filedefext.h:93
LRESULT WINAPI SendDlgItemMessageW(_In_ HWND, _In_ int, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define IDI_SHELL_FOLDER
Definition: shresdef.h:525
WCHAR m_szFolderIconPath[MAX_PATH]
Definition: filedefext.h:92
#define shell32_hInstance
#define NULL
Definition: types.h:112
HICON m_hFolderIcon
Definition: filedefext.h:94
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE, _In_ LPCWSTR)
Definition: cursoricon.c:2044
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582

Referenced by InitFolderCustomizePage(), and OnFolderCustChangeIcon().

◆ VersionPageProc()

INT_PTR CALLBACK CFileDefExt::VersionPageProc ( HWND  hwndDlg,
UINT  uMsg,
WPARAM  wParam,
LPARAM  lParam 
)
staticprivate

Definition at line 931 of file filedefext.cpp.

932 {
933  switch (uMsg)
934  {
935  case WM_INITDIALOG:
936  {
938 
939  if (ppsp == NULL || !ppsp->lParam)
940  break;
941 
942  TRACE("WM_INITDIALOG hwnd %p lParam %p ppsplParam %x\n", hwndDlg, lParam, ppsp->lParam);
943 
944  CFileDefExt *pFileDefExt = reinterpret_cast<CFileDefExt *>(ppsp->lParam);
945  return pFileDefExt->InitVersionPage(hwndDlg);
946  }
947  case WM_COMMAND:
948  if (LOWORD(wParam) == 14009 && HIWORD(wParam) == LBN_SELCHANGE)
949  {
950  HWND hDlgCtrl = (HWND)lParam;
951 
953  if (Index == LB_ERR)
954  break;
955 
956  LPCWSTR pwszData = (LPCWSTR)SendMessageW(hDlgCtrl, LB_GETITEMDATA, (WPARAM)Index, (LPARAM)NULL);
957  if (pwszData == NULL)
958  break;
959 
960  TRACE("hDlgCtrl %x string %s\n", hDlgCtrl, debugstr_w(pwszData));
961  SetDlgItemTextW(hwndDlg, 14010, pwszData);
962 
963  return TRUE;
964  }
965  break;
966  case WM_DESTROY:
967  break;
968  case PSM_QUERYSIBLINGS:
969  return FALSE; // continue
970  default:
971  break;
972  }
973 
974  return FALSE;
975 }
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
#define TRUE
Definition: types.h:120
#define LB_GETITEMDATA
Definition: winuser.h:2028
HANDLE HWND
Definition: compat.h:19
UINT_PTR WPARAM
Definition: windef.h:207
BOOL InitVersionPage(HWND hwndDlg)
Definition: filedefext.cpp:822
#define LBN_SELCHANGE
Definition: winuser.h:2062
WPARAM wParam
Definition: combotst.c:138
BOOL WINAPI SetDlgItemTextW(_In_ HWND, _In_ int, _In_ LPCWSTR)
#define FALSE
Definition: types.h:117
#define LB_ERR
Definition: winuser.h:2412
#define debugstr_w
Definition: kernel32.h:32
#define LPPROPSHEETPAGE
Definition: prsht.h:390
LONG_PTR LPARAM
Definition: windef.h:208
#define WM_DESTROY
Definition: winuser.h:1596
#define TRACE(s)
Definition: solgame.cpp:4
_In_ WDFCOLLECTION _In_ ULONG Index
#define WM_COMMAND
Definition: winuser.h:1727
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define LB_GETCURSEL
Definition: winuser.h:2026
#define NULL
Definition: types.h:112
#define PSM_QUERYSIBLINGS
Definition: prsht.h:160
#define HIWORD(l)
Definition: typedefs.h:247
LONG_PTR LRESULT
Definition: windef.h:209
#define WM_INITDIALOG
Definition: winuser.h:1726
LPARAM lParam
Definition: combotst.c:139
#define LOWORD(l)
Definition: pedump.c:82

Referenced by AddPages().

Member Data Documentation

◆ m_bDir

BOOL CFileDefExt::m_bDir
private

Definition at line 82 of file filedefext.h.

Referenced by AddPages(), InitFileAttr(), InitGeneralPage(), and Initialize().

◆ m_bFolderIconIsSet

BOOL CFileDefExt::m_bFolderIconIsSet
private

Definition at line 95 of file filedefext.h.

Referenced by CFileDefExt(), OnFolderCustApply(), and OnFolderCustChangeIcon().

◆ m_cFiles

DWORD CFileDefExt::m_cFiles
private

Definition at line 84 of file filedefext.h.

Referenced by CountFolderAndFiles(), and InitFileAttr().

◆ m_cFolders

DWORD CFileDefExt::m_cFolders
private

Definition at line 85 of file filedefext.h.

Referenced by CountFolderAndFiles(), and InitFileAttr().

◆ m_DirSize

ULARGE_INTEGER CFileDefExt::m_DirSize
private

Definition at line 86 of file filedefext.h.

Referenced by CFileDefExt(), CountFolderAndFiles(), and InitFileAttr().

◆ m_DirSizeOnDisc

ULARGE_INTEGER CFileDefExt::m_DirSizeOnDisc
private

Definition at line 87 of file filedefext.h.

Referenced by CFileDefExt(), CountFolderAndFiles(), and InitFileAttr().

◆ m_hFolderIcon

HICON CFileDefExt::m_hFolderIcon
private

Definition at line 94 of file filedefext.h.

Referenced by CFileDefExt(), OnFolderCustDestroy(), and UpdateFolderIcon().

◆ m_nFolderIconIndex

INT CFileDefExt::m_nFolderIconIndex
private

◆ m_szFolderIconPath

WCHAR CFileDefExt::m_szFolderIconPath[MAX_PATH]
private

◆ m_VerInfo

CFileVersionInfo CFileDefExt::m_VerInfo
private

◆ m_wszPath


The documentation for this class was generated from the following files: