From 0e74b2ee6b5ba1998f1c00517ce2ccbf7db3bc31 Mon Sep 17 00:00:00 2001 From: seraphima Date: Mon, 17 Jun 2024 19:57:09 +0200 Subject: [PATCH 1/6] version --- src/modules/Projects/Assets/Projects.ico | Bin 0 -> 6142 bytes .../ProjectsLauncher/ProjectLauncherResource.rc | Bin 0 -> 2750 bytes .../ProjectsLauncher/ProjectsLauncher.vcxproj | 4 ++++ .../ProjectsLauncher.vcxproj.filters | 10 +++++++++- src/modules/Projects/ProjectsLauncher/resource.h | 13 +++++++++++++ .../ProjectsSnapshotTool/ProjectsSnapshotTool.rc | Bin 0 -> 2750 bytes .../ProjectsSnapshotTool.vcxproj | 4 ++++ .../ProjectsSnapshotTool.vcxproj.filters | 10 +++++++++- .../Projects/ProjectsSnapshotTool/resource.h | 13 +++++++++++++ 9 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 src/modules/Projects/Assets/Projects.ico create mode 100644 src/modules/Projects/ProjectsLauncher/ProjectLauncherResource.rc create mode 100644 src/modules/Projects/ProjectsLauncher/resource.h create mode 100644 src/modules/Projects/ProjectsSnapshotTool/ProjectsSnapshotTool.rc create mode 100644 src/modules/Projects/ProjectsSnapshotTool/resource.h diff --git a/src/modules/Projects/Assets/Projects.ico b/src/modules/Projects/Assets/Projects.ico new file mode 100644 index 0000000000000000000000000000000000000000..ba3cb543c7bf2f5f2893ceb6adc5268e8d84ccf5 GIT binary patch literal 6142 zcmeHKOLJ636z-G@b}V%>-F>eM$|bH`@(1`ON&%6GSUw`41i=W&Oo9m%@{oaGfDrOx zLI^%Uc|Xc3wG2vPi99M8f|vv*^ZA{=cQR90Gc}W%2a8Oq=cIbNZ-4!rbG~z~QZ@Wr zvPALQQ+Hlc>P4m0D;%6s%Q<9TKHK@jw~K?}CKkRH7EYjAAG3om1A{&u65p=1 zmB-b*(%@pN!T3?~Gw1=Qec%i+4RZ|nn5+`6#1@NxPFN&Q63-B^oDw|YI8{Bq&P6S; z2v5Y~ILg8m`mw#P@_zh!o5j-s;*xlJmah=kjyE&7npZ|DlACEip4b=58_eoBKa~JHyGGr zu=S17@>eXboBN21dXi#1rkJ}^{XYKg@*IEXqSWBErKwxR;u;BYxmcXbUms6TdU!w$ z{2^8v-sXeL>2F%+vTQ2hVU%%KiaMVc7j;$iKAM$}H}?mAoYP;yCEDk-*u(9P3g8O$ zD?1;>kGc4gxEo_$l!`B>tJ(LK`@7*`s@I}5OIOF3e;A?;3qNU|#LE5><9b%VB-fq{ z_{8Ml&S8Vb6&VhG+-2~%$6~6FJx3zMldcmb#P!W~i&^H9>m!D#`F!?dw`D(QU2oV@ zo57U!PuE8VH+EXwKf)T8-s`Y=_~YRJ*QfUtVFKEDXZobdcV%~2G_~o_z^>$$bX+g zpLu+v#)Xy$cGl(A!;TL$`ZpWI-^;yb?>m~B8o_yvLeHMhy2cd-o$Dm>Q8xFc(Azq~=fyT)k#K-lNa1wP}1+UtWGbeO;rs zLE{SJ>^8X(od|L?#3Zxpby-wpa`_Yko29Ky=v#i5ljdVVgcciTMq?vw; z-@dd+Y&B@9txT-N-;LmGlfh44Sd1OAjuX*$853Q;)6Oe=_dQf5-xcEP_P5xNenPEf z++AjF%Kx#|mEorle1fHk@4$tuU0AcgK(!eFKS_efZR>;Ir Ih8B74e`^tXFaQ7m literal 0 HcmV?d00001 diff --git a/src/modules/Projects/ProjectsLauncher/ProjectLauncherResource.rc b/src/modules/Projects/ProjectsLauncher/ProjectLauncherResource.rc new file mode 100644 index 0000000000000000000000000000000000000000..bba3ac02f524960f59c057383e3ea43f2d8bc81f GIT binary patch literal 2750 zcmd6pT~8WO5QgWvN&mwJF53v&-ZW{NpnxU9LijShB38uOAR1U|{qt>~_Z*J<0h(%W zn$7O{nwfWI&dlum{#CJxMb@z^JGZ6X*ot>%343GqR<^b?o3lEyH$0JD+J!B6m+U8u zQ}&jO;#)I2XCASVv@5%XX3t*RD^MzKEVH}dbPn~@(SEc$w>L$?9h`gi%|1OsTiU`B zb?H&+J)~85i{Epwu6b_IrD8wOV+r!r&UK0)JIYS$nbTO7)~sg(8`{X~*0QcmtZxl= z>&#i?PMf)xQuIP;;|1@_6tj$<78}f$q6u*yUB_tFM+4~@^Np>^Os5gE z7TPrmH0l1NaN@ao$m?S3i1-*5C?Y(QJ>4xK;5I?8*)iI67zcLZ^c~>6rqfNM*KnIM zcy#vQrwKYW@c0OcdHYgs`6I|L(wB*dIT3O31b5YbS{1E5y0T(QRLlw-T`+{Cae~K( zd{3S46(OhWzO#b@&yaZOp}+W=j-w8aM@nyGfOUtQ=4lU*KLY23SMp;g`w(fz4%K@j zLUsgq8=52M>k^tIE@v0ycoR$JSl_~`8Cl^o%yWrvm$dXWE46Cx@zMw0_x6=kqg!rA|AI>@b&|QC9ycR@9ouIRbw^!?{P$k#Zse+# z%93zrTBWhj-Jr-a#ZOvEo*xxG5O2uyHGi-Kd0Cudwfk4;yJDe;@!W`LpmRN!1=~CM zsxZdJ<%4HmQV;UcH$<8;cEx?EgUIHSDypv*%He(LVwEQw52?24Oy}w@{?8|97siN) zSNE}Sc7?8J`!sU>Ktj$$cuJj->X7=f7B?8tvnb-%>_%jme5uY$-I#h4)ezApa7OIQ z-|EgpeFnWa)bXV^5V>_$FW=W)L!YPWN-~HzFn$h=u(zr$5 mwOn0}T`v;ms^r=JtOl3InaBkcH literal 0 HcmV?d00001 diff --git a/src/modules/Projects/ProjectsLauncher/ProjectsLauncher.vcxproj b/src/modules/Projects/ProjectsLauncher/ProjectsLauncher.vcxproj index 9fbed3d83a..caffb353b2 100644 --- a/src/modules/Projects/ProjectsLauncher/ProjectsLauncher.vcxproj +++ b/src/modules/Projects/ProjectsLauncher/ProjectsLauncher.vcxproj @@ -132,6 +132,7 @@ + @@ -147,6 +148,9 @@ {6955446d-23f7-4023-9bb3-8657f904af99} + + + diff --git a/src/modules/Projects/ProjectsLauncher/ProjectsLauncher.vcxproj.filters b/src/modules/Projects/ProjectsLauncher/ProjectsLauncher.vcxproj.filters index 9fd107711a..57c17bd3ac 100644 --- a/src/modules/Projects/ProjectsLauncher/ProjectsLauncher.vcxproj.filters +++ b/src/modules/Projects/ProjectsLauncher/ProjectsLauncher.vcxproj.filters @@ -21,6 +21,9 @@ Header Files + + Header Files + @@ -34,6 +37,11 @@ - + + + + + Resource Files + \ No newline at end of file diff --git a/src/modules/Projects/ProjectsLauncher/resource.h b/src/modules/Projects/ProjectsLauncher/resource.h new file mode 100644 index 0000000000..f72a23ed41 --- /dev/null +++ b/src/modules/Projects/ProjectsLauncher/resource.h @@ -0,0 +1,13 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by ProjectLauncherResource.rc + +////////////////////////////// +// Non-localizable + +#define FILE_DESCRIPTION "PowerToys Projects Launcher" +#define INTERNAL_NAME "PowerToys.ProjectsLauncher" +#define ORIGINAL_FILENAME "PowerToys.ProjectsLauncher.exe" + +// Non-localizable +////////////////////////////// diff --git a/src/modules/Projects/ProjectsSnapshotTool/ProjectsSnapshotTool.rc b/src/modules/Projects/ProjectsSnapshotTool/ProjectsSnapshotTool.rc new file mode 100644 index 0000000000000000000000000000000000000000..bba3ac02f524960f59c057383e3ea43f2d8bc81f GIT binary patch literal 2750 zcmd6pT~8WO5QgWvN&mwJF53v&-ZW{NpnxU9LijShB38uOAR1U|{qt>~_Z*J<0h(%W zn$7O{nwfWI&dlum{#CJxMb@z^JGZ6X*ot>%343GqR<^b?o3lEyH$0JD+J!B6m+U8u zQ}&jO;#)I2XCASVv@5%XX3t*RD^MzKEVH}dbPn~@(SEc$w>L$?9h`gi%|1OsTiU`B zb?H&+J)~85i{Epwu6b_IrD8wOV+r!r&UK0)JIYS$nbTO7)~sg(8`{X~*0QcmtZxl= z>&#i?PMf)xQuIP;;|1@_6tj$<78}f$q6u*yUB_tFM+4~@^Np>^Os5gE z7TPrmH0l1NaN@ao$m?S3i1-*5C?Y(QJ>4xK;5I?8*)iI67zcLZ^c~>6rqfNM*KnIM zcy#vQrwKYW@c0OcdHYgs`6I|L(wB*dIT3O31b5YbS{1E5y0T(QRLlw-T`+{Cae~K( zd{3S46(OhWzO#b@&yaZOp}+W=j-w8aM@nyGfOUtQ=4lU*KLY23SMp;g`w(fz4%K@j zLUsgq8=52M>k^tIE@v0ycoR$JSl_~`8Cl^o%yWrvm$dXWE46Cx@zMw0_x6=kqg!rA|AI>@b&|QC9ycR@9ouIRbw^!?{P$k#Zse+# z%93zrTBWhj-Jr-a#ZOvEo*xxG5O2uyHGi-Kd0Cudwfk4;yJDe;@!W`LpmRN!1=~CM zsxZdJ<%4HmQV;UcH$<8;cEx?EgUIHSDypv*%He(LVwEQw52?24Oy}w@{?8|97siN) zSNE}Sc7?8J`!sU>Ktj$$cuJj->X7=f7B?8tvnb-%>_%jme5uY$-I#h4)ezApa7OIQ z-|EgpeFnWa)bXV^5V>_$FW=W)L!YPWN-~HzFn$h=u(zr$5 mwOn0}T`v;ms^r=JtOl3InaBkcH literal 0 HcmV?d00001 diff --git a/src/modules/Projects/ProjectsSnapshotTool/ProjectsSnapshotTool.vcxproj b/src/modules/Projects/ProjectsSnapshotTool/ProjectsSnapshotTool.vcxproj index e00c96e36b..7c42c829df 100644 --- a/src/modules/Projects/ProjectsSnapshotTool/ProjectsSnapshotTool.vcxproj +++ b/src/modules/Projects/ProjectsSnapshotTool/ProjectsSnapshotTool.vcxproj @@ -134,6 +134,7 @@ + @@ -149,6 +150,9 @@ {6955446d-23f7-4023-9bb3-8657f904af99} + + + diff --git a/src/modules/Projects/ProjectsSnapshotTool/ProjectsSnapshotTool.vcxproj.filters b/src/modules/Projects/ProjectsSnapshotTool/ProjectsSnapshotTool.vcxproj.filters index d01693ad5e..8f8b7d9f26 100644 --- a/src/modules/Projects/ProjectsSnapshotTool/ProjectsSnapshotTool.vcxproj.filters +++ b/src/modules/Projects/ProjectsSnapshotTool/ProjectsSnapshotTool.vcxproj.filters @@ -24,6 +24,9 @@ Header Files + + Header Files + @@ -40,6 +43,11 @@ - + + + + + Resource Files + \ No newline at end of file diff --git a/src/modules/Projects/ProjectsSnapshotTool/resource.h b/src/modules/Projects/ProjectsSnapshotTool/resource.h new file mode 100644 index 0000000000..518fb0b0b9 --- /dev/null +++ b/src/modules/Projects/ProjectsSnapshotTool/resource.h @@ -0,0 +1,13 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by ProjectsSnapshotTool.rc + +////////////////////////////// +// Non-localizable + +#define FILE_DESCRIPTION "PowerToys Projects Snapthot Tool" +#define INTERNAL_NAME "PowerToys.ProjectsSnapshotTool" +#define ORIGINAL_FILENAME "PowerToys.ProjectsSnapshotTool.exe" + +// Non-localizable +////////////////////////////// From ae91aa3869668195d64d9361cb548be6dffd1edc Mon Sep 17 00:00:00 2001 From: seraphima Date: Mon, 17 Jun 2024 20:40:07 +0200 Subject: [PATCH 2/6] editor version --- src/modules/Projects/ProjectsEditor/ProjectsEditor.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/src/modules/Projects/ProjectsEditor/ProjectsEditor.csproj b/src/modules/Projects/ProjectsEditor/ProjectsEditor.csproj index 9aecdb4f8d..b0d6f57962 100644 --- a/src/modules/Projects/ProjectsEditor/ProjectsEditor.csproj +++ b/src/modules/Projects/ProjectsEditor/ProjectsEditor.csproj @@ -1,4 +1,5 @@  + PowerToys.ProjectsEditor PowerToys Projects Editor From fbb9f4188f97a88f52a7ab44acc1b693bf3c93b5 Mon Sep 17 00:00:00 2001 From: seraphima Date: Mon, 17 Jun 2024 20:40:16 +0200 Subject: [PATCH 3/6] spellcheck --- src/modules/Projects/ProjectsSnapshotTool/resource.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/Projects/ProjectsSnapshotTool/resource.h b/src/modules/Projects/ProjectsSnapshotTool/resource.h index 518fb0b0b9..713a32b79d 100644 --- a/src/modules/Projects/ProjectsSnapshotTool/resource.h +++ b/src/modules/Projects/ProjectsSnapshotTool/resource.h @@ -5,7 +5,7 @@ ////////////////////////////// // Non-localizable -#define FILE_DESCRIPTION "PowerToys Projects Snapthot Tool" +#define FILE_DESCRIPTION "PowerToys Projects Snapshot Tool" #define INTERNAL_NAME "PowerToys.ProjectsSnapshotTool" #define ORIGINAL_FILENAME "PowerToys.ProjectsSnapshotTool.exe" From bd50d6961d3361a764fe1be240f320d89866e3ea Mon Sep 17 00:00:00 2001 From: seraphima Date: Tue, 18 Jun 2024 16:44:23 +0200 Subject: [PATCH 4/6] editor dll signing --- .pipelines/ESRPSigning_core.json | 1 + 1 file changed, 1 insertion(+) diff --git a/.pipelines/ESRPSigning_core.json b/.pipelines/ESRPSigning_core.json index db44309fcc..e79a57b0d5 100644 --- a/.pipelines/ESRPSigning_core.json +++ b/.pipelines/ESRPSigning_core.json @@ -192,6 +192,7 @@ "PowerToys.ProjectsSnapshotTool.exe", "PowerToys.ProjectsLauncher.exe", "PowerToys.ProjectsEditor.exe", + "PowerToys.ProjectsEditor.dll", "PowerToys.ProjectsModuleInterface.dll", "WinUI3Apps\\PowerToys.RegistryPreviewExt.dll", From ba13f5c0c4ccc5f8e65ac3b1780aa4aec4529dd5 Mon Sep 17 00:00:00 2001 From: seraphima Date: Tue, 18 Jun 2024 22:10:48 +0200 Subject: [PATCH 5/6] update projects names to filter them out --- src/modules/Projects/projects-common/WindowUtils.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/modules/Projects/projects-common/WindowUtils.h b/src/modules/Projects/projects-common/WindowUtils.h index 59a6b243d8..3cc4c1f85e 100644 --- a/src/modules/Projects/projects-common/WindowUtils.h +++ b/src/modules/Projects/projects-common/WindowUtils.h @@ -22,9 +22,9 @@ namespace WindowUtils const char SplashClassName[] = "MsoSplash"; const wchar_t CoreWindow[] = L"WINDOWS.UI.CORE.COREWINDOW"; const wchar_t SearchUI[] = L"SEARCHUI.EXE"; - const wchar_t ProjectsSnapshotTool[] = L"PROJECTSSNAPSHOTTOOL"; - const wchar_t ProjectsEditor[] = L"PROJECTSEDITOR"; - const wchar_t ProjectsLauncher[] = L"PROJECTSLAUNCHER"; + const wchar_t ProjectsSnapshotTool[] = L"POWERTOYS.PROJECTSSNAPSHOTTOOL"; + const wchar_t ProjectsEditor[] = L"POWERTOYS.PROJECTSEDITOR"; + const wchar_t ProjectsLauncher[] = L"POWERTOYS.PROJECTSLAUNCHER"; } inline bool IsRoot(HWND window) noexcept From a62d95c8faa56bada68ceb1eb15e23f4cd0afcf5 Mon Sep 17 00:00:00 2001 From: seraphima Date: Wed, 19 Jun 2024 00:06:57 +0200 Subject: [PATCH 6/6] shortcut saving fix --- .../ProjectsEditor/ProjectsEditor.csproj | 9 +++++ .../ProjectsEditor/Utils/ProjectIcon.cs | 7 +++- .../ViewModels/MainViewModel.cs | 36 +++++++++++++------ 3 files changed, 41 insertions(+), 11 deletions(-) diff --git a/src/modules/Projects/ProjectsEditor/ProjectsEditor.csproj b/src/modules/Projects/ProjectsEditor/ProjectsEditor.csproj index b0d6f57962..c780c67f69 100644 --- a/src/modules/Projects/ProjectsEditor/ProjectsEditor.csproj +++ b/src/modules/Projects/ProjectsEditor/ProjectsEditor.csproj @@ -61,6 +61,15 @@ false true + + tlbimp + 0 + 1 + 50a7e9b0-70ef-11d1-b75a-00a0c90564fe + 0 + false + true + diff --git a/src/modules/Projects/ProjectsEditor/Utils/ProjectIcon.cs b/src/modules/Projects/ProjectsEditor/Utils/ProjectIcon.cs index ca752d3075..90ef07bad7 100644 --- a/src/modules/Projects/ProjectsEditor/Utils/ProjectIcon.cs +++ b/src/modules/Projects/ProjectsEditor/Utils/ProjectIcon.cs @@ -84,7 +84,12 @@ namespace ProjectsEditor.Utils public static void SaveIcon(Bitmap icon, string path) { - FileStream fileStream = new FileStream(path, FileMode.OpenOrCreate); + if (Path.Exists(path)) + { + File.Delete(path); + } + + FileStream fileStream = new FileStream(path, FileMode.CreateNew); using (var memoryStream = new MemoryStream()) { icon.Save(memoryStream, ImageFormat.Png); diff --git a/src/modules/Projects/ProjectsEditor/ViewModels/MainViewModel.cs b/src/modules/Projects/ProjectsEditor/ViewModels/MainViewModel.cs index 49d832b5b8..9a9ac441af 100644 --- a/src/modules/Projects/ProjectsEditor/ViewModels/MainViewModel.cs +++ b/src/modules/Projects/ProjectsEditor/ViewModels/MainViewModel.cs @@ -159,20 +159,36 @@ namespace ProjectsEditor.ViewModels private void CreateShortcut(Project project) { string basePath = AppDomain.CurrentDomain.BaseDirectory; - string shortcutAddress = FolderUtils.Desktop() + $"\\{project.Name}.lnk"; - string shortcutIconFilename = FolderUtils.Temp() + $"\\{project.Name}.ico"; + string shortcutAddress = Path.Combine(FolderUtils.Desktop(), project.Name + ".lnk"); + string shortcutIconFilename = Path.Combine(FolderUtils.Temp(), project.Id + ".ico"); Bitmap icon = ProjectIcon.DrawIcon(ProjectIcon.IconTextFromProjectName(project.Name)); ProjectIcon.SaveIcon(icon, shortcutIconFilename); - IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShell(); - IWshRuntimeLibrary.IWshShortcut shortcut = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(shortcutAddress); - shortcut.Description = $"Project Launcher {project.Id}"; - shortcut.TargetPath = Path.Combine(basePath, "PowerToys.ProjectsLauncher.exe"); - shortcut.Arguments = project.Id; - shortcut.WorkingDirectory = basePath; - shortcut.IconLocation = shortcutIconFilename; - shortcut.Save(); + try + { + // Workaround to be able to create a shortcut with unicode filename + File.WriteAllBytes(shortcutAddress, Array.Empty()); + + // Create a ShellLinkObject that references the .lnk file + Shell32.Shell shl = new Shell32.Shell(); + Shell32.Folder dir = shl.NameSpace(FolderUtils.Desktop()); + Shell32.FolderItem itm = dir.Items().Item($"{project.Name}.lnk"); + Shell32.ShellLinkObject lnk = (Shell32.ShellLinkObject)itm.GetLink; + + // Set the .lnk file properties + lnk.Description = $"Project Launcher {project.Id}"; + lnk.Path = Path.Combine(basePath, "PowerToys.ProjectsLauncher.exe"); + lnk.Arguments = project.Id.ToString(); + lnk.WorkingDirectory = basePath; + lnk.SetIconLocation(shortcutIconFilename, 0); + + lnk.Save(shortcutAddress); + } + catch (Exception ex) + { + Logger.LogError($"Shortcut creation error: {ex.Message}"); + } } public void SaveProjectName(Project project)