From 502417a446c380f1cb64e92185ef6101b5d59b1f Mon Sep 17 00:00:00 2001 From: Nova_Max <40432491+tommaier123@users.noreply.github.com> Date: Mon, 10 Jul 2023 01:10:58 +0200 Subject: [PATCH] Added light mode support, added installer, added exit button, added publish profiles --- .gitignore | 2 +- Icons/icon.ico | Bin 0 -> 4286 bytes Icons/icon.png | Bin 0 -> 2899 bytes XBatteryStatus.sln | 10 +- XBatteryStatus/MyApplicationContext.cs | 99 ++- XBatteryStatus/Program.cs | 23 +- .../PublishProfiles/FolderProfile.pubxml | 17 + XBatteryStatus/Resources/icon00.png | Bin 226 -> 0 bytes XBatteryStatus/Resources/icon10.png | Bin 231 -> 0 bytes XBatteryStatus/Resources/icon100.png | Bin 2389 -> 0 bytes XBatteryStatus/Resources/icon20.png | Bin 235 -> 0 bytes XBatteryStatus/Resources/icon30.png | Bin 237 -> 0 bytes XBatteryStatus/Resources/icon40.png | Bin 232 -> 0 bytes XBatteryStatus/Resources/icon50.png | Bin 236 -> 0 bytes XBatteryStatus/Resources/icon60.png | Bin 232 -> 0 bytes XBatteryStatus/Resources/icon70.png | Bin 238 -> 0 bytes XBatteryStatus/Resources/icon80.png | Bin 2392 -> 0 bytes XBatteryStatus/Resources/icon90.png | Bin 2393 -> 0 bytes XBatteryStatus/Resources/iconE.png | Bin 236 -> 0 bytes XBatteryStatus/Resources/iconQ.png | Bin 265 -> 0 bytes XBatteryStatus/XBatteryStatus.csproj | 9 +- XBatteryStatus/icon.ico | Bin 0 -> 4286 bytes XBatteryStatus/iconE.ico | Bin 5430 -> 0 bytes .../EnableLaunchApplication.js | 172 ++++ .../XBatteryStatusInstaller.vdproj | 790 ++++++++++++++++++ 25 files changed, 1096 insertions(+), 26 deletions(-) create mode 100644 Icons/icon.ico create mode 100644 Icons/icon.png create mode 100644 XBatteryStatus/Properties/PublishProfiles/FolderProfile.pubxml delete mode 100644 XBatteryStatus/Resources/icon00.png delete mode 100644 XBatteryStatus/Resources/icon10.png delete mode 100644 XBatteryStatus/Resources/icon100.png delete mode 100644 XBatteryStatus/Resources/icon20.png delete mode 100644 XBatteryStatus/Resources/icon30.png delete mode 100644 XBatteryStatus/Resources/icon40.png delete mode 100644 XBatteryStatus/Resources/icon50.png delete mode 100644 XBatteryStatus/Resources/icon60.png delete mode 100644 XBatteryStatus/Resources/icon70.png delete mode 100644 XBatteryStatus/Resources/icon80.png delete mode 100644 XBatteryStatus/Resources/icon90.png delete mode 100644 XBatteryStatus/Resources/iconE.png delete mode 100644 XBatteryStatus/Resources/iconQ.png create mode 100644 XBatteryStatus/icon.ico delete mode 100644 XBatteryStatus/iconE.ico create mode 100644 XBatteryStatusInstaller/EnableLaunchApplication.js create mode 100644 XBatteryStatusInstaller/XBatteryStatusInstaller.vdproj diff --git a/.gitignore b/.gitignore index 9491a2f..a662b69 100644 --- a/.gitignore +++ b/.gitignore @@ -184,7 +184,7 @@ publish/ *.azurePubxml # Note: Comment the next line if you want to checkin your web deploy settings, # but database connection strings (with potential passwords) will be unencrypted -*.pubxml +#*.pubxml *.publishproj # Microsoft Azure Web App publish settings. Comment the next line if you want to diff --git a/Icons/icon.ico b/Icons/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..755d8952f398c7769e7052026cfe864e5b781fb3 GIT binary patch literal 4286 zcmds*K}rKb5Jf8}xDZ4T+?u7QnB-ssdIPWFIw#0cJc7$C0&P`>r=Moh_M|6BOsM={ z^{amM%n%4MTljmqwD`35d$UI~d-m{>tv#ZCc)9j)JH${hODSD+Y&M(J60O(YvO8vH z+;8qTCAe=f0}q_yp|hvX>2CNGuTy69+|1`#dj{re`{`q@g!Gn>`LUiFjh+&Yc~fJK zT(L%@rxkT?4R76-&)4kKo_xMFS8q6;p?bsdCRbDq-h%24$B$f5HFyiEHyl55 zMb+RfsNQh=$Q5&q{8UtLI9}w6xkg@t;gk2NH=G`F#W9Uq3CBF5U+Zvu$Q8#lY9$== zh<>fZ@gY|{rcp0p_~g2J!|5SctkLMHLG^|+N3K}Xq7NO^S>+}DSMAKd|NeTv-lv=& z&UWVO&v$D6-}dvYC*h3uf6`vQUo-62X9_=d7W8kt^!=^p_xZ5!{{SLZ`!|mpk1LNw t>Uw+eu+@Hu;9dVJv30(^?)s0rAwHe&ytZF;ee(J6{0a8#o>GcP=?g*L65{{> literal 0 HcmV?d00001 diff --git a/Icons/icon.png b/Icons/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2fc57d6a9d6e89cd54297c5ad31e0816cab9db88 GIT binary patch literal 2899 zcmcguO^6&t6z&9(b@M||q9Te-MLWx~sl= z@6}h|d-cvtO+L44^pR0TQFcv?*Qdq5D!(K5ir;K``Ih**FBzZ96lKQ)^1DrW``w2X zW%N|koXuw&#}VP}3Z^_@m0mj$Xhk`AsFz@JlI3c^=A*c#-MH|Drbe`;op2gPBN<~0 z(fD%8W|k+LWceiVsdnfY^u9`Iu#cXXgjLsSDh;*!O*)pt&b&RVR^;ye>rSYicBjYbJy*KE68qO<&H zM?_TYZC!NMTuPWe%`(225_YsBJnkC?mgUoIg_Ko|1bn*04IxSxqwy z69U5)LTW+>nGiwifMFuT7(g3BofPM|1Y5xHfZ;by6WJ!R;2JQeQMj}zloAy3w2j5t zMQuFK^dz3|duue%M4aU~CTyZ!(?qD1D59uJTxuDCh!J`o2%t?t6}t{_u?>UJXC@?M zxW3NGqSTdKKS(jkiLg-~2!f99xgiaJ=Rp@3#14ROxda5*@B>1a#~gcT?fEnkS&mz) zt;(pVu*jGlQb;LqY)7p2Yzts$Qotx74rP#5eZk?1-!b0eX@gV2xuvP{z>zR7Ld7!0 zY8osCXQf(Oi-SSWG{i@T^0%0u+hl%a`h_?W6q}kVC4>6@XGHZ90l1E1ImP%?)MKsL zdL&rO`hi%(75$mHwKKAq$s|SNQ6^-!RFs<;_Hyymiqw8yB1{HbAX1==YQ=E0&H-2deQ+9Y>Fuaw-&^L-d!<{=v53QhT8-5jp9`S)?+YtD~2?2FO zml**iRaSImRhDKoElhb^#YxhNNI%W=PE3ots?1C^=juuw z+K@NO(rA?uR(mN!Q2#}Lo9b?BW$`xM{V(UF%YI={67<`v#o)a@AoG|!p8h?I)~gF! zRie0>8I&zm3IeDc%tK)H2puky{#pGKa2Z05Bcd*4?&2<`mj^SRMW zFGl*Q-!9JGH^PtXe((NE+n(5d>)Oo&3cY^%`bSrl5vBF`w#n^#t{ne$|DQL0`1YM0 Z=P!JJ=Fpd4pOtOz#L>z6$46dz^)H6Zru_f_ literal 0 HcmV?d00001 diff --git a/XBatteryStatus.sln b/XBatteryStatus.sln index 0294762..f3bca4b 100644 --- a/XBatteryStatus.sln +++ b/XBatteryStatus.sln @@ -1,9 +1,11 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.31025.194 +# Visual Studio Version 17 +VisualStudioVersion = 17.2.32630.192 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XBatteryStatus", "XBatteryStatus\XBatteryStatus.csproj", "{86B506A1-A575-4162-B557-61E6A73BDD36}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "XBatteryStatus", "XBatteryStatus\XBatteryStatus.csproj", "{86B506A1-A575-4162-B557-61E6A73BDD36}" +EndProject +Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "XBatteryStatusInstaller", "XBatteryStatusInstaller\XBatteryStatusInstaller.vdproj", "{B344322B-0436-4014-89CA-F91DC9425D5F}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -15,6 +17,8 @@ Global {86B506A1-A575-4162-B557-61E6A73BDD36}.Debug|Any CPU.Build.0 = Debug|Any CPU {86B506A1-A575-4162-B557-61E6A73BDD36}.Release|Any CPU.ActiveCfg = Release|Any CPU {86B506A1-A575-4162-B557-61E6A73BDD36}.Release|Any CPU.Build.0 = Release|Any CPU + {B344322B-0436-4014-89CA-F91DC9425D5F}.Debug|Any CPU.ActiveCfg = Debug + {B344322B-0436-4014-89CA-F91DC9425D5F}.Release|Any CPU.ActiveCfg = Release EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/XBatteryStatus/MyApplicationContext.cs b/XBatteryStatus/MyApplicationContext.cs index d45a3f9..5146e42 100644 --- a/XBatteryStatus/MyApplicationContext.cs +++ b/XBatteryStatus/MyApplicationContext.cs @@ -1,9 +1,8 @@ using Microsoft.Toolkit.Uwp.Notifications; +using Microsoft.Win32; using System; -using System.Collections.Generic; +using System.Drawing; using System.Linq; -using System.Text; -using System.Threading.Tasks; using System.Windows.Forms; using Windows.Devices.Bluetooth; using Windows.Devices.Bluetooth.GenericAttributeProfile; @@ -15,6 +14,7 @@ namespace XBatteryStatus public class MyApplicationContext : ApplicationContext { NotifyIcon notifyIcon = new NotifyIcon(); + private ContextMenuStrip contextMenu; private Timer timer1; @@ -23,12 +23,21 @@ public class MyApplicationContext : ApplicationContext private int lastBattery = 100; + private bool lightMode = false; + public MyApplicationContext() { - notifyIcon.Icon = Properties.Resources.iconQ; + lightMode = IsLightMode(); + notifyIcon.Icon = GetIcon(Properties.Resources.iconQ, lightMode); notifyIcon.Text = "XBatteryStatus: Looking for paired controller"; notifyIcon.Visible = true; + contextMenu = new ContextMenuStrip(); + ToolStripMenuItem exitButton = new ToolStripMenuItem("Exit", null, new EventHandler(ExitClicked), "Exit"); + contextMenu.Items.Add(exitButton); + notifyIcon.ContextMenuStrip = contextMenu; + + FindBleController(); timer1 = new Timer(); @@ -67,7 +76,7 @@ async private void FindBleController() if (count == 0) { - notifyIcon.Icon = Properties.Resources.iconE; + notifyIcon.Icon = GetIcon(Properties.Resources.iconE, lightMode); notifyIcon.Text = "XBatteryStatus: No paired controller with battery service found"; } else @@ -90,17 +99,19 @@ private async void ReadBattery() int val = reader.ReadByte(); string notify = val.ToString() + "% - " + pairedGamepad.Name; notifyIcon.Text = "XBatteryStatus: " + notify; - if (val < 5) notifyIcon.Icon = Properties.Resources.icon00; - else if (val < 15) notifyIcon.Icon = Properties.Resources.icon10; - else if (val < 25) notifyIcon.Icon = Properties.Resources.icon20; - else if (val < 35) notifyIcon.Icon = Properties.Resources.icon30; - else if (val < 45) notifyIcon.Icon = Properties.Resources.icon40; - else if (val < 55) notifyIcon.Icon = Properties.Resources.icon50; - else if (val < 65) notifyIcon.Icon = Properties.Resources.icon60; - else if (val < 75) notifyIcon.Icon = Properties.Resources.icon70; - else if (val < 85) notifyIcon.Icon = Properties.Resources.icon80; - else if (val < 95) notifyIcon.Icon = Properties.Resources.icon90; - else notifyIcon.Icon = Properties.Resources.icon100; + Icon icon = Properties.Resources.icon100; + if (val < 5) icon = Properties.Resources.icon00; + else if (val < 15) icon = Properties.Resources.icon10; + else if (val < 25) icon = Properties.Resources.icon20; + else if (val < 35) icon = Properties.Resources.icon30; + else if (val < 45) icon = Properties.Resources.icon40; + else if (val < 55) icon = Properties.Resources.icon50; + else if (val < 65) icon = Properties.Resources.icon60; + else if (val < 75) icon = Properties.Resources.icon70; + else if (val < 85) icon = Properties.Resources.icon80; + else if (val < 95) icon = Properties.Resources.icon90; + + notifyIcon.Icon = GetIcon(icon, lightMode); if ((lastBattery > 15 && val <= 15) || (lastBattery > 10 && val <= 10) || (lastBattery > 5 && val <= 5)) { @@ -143,15 +154,65 @@ private void timer1_Tick(object sender, EventArgs e) ReadBattery(); } + public void Update() + { + notifyIcon.Visible = pairedGamepad != null && pairedGamepad.ConnectionStatus == BluetoothConnectionStatus.Connected; + ReadBattery(); + } + + private void ExitClicked(object sender, EventArgs e) + { + Application.Exit(); + } + private void OnApplicationExit(object sender, EventArgs e) { notifyIcon.Visible = false; } - public void Update() + public bool IsLightMode() { - notifyIcon.Visible = pairedGamepad != null && pairedGamepad.ConnectionStatus == BluetoothConnectionStatus.Connected; - ReadBattery(); + RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Themes\Personalize"); + + if (key != null) + { + object registryValueObject = key.GetValue("AppsUseLightTheme"); + + if (registryValueObject != null) + { + int registryValue = (int)registryValueObject; + return registryValue == 1; + } + } + + return true; + } + + public Icon GetIcon(Icon darkModeIcon, bool lightMode) + { + if (!lightMode) + { + return darkModeIcon; + } + else + { + using (Bitmap bitmap = darkModeIcon.ToBitmap()) + { + + for (int y = 0; y < bitmap.Height; y++) + { + for (int x = 0; x < bitmap.Width; x++) + { + Color pixelColor = bitmap.GetPixel(x, y); + Color invertedColor = Color.FromArgb(pixelColor.A, 255 - pixelColor.R, 255 - pixelColor.G, 255 - pixelColor.B); + bitmap.SetPixel(x, y, invertedColor); + } + } + + IntPtr Hicon = bitmap.GetHicon(); + return Icon.FromHandle(Hicon); + } + } } } } diff --git a/XBatteryStatus/Program.cs b/XBatteryStatus/Program.cs index 0c5f0a1..f837208 100644 --- a/XBatteryStatus/Program.cs +++ b/XBatteryStatus/Program.cs @@ -1,6 +1,9 @@ using System; using System.Collections.Generic; +using System.Diagnostics; +using System.IO; using System.Linq; +using System.Reflection; using System.Threading.Tasks; using System.Windows.Forms; @@ -12,8 +15,26 @@ static class Program /// The main entry point for the application. /// [STAThread] - static void Main() + static void Main(string[] args) { + var proc = Process.GetCurrentProcess(); + Process[] processes = Process.GetProcessesByName(proc.ProcessName); + + if (processes.Length > 1) + { + foreach (var process in processes) + { + if (process.Id != proc.Id) + { + try + { + process.Kill(); + } + catch { } + } + } + } + Application.SetHighDpiMode(HighDpiMode.SystemAware); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); diff --git a/XBatteryStatus/Properties/PublishProfiles/FolderProfile.pubxml b/XBatteryStatus/Properties/PublishProfiles/FolderProfile.pubxml new file mode 100644 index 0000000..1d0c61f --- /dev/null +++ b/XBatteryStatus/Properties/PublishProfiles/FolderProfile.pubxml @@ -0,0 +1,17 @@ + + + + + Release + Any CPU + C:\Users\Max\source\repos\tommaier123\XBatteryStatus\XBatteryStatus\bin\Release\publish + FileSystem + net5.0-windows10.0.19041.0 + win-x64 + false + true + false + + \ No newline at end of file diff --git a/XBatteryStatus/Resources/icon00.png b/XBatteryStatus/Resources/icon00.png deleted file mode 100644 index c572acb8713a95b8fc979f3738c6ed34d8eac947..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 226 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJm7Xq+ArY-_r$ur#81T3RfBYA| zPJ=}yHhHq&#B==$OFz%h@yckGSj_J9@{&Tl%nKI3W@{5cweH>g7!?dU70?)``&V)nzBby4Q*}9 f4%YJj;9~IWUL)ptR?a;g=yC>6S3j3^P6}zb# zQv#x{V1Ynlhgcx7Kmt)ASb_wC4Le#@z^Xq0M1ciD?BLvaI00qS@EXbE*LTnP&UYTZ zFR!mXH9K=^Mi7MAmE}?e<gK9fkk6-~RfSP+iS@#Bc_#+xSv;n?e5bt~B_ zuR56d8AMo(X1aa|XhArCu^S@1O%t(3>t0Zhe){-RN%TlTx?+{pa#*AdZ@C}Q&Hh>y z_qVZ4q>C5C^IZoF_%uOc*KY=~(=A8?yAE9Q$BHBlAjx(?TI3GJt@659WDymuOjgF4 zX^A;Iqh$@#w$F*Ws^t|muV{v>WgSy>bX^?%B=8my*Qt~)jeNmfL24vP=qO63)5&y< z42$ZDX4|%+>WZ$*fRN)}kf5#{#PeedB^u+%3lon8BDaWYtd$fbU^)!J4^y*2Jdz0n zQ@SWrw2aC_8UP7SabYWJ4xAIL&?fb1ki>x1QY@%cE~oH)&H8?dj+3P}FdD_SFFLOF zLaJ0~%vuqqOKtEtKPDC@6}l_UA(jI?T^u%8!r}&-AVT^&l_GSC5k(1$s*E+qSzaGo z5sO8hRa-oB#R~}Q#Ai9n(HdGp2`xyvs%x@pLdvU}<>;ED8BeIXqpCw_8S03j1Wf?z z**}39@!Z~Bp#(cFi+ltsdp@dDB@F5VZ{@PH62u7#FkLAXB%qq{JmOGf=4#m*mh+a1 zWSyA0oOf+QMkt@BP`rBHB;)lZhFiP>`1)Zp5Qf1e!+rH@0>;@}M74bFWp-if~rcbcqHgEYrerEoTBDO(!xX7+ZvDByWR;yMBwT z$)YkNpt-@jVNjLMvKK@4dZYf@q|c46nw~f)L5SO-lHQ(wv?{xNDF%-+@s&Z?R!W8_+LzGj-T?IHs*WSBUcBPK=G zIQj|fcdPLqvLA_y8z`t#7{7`%F&@lo3m_CMuG;UAP?3n_o?uHk)YDCQ-e zp247Y_Uog=Rw7Jp2c}CpZ~oq782V@bcEa$&83exP%Q}7ppKE@Z?i1i9-D%JO>N|pc z#Pts!oPs?_W2LlM-TLCrw;MCCnYri2k1u}Ly0-Alt=H~-;ptcPt>d44f9~tg-_hn4 zUfI}ruQz|>=H~B@oVfGQ^p4j!b>jBw)Rz}-U)}lP`M2kO{$v_0oEDCrTzKsC*|#3O s|AXGf)S1hr)k^#EU%z_k-PwnKd*Gw{zPb56-}tO7t(C4n`Ruhn04II@CjbBd diff --git a/XBatteryStatus/Resources/icon20.png b/XBatteryStatus/Resources/icon20.png deleted file mode 100644 index b3eb7acb693133d25a5905bab5f0e8432922a199..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 235 zcmVEVeY^NsAYgAmfPbYfZWznnOM0N^b`_vg931hi$E;33wnDD|pC+pL9I%yh?gWOd7DqDE{-^)|002ovPDHLkV1gcVTzmik diff --git a/XBatteryStatus/Resources/icon30.png b/XBatteryStatus/Resources/icon30.png deleted file mode 100644 index 35a3a96dd7fec6bd854103dacdc1937ba3d90c8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 237 zcmV`U^w6*el9guX^@&KTLP+HW}8=G|kL0}C|gvqm?NC1`8 zx1lo)^8|i?S`W~U<<@uzAh)$tCRVNlJw{?_Pymj(2*gsmptr_Au3`Wji8UkwsB}07 zz)VX3n8l9(rjk4lpjwIE2H0y7sEysB9%=!o{DNcEN}z6js01*@{7|^e;yR9+v);!Z nnD)gb00}+X4d!#eR?fK{lhPJRsKT8Q00000NkvXXu0mjfwR&Qw diff --git a/XBatteryStatus/Resources/icon40.png b/XBatteryStatus/Resources/icon40.png deleted file mode 100644 index 88d2c834c81d12d1836888868169bdf76c967218..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJ^`0({ArY-_!`|{WC~zEk_Iv-P zv(sijROd`O`}^{>uHEk%SaKzv&uM813T)1oxy2XJCMCi>Ilca&gTthJ=IPR}_;MJx z${mpPK3n18khjIfEKILSPRY!C0|S?3cgNCY3(S+-*X1y2BxIjZa9DC!lj+KaBWh2! z?GJr#xX-%j{G5)g?D7@uQA{p%2Mx0XJ0@38VewJ?zQH_l&SMSBmwzuXU*5MvrGa_< gGRIo}7fcL()1QiYX1Z;E0CYNor>mdKI;Vst00|#k=>Px# diff --git a/XBatteryStatus/Resources/icon50.png b/XBatteryStatus/Resources/icon50.png deleted file mode 100644 index 8a0c9d6f6281eb8a273a6c5a2b2624ad93e19348..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 236 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJ&7LlfArY-_L!q*1eL+pG1TYG)5?THh3MbR;Uygh?-qF zrMy#U)=hsVpN*_v{2brjkbM>4-Ec}&X0ceKRi%UH0g+D(^^=cU_D$OSZ#kdO?LyB6 j7CYbOpOy*S3>J*De~5V=^{$NpI-kMQ)z4*}Q$iB}enVM1 diff --git a/XBatteryStatus/Resources/icon60.png b/XBatteryStatus/Resources/icon60.png deleted file mode 100644 index e46b1e2a4140198dc62077e0bd25904f81678eaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJ^`0({ArY-_L!tni7u?_!t39GeAd3EY(p^(P+5?0n+<{xMI^??{1c{mbS%Y_g$5Neyc{KaAIfEU<K;;*ls?`GZ;!!n#CB>usT`cV*w>as0 o%)qh}*8n6mbsNm*fUN-F1f(7oN#Bb5$N&HU07*qoM6N<$f}53MA^-pY diff --git a/XBatteryStatus/Resources/icon80.png b/XBatteryStatus/Resources/icon80.png deleted file mode 100644 index d3f4ae95670166bfbcf537a79d329e9aef07d974..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2392 zcmcImONbmr819udY$oKAc!)u;?Hm#@HQm*(nJ#ur)|p**A+xTV!R&fUbyf9DyVG55 zckj;ZDiS;hB1%9(h#tI15JbFq5CsEKP*1^&dJsGdQIMPxP^;(BJId^4d=2#U>#Oho z|L=cvy}Yvg_~F9wf+R_YmlkWQ;w)#!%mMMA?CjhUr-RYrdLl`Oj%LS{bmi@1k~H(W z-&jl6>gN#QK@n5#vSK%g1X_}2&vYY9HdrdVtm%gp<(E%BQ)Hi3lnYi}t4CGV@)vhv zc7A8ML3TEXLzOd+%ClW02m+R3xf`^@1a&J)j~9vS?6IoIJxIDyQRXs(@>+dGuJV}4 zR?!9onwDI0iqJMp$2l$Q8Z4_?S%n6GHZnD&>+;~I2x~F*&}waAU`yOplvbKXNL4$X zPO)PYdE8W?<2b6OtGW&Z0wmjEin}08P7E1pEFrNUr9Kbkj1jwhGp#7X(|!m+l+%XE zKqeuW+QpFyi&_>^4@gOli#FqS&p0J2YqNlbX(F&N#|o9|^&CEyHVATblFn}lj|Q=g zMJJ8zh^ebA;hQmG^IO8=iJ@ajy2^H?nP9nq=Zm8jPkGYfdx(&~&ZUS@HD);Faf9>r zFv}}L7P(r@vg*jEF8Cqko#f%n%fT8}!zrsMx~4;*nIh#4XdxXUXgs3nNYnbzx~L_|~+kjc7102osfaTfHH6Saw1|F`jak80JK(@Z$43rbWkxPdlp%(P82^>drfL=BY z;4(pOc%)=&o=HsDk6n24MC^-x#O+bm%quDw88bZ!DFv2k5#W{t4~9Agj1po|25H$5 zJiB(Qyv^e}r$Tch>xN!cqD4Ou+1noU*Ln8r;HvG*y+TBoWW7>RNS0?tmBC|wj82nz z)TiyVm>}IJ`F&Wzy|ja4HrEuIPEud$Uj8R|Yk%)O&vwh2!2op~0!(H?;A*x3%8sdH zSJ#{}GltQR^?tM(|DpE-aY+k@O(w>#s_YpL;o%mGM=}!O7>lXP;-sQ@F%M)MMQxwp zEPd)$NC(3#F9X@|1dA5m`9O74REAKJTXo+j(YeX8t#%afXYQ2H&T{@5I6Zw zgN35LW3i8T=7Hxw5_^!1rP^F$?fT7cpDaiZ%}n3;`1g0O9(w=cd-wl5^TN~W5&d$l z`4nh>aqjG?g{jwmn(iL|@#dRHuD$w_{mQ3rtxM{yqaQx^&HAMu?sz9JeJ>Sm9DGN* zXZpb_tJl7oy?o&8NvSmT<+0P|8^7Id-uLyr*X>_F=Y^}^WqY5c`Q_RNk6nE658bT* AfdBvi diff --git a/XBatteryStatus/Resources/icon90.png b/XBatteryStatus/Resources/icon90.png deleted file mode 100644 index e9814da99a3422e16ed235b21741ebb652f31fc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2393 zcmcImON`q@77BK5#{W}H|XdyMT( zvN@m?99R&yJs_bTDg@$ygivqLLqR>3LlHWL3+&`=l^l9_Y1$B2rI9|f^hOwdL0qozkXT}W_G>$ zda`a`wlMQ^h%krdx_-#ff^hy~H$-@YCcvQ$FDQx+Zrv7vM~dQA!b~Xl46>sB&(9DLXLp(R*;}B4B|5*hBA$D4(&?-d~B`m5l)*3~5 zb;JTnr8KH0c6sg8&ewpFTGy~H4gJK{IbB;_pOHq-lQUk$)qG9OhI);d9 zE~IjSxSFFl1=ks|y&QSG9#LzYHT8;cMoM*;D1<;mH#pCNu0f=z1X6;rL8w9sCf9J^ zZi%&6WHZ7w*V1a}XQfr~VjjJ%VSTO9*M_5(2l|O{j+is)j4YdTGSNeB5KqxRw6I~3>DJT{;s=NDi>)=g*(VGLif+VwfWollVU&hX zY6oQ4%(8?42?P7-f1n*gBX3N(aVwb%;6JqY$T&?`jfZ5}{}v}H-B1Q4B>lCz2G8Yz zn9FH+`i*y8VuG3+5PT&vONrMJF zzaxH*czFA(d42|IRm+R@^*i^!zcMR4J#*~d=X)PD_TK#R`qxX#56|6v{K?am542Ba zA2`px_|BE>?=BpDeQxL1yI(wY|JLd^mrHlIe?re}fBW$ZC&S(kKOeisF3sONapTDG xo!zywKzria(Hp0>-xGFrZ@yLAd-ucN1Xp_O&hI~dW~Yar>e5R2(@U?u@dqf}1i=6R diff --git a/XBatteryStatus/Resources/iconE.png b/XBatteryStatus/Resources/iconE.png deleted file mode 100644 index 8684a31f20ed599135077d436ea42b09d98666f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 236 zcmVF^9ogw4IbNC4H; zSJ0D2dIG-(0I5kwJwO*)YphZafTIqXSX>D-Ms8_P0E@W`#8z*Cw#Gn?ZU7d!H6#Lr zbhrf|O|#0$q*K@TNoUrZ*WwFs7MY(z9d!duc!e%P}eI0ACCSonxt!hwoM zeGS}hq&u)w2{_zshy=(a-WsE>AerY)fR@D5ZahW`CboX|v^(G-vfR-2)qkXb7V_4% zQxSa$n?-R4yd#yw>V+ELI|qIt|8i+p0-}LBWB4S5net5.0-windows10.0.19041.0 true true - iconE.ico - true + icon.ico + embedded + AnyCPU;x64 @@ -18,6 +19,10 @@ + + + + True diff --git a/XBatteryStatus/icon.ico b/XBatteryStatus/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..755d8952f398c7769e7052026cfe864e5b781fb3 GIT binary patch literal 4286 zcmds*K}rKb5Jf8}xDZ4T+?u7QnB-ssdIPWFIw#0cJc7$C0&P`>r=Moh_M|6BOsM={ z^{amM%n%4MTljmqwD`35d$UI~d-m{>tv#ZCc)9j)JH${hODSD+Y&M(J60O(YvO8vH z+;8qTCAe=f0}q_yp|hvX>2CNGuTy69+|1`#dj{re`{`q@g!Gn>`LUiFjh+&Yc~fJK zT(L%@rxkT?4R76-&)4kKo_xMFS8q6;p?bsdCRbDq-h%24$B$f5HFyiEHyl55 zMb+RfsNQh=$Q5&q{8UtLI9}w6xkg@t;gk2NH=G`F#W9Uq3CBF5U+Zvu$Q8#lY9$== zh<>fZ@gY|{rcp0p_~g2J!|5SctkLMHLG^|+N3K}Xq7NO^S>+}DSMAKd|NeTv-lv=& z&UWVO&v$D6-}dvYC*h3uf6`vQUo-62X9_=d7W8kt^!=^p_xZ5!{{SLZ`!|mpk1LNw t>Uw+eu+@Hu;9dVJv30(^?)s0rAwHe&ytZF;ee(J6{0a8#o>GcP=?g*L65{{> literal 0 HcmV?d00001 diff --git a/XBatteryStatus/iconE.ico b/XBatteryStatus/iconE.ico deleted file mode 100644 index 1033e3af33aae98a088224e556c2f9eb7a86888a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5430 zcmds*y^2#o9K~ndMGIv~B?!8v5cLHF3rQA1@C7XP4Qws63MPKkuK4i+R$^yoB@qij z*isAGVns!<3fOEBGoF)s&-L%@&15onL2=;c|MQ$l;!QxETXF|ntK|^e?&^wjr=4@{ zc2Pe?{~mg0(L;)jqL1Jl`l-iz??4L-z~dSop?4o}=NMQ9l|6HC0=x$g!EJD-g!uz7 z0x!TexB{q|dX)JZ;v2wN=e>iz&Nn0*;4ql_ApW68eW^sR&FV4oKfrTv6ZF9*cnA1C zsJU1&OONrM^9h~ffSUCZtLOWR9jm{KMPl{*OeYb8dHOTZehBnGQNILVO7!~c?&oXi z1AD%sI0yLLdI-a~`|}`upRYRG(k< zPz6c36Fxsj&?l*SJ^%c!+yZ>A2y=cXM!~gJi5c%$1=j%gUjZHF1JJJokpz46x(xW8 zBh06Y3I1Fo7o0nI3P}wE^vDoQ2-b*yUHs0pk*@>(9!(E_c>b}&_uCN28=e2<{zc!1 zJ~Zm=Y2vep*4`QBIX;VMxI6Ep`pGACUwhKUqIP3Z`nsKznRa5a&Rad{RNI&`(@xW9 z?@h^@-WTdq?zB6hzG-c}mCIALjhgLOwBE|)t=dLAQ{E(6Z{_k+ZKItjZxXGya`~yY z(aw}NiPl@W{8ZZ*&Q#|{>#bZ~s%;Ess#79;!ehOaYe%(>bu;y1vCf10wy#`1s%@;B zsTYfN9^AKmN&HvNI0Tl#lJE3fAGq$gfO)4kFbt6oS313&)q)Z7UG&D?PR~P6 O&)?{t-ILxE?|%WuW)MUG diff --git a/XBatteryStatusInstaller/EnableLaunchApplication.js b/XBatteryStatusInstaller/EnableLaunchApplication.js new file mode 100644 index 0000000..01259dc --- /dev/null +++ b/XBatteryStatusInstaller/EnableLaunchApplication.js @@ -0,0 +1,172 @@ +// EnableLaaunchApplication.js +// Performs a post-build fixup of an msi to launch a specific file when the install has completed + + +// Configurable values +var checkboxChecked = true; // Is the checkbox on the finished dialog checked by default? +var checkboxText = "Launch [ProductName]"; // Text for the checkbox on the finished dialog +var filename = "XBatteryStatus.exe"; // The name of the executable to launch - change this to match the file you want to launch at the end of your setup + + +// Constant values from Windows Installer +var msiOpenDatabaseModeTransact = 1; + +var msiViewModifyInsert = 1 +var msiViewModifyUpdate = 2 +var msiViewModifyAssign = 3 +var msiViewModifyReplace = 4 +var msiViewModifyDelete = 6 + + + +if (WScript.Arguments.Length != 1) +{ + WScript.StdErr.WriteLine(WScript.ScriptName + " file"); + WScript.Quit(1); +} + +var filespec = WScript.Arguments(0); +var installer = WScript.CreateObject("WindowsInstaller.Installer"); +var database = installer.OpenDatabase(filespec, msiOpenDatabaseModeTransact); + +var sql +var view +var record + +try +{ + var fileId = FindFileIdentifier(database, filename); + if (!fileId) + throw "Unable to find '" + filename + "' in File table"; + + + WScript.Echo("Updating the Control table..."); + // Modify the Control_Next of BannerBmp control to point to the new CheckBox + sql = "SELECT `Dialog_`, `Control`, `Type`, `X`, `Y`, `Width`, `Height`, `Attributes`, `Property`, `Text`, `Control_Next`, `Help` FROM `Control` WHERE `Dialog_`='FinishedForm' AND `Control`='BannerBmp'"; + view = database.OpenView(sql); + view.Execute(); + record = view.Fetch(); + record.StringData(11) = "CheckboxLaunch"; + view.Modify(msiViewModifyReplace, record); + view.Close(); + + // Resize the BodyText and BodyTextRemove controls to be reasonable + sql = "SELECT `Dialog_`, `Control`, `Type`, `X`, `Y`, `Width`, `Height`, `Attributes`, `Property`, `Text`, `Control_Next`, `Help` FROM `Control` WHERE `Dialog_`='FinishedForm' AND `Control`='BodyTextRemove'"; + view = database.OpenView(sql); + view.Execute(); + record = view.Fetch(); + record.IntegerData(7) = 33; + view.Modify(msiViewModifyReplace, record); + view.Close(); + + sql = "SELECT `Dialog_`, `Control`, `Type`, `X`, `Y`, `Width`, `Height`, `Attributes`, `Property`, `Text`, `Control_Next`, `Help` FROM `Control` WHERE `Dialog_`='FinishedForm' AND `Control`='BodyText'"; + view = database.OpenView(sql); + view.Execute(); + record = view.Fetch(); + record.IntegerData(7) = 33; + view.Modify(msiViewModifyReplace, record); + view.Close(); + + // Insert the new CheckBox control + sql = "INSERT INTO `Control` (`Dialog_`, `Control`, `Type`, `X`, `Y`, `Width`, `Height`, `Attributes`, `Property`, `Text`, `Control_Next`, `Help`) VALUES ('FinishedForm', 'CheckboxLaunch', 'CheckBox', '18', '117', '343', '12', '3', 'LAUNCHAPP', '{\\VSI_MS_Sans_Serif13.0_0_0}" + checkboxText + "', 'Line1', '|')"; + view = database.OpenView(sql); + view.Execute(); + view.Close(); + + + + WScript.Echo("Updating the ControlEvent table..."); + // Modify the Order of the EndDialog event of the FinishedForm to 1 + sql = "SELECT `Dialog_`, `Control_`, `Event`, `Argument`, `Condition`, `Ordering` FROM `ControlEvent` WHERE `Dialog_`='FinishedForm' AND `Event`='EndDialog'"; + view = database.OpenView(sql); + view.Execute(); + record = view.Fetch(); + record.IntegerData(6) = 1; + view.Modify(msiViewModifyReplace, record); + view.Close(); + + // Insert the Event to launch the application + sql = "INSERT INTO `ControlEvent` (`Dialog_`, `Control_`, `Event`, `Argument`, `Condition`, `Ordering`) VALUES ('FinishedForm', 'CloseButton', 'DoAction', 'VSDCA_Launch', 'LAUNCHAPP=1', '0')"; + view = database.OpenView(sql); + view.Execute(); + view.Close(); + + + + WScript.Echo("Updating the CustomAction table..."); + // Insert the custom action to launch the application when finished + sql = "INSERT INTO `CustomAction` (`Action`, `Type`, `Source`, `Target`) VALUES ('VSDCA_Launch', '210', '" + fileId + "', '')"; + view = database.OpenView(sql); + view.Execute(); + view.Close(); + + + + if (checkboxChecked) + { + WScript.Echo("Updating the Property table..."); + // Set the default value of the CheckBox + sql = "INSERT INTO `Property` (`Property`, `Value`) VALUES ('LAUNCHAPP', '1')"; + view = database.OpenView(sql); + view.Execute(); + view.Close(); + } + + + + database.Commit(); +} +catch(e) +{ + WScript.StdErr.WriteLine(e); + WScript.Quit(1); +} + + + +function FindFileIdentifier(database, fileName) +{ + var sql + var view + var record + + // First, try to find the exact file name + sql = "SELECT `File` FROM `File` WHERE `FileName`='" + fileName + "'"; + view = database.OpenView(sql); + view.Execute(); + record = view.Fetch(); + if (record) + { + var value = record.StringData(1); + view.Close(); + return value; + } + view.Close(); + + // The file may be in SFN|LFN format. Look for a filename in this case next + sql = "SELECT `File`, `FileName` FROM `File`"; + view = database.OpenView(sql); + view.Execute(); + record = view.Fetch(); + while (record) + { + if (StringEndsWith(record.StringData(2), "|" + fileName)) + { + var value = record.StringData(1); + view.Close(); + return value; + } + + record = view.Fetch(); + } + view.Close(); + +} + +function StringEndsWith(str, value) +{ + if (str.length < value.length) + return false; + + return (str.indexOf(value, str.length - value.length) != -1); +} \ No newline at end of file diff --git a/XBatteryStatusInstaller/XBatteryStatusInstaller.vdproj b/XBatteryStatusInstaller/XBatteryStatusInstaller.vdproj new file mode 100644 index 0000000..a9566c0 --- /dev/null +++ b/XBatteryStatusInstaller/XBatteryStatusInstaller.vdproj @@ -0,0 +1,790 @@ +"DeployProject" +{ +"VSVersion" = "3:800" +"ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}" +"IsWebType" = "8:FALSE" +"ProjectName" = "8:XBatteryStatusInstaller" +"LanguageId" = "3:1033" +"CodePage" = "3:1252" +"UILanguageId" = "3:1033" +"SccProjectName" = "8:" +"SccLocalPath" = "8:" +"SccAuxPath" = "8:" +"SccProvider" = "8:" + "Hierarchy" + { + "Entry" + { + "MsmKey" = "8:_D3B16B81E2EF4E6AA74C24528735BCA3" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_D53A1B57AD0D4264B99F2E57434B11E8" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + } + "Configurations" + { + "Debug" + { + "DisplayName" = "8:Debug" + "IsDebugOnly" = "11:TRUE" + "IsReleaseOnly" = "11:FALSE" + "OutputFilename" = "8:Debug\\XBatteryStatusInstaller.msi" + "PackageFilesAs" = "3:2" + "PackageFileSize" = "3:-2147483648" + "CabType" = "3:1" + "Compression" = "3:2" + "SignOutput" = "11:FALSE" + "CertificateFile" = "8:" + "PrivateKeyFile" = "8:" + "TimeStampServer" = "8:" + "InstallerBootstrapper" = "3:2" + "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" + { + "Enabled" = "11:TRUE" + "PromptEnabled" = "11:TRUE" + "PrerequisitesLocation" = "2:1" + "Url" = "8:" + "ComponentsUrl" = "8:" + "Items" + { + "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.7.2" + { + "Name" = "8:Microsoft .NET Framework 4.7.2 (x86 and x64)" + "ProductCode" = "8:.NETFramework,Version=v4.7.2" + } + } + } + } + "Release" + { + "DisplayName" = "8:Release" + "IsDebugOnly" = "11:FALSE" + "IsReleaseOnly" = "11:TRUE" + "OutputFilename" = "8:Release\\XBatteryStatusInstaller.msi" + "PackageFilesAs" = "3:2" + "PackageFileSize" = "3:-2147483648" + "CabType" = "3:1" + "Compression" = "3:2" + "SignOutput" = "11:FALSE" + "CertificateFile" = "8:" + "PrivateKeyFile" = "8:" + "TimeStampServer" = "8:" + "InstallerBootstrapper" = "3:2" + "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" + { + "Enabled" = "11:TRUE" + "PromptEnabled" = "11:TRUE" + "PrerequisitesLocation" = "2:1" + "Url" = "8:" + "ComponentsUrl" = "8:" + "Items" + { + "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.7.2" + { + "Name" = "8:Microsoft .NET Framework 4.7.2 (x86 and x64)" + "ProductCode" = "8:.NETFramework,Version=v4.7.2" + } + } + } + } + } + "Deployable" + { + "CustomAction" + { + } + "DefaultFeature" + { + "Name" = "8:DefaultFeature" + "Title" = "8:" + "Description" = "8:" + } + "ExternalPersistence" + { + "LaunchCondition" + { + "{A06ECF26-33A3-4562-8140-9B0E340D4F24}:_0DA15DD9782D4B5CAD5F252888E4879C" + { + "Name" = "8:.NET Core" + "Message" = "8:[VSDNETCOREMSG]" + "AllowLaterVersions" = "11:FALSE" + "InstallUrl" = "8:https://dotnet.microsoft.com/download/dotnet-core/[NetCoreVerMajorDotMinor]" + "IsNETCore" = "11:TRUE" + "Architecture" = "2:0" + "Runtime" = "2:0" + } + } + } + "File" + { + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D3B16B81E2EF4E6AA74C24528735BCA3" + { + "SourcePath" = "8:..\\Icons\\icon.ico" + "TargetName" = "8:icon.ico" + "Tag" = "8:" + "Folder" = "8:_87BAE8FDA32844DE8EAEF43FC4BCFAAE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + } + "FileType" + { + } + "Folder" + { + "{3C67513D-01DD-4637-8A68-80971EB9504F}:_87BAE8FDA32844DE8EAEF43FC4BCFAAE" + { + "DefaultLocation" = "8:[ProgramFiles64Folder][Manufacturer]\\[ProductName]" + "Name" = "8:#1925" + "AlwaysCreate" = "11:TRUE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:TARGETDIR" + "Folders" + { + } + } + "{1525181F-901A-416C-8A58-119130FE478E}:_907900DA25494D139D5B3D6174711259" + { + "Name" = "8:#1928" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:StartupFolder" + "Folders" + { + } + } + "{1525181F-901A-416C-8A58-119130FE478E}:_ABE0F219945D4FF7B822A1A68DA89CE3" + { + "Name" = "8:#1921" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:StartMenuFolder" + "Folders" + { + "{9EF0B969-E518-4E46-987F-47570745A589}:_4397AB7DA5A84E81ABD483AEB5CD57CE" + { + "Name" = "8:Programs" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:_1456B512F5144A51AA2718993376FFEC" + "Folders" + { + } + } + } + } + } + "LaunchCondition" + { + } + "Locator" + { + } + "MsiBootstrapper" + { + "LangId" = "3:1033" + "RequiresElevation" = "11:FALSE" + } + "Product" + { + "Name" = "8:Microsoft Visual Studio" + "ProductName" = "8:XBatteryStatus" + "ProductCode" = "8:{2D31148D-AC60-42F8-9EFC-890DA8A361AB}" + "PackageCode" = "8:{A2151033-F670-43C8-BEC9-EAA6C062516F}" + "UpgradeCode" = "8:{93DDDD01-E50C-43CA-B3CB-EDF95BCEE958}" + "AspNetVersion" = "8:2.0.50727.0" + "RestartWWWService" = "11:FALSE" + "RemovePreviousVersions" = "11:TRUE" + "DetectNewerInstalledVersion" = "11:TRUE" + "InstallAllUsers" = "11:FALSE" + "ProductVersion" = "8:1.1.0" + "Manufacturer" = "8:Nova_Max" + "ARPHELPTELEPHONE" = "8:" + "ARPHELPLINK" = "8:https://github.com/tommaier123/XBatteryStatus" + "Title" = "8:XBatteryStatus" + "Subject" = "8:" + "ARPCONTACT" = "8:Nova_Max" + "Keywords" = "8:" + "ARPCOMMENTS" = "8:" + "ARPURLINFOABOUT" = "8:https://github.com/tommaier123/XBatteryStatus" + "ARPPRODUCTICON" = "8:_D3B16B81E2EF4E6AA74C24528735BCA3" + "ARPIconIndex" = "3:0" + "SearchPath" = "8:" + "UseSystemSearchPath" = "11:TRUE" + "TargetPlatform" = "3:1" + "PreBuildEvent" = "8:" + "PostBuildEvent" = "8:CALL cscript.exe \"$(ProjectDir)EnableLaunchApplication.js\" \"$(BuiltOuputPath)\"" + "RunPostBuildEvent" = "3:0" + } + "Registry" + { + "HKLM" + { + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_F121838DADBF442B91E95535963478BE" + { + "Name" = "8:Software" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_43D5DCD0734B4469A2A925C5294E4274" + { + "Name" = "8:[Manufacturer]" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + } + "Values" + { + } + } + } + "Values" + { + } + } + } + } + "HKCU" + { + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_E2AE339D1E184B43BE540CB511EA57C5" + { + "Name" = "8:Software" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_BF8C0C93287F41359F4D0DB2C7288FF9" + { + "Name" = "8:[Manufacturer]" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + } + "Values" + { + } + } + } + "Values" + { + } + } + } + } + "HKCR" + { + "Keys" + { + } + } + "HKU" + { + "Keys" + { + } + } + "HKPU" + { + "Keys" + { + } + } + } + "Sequences" + { + } + "Shortcut" + { + "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_AAE5F8DDAC104A1C83DDB81BDEADFC1F" + { + "Name" = "8:XBatteryStatus" + "Arguments" = "8:" + "Description" = "8:" + "ShowCmd" = "3:1" + "IconIndex" = "3:0" + "Transitive" = "11:FALSE" + "Target" = "8:_D53A1B57AD0D4264B99F2E57434B11E8" + "Folder" = "8:_907900DA25494D139D5B3D6174711259" + "WorkingFolder" = "8:_87BAE8FDA32844DE8EAEF43FC4BCFAAE" + "Icon" = "8:_D3B16B81E2EF4E6AA74C24528735BCA3" + "Feature" = "8:" + } + "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_D5A52AB781F84D0A8B602E9DEBDA1CA2" + { + "Name" = "8:XBatteryStatus" + "Arguments" = "8:" + "Description" = "8:" + "ShowCmd" = "3:1" + "IconIndex" = "3:0" + "Transitive" = "11:FALSE" + "Target" = "8:_D53A1B57AD0D4264B99F2E57434B11E8" + "Folder" = "8:_4397AB7DA5A84E81ABD483AEB5CD57CE" + "WorkingFolder" = "8:_87BAE8FDA32844DE8EAEF43FC4BCFAAE" + "Icon" = "8:_D3B16B81E2EF4E6AA74C24528735BCA3" + "Feature" = "8:" + } + } + "UserInterface" + { + "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_3557E4D4F67F4D1692E30901FDF6B19F" + { + "UseDynamicProperties" = "11:FALSE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdBasicDialogs.wim" + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_3E5996C29BC241E7ADC77628AF46A893" + { + "Name" = "8:#1900" + "Sequence" = "3:2" + "Attributes" = "3:1" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_04A0F6ECB2A042E2A46E59EB2420ECA4" + { + "Sequence" = "3:300" + "DisplayName" = "8:Confirm Installation" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminConfirmDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_1CE17124F01A4A0C9AAAA4BCC963A780" + { + "Sequence" = "3:200" + "DisplayName" = "8:Installation Folder" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminFolderDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_81890F608CF04421A5A3F02015758190" + { + "Sequence" = "3:100" + "DisplayName" = "8:Welcome" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminWelcomeDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "CopyrightWarning" + { + "Name" = "8:CopyrightWarning" + "DisplayName" = "8:#1002" + "Description" = "8:#1102" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1202" + "DefaultValue" = "8:#1202" + "UsePlugInResources" = "11:TRUE" + } + "Welcome" + { + "Name" = "8:Welcome" + "DisplayName" = "8:#1003" + "Description" = "8:#1103" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1203" + "DefaultValue" = "8:#1203" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_6F5CA1D8913A4ED6BEF1B855F466C12D" + { + "Name" = "8:#1900" + "Sequence" = "3:1" + "Attributes" = "3:1" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_D6B9A294F8814B0BB8699557864943AE" + { + "Sequence" = "3:200" + "DisplayName" = "8:Installation Folder" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdFolderDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "InstallAllUsersVisible" + { + "Name" = "8:InstallAllUsersVisible" + "DisplayName" = "8:#1059" + "Description" = "8:#1159" + "Type" = "3:5" + "ContextData" = "8:1;True=1;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:1" + "DefaultValue" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_D9842C8D97F945C68FC42B9E8B9B9E25" + { + "Sequence" = "3:300" + "DisplayName" = "8:Confirm Installation" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdConfirmDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_DD888378F58C4828856D8B0A185DE17D" + { + "Sequence" = "3:100" + "DisplayName" = "8:Welcome" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdWelcomeDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "CopyrightWarning" + { + "Name" = "8:CopyrightWarning" + "DisplayName" = "8:#1002" + "Description" = "8:#1102" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1202" + "DefaultValue" = "8:#1202" + "UsePlugInResources" = "11:TRUE" + } + "Welcome" + { + "Name" = "8:Welcome" + "DisplayName" = "8:#1003" + "Description" = "8:#1103" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1203" + "DefaultValue" = "8:#1203" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_7D66143A6406428DABA016929C0F43FD" + { + "Name" = "8:#1901" + "Sequence" = "3:2" + "Attributes" = "3:2" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_4073938A8BDB4F3F8491F50568556B2C" + { + "Sequence" = "3:100" + "DisplayName" = "8:Progress" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminProgressDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "ShowProgress" + { + "Name" = "8:ShowProgress" + "DisplayName" = "8:#1009" + "Description" = "8:#1109" + "Type" = "3:5" + "ContextData" = "8:1;True=1;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:1" + "DefaultValue" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_9F56BD46D2B84EFDB09D8B5CAF23FF63" + { + "Name" = "8:#1901" + "Sequence" = "3:1" + "Attributes" = "3:2" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_885617902E55410BB7795476BD92235E" + { + "Sequence" = "3:100" + "DisplayName" = "8:Progress" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdProgressDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "ShowProgress" + { + "Name" = "8:ShowProgress" + "DisplayName" = "8:#1009" + "Description" = "8:#1109" + "Type" = "3:5" + "ContextData" = "8:1;True=1;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:1" + "DefaultValue" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_BAA4AB655599401ABBDE879DF1A8C1B4" + { + "UseDynamicProperties" = "11:FALSE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdUserInterface.wim" + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_D5CD79BC2A8C48EB97F7811924D65559" + { + "Name" = "8:#1902" + "Sequence" = "3:2" + "Attributes" = "3:3" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_CDD659A3291C427AB2A9B68B8DD7F534" + { + "Sequence" = "3:100" + "DisplayName" = "8:Finished" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminFinishedDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_ECBB48BCFFF54624B2D33A88B0142771" + { + "Name" = "8:#1902" + "Sequence" = "3:1" + "Attributes" = "3:3" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_FAD0588A22AD4E9AAC6F8D2404AF52C1" + { + "Sequence" = "3:100" + "DisplayName" = "8:Finished" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdFinishedDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "UpdateText" + { + "Name" = "8:UpdateText" + "DisplayName" = "8:#1058" + "Description" = "8:#1158" + "Type" = "3:15" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1258" + "DefaultValue" = "8:#1258" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + } + "MergeModule" + { + } + "ProjectOutput" + { + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_D53A1B57AD0D4264B99F2E57434B11E8" + { + "SourcePath" = "8:..\\XBatteryStatus\\obj\\Release\\net5.0-windows10.0.19041.0\\apphost.exe" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_87BAE8FDA32844DE8EAEF43FC4BCFAAE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:PublishItems" + "OutputProjectGuid" = "8:{86B506A1-A575-4162-B557-61E6A73BDD36}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + } + } +}