From 4a6da7f7c5bd5ec1399d48349d291673dfa5dc41 Mon Sep 17 00:00:00 2001 From: Stefan Markovic Date: Wed, 4 Sep 2024 09:45:44 +0200 Subject: [PATCH] [FileLocksmith] Fix triggering FileLocksmith unexpectedly --- .../FileLocksmithExt/ExplorerCommand.cpp | 73 ++++++++++--------- 1 file changed, 40 insertions(+), 33 deletions(-) diff --git a/src/modules/FileLocksmith/FileLocksmithExt/ExplorerCommand.cpp b/src/modules/FileLocksmith/FileLocksmithExt/ExplorerCommand.cpp index e0eee3d7819..bc4ab945ca1 100644 --- a/src/modules/FileLocksmith/FileLocksmithExt/ExplorerCommand.cpp +++ b/src/modules/FileLocksmith/FileLocksmithExt/ExplorerCommand.cpp @@ -166,51 +166,58 @@ IFACEMETHODIMP ExplorerCommand::QueryContextMenu(HMENU hmenu, UINT indexMenu, UI IFACEMETHODIMP ExplorerCommand::InvokeCommand(CMINVOKECOMMANDINFO* pici) { - Trace::Invoked(); - ipc::Writer writer; + HRESULT hr = E_FAIL; - if (HRESULT result = writer.start(); FAILED(result)) + if (FileLocksmithSettingsInstance().GetEnabled() && + pici && (IS_INTRESOURCE(pici->lpVerb)) && + (LOWORD(pici->lpVerb) == 0)) { - Trace::InvokedRet(result); - return result; - } + Trace::Invoked(); + ipc::Writer writer; - if (HRESULT result = LaunchUI(pici, &writer); FAILED(result)) - { - Trace::InvokedRet(result); - return result; - } + if (HRESULT result = writer.start(); FAILED(result)) + { + Trace::InvokedRet(result); + return result; + } - IShellItemArray* shell_item_array; - HRESULT result = SHCreateShellItemArrayFromDataObject(m_data_obj, __uuidof(IShellItemArray), reinterpret_cast(&shell_item_array)); - if (SUCCEEDED(result)) - { - DWORD num_items; - shell_item_array->GetCount(&num_items); - for (DWORD i = 0; i < num_items; i++) + if (HRESULT result = LaunchUI(pici, &writer); FAILED(result)) + { + Trace::InvokedRet(result); + return result; + } + + IShellItemArray* shell_item_array; + hr = SHCreateShellItemArrayFromDataObject(m_data_obj, __uuidof(IShellItemArray), reinterpret_cast(&shell_item_array)); + if (SUCCEEDED(hr)) { - IShellItem* item; - result = shell_item_array->GetItemAt(i, &item); - if (SUCCEEDED(result)) + DWORD num_items; + shell_item_array->GetCount(&num_items); + for (DWORD i = 0; i < num_items; i++) { - LPWSTR file_path; - result = item->GetDisplayName(SIGDN_FILESYSPATH, &file_path); - if (SUCCEEDED(result)) + IShellItem* item; + hr = shell_item_array->GetItemAt(i, &item); + if (SUCCEEDED(hr)) { - // TODO Aggregate items and send to UI - writer.add_path(file_path); - CoTaskMemFree(file_path); + LPWSTR file_path; + hr = item->GetDisplayName(SIGDN_FILESYSPATH, &file_path); + if (SUCCEEDED(hr)) + { + // TODO Aggregate items and send to UI + writer.add_path(file_path); + CoTaskMemFree(file_path); + } + + item->Release(); } - - item->Release(); } - } - shell_item_array->Release(); + shell_item_array->Release(); + } } - Trace::InvokedRet(S_OK); - return S_OK; + Trace::InvokedRet(hr); + return hr; } IFACEMETHODIMP ExplorerCommand::GetCommandString(UINT_PTR idCmd, UINT uType, UINT* pReserved, CHAR* pszName, UINT cchMax)