From 81d09195a27a38edc09d12c98890d1acbf335dd5 Mon Sep 17 00:00:00 2001 From: Christopher Gurnee Date: Mon, 5 Sep 2016 19:24:46 -0400 Subject: [PATCH] add icon and separator to explorer context menu --- CHashCheck.cpp | 22 ++++++++++++++++++++-- CHashCheck.hpp | 5 +++-- HashCheck.bmp | Bin 0 -> 1078 bytes HashCheck.rc | 1 + HashCheckResources.h | 9 +++++---- appveyor.yml | 2 +- installer/HashCheck.nsi | 8 ++++---- version.h | 4 ++-- 8 files changed, 36 insertions(+), 15 deletions(-) create mode 100644 HashCheck.bmp diff --git a/CHashCheck.cpp b/CHashCheck.cpp index a28620e..00a2b1d 100644 --- a/CHashCheck.cpp +++ b/CHashCheck.cpp @@ -10,6 +10,14 @@ #include "HashCheckUI.h" #include "HashCheckOptions.h" +CHashCheck::CHashCheck( ) +{ + InterlockedIncrement(&g_cRefThisDll); + m_cRef = 1; + m_hList = NULL; + m_hMenuBitmap = (HBITMAP)LoadImage(g_hModThisDll, MAKEINTRESOURCE(IDI_MENUBITMAP), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE | LR_CREATEDIBSECTION); +} + STDMETHODIMP CHashCheck::QueryInterface( REFIID riid, LPVOID *ppv ) { if (IsEqualIID(riid, IID_IUnknown)) @@ -105,10 +113,20 @@ STDMETHODIMP CHashCheck::QueryContextMenu( HMENU hmenu, UINT indexMenu, UINT idC TCHAR szMenuText[MAX_STRINGMSG]; LoadString(g_hModThisDll, IDS_HS_MENUTEXT, szMenuText, countof(szMenuText)); - if (InsertMenu(hmenu, indexMenu, MF_STRING | MF_BYPOSITION, idCmdFirst, szMenuText)) + MENUITEMINFO mii; + mii.cbSize = sizeof(mii); + mii.fMask = MIIM_FTYPE | MIIM_ID | MIIM_STRING | MIIM_BITMAP; + mii.fType = MFT_STRING; + mii.wID = idCmdFirst; + mii.dwTypeData = szMenuText; + mii.hbmpItem = m_hMenuBitmap; + if (! InsertMenuItem(hmenu, indexMenu, TRUE, &mii)) + return(MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_NULL, 0)); + + if (! InsertMenu(hmenu, indexMenu + 1, MF_SEPARATOR | MF_BYPOSITION, 0, NULL)) return(MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_NULL, 1)); - return(MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_NULL, 0)); + return(MAKE_HRESULT(SEVERITY_SUCCESS, FACILITY_NULL, 2)); } STDMETHODIMP CHashCheck::InvokeCommand( LPCMINVOKECOMMANDINFO pici ) diff --git a/CHashCheck.hpp b/CHashCheck.hpp index 02d475a..6d26606 100644 --- a/CHashCheck.hpp +++ b/CHashCheck.hpp @@ -16,10 +16,11 @@ class CHashCheck : public IShellExtInit, IContextMenu, IShellPropSheetExt, IDrop protected: CREF m_cRef; HSIMPLELIST m_hList; + HBITMAP m_hMenuBitmap; public: - CHashCheck( ) { InterlockedIncrement(&g_cRefThisDll); m_cRef = 1; m_hList = NULL; } - ~CHashCheck( ) { InterlockedDecrement(&g_cRefThisDll); SLRelease(m_hList); } + CHashCheck( ); + ~CHashCheck() { InterlockedDecrement(&g_cRefThisDll); SLRelease(m_hList); DeleteObject(m_hMenuBitmap); } // IUnknown members STDMETHODIMP QueryInterface( REFIID, LPVOID * ); diff --git a/HashCheck.bmp b/HashCheck.bmp new file mode 100644 index 0000000000000000000000000000000000000000..fbd6da9f7b043220537371245db8819e5042b207 GIT binary patch literal 1078 zcma))T}V@57{^c0RY7#uodps_H$l*Df-Zv5g%v@!-6cXPQHcd6%!@wA0_#c$is-|Q ztu~usmbye2(=b0WE7v}npPM?`rkh*)`1PDk*RXTp!}%YcbKdv&KL7W5-(x3rTa|q1 z6J(5YtxN}EAg&)Otxn$L%=1oeSt1|g$sjA}Ph3ZYI@yuxiQtKQn(2DZ7 z<~+m$5dIFKF$jKwrC!Oq!QTbm4w!5Mw;3(|>E#-TdSQ9KD5G(Lru%O2_572^uF1F7 zU4)1Srr!|w;-IqDi?SP(133me)%vaQ%?3Z)GW~ha1fcBRo9IgmsvyA5VVYoesQU))cNIwGN!EMvzJ8oWsL`dd1 zNcp8_^PMo&No4XJ`}8Z69gVX%YM1fXntb=&dPs(gy({gb)%-c{q0S(^47O|XeGeKS z6_NG(;a8tX&d%o$b&;Fx;8bM@r5r{+eAMIzS{kLk@FnM0nh$k5xzgY#INqbl4?nsg z^9ms0%}j*!h%zi|N86}kdr4P%0eb3>n+3TZ&+CrUvs1ue8lEG z>-<%@yT$wOHZ=*qA+l+?6A9T@lx!l(`#ab1wdipfj^~6uBHF%w|NYi`8{oB1)lW7_ zCK=E3F>A$tth&Zbdo!tV8;LP1@!?m*hAcz|%`CZ0g!+xl_CC+^GFA0ltgEtr0jTIx A%K!iX literal 0 HcmV?d00001 diff --git a/HashCheck.rc b/HashCheck.rc index 2a88b1c..f61eb08 100644 --- a/HashCheck.rc +++ b/HashCheck.rc @@ -144,5 +144,6 @@ IDD_OPTIONS DIALOGEX 10, 10, 200, 264 IDR_RT_MANIFEST RT_MANIFEST "HashCheck.manifest" IDI_FILETYPE ICON "HashCheck.ico" +IDI_MENUBITMAP BITMAP "HashCheck.bmp" #include "HashCheckTranslations.rc" diff --git a/HashCheckResources.h b/HashCheckResources.h index baf321f..f662a28 100644 --- a/HashCheckResources.h +++ b/HashCheckResources.h @@ -3,12 +3,13 @@ #define IDR_RT_MANIFEST ISOLATIONAWARE_MANIFEST_RESOURCE_ID #define IDI_FILETYPE 100 +#define IDI_MENUBITMAP 101 // Controls common to multiple dialogs -#define IDC_PROG_TOTAL 101 -#define IDC_PROG_FILE 102 -#define IDC_PAUSE 103 -#define IDC_STOP 104 +#define IDC_PROG_TOTAL 102 +#define IDC_PROG_FILE 103 +#define IDC_PAUSE 104 +#define IDC_STOP 105 #define IDC_OK IDOK #define IDC_CANCEL IDCANCEL diff --git a/appveyor.yml b/appveyor.yml index 8454939..fb54134 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,4 @@ -version: 2.4.0.42-beta +version: 2.4.0.46-beta image: Visual Studio 2015 diff --git a/installer/HashCheck.nsi b/installer/HashCheck.nsi index a414ec3..082f994 100644 --- a/installer/HashCheck.nsi +++ b/installer/HashCheck.nsi @@ -6,7 +6,7 @@ Unicode true Name "HashCheck" -OutFile "HashCheckSetup-v2.4.0.42-beta.exe" +OutFile "HashCheckSetup-v2.4.0.46-beta.exe" RequestExecutionLevel admin ManifestSupportedOS all @@ -53,13 +53,13 @@ FunctionEnd !insertmacro MUI_LANGUAGE "Ukrainian" !insertmacro MUI_LANGUAGE "Catalan" -VIProductVersion "2.4.0.42-beta" +VIProductVersion "2.4.0.46-beta" VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "HashCheck Shell Extension" -VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductVersion" "2.4.0.42-beta" +VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductVersion" "2.4.0.46-beta" VIAddVersionKey /LANG=${LANG_ENGLISH} "Comments" "Installer distributed from https://github.com/gurnec/HashCheck/releases" VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "Copyright © 2008-2016 Kai Liu, Christopher Gurnee, Tim Schlueter, et al. All rights reserved." VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "Installer (x86/x64) from https://github.com/gurnec/HashCheck/releases" -VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "2.4.0.42-beta" +VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "2.4.0.46-beta" ; With solid compression, files that are required before the ; actual installation should be stored first in the data block, diff --git a/version.h b/version.h index 27f7cf0..91cbc6d 100644 --- a/version.h +++ b/version.h @@ -12,10 +12,10 @@ #define HASHCHECK_NAME_STR "HashCheck Shell Extension" // Full version: MUST be in the form of major,minor,revision,build -#define HASHCHECK_VERSION_FULL 2,4,0,42 +#define HASHCHECK_VERSION_FULL 2,4,0,46 // String version: May be any suitable string -#define HASHCHECK_VERSION_STR "2.4.0.42-beta" +#define HASHCHECK_VERSION_STR "2.4.0.46-beta" #ifdef _USRDLL // PE version: MUST be in the form of major.minor