mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-09 04:37:30 +02:00
[File Locksmith] Add context menu icon (#24986)
* Add FLS icon * fix icon include * fix * final code fix
This commit is contained in:
@@ -7,6 +7,9 @@
|
|||||||
#include "Trace.h"
|
#include "Trace.h"
|
||||||
#include "Generated Files/resource.h"
|
#include "Generated Files/resource.h"
|
||||||
|
|
||||||
|
#include <common/themes/icon_helpers.h>
|
||||||
|
#include <common/utils/process_path.h>
|
||||||
|
|
||||||
// Implementations of inherited IUnknown methods
|
// Implementations of inherited IUnknown methods
|
||||||
|
|
||||||
IFACEMETHODIMP ExplorerCommand::QueryInterface(REFIID riid, void** ppv)
|
IFACEMETHODIMP ExplorerCommand::QueryInterface(REFIID riid, void** ppv)
|
||||||
@@ -46,9 +49,10 @@ IFACEMETHODIMP ExplorerCommand::GetTitle(IShellItemArray* psiItemArray, LPWSTR*
|
|||||||
|
|
||||||
IFACEMETHODIMP ExplorerCommand::GetIcon(IShellItemArray* psiItemArray, LPWSTR* ppszIcon)
|
IFACEMETHODIMP ExplorerCommand::GetIcon(IShellItemArray* psiItemArray, LPWSTR* ppszIcon)
|
||||||
{
|
{
|
||||||
// Path to the icon should be computed relative to the path of this module
|
std::wstring iconResourcePath = get_module_filename();
|
||||||
ppszIcon = NULL;
|
iconResourcePath += L",-";
|
||||||
return E_NOTIMPL;
|
iconResourcePath += std::to_wstring(IDI_FILELOCKSMITH);
|
||||||
|
return SHStrDup(iconResourcePath.c_str(), ppszIcon);
|
||||||
}
|
}
|
||||||
|
|
||||||
IFACEMETHODIMP ExplorerCommand::GetToolTip(IShellItemArray* psiItemArray, LPWSTR* ppszInfotip)
|
IFACEMETHODIMP ExplorerCommand::GetToolTip(IShellItemArray* psiItemArray, LPWSTR* ppszInfotip)
|
||||||
@@ -129,7 +133,18 @@ IFACEMETHODIMP ExplorerCommand::QueryContextMenu(HMENU hmenu, UINT indexMenu, UI
|
|||||||
|
|
||||||
mii.fState = MFS_ENABLED;
|
mii.fState = MFS_ENABLED;
|
||||||
|
|
||||||
// TODO icon from file
|
// icon from file
|
||||||
|
HICON hIcon = static_cast<HICON>(LoadImage(globals::instance, MAKEINTRESOURCE(IDI_FILELOCKSMITH), IMAGE_ICON, 16, 16, 0));
|
||||||
|
if (hIcon)
|
||||||
|
{
|
||||||
|
mii.fMask |= MIIM_BITMAP;
|
||||||
|
if (m_hbmpIcon == NULL)
|
||||||
|
{
|
||||||
|
m_hbmpIcon = CreateBitmapFromIcon(hIcon);
|
||||||
|
}
|
||||||
|
mii.hbmpItem = m_hbmpIcon;
|
||||||
|
DestroyIcon(hIcon);
|
||||||
|
}
|
||||||
|
|
||||||
if (!InsertMenuItem(hmenu, indexMenu, TRUE, &mii))
|
if (!InsertMenuItem(hmenu, indexMenu, TRUE, &mii))
|
||||||
{
|
{
|
||||||
@@ -226,30 +241,6 @@ ExplorerCommand::~ExplorerCommand()
|
|||||||
--globals::ref_count;
|
--globals::ref_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Implementation taken from src/common/utils
|
|
||||||
// TODO reference that function
|
|
||||||
inline std::wstring get_module_folderpath(HMODULE mod = nullptr, const bool removeFilename = true)
|
|
||||||
{
|
|
||||||
wchar_t buffer[MAX_PATH + 1];
|
|
||||||
DWORD actual_length = GetModuleFileNameW(mod, buffer, MAX_PATH + 1);
|
|
||||||
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
|
|
||||||
{
|
|
||||||
const DWORD long_path_length = 0xFFFF; // should be always enough
|
|
||||||
std::wstring long_filename(long_path_length, L'\0');
|
|
||||||
actual_length = GetModuleFileNameW(mod, long_filename.data(), long_path_length);
|
|
||||||
PathRemoveFileSpecW(long_filename.data());
|
|
||||||
long_filename.resize(std::wcslen(long_filename.data()));
|
|
||||||
long_filename.shrink_to_fit();
|
|
||||||
return long_filename;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (removeFilename)
|
|
||||||
{
|
|
||||||
PathRemoveFileSpecW(buffer);
|
|
||||||
}
|
|
||||||
return { buffer, static_cast<UINT>(lstrlenW(buffer)) };
|
|
||||||
}
|
|
||||||
|
|
||||||
HRESULT ExplorerCommand::LaunchUI(CMINVOKECOMMANDINFO* pici, ipc::Writer* writer)
|
HRESULT ExplorerCommand::LaunchUI(CMINVOKECOMMANDINFO* pici, ipc::Writer* writer)
|
||||||
{
|
{
|
||||||
// Compute exe path
|
// Compute exe path
|
||||||
|
|||||||
@@ -42,6 +42,8 @@ public:
|
|||||||
~ExplorerCommand();
|
~ExplorerCommand();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
HBITMAP m_hbmpIcon = nullptr;
|
||||||
|
|
||||||
// Helpers
|
// Helpers
|
||||||
HRESULT LaunchUI(CMINVOKECOMMANDINFO* pici, ipc::Writer* writer);
|
HRESULT LaunchUI(CMINVOKECOMMANDINFO* pici, ipc::Writer* writer);
|
||||||
|
|
||||||
|
|||||||
@@ -48,3 +48,10 @@ BEGIN
|
|||||||
VALUE "Translation", 0x409, 1200
|
VALUE "Translation", 0x409, 1200
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
// Non-localizable
|
||||||
|
//////////////////////////////
|
||||||
|
|
||||||
|
// Icon with lowest ID value placed first to ensure application icon
|
||||||
|
// remains consistent on all systems.
|
||||||
|
IDI_FILELOCKSMITH ICON "..\\FileLocksmithUI\\Assets\\Icon.ico"
|
||||||
@@ -280,6 +280,9 @@
|
|||||||
<ProjectReference Include="..\..\..\common\SettingsAPI\SettingsAPI.vcxproj">
|
<ProjectReference Include="..\..\..\common\SettingsAPI\SettingsAPI.vcxproj">
|
||||||
<Project>{6955446d-23f7-4023-9bb3-8657f904af99}</Project>
|
<Project>{6955446d-23f7-4023-9bb3-8657f904af99}</Project>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\..\..\common\Themes\Themes.vcxproj">
|
||||||
|
<Project>{98537082-0fdb-40de-abd8-0dc5a4269bab}</Project>
|
||||||
|
</ProjectReference>
|
||||||
<ProjectReference Include="..\..\..\common\version\version.vcxproj">
|
<ProjectReference Include="..\..\..\common\version\version.vcxproj">
|
||||||
<Project>{cc6e41ac-8174-4e8a-8d22-85dd7f4851df}</Project>
|
<Project>{cc6e41ac-8174-4e8a-8d22-85dd7f4851df}</Project>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
#define FILE_DESCRIPTION "PowerToys File Locksmith Static Library"
|
#define FILE_DESCRIPTION "PowerToys File Locksmith Static Library"
|
||||||
#define INTERNAL_NAME "PowerToys.FileLocksmithLib.lib"
|
#define INTERNAL_NAME "PowerToys.FileLocksmithLib.lib"
|
||||||
#define ORIGINAL_FILENAME "PowerToys.FileLocksmithLib.lib"
|
#define ORIGINAL_FILENAME "PowerToys.FileLocksmithLib.lib"
|
||||||
|
#define IDI_FILELOCKSMITH 1001
|
||||||
|
|
||||||
// Non-localizable
|
// Non-localizable
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
|
|||||||
Reference in New Issue
Block a user