Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add version information to RC file and display in About dialog box #89

Merged
merged 6 commits into from
Apr 12, 2018
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ artifacts/
*.ilk
*.meta
*.obj
*.o
*.pch
*.pdb
*.pgc
Expand Down
62 changes: 62 additions & 0 deletions src/Makefile.mingw
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
SRCS = \
dbg.c \
lfn.c \
lfnmisc.c \
numfmt.c \
suggest.c \
tbar.c \
treectl.c \
wfassoc.c \
wfchgnot.c \
wfcomman.c \
wfcopy.c \
wfdir.c \
wfdirrd.c \
wfdirsrc.c \
wfdlgs.c \
wfdlgs2.c \
wfdlgs3.c \
wfdos.c \
wfdrives.c \
wfdrop.c \
wfext.c \
wffile.c \
wfinfo.c \
wfinit.c \
wfmem.c \
wfprint.c \
wfsearch.c \
wftree.c \
wfutil.c \
winfile.c \
wnetcaps.c

OBJS = $(subst .c,.o,$(SRCS)) wfgoto.o res.o

CFLAGS = -DUNICODE -DFASTMOVE
LIBS = -mwindows -lgdi32 -lcomctl32 -lole32 -lshlwapi -loleaut32
TARGET = winfile
ifeq ($(OS),Windows_NT)
TARGET := $(TARGET).exe
endif

.SUFFIXES: .c .cpp .o .res

all : $(TARGET)

$(TARGET) : $(OBJS)
g++ -o $@ $(OBJS) $(LIBS)

.c.o :
gcc -c $(CFLAGS) -I. $< -o $@

.cpp.o :
g++ -c $(CFLAGS) -I. $< -o $@

res.o : res.rc
windres -I. -i res.rc -o res.o

clean :
rm -f $(OBJS) $(TARGET)


8 changes: 4 additions & 4 deletions src/Winfile.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@
<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Link>
<AdditionalDependencies>ole32.lib;shell32.lib;shlwapi.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>ole32.lib;shell32.lib;shlwapi.lib;comctl32.lib;mincore.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>
</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
Expand All @@ -134,7 +134,7 @@
<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Link>
<AdditionalDependencies>ole32.lib;shell32.lib;shlwapi.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>ole32.lib;shell32.lib;shlwapi.lib;comctl32.lib;mincore.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>
</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
Expand Down Expand Up @@ -167,7 +167,7 @@
<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Link>
<AdditionalDependencies>ole32.lib;shell32.lib;shlwapi.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>ole32.lib;shell32.lib;shlwapi.lib;comctl32.lib;mincore.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<TargetMachine>MachineX64</TargetMachine>
Expand All @@ -192,7 +192,7 @@
<AdditionalIncludeDirectories>.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ResourceCompile>
<Link>
<AdditionalDependencies>ole32.lib;shell32.lib;shlwapi.lib;comctl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>ole32.lib;shell32.lib;shlwapi.lib;comctl32.lib;mincore.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Windows</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
Expand Down
52 changes: 44 additions & 8 deletions src/res.rc
Original file line number Diff line number Diff line change
Expand Up @@ -684,14 +684,50 @@ END

#include "winfile.dlg"

#include <ntverp.h>

#define VER_FILETYPE VFT_APP
#define VER_FILESUBTYPE VFT2_UNKNOWN
// Define version information
#define VER_FILEDESCRIPTION_STR "File Manager"
#define VER_INTERNALNAME_STR "fileman\0"
#define VER_ORIGINALFILENAME_STR "WINFILE.EXE"

#include "common.ver"
#define VER_ORIGINALFILENAME_STR "WINFILE.EXE"
#define VER_COMPANYNAME_STR "Microsoft Corporation"
#define VER_PRODUCTNAME_STR "File Manager"
#define VER_LEGALCOPYRIGHT_STR "Copyright (c) Microsoft Corporation. All rights reserved."

#define VER_FILEVERSION 10,0,0,0
#define VER_FILEVERSION_STR "10.0.0.0\0"
#define VER_PRODUCTVERSION 10,0,0,0
#define VER_PRODUCTVERSION_STR "10.0.0.0\0"

#ifndef DEBUG
#define VER_DEBUG 0
#else
#define VER_DEBUG VS_FF_DEBUG
#endif


VS_VERSION_INFO VERSIONINFO
FILEVERSION VER_FILEVERSION
PRODUCTVERSION VER_PRODUCTVERSION
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEFLAGS VER_DEBUG
FILEOS VOS__WINDOWS32
FILETYPE VFT_APP
FILESUBTYPE VFT2_UNKNOWN
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904B0"
BEGIN
VALUE "CompanyName", VER_COMPANYNAME_STR
VALUE "FileDescription", VER_FILEDESCRIPTION_STR
VALUE "FileVersion", VER_FILEVERSION_STR
VALUE "InternalName", VER_INTERNALNAME_STR
VALUE "OriginalFilename", VER_ORIGINALFILENAME_STR
VALUE "ProductName", VER_PRODUCTNAME_STR
VALUE "ProductVersion", VER_PRODUCTVERSION_STR
VALUE "LegalCopyright", VER_LEGALCOPYRIGHT_STR
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 1033, 1200
END
END
4 changes: 3 additions & 1 deletion src/wfcomman.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@
#include <commctrl.h>
#include <ole2.h>

#ifndef HELP_PARTIALKEY
#define HELP_PARTIALKEY 0x0105L // call the search engine in winhelp
#endif

#define VIEW_NOCHANGE VIEW_PLUSES

Expand Down Expand Up @@ -2330,4 +2332,4 @@ VOID
UpdateMoveStatus(DWORD dwEffect)
{
SendMessage(hwndStatus, SB_SETTEXT, 2, (LPARAM)(dwEffect == DROPEFFECT_MOVE ? TEXT("MOVE PENDING") : NULL));
}
}
81 changes: 78 additions & 3 deletions src/wfdlgs3.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

#define LABEL_NTFS_MAX 32
#define LABEL_FAT_MAX 11
#define CCH_VERSION 40

VOID FormatDrive( IN PVOID ThreadParameter );
VOID CopyDiskette( IN PVOID ThreadParameter );
Expand All @@ -26,6 +27,8 @@ VOID FormatEnd(VOID);
VOID CancelDlgQuit(VOID);
VOID LockFormatDisk(INT iDrive1, INT iDrive2, DWORD dwMessage, DWORD dwCommand, BOOL bLock);

BOOL GetProductVersion(WORD * pwMajor, WORD * pwMinor, WORD * pwBuild, WORD * pwRevision);

DWORD ulTotalSpace, ulSpaceAvail;

typedef enum {
Expand Down Expand Up @@ -733,12 +736,24 @@ FormatDlgProc(register HWND hDlg, UINT wMsg, WPARAM wParam, LPARAM lParam)
INT_PTR
AboutDlgProc(register HWND hDlg, UINT wMsg, WPARAM wParam, LPARAM lParam)
{
WORD wMajorVersion = 0;
WORD wMinorVersion = 0;
WORD wBuildNumber = 0;
WORD wRevisionNumber = 0;
WCHAR wszVersion[CCH_VERSION] = { 0 };

switch (wMsg)
{
case WM_INITDIALOG:
SetDlgItemText(hDlg, IDD_VERTEXT, TEXT("Version 10.0 (build #)"));
break;

if (GetProductVersion(&wMajorVersion, &wMinorVersion, &wBuildNumber, &wRevisionNumber))
{
if (SUCCEEDED(StringCchPrintf(wszVersion, CCH_VERSION, L"Version %d.%d.%d.%d",
(int)wMajorVersion, (int)wMinorVersion, (int)wBuildNumber, (int)wRevisionNumber)))
{
SetDlgItemText(hDlg, IDD_VERTEXT, wszVersion);
}
}
return TRUE;
case WM_COMMAND:
switch (GET_WM_COMMAND_ID(wParam, lParam))
{
Expand Down Expand Up @@ -1699,3 +1714,63 @@ DestroyCancelWindow()
}
CancelInfo.hCancelDlg = NULL;
}

//
// GetProductVersion
// Gets the product version values for the current module
//
// Parameters:
// pwMajor - [OUT] A pointer to the major version number
// pwMinor - [OUT] A pointer to the minor version number
// pwBuild - [OUT] A pointer to the build number
// pwRevision - [OUT] A pointer to the revision number
//
// Returns TRUE if successful
//
BOOL GetProductVersion(WORD * pwMajor, WORD * pwMinor, WORD * pwBuild, WORD * pwRevision)
{
BOOL success = FALSE;
WCHAR wszCurrentModulePath[MAX_PATH];
DWORD cchPath;
DWORD cbVerInfo;
LPVOID pFileVerInfo;
UINT uLen;
VS_FIXEDFILEINFO * pFixedFileInfo;

cchPath = GetModuleFileName(NULL, wszCurrentModulePath, MAX_PATH);

if (cchPath && GetLastError() != ERROR_INSUFFICIENT_BUFFER)
{
cbVerInfo = GetFileVersionInfoSize(wszCurrentModulePath, NULL);

if (cbVerInfo)
{
pFileVerInfo = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, cbVerInfo);

if (pFileVerInfo)
{
if (GetFileVersionInfo(wszCurrentModulePath, 0, cbVerInfo, pFileVerInfo))
{
// Get the pointer to the VS_FIXEDFILEINFO structure
if (VerQueryValue(pFileVerInfo, L"\\", (LPVOID *)&pFixedFileInfo, &uLen))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since you are using VerQueryValue (not VerQueryValueW), is there a reason why you use L"\\", rather than TEXT("\\")?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point. I was assuming UNICODE would be set at build time, but I agree that using TEXT would be more consistent. I'll make that change and also use TCHAR rather than WCHAR.

{
if (pFixedFileInfo && uLen)
{
*pwMajor = HIWORD(pFixedFileInfo->dwProductVersionMS);
*pwMinor = LOWORD(pFixedFileInfo->dwProductVersionMS);
*pwBuild = HIWORD(pFixedFileInfo->dwProductVersionLS);
*pwRevision = LOWORD(pFixedFileInfo->dwProductVersionLS);

success = TRUE;
}
}
}

HeapFree(GetProcessHeap(), 0, pFileVerInfo);
}
}

}

return success;
}
2 changes: 2 additions & 0 deletions src/wfdrop.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@
#include <ole2.h>
#include <shlobj.h>

#ifndef GUID_DEFINED
DEFINE_OLEGUID(IID_IUnknown, 0x00000000L, 0, 0);
DEFINE_OLEGUID(IID_IDropSource, 0x00000121, 0, 0);
DEFINE_OLEGUID(IID_IDropTarget, 0x00000122, 0, 0);
#endif

HRESULT CreateDropTarget(HWND hwnd, WF_IDropTarget **ppDropTarget);
void DropData(WF_IDropTarget *This, IDataObject *pDataObject, DWORD dwEffect);
Expand Down
1 change: 1 addition & 0 deletions src/winfile.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#include "fmifs.h"
#include <shellapi.h>
#include <shlwapi.h>
#include <strsafe.h>
#include "suggest.h"
#include "numfmt.h"

Expand Down