ReactOS 0.4.16-dev-550-g2186ce3
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)
 
STDMETHOD() Initialize (PCIDLIST_ABSOLUTE pidlFolder, IDataObject *pdtobj, HKEY hkeyProgID) override
 
STDMETHOD() QueryContextMenu (HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) override
 
STDMETHOD() InvokeCommand (LPCMINVOKECOMMANDINFO lpici) override
 
STDMETHOD() GetCommandString (UINT_PTR idCmd, UINT uType, UINT *pwReserved, LPSTR pszName, UINT cchMax) override
 
STDMETHOD() AddPages (LPFNADDPROPSHEETPAGE pfnAddPage, LPARAM lParam) override
 
STDMETHOD() ReplacePage (UINT uPageID, LPFNADDPROPSHEETPAGE pfnReplacePage, LPARAM lParam) override
 
STDMETHOD() SetSite (IUnknown *punk) override
 
STDMETHOD() GetSite (REFIID iid, void **ppvSite) override
 
- 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 ()
 
HRESULT Initialize ([in] PCIDLIST_ABSOLUTE pidlFolder, [in] IDataObject *pdtobj, [in] HKEY hkeyProgID)
 
- Public Member Functions inherited from IUnknown
HRESULT QueryInterface ([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
 
ULONG AddRef ()
 
ULONG Release ()
 
HRESULT QueryContextMenu ([in] HMENU hmenu, [in] UINT indexMenu, [in] UINT idCmdFirst, [in] UINT idCmdLast, [in] UINT uFlags)
 
HRESULT InvokeCommand ([in] LPCMINVOKECOMMANDINFO lpici)
 
HRESULT GetCommandString ([in] UINT_PTR idCmd, [in] UINT uType, [out] UINT *pwReserved, [out, size_is(cchMax)] LPSTR pszName, [in] UINT cchMax)
 
- 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 SetSite ([in] IUnknown *pUnkSite)
 
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 IContextMenuLPCONTEXTMENU
 
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
 
- Static Public Attributes inherited from IContextMenu
static 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 1212 of file filedefext.cpp.

1212 :
1214{
1215 m_wszPath[0] = L'\0';
1216 m_DirSize.QuadPart = 0ull;
1218
1219 m_szFolderIconPath[0] = 0;
1223}
WCHAR m_szFolderIconPath[MAX_PATH]
Definition: filedefext.h:92
ULARGE_INTEGER m_DirSize
Definition: filedefext.h:86
DWORD m_cFiles
Definition: filedefext.h:84
ULARGE_INTEGER m_DirSizeOnDisc
Definition: filedefext.h:87
BOOL m_bFolderIconIsSet
Definition: filedefext.h:95
WCHAR m_wszPath[MAX_PATH]
Definition: filedefext.h:80
INT m_nFolderIconIndex
Definition: filedefext.h:93
DWORD m_cFolders
Definition: filedefext.h:85
BOOL m_bDir
Definition: filedefext.h:82
HICON m_hFolderIcon
Definition: filedefext.h:94
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
#define L(x)
Definition: ntvdm.h:50
ULONGLONG QuadPart
Definition: ms-dtyp.idl:185

◆ ~CFileDefExt()

CFileDefExt::~CFileDefExt ( )

Definition at line 1225 of file filedefext.cpp.

1226{
1227
1228}

Member Function Documentation

◆ _CountFolderAndFilesThreadProc()

DWORD WINAPI CFileDefExt::_CountFolderAndFilesThreadProc ( LPVOID  lpParameter)
staticprivate

Definition at line 1347 of file filedefext.cpp.

1348{
1349 _CountFolderAndFilesData *data = static_cast<_CountFolderAndFilesData*>(lpParameter);
1350 DWORD ticks = 0;
1351 data->This->CountFolderAndFiles(data->hwndDlg, data->pwszBuf, &ticks);
1352
1353 //Release the CFileDefExt and data object holds in the copying thread.
1354 data->This->Release();
1355 HeapFree(GetProcessHeap(), 0, data->pwszBuf);
1357
1358 return 0;
1359}
BOOL CountFolderAndFiles(HWND hwndDlg, LPCWSTR pwszBuf, LPDWORD ticks)
#define GetProcessHeap()
Definition: compat.h:736
#define HeapFree(x, y, z)
Definition: compat.h:735
unsigned long DWORD
Definition: ntddk_ex.h:95
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950

Referenced by InitFileAttr().

◆ AddPages()

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

Definition at line 1291 of file filedefext.cpp.

1292{
1293 HPROPSHEETPAGE hPage;
1295
1297 &PropSheetPageLifetimeCallback<CFileDefExt>);
1298 HRESULT hr = AddPropSheetPage(hPage, pfnAddPage, lParam);
1300 return hr;
1301 else
1302 AddRef(); // For PropSheetPageLifetimeCallback
1303
1305 {
1308 (LPARAM)this,
1309 NULL);
1310 AddPropSheetPage(hPage, pfnAddPage, lParam);
1311 }
1312
1313 if (m_bDir)
1314 {
1317 (LPARAM)this,
1318 NULL);
1319 AddPropSheetPage(hPage, pfnAddPage, lParam);
1320 }
1321
1322 return S_OK;
1323}
static INT_PTR CALLBACK VersionPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: filedefext.cpp:916
static INT_PTR CALLBACK GeneralPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: filedefext.cpp:692
static INT_PTR CALLBACK FolderCustomizePageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: filedefext.cpp:975
LPARAM lParam
Definition: combotst.c:139
#define FAILED_UNEXPECTEDLY(hr)
Definition: precomp.h:121
static HRESULT AddPropSheetPage(HPROPSHEETPAGE hPage, LPFNSVADDPROPSHEETPAGE pfnAddPage, LPARAM lParam)
Definition: precomp.h:150
DWORD WINAPI GetFileVersionInfoSizeW(LPCWSTR filename, LPDWORD handle)
Definition: version.c:611
unsigned short WORD
Definition: ntddk_ex.h:93
ULONG AddRef()
#define S_OK
Definition: intsafe.h:52
struct _PSP * HPROPSHEETPAGE
Definition: mstask.idl:90
HRESULT hr
Definition: shlfolder.c:183
#define IDD_FILE_VERSION
Definition: shresdef.h:404
#define IDD_FILE_PROPERTIES
Definition: shresdef.h:395
#define IDD_FOLDER_CUSTOMIZE
Definition: shresdef.h:525
#define IDD_FOLDER_PROPERTIES
Definition: shresdef.h:396
HPROPSHEETPAGE SH_CreatePropertySheetPage(WORD wDialogId, DLGPROC pfnDlgProc, LPARAM lParam, LPCWSTR pwszTitle)
Definition: propsheet.cpp:243
HPROPSHEETPAGE SH_CreatePropertySheetPageEx(WORD wDialogId, DLGPROC pfnDlgProc, LPARAM lParam, LPCWSTR pwszTitle, LPFNPSPCALLBACK Callback)
Definition: propsheet.cpp:223
LONG_PTR LPARAM
Definition: windef.h:208

◆ AddVersionString()

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

Definition at line 887 of file filedefext.cpp.

888{
889 TRACE("pwszName %s, hwndDlg %p\n", debugstr_w(pwszName), hwndDlg);
890
891 if (hwndDlg == NULL || pwszName == NULL)
892 return FALSE;
893
894 LPCWSTR pwszValue = m_VerInfo.GetString(pwszName);
895 if (pwszValue)
896 {
897 /* listbox name property */
898 HWND hDlgCtrl = GetDlgItem(hwndDlg, 14009);
899 TRACE("%s :: %s\n", debugstr_w(pwszName), debugstr_w(pwszValue));
900 UINT Index = SendMessageW(hDlgCtrl, LB_ADDSTRING, (WPARAM) -1, (LPARAM)pwszName);
901 SendMessageW(hDlgCtrl, LB_SETITEMDATA, (WPARAM)Index, (LPARAM)(WCHAR *)pwszValue);
902 return TRUE;
903 }
904
905 return FALSE;
906}
CFileVersionInfo m_VerInfo
Definition: filedefext.h:81
LPCWSTR GetString(LPCWSTR pwszName)
Definition: filedefext.cpp:123
#define TRUE
Definition: types.h:120
#define debugstr_w
Definition: kernel32.h:32
unsigned int UINT
Definition: ndis.h:50
#define TRACE(s)
Definition: solgame.cpp:4
_In_ WDFCOLLECTION _In_ ULONG Index
UINT_PTR WPARAM
Definition: windef.h:207
#define LB_ADDSTRING
Definition: winuser.h:2034
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
#define LB_SETITEMDATA
Definition: winuser.h:2068
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
__wchar_t WCHAR
Definition: xmlstorage.h:180
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

Referenced by InitVersionPage().

◆ CountFolderAndFiles()

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

Definition at line 1362 of file filedefext.cpp.

1363{
1364 CString sBuf = pwszBuf;
1365 sBuf += L"\\" ;
1366 CString sSearch = sBuf;
1367 sSearch += L"*" ;
1368 CString sFileName;
1369
1370 WIN32_FIND_DATAW wfd;
1371 HANDLE hFind = FindFirstFileW(sSearch, &wfd);
1372 if (hFind == INVALID_HANDLE_VALUE)
1373 {
1374 ERR("FindFirstFileW %ls failed\n", sSearch.GetString());
1375 return FALSE;
1376 }
1377
1378 BOOL root = FALSE;
1379 if (*ticks == 0) {
1380 *ticks = GetTickCount();
1381 root = TRUE;
1382 }
1383
1384 do
1385 {
1386 sFileName = sBuf;
1387 sFileName += wfd.cFileName;
1388 if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
1389 {
1390 /* Don't process "." and ".." items */
1391 if (!wcscmp(wfd.cFileName, L".") || !wcscmp(wfd.cFileName, L".."))
1392 continue;
1393
1394 ++m_cFolders;
1395
1396 CountFolderAndFiles(hwndDlg, sFileName, ticks);
1397 }
1398 else
1399 {
1400 m_cFiles++;
1401
1403 FileSize.u.LowPart = wfd.nFileSizeLow;
1404 FileSize.u.HighPart = wfd.nFileSizeHigh;
1406 // Calculate size on disc
1407 if (!GetPhysicalFileSize(sFileName.GetString(), &FileSize))
1408 ERR("GetPhysicalFileSize failed for %ls\n", sFileName.GetString());
1410 }
1411 if (GetTickCount() - *ticks > (DWORD) 300)
1412 {
1413 /* FIXME Using IsWindow is generally ill advised */
1414 if (IsWindow(hwndDlg))
1415 {
1416 WCHAR wszBuf[100];
1417
1418 if (SH_FormatFileSizeWithBytes(&m_DirSize, wszBuf, _countof(wszBuf)))
1419 SetDlgItemTextW(hwndDlg, 14011, wszBuf);
1420
1422 SetDlgItemTextW(hwndDlg, 14012, wszBuf);
1423
1424 /* Display files and folders count */
1425 WCHAR wszFormat[100];
1426 LoadStringW(shell32_hInstance, IDS_FILE_FOLDER, wszFormat, _countof(wszFormat));
1427 StringCchPrintfW(wszBuf, _countof(wszBuf), wszFormat, m_cFiles, m_cFolders);
1428 SetDlgItemTextW(hwndDlg, 14027, wszBuf);
1429 *ticks = GetTickCount();
1430 }
1431 else
1432 break;
1433 }
1434 } while(FindNextFileW(hFind, &wfd));
1435
1436 if (root && IsWindow(hwndDlg))
1437 {
1438 WCHAR wszBuf[100];
1439
1440 if (SH_FormatFileSizeWithBytes(&m_DirSize, wszBuf, _countof(wszBuf)))
1441 SetDlgItemTextW(hwndDlg, 14011, wszBuf);
1442
1444 SetDlgItemTextW(hwndDlg, 14012, wszBuf);
1445
1446 /* Display files and folders count */
1447 WCHAR wszFormat[100];
1448 LoadStringW(shell32_hInstance, IDS_FILE_FOLDER, wszFormat, _countof(wszFormat));
1449 StringCchPrintfW(wszBuf, _countof(wszBuf), wszFormat, m_cFiles, m_cFolders);
1450 SetDlgItemTextW(hwndDlg, 14027, wszBuf);
1451 }
1452
1453 FindClose(hFind);
1454 return TRUE;
1455}
#define shell32_hInstance
#define ERR(fmt,...)
Definition: precomp.h:57
#define INVALID_HANDLE_VALUE
Definition: compat.h:731
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:320
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
Definition: find.c:382
DWORD WINAPI GetTickCount(VOID)
Definition: time.c:455
LPWSTR SH_FormatFileSizeWithBytes(const PULARGE_INTEGER lpQwSize, LPWSTR pwszResult, UINT cchResultMax)
Definition: filedefext.cpp:266
BOOL GetPhysicalFileSize(LPCWSTR PathBuffer, PULARGE_INTEGER Size)
Definition: filedefext.cpp:32
unsigned int BOOL
Definition: ntddk_ex.h:94
_Must_inspect_result_ _Out_ PLARGE_INTEGER FileSize
Definition: fsrtlfuncs.h:108
CStringA CString
Definition: atlstr.h:139
#define FILE_ATTRIBUTE_DIRECTORY
Definition: nt_native.h:705
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define IDS_FILE_FOLDER
Definition: shresdef.h:220
#define _countof(array)
Definition: sndvol32.h:70
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:530
struct _LARGE_INTEGER::@2306 u
LONGLONG QuadPart
Definition: typedefs.h:114
BOOL WINAPI IsWindow(_In_opt_ HWND)
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)

Referenced by _CountFolderAndFilesThreadProc(), and CountFolderAndFiles().

◆ FolderCustomizePageProc()

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

Definition at line 975 of file filedefext.cpp.

976{
977 CFileDefExt *pFileDefExt = reinterpret_cast<CFileDefExt *>(GetWindowLongPtr(hwndDlg, DWLP_USER));
978 switch (uMsg)
979 {
980 case WM_INITDIALOG:
981 {
983
984 if (ppsp == NULL || !ppsp->lParam)
985 break;
986
987 TRACE("WM_INITDIALOG hwnd %p lParam %p ppsplParam %x\n", hwndDlg, lParam, ppsp->lParam);
988
989 pFileDefExt = reinterpret_cast<CFileDefExt *>(ppsp->lParam);
990 return pFileDefExt->InitFolderCustomizePage(hwndDlg);
991 }
992
993 case WM_COMMAND:
994 switch (LOWORD(wParam))
995 {
997 pFileDefExt->OnFolderCustChangeIcon(hwndDlg);
998 break;
999
1001 // TODO:
1002 break;
1003
1005 // TODO:
1006 break;
1007 }
1008 break;
1009
1010 case WM_NOTIFY:
1011 {
1013 if (lppsn->hdr.code == PSN_APPLY)
1014 {
1015 // apply or not
1016 if (pFileDefExt->OnFolderCustApply(hwndDlg))
1017 {
1019 }
1020 else
1021 {
1023 }
1024 return TRUE;
1025 }
1026 break;
1027 }
1028
1029 case PSM_QUERYSIBLINGS:
1030 return FALSE; // continue
1031
1032 case WM_DESTROY:
1033 pFileDefExt->OnFolderCustDestroy(hwndDlg);
1034 break;
1035
1036 default:
1037 break;
1038 }
1039
1040 return FALSE;
1041}
void OnFolderCustDestroy(HWND hwndDlg)
BOOL OnFolderCustApply(HWND hwndDlg)
BOOL InitFolderCustomizePage(HWND hwndDlg)
void OnFolderCustChangeIcon(HWND hwndDlg)
WPARAM wParam
Definition: combotst.c:138
#define LOWORD(l)
Definition: pedump.c:82
#define PSNRET_INVALID_NOCHANGEPAGE
Definition: prsht.h:131
#define PSN_APPLY
Definition: prsht.h:117
#define PSNRET_NOERROR
Definition: prsht.h:129
#define LPPROPSHEETPAGE
Definition: prsht.h:390
struct _PSHNOTIFY * LPPSHNOTIFY
#define PSM_QUERYSIBLINGS
Definition: prsht.h:160
#define WM_NOTIFY
Definition: richedit.h:61
#define IDC_FOLDERCUST_CHANGE_ICON
Definition: shresdef.h:535
#define IDC_FOLDERCUST_RESTORE_DEFAULTS
Definition: shresdef.h:532
#define IDC_FOLDERCUST_CHOOSE_PIC
Definition: shresdef.h:531
NMHDR hdr
Definition: prsht.h:330
UINT code
Definition: winuser.h:3162
#define GetWindowLongPtr
Definition: treelist.c:73
#define SetWindowLongPtr
Definition: treelist.c:70
#define DWLP_USER
Definition: winuser.h:875
#define WM_COMMAND
Definition: winuser.h:1743
#define WM_INITDIALOG
Definition: winuser.h:1742
#define DWLP_MSGRESULT
Definition: winuser.h:873
#define WM_DESTROY
Definition: winuser.h:1612

Referenced by AddPages().

◆ GeneralPageProc()

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

Definition at line 692 of file filedefext.cpp.

693{
694 CFileDefExt *pFileDefExt = reinterpret_cast<CFileDefExt *>(GetWindowLongPtr(hwndDlg, DWLP_USER));
695 switch (uMsg)
696 {
697 case WM_INITDIALOG:
698 {
700
701 if (ppsp == NULL || !ppsp->lParam)
702 break;
703
704 TRACE("WM_INITDIALOG hwnd %p lParam %p ppsplParam %S\n", hwndDlg, lParam, ppsp->lParam);
705
706 pFileDefExt = reinterpret_cast<CFileDefExt *>(ppsp->lParam);
707 SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pFileDefExt);
708 pFileDefExt->InitGeneralPage(hwndDlg);
709 break;
710 }
711 case WM_COMMAND:
712 if (LOWORD(wParam) == 14024) /* Opens With - Change */
713 {
714 OPENASINFO oainfo;
715 oainfo.pcszFile = pFileDefExt->m_wszPath;
716 oainfo.pcszClass = NULL;
718 if (SHOpenWithDialog(hwndDlg, &oainfo) == S_OK)
719 {
720 pFileDefExt->InitGeneralPage(hwndDlg);
721 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
722 }
723 break;
724 }
725 else if (LOWORD(wParam) == 14021 || LOWORD(wParam) == 14022 || LOWORD(wParam) == 14023) /* checkboxes */
726 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
727 else if (LOWORD(wParam) == 14001) /* Name */
728 {
729 if (HIWORD(wParam) == EN_CHANGE)
730 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
731 }
732 break;
733 case WM_NOTIFY:
734 {
736 if (lppsn->hdr.code == PSN_APPLY)
737 {
738 /* Update attributes first */
739 DWORD dwAttr = GetFileAttributesW(pFileDefExt->m_wszPath);
740 if (dwAttr)
741 {
743
744 if (BST_CHECKED == SendDlgItemMessageW(hwndDlg, 14021, BM_GETCHECK, 0, 0))
745 dwAttr |= FILE_ATTRIBUTE_READONLY;
746 if (BST_CHECKED == SendDlgItemMessageW(hwndDlg, 14022, BM_GETCHECK, 0, 0))
747 dwAttr |= FILE_ATTRIBUTE_HIDDEN;
748 if (BST_CHECKED == SendDlgItemMessageW(hwndDlg, 14023, BM_GETCHECK, 0, 0))
749 dwAttr |= FILE_ATTRIBUTE_ARCHIVE;
750
751 if (!SetFileAttributesW(pFileDefExt->m_wszPath, dwAttr))
752 ERR("SetFileAttributesW failed\n");
753 }
754
755 /* Update filename now */
756 WCHAR wszBuf[MAX_PATH];
757 StringCchCopyW(wszBuf, _countof(wszBuf), pFileDefExt->m_wszPath);
758 LPWSTR pwszFilename = PathFindFileNameW(wszBuf);
759 UINT cchFilenameMax = _countof(wszBuf) - (pwszFilename - wszBuf);
760 if (GetDlgItemTextW(hwndDlg, 14001, pwszFilename, cchFilenameMax))
761 {
762 if (!MoveFileW(pFileDefExt->m_wszPath, wszBuf))
763 ERR("MoveFileW failed\n");
764 }
765
767 return TRUE;
768 }
769 break;
770 }
772 {
773 // reset icon
774 HWND hIconCtrl = GetDlgItem(hwndDlg, 14025);
775 HICON hIcon = (HICON)SendMessageW(hIconCtrl, STM_GETICON, 0, 0);
777 hIcon = NULL;
778 SendMessageW(hIconCtrl, STM_SETICON, (WPARAM)hIcon, 0);
779
780 // refresh the page
781 pFileDefExt->InitGeneralPage(hwndDlg);
782 return FALSE; // continue
783 }
784 default:
785 break;
786 }
787
788 return FALSE;
789}
HRESULT WINAPI SHOpenWithDialog(HWND hwndParent, const OPENASINFO *poainfo)
BOOL InitGeneralPage(HWND hwndDlg)
Definition: filedefext.cpp:636
#define MAX_PATH
Definition: compat.h:34
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
Definition: fileinfo.c:652
BOOL WINAPI SetFileAttributesW(LPCWSTR lpFileName, DWORD dwFileAttributes)
Definition: fileinfo.c:794
BOOL WINAPI MoveFileW(IN LPCWSTR lpExistingFileName, IN LPCWSTR lpNewFileName)
Definition: move.c:1104
LPWSTR WINAPI PathFindFileNameW(LPCWSTR lpszPath)
Definition: path.c:394
static HICON
Definition: imagelist.c:80
HICON hIcon
Definition: msconfig.c:44
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
#define FILE_ATTRIBUTE_READONLY
Definition: nt_native.h:702
#define FILE_ATTRIBUTE_HIDDEN
Definition: nt_native.h:703
#define FILE_ATTRIBUTE_ARCHIVE
Definition: nt_native.h:706
#define PropSheet_Changed(d, w)
Definition: prsht.h:344
struct _PROPSHEETPAGEW * LPPROPSHEETPAGEW
@ OAIF_REGISTER_EXT
Definition: shlobj.h:2681
@ OAIF_FORCE_REGISTRATION
Definition: shlobj.h:2683
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
LPARAM lParam
Definition: prsht.h:227
LPCWSTR pcszFile
Definition: shlobj.h:2693
LPCWSTR pcszClass
Definition: shlobj.h:2694
OPEN_AS_INFO_FLAGS oaifInFlags
Definition: shlobj.h:2695
#define HIWORD(l)
Definition: typedefs.h:247
UINT WINAPI GetDlgItemTextW(HWND hDlg, int nIDDlgItem, LPWSTR lpString, int nMaxCount)
Definition: dialog.c:2263
#define STM_SETICON
Definition: winuser.h:2095
#define STM_GETICON
Definition: winuser.h:2093
LRESULT WINAPI SendDlgItemMessageW(_In_ HWND, _In_ int, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
HWND WINAPI GetParent(_In_ HWND)
#define BST_CHECKED
Definition: winuser.h:197
#define BM_GETCHECK
Definition: winuser.h:1921
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2139
#define EN_CHANGE
Definition: winuser.h:2025
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by AddPages().

◆ GetCommandString()

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

Implements IContextMenu.

Definition at line 1284 of file filedefext.cpp.

1285{
1287 return E_NOTIMPL;
1288}
#define UNIMPLEMENTED
Definition: ntoskrnl.c:15
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ GetFileTimeString()

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

Definition at line 470 of file filedefext.cpp.

471{
472 FILETIME ft;
473 SYSTEMTIME st;
474
475 if (!FileTimeToLocalFileTime(lpFileTime, &ft) || !FileTimeToSystemTime(&ft, &st))
476 return FALSE;
477
478 size_t cchRemaining = cchResult;
479 LPWSTR pwszEnd = pwszResult;
480 int cchWritten = GetDateFormatW(LOCALE_USER_DEFAULT, DATE_LONGDATE, &st, NULL, pwszEnd, cchRemaining);
481 if (cchWritten)
482 --cchWritten; // GetDateFormatW returns count with terminating zero
483 else
484 ERR("GetDateFormatW failed\n");
485 cchRemaining -= cchWritten;
486 pwszEnd += cchWritten;
487
488 StringCchCopyExW(pwszEnd, cchRemaining, L", ", &pwszEnd, &cchRemaining, 0);
489
490 cchWritten = GetTimeFormatW(LOCALE_USER_DEFAULT, 0, &st, NULL, pwszEnd, cchRemaining);
491 if (cchWritten)
492 --cchWritten; // GetTimeFormatW returns count with terminating zero
493 else
494 ERR("GetTimeFormatW failed\n");
495 TRACE("result %s\n", debugstr_w(pwszResult));
496 return TRUE;
497}
BOOL WINAPI FileTimeToSystemTime(IN CONST FILETIME *lpFileTime, OUT LPSYSTEMTIME lpSystemTime)
Definition: time.c:188
BOOL WINAPI FileTimeToLocalFileTime(IN CONST FILETIME *lpFileTime, OUT LPFILETIME lpLocalFileTime)
Definition: time.c:221
INT WINAPI GetTimeFormatW(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCWSTR lpFormat, LPWSTR lpTimeStr, INT cchOut)
Definition: lcformat.c:1093
INT WINAPI GetDateFormatW(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCWSTR lpFormat, LPWSTR lpDateStr, INT cchOut)
Definition: lcformat.c:993
#define LOCALE_USER_DEFAULT
STRSAFEAPI StringCchCopyExW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc, STRSAFE_LPWSTR *ppszDestEnd, size_t *pcchRemaining, STRSAFE_DWORD dwFlags)
Definition: strsafe.h:184
#define DATE_LONGDATE
Definition: winnls.h:199

Referenced by InitFileAttr().

◆ GetSite()

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

Definition at line 1340 of file filedefext.cpp.

1341{
1343 return E_NOTIMPL;
1344}

◆ InitFileAttr()

BOOL CFileDefExt::InitFileAttr ( HWND  hwndDlg)
private

Definition at line 508 of file filedefext.cpp.

509{
511 WIN32_FIND_DATAW FileInfo; // WIN32_FILE_ATTRIBUTE_DATA
512 WCHAR wszBuf[MAX_PATH];
513
514 TRACE("InitFileAttr %ls\n", m_wszPath);
515
516 /*
517 * There are situations where GetFileAttributes(Ex) can fail even if the
518 * specified path represents a file. This happens when e.g. the file is a
519 * locked system file, such as C:\pagefile.sys . In this case, the function
520 * returns INVALID_FILE_ATTRIBUTES and GetLastError returns ERROR_SHARING_VIOLATION.
521 * (this would allow us to distinguish between this failure and a failure
522 * due to the fact that the path actually refers to a directory).
523 *
524 * Because we really want to retrieve the file attributes/size/date&time,
525 * we do the following trick:
526 * - First we call GetFileAttributesEx. If it succeeds we know we have
527 * a file or a directory, and we have retrieved its attributes.
528 * - If GetFileAttributesEx fails, we call FindFirstFile on the full path.
529 * While we could have called FindFirstFile at first and skip GetFileAttributesEx
530 * altogether, we do it after GetFileAttributesEx because it performs more
531 * work to retrieve the file attributes. However it actually works even
532 * for locked system files.
533 * - If FindFirstFile succeeds we have retrieved its attributes.
534 * - Otherwise (FindFirstFile has failed), we do not retrieve anything.
535 *
536 * The following code also relies on the fact that the first 6 members
537 * of WIN32_FIND_DATA are *exactly* the same as the WIN32_FILE_ATTRIBUTE_DATA
538 * structure. Therefore it is safe to use a single WIN32_FIND_DATA
539 * structure for both the GetFileAttributesEx and FindFirstFile calls.
540 */
541
545 if (!Success)
546 {
548 Success = (hFind != INVALID_HANDLE_VALUE);
549 if (Success)
550 FindClose(hFind);
551 }
552
553 if (Success)
554 {
555 /* Update attribute checkboxes */
556 if (FileInfo.dwFileAttributes & FILE_ATTRIBUTE_READONLY)
557 SendDlgItemMessage(hwndDlg, 14021, BM_SETCHECK, BST_CHECKED, 0);
558 if (FileInfo.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)
559 SendDlgItemMessage(hwndDlg, 14022, BM_SETCHECK, BST_CHECKED, 0);
560 if (FileInfo.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE)
561 SendDlgItemMessage(hwndDlg, 14023, BM_SETCHECK, BST_CHECKED, 0);
562
563 /* Update creation time */
564 if (GetFileTimeString(&FileInfo.ftCreationTime, wszBuf, _countof(wszBuf)))
565 SetDlgItemTextW(hwndDlg, 14015, wszBuf);
566
567 /* For files display last access and last write time */
568 if (!m_bDir)
569 {
570 if (GetFileTimeString(&FileInfo.ftLastAccessTime, wszBuf, _countof(wszBuf)))
571 SetDlgItemTextW(hwndDlg, 14019, wszBuf);
572
573 if (GetFileTimeString(&FileInfo.ftLastWriteTime, wszBuf, _countof(wszBuf)))
574 SetDlgItemTextW(hwndDlg, 14017, wszBuf);
575
576 /* Update size of file */
578 FileSize.u.LowPart = FileInfo.nFileSizeLow;
579 FileSize.u.HighPart = FileInfo.nFileSizeHigh;
580 if (SH_FormatFileSizeWithBytes(&FileSize, wszBuf, _countof(wszBuf)))
581 {
582 SetDlgItemTextW(hwndDlg, 14011, wszBuf);
583
584 // Compute file on disk. If fails, use logical size
587 else
588 ERR("Unreliable size on disk\n");
589
590 SetDlgItemTextW(hwndDlg, 14012, wszBuf);
591 }
592 }
593 }
594
595 if (m_bDir)
596 {
597 /* For directories files have to be counted */
598
600 data->This = this;
601 data->pwszBuf = static_cast<LPWSTR>(HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WCHAR) * MAX_PATH));
602 data->hwndDlg = hwndDlg;
603 this->AddRef();
605
607
608 /* Update size field */
609 if (SH_FormatFileSizeWithBytes(&m_DirSize, wszBuf, _countof(wszBuf)))
610 SetDlgItemTextW(hwndDlg, 14011, wszBuf);
611
613 SetDlgItemTextW(hwndDlg, 14012, wszBuf);
614
615 /* Display files and folders count */
616 WCHAR wszFormat[256];
617 LoadStringW(shell32_hInstance, IDS_FILE_FOLDER, wszFormat, _countof(wszFormat));
618 StringCchPrintfW(wszBuf, _countof(wszBuf), wszFormat, m_cFiles, m_cFolders);
619 SetDlgItemTextW(hwndDlg, 14027, wszBuf);
620 }
621
622 /* Hide Advanced button. TODO: Implement advanced dialog and enable this button if filesystem supports compression or encryption */
623 ShowWindow(GetDlgItem(hwndDlg, 14028), SW_HIDE);
624
625 return TRUE;
626}
static BOOL GetFileTimeString(LPFILETIME lpFileTime, LPWSTR pwszResult, UINT cchResult)
Definition: filedefext.cpp:470
static DWORD WINAPI _CountFolderAndFilesThreadProc(LPVOID lpParameter)
#define HeapAlloc
Definition: compat.h:733
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
BOOL WINAPI GetFileAttributesExW(LPCWSTR lpFileName, GET_FILEEX_INFO_LEVELS fInfoLevelId, LPVOID lpFileInformation)
Definition: fileinfo.c:552
BOOL WINAPI SHCreateThread(LPTHREAD_START_ROUTINE pfnThreadProc, VOID *pData, DWORD dwFlags, LPTHREAD_START_ROUTINE pfnCallback)
Definition: thread.c:356
@ Success
Definition: eventcreate.c:712
@ GetFileExInfoStandard
Definition: winbase.h:1186
#define SW_HIDE
Definition: winuser.h:771
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
#define BM_SETCHECK
Definition: winuser.h:1924
#define SendDlgItemMessage
Definition: winuser.h:5854

Referenced by InitGeneralPage().

◆ InitFilePath()

BOOL CFileDefExt::InitFilePath ( HWND  hwndDlg)
private

Definition at line 441 of file filedefext.cpp.

442{
443 /* Find the filename */
444 WCHAR *pwszFilename = PathFindFileNameW(m_wszPath);
445
446 if (pwszFilename > m_wszPath)
447 {
448 /* Location field */
449 WCHAR wszLocation[MAX_PATH];
450 StringCchCopyNW(wszLocation, _countof(wszLocation), m_wszPath, pwszFilename - m_wszPath);
451 PathRemoveBackslashW(wszLocation);
452
453 SetDlgItemTextW(hwndDlg, 14009, wszLocation);
454 }
455
456 /* Filename field */
457 SetDlgItemTextW(hwndDlg, 14001, pwszFilename);
458
459 return TRUE;
460}
LPWSTR WINAPI PathRemoveBackslashW(LPWSTR lpszPath)
Definition: path.c:867
STRSAFEAPI StringCchCopyNW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc, size_t cchToCopy)
Definition: strsafe.h:236

Referenced by InitGeneralPage().

◆ InitFileType()

BOOL CFileDefExt::InitFileType ( HWND  hwndDlg)
private

Definition at line 382 of file filedefext.cpp.

383{
384 TRACE("path %s\n", debugstr_w(m_wszPath));
385
386 HWND hDlgCtrl = GetDlgItem(hwndDlg, 14005);
387 if (hDlgCtrl == NULL)
388 return FALSE;
389
390 /* Get file information */
391 SHFILEINFOW fi;
392 if (!SHGetFileInfoW(m_wszPath, 0, &fi, sizeof(fi), SHGFI_TYPENAME|SHGFI_ICON))
393 {
394 ERR("SHGetFileInfoW failed for %ls (%lu)\n", m_wszPath, GetLastError());
395 fi.szTypeName[0] = L'\0';
396 fi.hIcon = NULL;
397 }
398
400 if (pwszExt[0])
401 {
402 WCHAR wszBuf[256];
403
404 if (!fi.szTypeName[0])
405 {
406 /* The file type is unknown, so default to string "FileExtension File" */
407 size_t cchRemaining = 0;
408 LPWSTR pwszEnd = NULL;
409
410 StringCchPrintfExW(wszBuf, _countof(wszBuf), &pwszEnd, &cchRemaining, 0, L"%s ", pwszExt + 1);
411 SendMessageW(hDlgCtrl, WM_GETTEXT, (WPARAM)cchRemaining, (LPARAM)pwszEnd);
412
413 SendMessageW(hDlgCtrl, WM_SETTEXT, (WPARAM)NULL, (LPARAM)wszBuf);
414 }
415 else
416 {
417 /* Update file type */
418 StringCbPrintfW(wszBuf, sizeof(wszBuf), L"%s (%s)", fi.szTypeName, pwszExt);
419 SendMessageW(hDlgCtrl, WM_SETTEXT, (WPARAM)NULL, (LPARAM)wszBuf);
420 }
421 }
422
423 /* Update file icon */
424 if (fi.hIcon)
425 SendDlgItemMessageW(hwndDlg, 14000, STM_SETICON, (WPARAM)fi.hIcon, 0);
426 else
427 ERR("No icon %ls\n", m_wszPath);
428
429 return TRUE;
430}
LPWSTR WINAPI PathFindExtensionW(LPCWSTR lpszPath)
Definition: path.c:447
DWORD_PTR WINAPI SHGetFileInfoW(LPCWSTR path, DWORD dwFileAttributes, SHFILEINFOW *psfi, UINT sizeofpsfi, UINT flags)
Definition: shell32_main.c:430
#define SHGFI_ICON
Definition: shellapi.h:165
#define SHGFI_TYPENAME
Definition: shellapi.h:168
STRSAFEAPI StringCchPrintfExW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPWSTR *ppszDestEnd, size_t *pcchRemaining, STRSAFE_DWORD dwFlags, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:585
STRSAFEAPI StringCbPrintfW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:557
WCHAR szTypeName[80]
Definition: shellapi.h:377
HICON hIcon
Definition: shellapi.h:373
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define WM_GETTEXT
Definition: winuser.h:1621
#define WM_SETTEXT
Definition: winuser.h:1620

Referenced by InitGeneralPage().

◆ InitFolderCustomizePage()

BOOL CFileDefExt::InitFolderCustomizePage ( HWND  hwndDlg)
private

Definition at line 1078 of file filedefext.cpp.

1079{
1080 /* Attach the object to dialog window */
1081 SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)this);
1082
1087
1088 // build the desktop.ini file path
1091 PathAppendW(szIniFile, L"desktop.ini");
1092
1093 // desktop.ini --> m_szFolderIconPath, m_nFolderIconIndex
1094 m_szFolderIconPath[0] = 0;
1098 {
1100 }
1103 {
1105 }
1106
1107 // update icon
1108 UpdateFolderIcon(hwndDlg);
1109
1110 return TRUE;
1111}
void UpdateFolderIcon(HWND hwndDlg)
UINT WINAPI GetPrivateProfileIntW(LPCWSTR section, LPCWSTR entry, INT def_val, LPCWSTR filename)
Definition: profile.c:1297
INT WINAPI GetPrivateProfileStringW(LPCWSTR section, LPCWSTR entry, LPCWSTR def_val, LPWSTR buffer, UINT len, LPCWSTR filename)
Definition: profile.c:1142
int WINAPI PathParseIconLocationW(LPWSTR lpszPath)
Definition: path.c:1098
static const WCHAR s_szShellClassInfo[]
Definition: filedefext.cpp:968
static const WCHAR s_szIconFile[]
Definition: filedefext.cpp:970
static const WCHAR s_szIconResource[]
Definition: filedefext.cpp:971
static const WCHAR s_szIconIndex[]
Definition: filedefext.cpp:969
#define PathAppendW
Definition: pathcch.h:309
TCHAR szIniFile[]
Definition: scrnsave.c:29
#define IDC_FOLDERCUST_CHECKBOX
Definition: shresdef.h:530
#define IDC_FOLDERCUST_COMBOBOX
Definition: shresdef.h:529
BOOL WINAPI EnableWindow(_In_ HWND, _In_ BOOL)

Referenced by FolderCustomizePageProc().

◆ InitGeneralPage()

BOOL CFileDefExt::InitGeneralPage ( HWND  hwndDlg)
private

Definition at line 636 of file filedefext.cpp.

637{
638 /* Set general text properties filename filelocation and icon */
639 InitFilePath(hwndDlg);
640
641 /* Set file type and icon */
642 InitFileType(hwndDlg);
643
644 /* Set open with application */
645 if (!m_bDir)
646 {
647 if (!PathIsExeW(m_wszPath))
648 InitOpensWithField(hwndDlg);
649 else
650 {
651 WCHAR wszBuf[MAX_PATH];
653 SetDlgItemTextW(hwndDlg, 14006, wszBuf);
654 ShowWindow(GetDlgItem(hwndDlg, 14024), SW_HIDE);
655
656 /* hidden button 14024 allows to draw edit 14007 larger than defined in resources , we use edit 14009 as idol */
657 RECT rectIdol, rectToAdjust;
658 GetClientRect(GetDlgItem(hwndDlg, 14009), &rectIdol);
659 GetClientRect(GetDlgItem(hwndDlg, 14007), &rectToAdjust);
660 SetWindowPos(GetDlgItem(hwndDlg, 14007), HWND_TOP, 0, 0,
661 rectIdol.right-rectIdol.left /* make it as wide as its idol */,
662 rectToAdjust.bottom-rectToAdjust.top /* but keep its current height */,
664
665 LPCWSTR pwszDescr = m_VerInfo.GetString(L"FileDescription");
666 if (pwszDescr)
667 SetDlgItemTextW(hwndDlg, 14007, pwszDescr);
668 else
669 {
670 StringCbCopyW(wszBuf, sizeof(wszBuf), PathFindFileNameW(m_wszPath));
671 PathRemoveExtension(wszBuf);
672 SetDlgItemTextW(hwndDlg, 14007, wszBuf);
673 }
674 }
675 }
676
677 /* Set file created/modfied/accessed time, size and attributes */
678 InitFileAttr(hwndDlg);
679
680 return TRUE;
681}
EXTERN_C BOOL PathIsExeW(LPCWSTR lpszPath)
Definition: shellpath.c:539
BOOL InitFileAttr(HWND hwndDlg)
Definition: filedefext.cpp:508
BOOL InitFileType(HWND hwndDlg)
Definition: filedefext.cpp:382
VOID InitOpensWithField(HWND hwndDlg)
Definition: filedefext.cpp:294
BOOL InitFilePath(HWND hwndDlg)
Definition: filedefext.cpp:441
#define PathRemoveExtension
Definition: shlwapi.h:1057
#define IDS_EXE_DESCRIPTION
Definition: shresdef.h:210
STRSAFEAPI StringCbCopyW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:166
LONG right
Definition: windef.h:308
LONG bottom
Definition: windef.h:309
LONG top
Definition: windef.h:307
LONG left
Definition: windef.h:306
BOOL WINAPI SetWindowPos(_In_ HWND, _In_opt_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ UINT)
#define SWP_NOMOVE
Definition: winuser.h:1247
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define HWND_TOP
Definition: winuser.h:1210
#define SWP_NOZORDER
Definition: winuser.h:1250

Referenced by GeneralPageProc().

◆ Initialize()

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

Implements IShellExtInit.

Definition at line 1231 of file filedefext.cpp.

1232{
1233 FORMATETC format;
1234 STGMEDIUM stgm;
1235 HRESULT hr;
1236
1237 TRACE("%p %p %p %p\n", this, pidlFolder, pDataObj, hkeyProgID);
1238
1239 if (!pDataObj)
1240 return E_FAIL;
1241
1242 format.cfFormat = CF_HDROP;
1243 format.ptd = NULL;
1244 format.dwAspect = DVASPECT_CONTENT;
1245 format.lindex = -1;
1246 format.tymed = TYMED_HGLOBAL;
1247
1248 hr = pDataObj->GetData(&format, &stgm);
1250 return hr;
1251
1252 if (!DragQueryFileW((HDROP)stgm.hGlobal, 0, m_wszPath, _countof(m_wszPath)))
1253 {
1254 ERR("DragQueryFileW failed\n");
1255 ReleaseStgMedium(&stgm);
1256 return E_FAIL;
1257 }
1258
1259 ReleaseStgMedium(&stgm);
1260
1261 TRACE("File properties %ls\n", m_wszPath);
1263 if (!m_bDir)
1265
1266 return S_OK;
1267}
#define CF_HDROP
Definition: constants.h:410
BOOL Load(LPCWSTR pwszPath)
Definition: filedefext.cpp:82
#define E_FAIL
Definition: ddrawi.h:102
void WINAPI ReleaseStgMedium(STGMEDIUM *pmedium)
Definition: ole2.c:2033
UINT WINAPI DragQueryFileW(HDROP hDrop, UINT lFile, LPWSTR lpszwFile, UINT lLength)
Definition: shellole.c:622
BOOL WINAPI PathIsDirectoryW(LPCWSTR lpszPath)
Definition: path.c:1729
Definition: format.c:58

◆ InitOpensWithField()

VOID CFileDefExt::InitOpensWithField ( HWND  hwndDlg)
private

Definition at line 294 of file filedefext.cpp.

295{
296 WCHAR wszBuf[MAX_PATH] = L"";
297 WCHAR wszPath[MAX_PATH] = L"";
298 DWORD dwSize = sizeof(wszBuf);
299 BOOL bUnknownApp = TRUE;
301
302 if (RegGetValueW(HKEY_CLASSES_ROOT, pwszExt, L"", RRF_RT_REG_SZ, NULL, wszBuf, &dwSize) == ERROR_SUCCESS)
303 {
304 bUnknownApp = FALSE;
305 StringCbCatW(wszBuf, sizeof(wszBuf), L"\\shell\\open\\command");
306 dwSize = sizeof(wszPath);
307 if (RegGetValueW(HKEY_CLASSES_ROOT, wszBuf, L"", RRF_RT_REG_SZ, NULL, wszPath, &dwSize) == ERROR_SUCCESS)
308 {
309 /* Get path from command line */
310 ExpandEnvironmentStringsW(wszPath, wszBuf, _countof(wszBuf));
311 PathRemoveArgs(wszBuf);
312 PathUnquoteSpacesW(wszBuf);
313 PathSearchAndQualify(wszBuf, wszPath, _countof(wszPath));
314
315 HICON hIcon;
316 if (ExtractIconExW(wszPath, 0, NULL, &hIcon, 1))
317 {
318 HWND hIconCtrl = GetDlgItem(hwndDlg, 14025);
319 HWND hDescrCtrl = GetDlgItem(hwndDlg, 14007);
320 ShowWindow(hIconCtrl, SW_SHOW);
321 RECT rcIcon, rcDescr;
322 GetWindowRect(hIconCtrl, &rcIcon);
323
324 rcIcon.right = rcIcon.left + GetSystemMetrics(SM_CXSMICON);
325 rcIcon.bottom = rcIcon.top + GetSystemMetrics(SM_CYSMICON);
326
327 MapWindowPoints(NULL, hwndDlg, (LPPOINT)&rcIcon, 2);
328 GetWindowRect(hDescrCtrl, &rcDescr);
329 MapWindowPoints(NULL, hwndDlg, (LPPOINT)&rcDescr, 2);
330 INT cxOffset = rcIcon.right + 2 - rcDescr.left;
331 SetWindowPos(hDescrCtrl, NULL,
332 rcDescr.left + cxOffset, rcDescr.top,
333 rcDescr.right - rcDescr.left - cxOffset, rcDescr.bottom - rcDescr.top,
335 SendMessageW(hIconCtrl, STM_SETICON, (WPARAM)hIcon, 0);
336 } else
337 ERR("Failed to extract icon\n");
338
339 if (PathFileExistsW(wszPath))
340 {
341 /* Get file description */
342 CFileVersionInfo VerInfo;
343 VerInfo.Load(wszPath);
344 LPCWSTR pwszDescr = VerInfo.GetString(L"FileDescription");
345 if (pwszDescr)
346 SetDlgItemTextW(hwndDlg, 14007, pwszDescr);
347 else
348 {
349 /* File has no description - display filename */
350 LPWSTR pwszFilename = PathFindFileNameW(wszPath);
351 PathRemoveExtension(pwszFilename);
352 pwszFilename[0] = towupper(pwszFilename[0]);
353 SetDlgItemTextW(hwndDlg, 14007, pwszFilename);
354 }
355 }
356 else
357 bUnknownApp = TRUE;
358 } else
359 WARN("RegGetValueW %ls failed\n", wszBuf);
360 } else
361 WARN("RegGetValueW %ls failed\n", pwszExt);
362
363 if (bUnknownApp)
364 {
365 /* Unknown application */
367 SetDlgItemTextW(hwndDlg, 14007, wszBuf);
368 }
369}
#define WARN(fmt,...)
Definition: precomp.h:61
#define ERROR_SUCCESS
Definition: deptool.c:10
LSTATUS WINAPI RegGetValueW(HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData)
Definition: reg.c:1931
DWORD WINAPI ExpandEnvironmentStringsW(IN LPCWSTR lpSrc, IN LPWSTR lpDst, IN DWORD nSize)
Definition: environ.c:519
#define RRF_RT_REG_SZ
Definition: driver.c:575
BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath)
Definition: path.c:1783
VOID WINAPI PathUnquoteSpacesW(LPWSTR lpszPath)
Definition: path.c:1040
UINT WINAPI ExtractIconExW(LPCWSTR lpszFile, INT nIconIndex, HICON *phiconLarge, HICON *phiconSmall, UINT nIcons)
Definition: iconcache.cpp:849
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
#define PathSearchAndQualify
Definition: shlwapi.h:1091
#define PathRemoveArgs
Definition: shlwapi.h:1045
#define IDS_UNKNOWN_APP
Definition: shresdef.h:209
STRSAFEAPI StringCbCatW(STRSAFE_LPWSTR pszDest, size_t cbDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:342
#define towupper(c)
Definition: wctype.h:99
int32_t INT
Definition: typedefs.h:58
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
BOOL WINAPI GetWindowRect(_In_ HWND, _Out_ LPRECT)
#define SM_CYSMICON
Definition: winuser.h:1016
int WINAPI MapWindowPoints(_In_opt_ HWND hWndFrom, _In_opt_ HWND hWndTo, _Inout_updates_(cPoints) LPPOINT lpPoints, _In_ UINT cPoints)
#define SM_CXSMICON
Definition: winuser.h:1015
#define SW_SHOW
Definition: winuser.h:778
int WINAPI GetSystemMetrics(_In_ int)

Referenced by InitGeneralPage().

◆ InitVersionPage()

BOOL CFileDefExt::InitVersionPage ( HWND  hwndDlg)
private

Definition at line 799 of file filedefext.cpp.

800{
801 /* Get fixed info */
803 if (pInfo)
804 {
805 WCHAR wszVersion[256];
806 swprintf(wszVersion, L"%u.%u.%u.%u", HIWORD(pInfo->dwFileVersionMS),
807 LOWORD(pInfo->dwFileVersionMS),
808 HIWORD(pInfo->dwFileVersionLS),
809 LOWORD(pInfo->dwFileVersionLS));
810 TRACE("MS %x LS %x ver %s \n", pInfo->dwFileVersionMS, pInfo->dwFileVersionLS, debugstr_w(wszVersion));
811 SetDlgItemTextW(hwndDlg, 14001, wszVersion);
812 }
813
814 /* Update labels */
815 SetVersionLabel(hwndDlg, 14003, L"FileDescription");
816 SetVersionLabel(hwndDlg, 14005, L"LegalCopyright");
817
818 /* Add items to listbox */
819 AddVersionString(hwndDlg, L"CompanyName");
820 LPCWSTR pwszLang = m_VerInfo.GetLangName();
821 if (pwszLang)
822 {
823 HWND hDlgCtrl = GetDlgItem(hwndDlg, 14009);
824 UINT Index = SendMessageW(hDlgCtrl, LB_ADDSTRING, (WPARAM)-1, (LPARAM)L"Language");
825 SendMessageW(hDlgCtrl, LB_SETITEMDATA, (WPARAM)Index, (LPARAM)(WCHAR *)pwszLang);
826 }
827 AddVersionString(hwndDlg, L"ProductName");
828 AddVersionString(hwndDlg, L"InternalName");
829 AddVersionString(hwndDlg, L"OriginalFilename");
830 AddVersionString(hwndDlg, L"FileVersion");
831 AddVersionString(hwndDlg, L"ProductVersion");
832 AddVersionString(hwndDlg, L"Comments");
833 AddVersionString(hwndDlg, L"LegalTrademarks");
834
835 if (pInfo && (pInfo->dwFileFlags & VS_FF_PRIVATEBUILD))
836 AddVersionString(hwndDlg, L"PrivateBuild");
837
838 if (pInfo && (pInfo->dwFileFlags & VS_FF_SPECIALBUILD))
839 AddVersionString(hwndDlg, L"SpecialBuild");
840
841 /* Attach file version to dialog window */
842 SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)this);
843
844 /* Select first item */
845 HWND hDlgCtrl = GetDlgItem(hwndDlg, 14009);
846 SendMessageW(hDlgCtrl, LB_SETCURSEL, 0, 0);
847 LPCWSTR pwszText = (LPCWSTR)SendMessageW(hDlgCtrl, LB_GETITEMDATA, (WPARAM)0, (LPARAM)NULL);
848 if (pwszText && pwszText != (LPCWSTR)LB_ERR)
849 SetDlgItemTextW(hwndDlg, 14010, pwszText);
850
851 return TRUE;
852}
BOOL AddVersionString(HWND hwndDlg, LPCWSTR pwszName)
Definition: filedefext.cpp:887
BOOL SetVersionLabel(HWND hwndDlg, DWORD idCtrl, LPCWSTR pwszName)
Definition: filedefext.cpp:862
VS_FIXEDFILEINFO * GetFixedInfo()
Definition: filedefext.cpp:153
LPCWSTR GetLangName()
Definition: filedefext.cpp:165
#define swprintf
Definition: precomp.h:40
DWORD dwFileVersionLS
Definition: compat.h:903
DWORD dwFileVersionMS
Definition: compat.h:902
#define VS_FF_SPECIALBUILD
Definition: verrsrc.h:47
#define VS_FF_PRIVATEBUILD
Definition: verrsrc.h:45
#define LB_ERR
Definition: winuser.h:2435
#define LB_GETITEMDATA
Definition: winuser.h:2044
#define LB_SETCURSEL
Definition: winuser.h:2066

Referenced by VersionPageProc().

◆ InvokeCommand()

HRESULT WINAPI CFileDefExt::InvokeCommand ( LPCMINVOKECOMMANDINFO  lpici)
override

Implements IContextMenu.

Definition at line 1277 of file filedefext.cpp.

1278{
1280 return E_NOTIMPL;
1281}

◆ OnFolderCustApply()

BOOL CFileDefExt::OnFolderCustApply ( HWND  hwndDlg)

Definition at line 1146 of file filedefext.cpp.

1147{
1148 // build the desktop.ini file path
1151 PathAppendW(szIniFile, L"desktop.ini");
1152
1153 if (m_bFolderIconIsSet) // it is set!
1154 {
1155 DWORD attrs;
1156
1157 // change folder attributes (-S -R)
1161
1162 // change desktop.ini attributes (-S -H -R)
1166
1167 if (m_szFolderIconPath[0])
1168 {
1169 // write IconFile and IconIndex
1171
1172 WCHAR szInt[32];
1173 StringCchPrintfW(szInt, _countof(szInt), L"%d", m_nFolderIconIndex);
1175
1176 // flush!
1178 }
1179 else
1180 {
1181 // erase three values
1185
1186 // flush!
1188 }
1189
1190 // change desktop.ini attributes (+S +H)
1194
1195 // change folder attributes (+R)
1197 attrs |= FILE_ATTRIBUTE_READONLY;
1199
1200 // notify to the siblings
1201 PropSheet_QuerySiblings(GetParent(hwndDlg), 0, 0);
1202
1203 // done!
1205 }
1206
1207 return TRUE;
1208}
BOOL WINAPI WritePrivateProfileStringW(LPCWSTR section, LPCWSTR entry, LPCWSTR string, LPCWSTR filename)
Definition: profile.c:1453
#define FILE_ATTRIBUTE_SYSTEM
Definition: nt_native.h:704
#define PropSheet_QuerySiblings(d, w, l)
Definition: prsht.h:349

Referenced by FolderCustomizePageProc().

◆ OnFolderCustChangeIcon()

void CFileDefExt::OnFolderCustChangeIcon ( HWND  hwndDlg)

Definition at line 1114 of file filedefext.cpp.

1115{
1117 INT nIconIndex;
1118
1119 // m_szFolderIconPath, m_nFolderIconIndex --> szPath, nIconIndex
1120 if (m_szFolderIconPath[0])
1121 {
1123 nIconIndex = m_nFolderIconIndex;
1124 }
1125 else
1126 {
1127 szPath[0] = 0;
1128 nIconIndex = 0;
1129 }
1130
1131 // let the user choose the icon
1132 if (PickIconDlg(hwndDlg, szPath, _countof(szPath), &nIconIndex))
1133 {
1134 // changed
1136 PropSheet_Changed(GetParent(hwndDlg), hwndDlg);
1137
1138 // update
1140 m_nFolderIconIndex = nIconIndex;
1141 UpdateFolderIcon(hwndDlg);
1142 }
1143}
BOOL WINAPI PickIconDlg(HWND hWndOwner, LPWSTR lpstrFile, UINT nMaxFile, INT *lpdwIconIndex)
Definition: dialogs.cpp:362
LPCWSTR szPath
Definition: env.c:37

Referenced by FolderCustomizePageProc().

◆ OnFolderCustDestroy()

void CFileDefExt::OnFolderCustDestroy ( HWND  hwndDlg)

Definition at line 1044 of file filedefext.cpp.

1045{
1048
1049 /* Detach the object from dialog window */
1050 SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)0);
1051}

Referenced by FolderCustomizePageProc().

◆ QueryContextMenu()

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

Implements IContextMenu.

Definition at line 1270 of file filedefext.cpp.

1271{
1273 return E_NOTIMPL;
1274}

◆ ReplacePage()

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

Definition at line 1326 of file filedefext.cpp.

1327{
1329 return E_NOTIMPL;
1330}

◆ SetSite()

HRESULT WINAPI CFileDefExt::SetSite ( IUnknown punk)
override

Implements IObjectWithSite.

Definition at line 1333 of file filedefext.cpp.

1334{
1336 return E_NOTIMPL;
1337}

◆ SetVersionLabel()

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

Definition at line 862 of file filedefext.cpp.

863{
864 if (hwndDlg == NULL || pwszName == NULL)
865 return FALSE;
866
867 LPCWSTR pwszValue = m_VerInfo.GetString(pwszName);
868 if (pwszValue)
869 {
870 /* file description property */
871 TRACE("%s :: %s\n", debugstr_w(pwszName), debugstr_w(pwszValue));
872 SetDlgItemTextW(hwndDlg, idCtrl, pwszValue);
873 return TRUE;
874 }
875
876 return FALSE;
877}

Referenced by InitVersionPage().

◆ UpdateFolderIcon()

void CFileDefExt::UpdateFolderIcon ( HWND  hwndDlg)

Definition at line 1053 of file filedefext.cpp.

1054{
1055 // destroy icon if any
1056 if (m_hFolderIcon)
1057 {
1060 }
1061
1062 // create the icon
1063 if (m_szFolderIconPath[0] == 0 && m_nFolderIconIndex == 0)
1064 {
1065 // Windows ignores shell customization here and uses the default icon
1067 }
1068 else
1069 {
1071 }
1072
1073 // set icon
1075}
#define IDI_SHELL_FOLDER
Definition: treeview.c:21
#define IDC_FOLDERCUST_ICON
Definition: shresdef.h:534
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE hInstance, _In_ LPCWSTR lpIconName)
Definition: cursoricon.c:2161

Referenced by InitFolderCustomizePage(), and OnFolderCustChangeIcon().

◆ VersionPageProc()

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

Definition at line 916 of file filedefext.cpp.

917{
918 switch (uMsg)
919 {
920 case WM_INITDIALOG:
921 {
923
924 if (ppsp == NULL || !ppsp->lParam)
925 break;
926
927 TRACE("WM_INITDIALOG hwnd %p lParam %p ppsplParam %x\n", hwndDlg, lParam, ppsp->lParam);
928
929 CFileDefExt *pFileDefExt = reinterpret_cast<CFileDefExt *>(ppsp->lParam);
930 return pFileDefExt->InitVersionPage(hwndDlg);
931 }
932 case WM_COMMAND:
933 if (LOWORD(wParam) == 14009 && HIWORD(wParam) == LBN_SELCHANGE)
934 {
935 HWND hDlgCtrl = (HWND)lParam;
936
938 if (Index == LB_ERR)
939 break;
940
942 if (pwszData == NULL)
943 break;
944
945 CString str(pwszData);
946 str.Trim();
947
948 TRACE("hDlgCtrl %x string %s\n", hDlgCtrl, debugstr_w(str));
949 SetDlgItemTextW(hwndDlg, 14010, str);
950
951 return TRUE;
952 }
953 break;
954 case WM_DESTROY:
955 break;
957 return FALSE; // continue
958 default:
959 break;
960 }
961
962 return FALSE;
963}
BOOL InitVersionPage(HWND hwndDlg)
Definition: filedefext.cpp:799
HANDLE HWND
Definition: compat.h:19
const WCHAR * str
LONG_PTR LRESULT
Definition: windef.h:209
#define LBN_SELCHANGE
Definition: winuser.h:2078
#define LB_GETCURSEL
Definition: winuser.h:2042

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: