From 937b722ad2264ba804f647896472f1bbe15eba75 Mon Sep 17 00:00:00 2001 From: cjee21 <77721854+cjee21@users.noreply.github.com> Date: Wed, 15 Jan 2025 12:49:16 +0800 Subject: [PATCH] ShellExt: Option for separate instance (VCL) --- Source/GUI/VCL/GUI_Preferences.cpp | 31 ++++++++++++++++++++++++++++++ Source/GUI/VCL/GUI_Preferences.dfm | 12 +++++++++++- Source/GUI/VCL/GUI_Preferences.h | 1 + 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/Source/GUI/VCL/GUI_Preferences.cpp b/Source/GUI/VCL/GUI_Preferences.cpp index a2c2cdbca..a44898258 100644 --- a/Source/GUI/VCL/GUI_Preferences.cpp +++ b/Source/GUI/VCL/GUI_Preferences.cpp @@ -343,6 +343,18 @@ void __fastcall TPreferencesF::Language_EditClick(TObject *Sender) void __fastcall TPreferencesF::OKClick(TObject *Sender) { Prefs->Config.Save(); + if (CB_InscrireShell_SeparateInstance->Visible) { + TRegistry* Reg = new TRegistry(KEY_WRITE); + try { + if (Reg->OpenKey(__T("Software\\MediaArea\\MediaInfo"), true)) { + if (CB_InscrireShell_SeparateInstance->Checked) + Reg->WriteInteger("ShellExtension_SeparateInstance", 1); + else + Reg->DeleteValue("ShellExtension_SeparateInstance"); + } + } catch (...) {} + delete Reg; + } } //--------------------------------------------------------------------------- @@ -691,6 +703,25 @@ void __fastcall TPreferencesF::GUI_Configure() Tree->FullExpand(); Page->ActivePage=Setup; + //Enable separate instance option if modern shell extension is installed + TRegistry* Reg = new TRegistry; + try { + Reg->RootKey = HKEY_CLASSES_ROOT; + if (Reg->OpenKeyReadOnly(__T("PackagedCom\\ClassIndex\\{20669675-B281-4C4F-94FB-CB6FD3995545}"))) { + CB_InscrireShell_SeparateInstance->Visible=true; + Reg->RootKey = HKEY_CURRENT_USER; + if (Reg->OpenKeyReadOnly(__T("Software\\MediaArea\\MediaInfo"))) { + if (Reg->ValueExists("ShellExtension_SeparateInstance")) + CB_InscrireShell_SeparateInstance->Checked=Reg->ReadInteger("ShellExtension_SeparateInstance"); + } + } + } catch (...) {} + delete Reg; + + //Move InfoTip option up to prevent blank space if there is a space + if (!CB_InscrireShell_SeparateInstance->Visible) + CB_InfoTip->Top=CB_InscrireShell_Folder->Top+CB_InscrireShell_Folder->Height*0.9; + //Translation //Title Caption=Prefs->Translate(__T("Preferences")).c_str(); diff --git a/Source/GUI/VCL/GUI_Preferences.dfm b/Source/GUI/VCL/GUI_Preferences.dfm index 7312fc1bf..457ec29f9 100644 --- a/Source/GUI/VCL/GUI_Preferences.dfm +++ b/Source/GUI/VCL/GUI_Preferences.dfm @@ -145,7 +145,7 @@ object PreferencesF: TPreferencesF end object CB_InfoTip: TCheckBox Left = 2 - Top = 104 + Top = 120 Width = 655 Height = 18 Caption = @@ -176,6 +176,16 @@ object PreferencesF: TPreferencesF TabOrder = 4 OnClick = CB_InscrireShell_FolderClick end + object CB_InscrireShell_SeparateInstance: TCheckBox + Left = 18 + Top = 104 + Width = 639 + Height = 17 + Caption = 'Open each item in a separate instance' + TabOrder = 8 + Visible = False + OnClick = CB_InscrireShell_FolderClick + end end object Setup_Advanced: TTabSheet Caption = 'Advanced' diff --git a/Source/GUI/VCL/GUI_Preferences.h b/Source/GUI/VCL/GUI_Preferences.h index a78cb2451..a8f1eb764 100644 --- a/Source/GUI/VCL/GUI_Preferences.h +++ b/Source/GUI/VCL/GUI_Preferences.h @@ -75,6 +75,7 @@ class TPreferencesF : public TForm TCheckBox *CB_InscrireShell; TCheckBox *CB_InscrireShell_Folder; TCheckBox *Advanced_LegacyStreamDisplay; + TCheckBox *CB_InscrireShell_SeparateInstance; void __fastcall General_Language_SelChange(TObject *Sender); void __fastcall General_Output_SelChange(TObject *Sender); void __fastcall Custom_EditClick(TObject *Sender);