From 6c9db6c055167813982722636943d4990db12900 Mon Sep 17 00:00:00 2001 From: cjee21 <77721854+cjee21@users.noreply.github.com> Date: Sun, 12 Jan 2025 22:16:07 +0800 Subject: [PATCH] ShellExt: Option for separate instance (VCL) --- Source/GUI/VCL/GUI_Preferences.cpp | 31 ++++++++++++++++++++++++ Source/GUI/VCL/GUI_Preferences.dfm | 39 +++++++++++++++++++----------- Source/GUI/VCL/GUI_Preferences.h | 1 + 3 files changed, 57 insertions(+), 14 deletions(-) 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..b763a6da1 100644 --- a/Source/GUI/VCL/GUI_Preferences.dfm +++ b/Source/GUI/VCL/GUI_Preferences.dfm @@ -38,19 +38,20 @@ object PreferencesF: TPreferencesF TabOrder = 1 OnChange = TreeChange Items.NodeData = { - 0302000000280000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF000000 - 00010000000105530065007400750070002E0000000000000000000000FFFFFF - FFFFFFFFFFFFFFFFFF0000000000000000010841006400760061006E00630065 - 006400300000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF0000000005 - 000000010943007500730074006F006D0069007A006500280000000000000000 - 000000FFFFFFFFFFFFFFFFFFFFFFFF0000000000000000010553006800650065 - 007400340000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF0000000000 - 000000010B540072006500650020002600200054006500780074003400000000 - 00000000000000FFFFFFFFFFFFFFFFFFFFFFFF0000000000000000010B430075 - 00730074006F006D0020007400650078007400280000000000000000000000FF - FFFFFFFFFFFFFFFFFFFFFF00000000000000000105470072006100700068002E - 0000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000001 - 084C0061006E0067007500610067006500} + 070200000009540054007200650065004E006F00640065002900000000000000 + 00000000FFFFFFFFFFFFFFFFFFFFFFFF00000000000100000001055300650074 + 007500700000002F0000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF00 + 0000000000000000010841006400760061006E00630065006400000031000000 + 0000000000000000FFFFFFFFFFFFFFFFFFFFFFFF000000000005000000010943 + 007500730074006F006D0069007A0065000000290000000000000000000000FF + FFFFFFFFFFFFFFFFFFFFFF000000000000000000010553006800650065007400 + 0000350000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000 + 000000010B540072006500650020002600200054006500780074000000350000 + 000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000010B + 43007500730074006F006D002000740065007800740000002900000000000000 + 00000000FFFFFFFFFFFFFFFFFFFFFFFF00000000000000000001054700720061 + 007000680000002F0000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF00 + 000000000000000001084C0061006E0067007500610067006500} end object Cancel: TButton Left = 593 @@ -145,7 +146,7 @@ object PreferencesF: TPreferencesF end object CB_InfoTip: TCheckBox Left = 2 - Top = 104 + Top = 120 Width = 655 Height = 18 Caption = @@ -176,6 +177,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);