diff --git a/ApplicationEvents.vb b/ApplicationEvents.vb new file mode 100644 index 00000000..ff8bc9aa --- /dev/null +++ b/ApplicationEvents.vb @@ -0,0 +1,88 @@ +Imports Microsoft.Win32 +Imports Microsoft.VisualBasic.ControlChars +Imports System.Management + +Namespace My + ' Los siguientes eventos están disponibles para MyApplication: + ' + ' Inicio: se desencadena cuando se inicia la aplicación, antes de que se cree el formulario de inicio. + ' Apagado: generado después de cerrar todos los formularios de la aplicación. Este evento no se genera si la aplicación termina de forma anómala. + ' UnhandledException: generado si la aplicación detecta una excepción no controlada. + ' StartupNextInstance: se desencadena cuando se inicia una aplicación de instancia única y la aplicación ya está activa. + ' NetworkAvailabilityChanged: se desencadena cuando la conexión de red está conectada o desconectada. + Partial Friend Class MyApplication + + Private Sub Start(sender As Object, e As EventArgs) Handles Me.Startup + AddHandler Microsoft.Win32.SystemEvents.UserPreferenceChanged, AddressOf SysEvts_UserPreferenceChanged + AddHandler Microsoft.Win32.SystemEvents.DisplaySettingsChanging, AddressOf SysEvts_DisplaySettingsChanging + AddHandler Microsoft.Win32.SystemEvents.DisplaySettingsChanged, AddressOf SysEvts_DisplaySettingsChanged + End Sub + + Private Sub CatchEmAll(sender As Object, e As Microsoft.VisualBasic.ApplicationServices.UnhandledExceptionEventArgs) Handles Me.UnhandledException + ExceptionForm.ErrorText.Text = e.Exception.ToString() & CrLf & CrLf & + "Error Message: " & e.Exception.Message & CrLf & CrLf & + "Error Code (HRESULT): " & e.Exception.HResult + Try + ' Get basic information about the system. This does not include any personally identifiable information (PII) or + ' serial numbers that can identify the computer this program is run on + Dim CS_Searcher As ManagementObjectSearcher = New ManagementObjectSearcher("SELECT Manufacturer, Model FROM Win32_ComputerSystem") + Dim BIOS_Searcher As ManagementObjectSearcher = New ManagementObjectSearcher("SELECT Name, Description, SMBIOSBIOSVersion FROM Win32_BIOS") + Dim Proc_Searcher As ManagementObjectSearcher = New ManagementObjectSearcher("SELECT Name, Caption, Manufacturer, Family FROM Win32_Processor") + Dim CS_Results As ManagementObjectCollection = CS_Searcher.Get() + Dim BIOS_Results As ManagementObjectCollection = BIOS_Searcher.Get() + Dim Proc_Results As ManagementObjectCollection = Proc_Searcher.Get() + ExceptionForm.ErrorText.AppendText(CrLf & CrLf & + "Machine information:" & CrLf) + For Each CS_Result As ManagementObject In CS_Results + ExceptionForm.ErrorText.AppendText(" - Computer manufacturer: " & CS_Result("Manufacturer") & CrLf & + " - Computer model: " & CS_Result("Model") & CrLf) + Next + For Each BIOS_Result As ManagementObject In BIOS_Results + ExceptionForm.ErrorText.AppendText(" - BIOS name/description: " & BIOS_Result("Name") & " " & BIOS_Result("Description") & CrLf & + " - System Management BIOS (SMBIOS) version: " & BIOS_Result("SMBIOSBIOSVersion") & CrLf & CrLf) + Next + ExceptionForm.ErrorText.AppendText("Operating system information:" & CrLf & + " - OS name: " & My.Computer.Info.OSFullName & CrLf & + " - OS version: " & My.Computer.Info.OSVersion & CrLf & + " - OS Platform: " & My.Computer.Info.OSPlatform & CrLf & + " - Is a 64-bit system? " & If(Environment.Is64BitOperatingSystem, "Yes", "No") & CrLf & CrLf & + "Processor information:" & CrLf) + For Each Proc_Result As ManagementObject In Proc_Results + ExceptionForm.ErrorText.AppendText(" - Processor name: " & Proc_Result("Name") & CrLf & + " - Processor caption: " & Proc_Result("Caption") & CrLf & + " - Processor manufacturer: " & Proc_Result("Manufacturer") & CrLf & + " - Processor family (WMI type): " & Proc_Result("Family") & CrLf & + " NOTE: refer to the following website to get the exact family type of your processor:" & CrLf & + " https://learn.microsoft.com/en-us/windows/win32/cimwin32prov/win32-processor" & CrLf & CrLf) + Next + ExceptionForm.ErrorText.AppendText("This information is gathered to help isolate the issue to a specific hardware or software configuration. " & + "No information that can be used to identify the user or the exact system is gathered." & CrLf & CrLf & + "If you don't want to send this information to the developers, paste the text that was copied to the clipboard in a text editor, remove this information, and copy the new text again.") + Catch ex As Exception + ' Could not get basic machine information + End Try + ExceptionForm.ShowDialog() + If ExceptionForm.DialogResult = DialogResult.OK Then + e.ExitApplication = False + ElseIf ExceptionForm.DialogResult = DialogResult.Cancel Then + e.ExitApplication = True + End If + End Sub + + Private Sub SysEvts_UserPreferenceChanged(sender As Object, e As Microsoft.Win32.UserPreferenceChangedEventArgs) + ' Do nothing + End Sub + + Private Sub SysEvts_DisplaySettingsChanged(sender As Object, e As EventArgs) + ' Do nothing + End Sub + + Private Sub SysEvts_DisplaySettingsChanging(sender As Object, e As EventArgs) + ' Do nothing + End Sub + + End Class + + +End Namespace + diff --git a/DISMTools.vbproj b/DISMTools.vbproj index 841a720e..0361d94d 100644 --- a/DISMTools.vbproj +++ b/DISMTools.vbproj @@ -137,6 +137,7 @@ Form + @@ -145,6 +146,12 @@ Form + + HelpVideoPlayer.vb + + + Form + Form @@ -191,6 +198,12 @@ Form + + ExceptionForm.vb + + + Form + BGProcsAdvSettings.vb @@ -680,6 +693,7 @@ + @@ -691,6 +705,9 @@ HelpBrowserForm.vb + + HelpVideoPlayer.vb + MainForm.vb @@ -712,6 +729,9 @@ ProgressPanel.vb + + ExceptionForm.vb + BGProcsAdvSettings.vb @@ -1022,6 +1042,7 @@ Always + @@ -1232,6 +1253,8 @@ + + @@ -1564,9 +1587,15 @@ IF NOT EXIST logs ( IF NOT EXIST scratch ( md scratch ) +:: Copy the Internet Explorer browser emulation registry file to the program directory +copy /y "$(SolutionDir)Tools\DT_IEConfig.reg" "DT_IEConfig.reg" IF %25ISPREVIEW%25=="Yes" ( echo You will be running a preview release, which may not be ready for production. You may experience more bugs and less stability. Please switch to a stable release whenever possible. ) +IF NOT EXIST videos ( + md videos + copy /y "$(SolutionDir)Videos\videoplay.html" "videos\videoplay_tmp.html" +) IF %25COPY_DOCS%25=="Yes" ( echo Copying help documentation... xcopy "$(ProjectDir)docs\*" "$(TargetDir)docs" /cehyi @@ -1603,7 +1632,14 @@ IF EXIST scratch ( ) IF EXIST docs ( rd docs /s /q -) +) + +IF EXIST videos ( + rd videos /s /q +) + +IF EXIST videos.xml (del videos.xml) +IF EXIST videos.xml.old (del videos.xml.old) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAMAEBAAAAEAIABoBAAANgAAACAgAAABACAAqBAAAJ4EAAAwMAAAAQAgAKglAABGFQAAKAAAABAA + AAAgAAAAAQAgAAAAAAAwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACyqqI/s6qh5rOq + ocmzqqEbAAAAAAAAAAAAAAAAAAAAADAgrk8xIK/mMCCvyCsrqgwAAAAAAAAAAAAAAAAAAAAAs6mhnqqB + U/+hfVf/s6qh2rOqoRsAAAAAAAAAADIfsFEyH6/7MSCv/zEgr/8yILBHAAAAAAAAAAAAAAAAAAAAALSp + oUSxoY/7saKR/7Oqof+zqqHas6qhGzAgr1AxH6/7MSCv/zEgr/8yIa/bMyKqDwAAAAAAAAAAAAAAAAAA + AAAAAAAAtKmhXLOqofyzqqH/s6qh/4p/pt8xIa/5MSCv/zEgr/8xIa7jLh+yIQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAC0qaFcs6qh/I2Apv8zIq//MSCv/zEgr/8yIK/cLxyzGwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKGYqGpqWcP/RDOw/zEgr/8+Lq36XVOsNAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACooZomkYap82hYw/9YSK//pZuj/6uhmtuhlo9JoZiPOYCA + gAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACuqJomq6Oa5amhmsSJe7WRqqCl/KSdlP+knJLrpJyU/6Ka + kv+gmJDTnpWNHQAAAAAAAAAAAAAAAAAAAACxo50nraWc5aqjmsSxnZ0NAAAAALCnoVGmnZXZqaGY/6ef + lv+knJT/opqS/6CYkLMAAAAAAAAAAAAAAACxqZ5cr6ad7a2lm7uqqo4JAAAAAAAAAAAAAAAArqad+Kyj + m/+poZiuppmZFKSdlHCimpLuAAAAAAAAAACzqqE5saif/6+mndiioqILAAAAAAAAAAAAAAAAAAAAALGo + n9eupp3/rKKbawAAAAAAAAAApJqUTAAAAAAAAAAAs6ugebGnnqmxo50nAAAAAAAAAAAAAAAAAAAAAAAA + AAC0q6JSsaif/K6mneasppkoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAALOqojyxqKCTraadcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAOfnAADDxwAA4YcAAPAP + AAD4HwAA/D8AAPwfAAD4AwAA84EAAOeNAADPnwAA388AAP/vAAD//wAAKAAAACAAAABAAAAAAQAgAAAA + AACAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACzqqIes6qgsrOqofazqqHTs6miSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + gAf+H8AD/D/A4/h/wfPw/8H74f/B/+H/4P/n//B////4P////////////////ygAAAAwAAAAYAAAAAEA + IAAAAAAAUCUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + r/8xIK//MSCv/zEgr/8xIK//MSCv/zEgr/8xIK//MSCv/zEfr8s5HKoJAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALitoxmzqqHXs6qh/7Oq + of+zqqH/s6qh/7Oqof+zqqH/s6qh/7Oqof+zqqH/s6qh/7Oqof+zqqHIu6qZDwAAAAAzIqoPMCCvyDEg + r/8xIK//MSCv/zEgr/8xIK//MSCv/zEgr/8xIK//MSCv/zEgr/8xIK//MSCw1zMfrRkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAC4raMZs6qh17Oqof+zqqH/s6qh/7Oqof+zqqH/s6qh/7Oqof+zqqH/s6qh/7Oqof+zqqH/s6qhyHJh + nh0xILDHMSCv/zEgr/8xIK//MSCv/zEgr/8xIK//MSCv/zEgr/8xIK//MSCv/zEgr/8xILDXMx+tGQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAuK2jGbOqodezqqH/s6qh/7Oqof+zqqH/s6qh/7Oqof+zqqH/s6qh/7Oq + of+zqqH/q6Ki/0g5rfMxIK//MSCv/zEgr/8xIK//MSCv/zEgr/8xIK//MSCv/zEgr/8xIK//MSCv/zEg + sNczH60ZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALitoxmzqqHXs6qh/7Oqof+zqqH/s6qh/7Oq + of+zqqH/s6qh/7Oqof+roqL/TT6s/zEgr/8xIK//MSCv/zEgr/8xIK//MSCv/zEgr/8xIK//MSCv/zEg + r/8xIK//MSCw1zMfrRkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4raMZs6qh17Oq + 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 + nf+tpZz3rqOcSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACyqqIhsqqgvLGp + oP+xqJ//sKee/6+mnv+upp3/raWc+K6im0IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAALOqojyyqZ+Ysaif1bCnnumvpp7srqad1a6lnVsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD/g///g/8AAP8B + //8B/wAA/wD//gH/AAD+AH/8AP8AAP4AP/gA/wAA/gAf8AD/AAD/AA/gAf8AAP8AB8AB/wAA/4ADgAP/ + AAD/wAEAB/8AAP/gAAAP/wAA//AAAB//AAD/+AAAP/8AAP/8AAB//wAA//4AAP//AAD//wAB//8AAP// + gAP//wAA///AAf//AAD//+AA//8AAP//wAB//wAA//+AAAH/AAD//wAAAH8AAP/+DgAAPwAA//wfAAAf + AAD/+D+AAA8AAP/wf8AADwAA/+D/4AAHAAD/wf/gDgcAAP8D/+AfhwAA/gf/4D/HAAD8D//gP+cAAPgP + /+A//wAA+B//8B//AADwP//wH/8AAPB///gP/wAA+////Af/AAD////+A/8AAP////+D/wAA//////// + AAD///////8AAP///////wAA////////AAA= + + + \ No newline at end of file diff --git a/Help/HelpVideoPlayer.vb b/Help/HelpVideoPlayer.vb new file mode 100644 index 00000000..d8ea1125 --- /dev/null +++ b/Help/HelpVideoPlayer.vb @@ -0,0 +1,33 @@ +Public Class HelpVideoPlayer + + Private Sub HelpVideoPlayer_Load(sender As Object, e As EventArgs) Handles MyBase.Load + Select Case MainForm.Language + Case 0 + Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName + Case "ENU", "ENG" + Text = "DISMTools Video Player" + Case "ESN" + Text = "Reproductor de vídeo de DISMTools" + Case "FRA" + Text = "Lecteur vidéo DISMTools" + Case "PTB", "PTG" + Text = "Reprodutor de vídeo DISMTools" + End Select + Case 1 + Text = "DISMTools Video Player" + Case 2 + Text = "Reproductor de vídeo de DISMTools" + Case 3 + Text = "Lecteur vidéo DISMTools" + Case 4 + Text = "Reprodutor de vídeo DISMTools" + End Select + End Sub + + Private Sub HelpVideoPlayer_VisibleChanged(sender As Object, e As EventArgs) Handles MyBase.VisibleChanged + If Visible Then + Dim handle As IntPtr = MainForm.GetWindowHandle(Me) + If MainForm.IsWindowsVersionOrGreater(10, 0, 18362) Then MainForm.EnableDarkTitleBar(handle, MainForm.BackColor = Color.FromArgb(48, 48, 48)) + End If + End Sub +End Class \ No newline at end of file diff --git a/Installer/Output/dt_setup.exe b/Installer/Output/dt_setup.exe index 740e7349..35ceaf65 100644 Binary files a/Installer/Output/dt_setup.exe and b/Installer/Output/dt_setup.exe differ diff --git a/Installer/dt.iss b/Installer/dt.iss index 6aa629fa..f63c9498 100644 --- a/Installer/dt.iss +++ b/Installer/dt.iss @@ -78,6 +78,7 @@ Source: ".\files\WeifenLuo.WinFormsUI.Docking.dll"; DestDir: "{#pfDir}"; Flags: Source: ".\files\WeifenLuo.WinFormsUI.Docking.ThemeVS2012.dll"; DestDir: "{#pfDir}"; Flags: ignoreversion Source: ".\files\bin\*"; DestDir: "{#pfDir}\bin"; Flags: ignoreversion recursesubdirs createallsubdirs Source: ".\files\docs\*"; DestDir: "{#pfDir}\docs"; Flags: ignoreversion recursesubdirs createallsubdirs +Source: ".\files\videos\*"; DestDir: "{#pfDir}\videos"; Flags: ignoreversion recursesubdirs createallsubdirs ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Registry] @@ -149,6 +150,9 @@ Root: HKCU; Subkey: "Software\DISMTools\Stable\InfoSaver"; ValueType: dword; Val Root: HKCU; Subkey: "Software\DISMTools\Stable\InfoSaver"; ValueType: dword; ValueName: "Cap_CompleteInfo"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist Root: HKCU; Subkey: "Software\DISMTools\Stable\InfoSaver"; ValueType: dword; ValueName: "Drv_CompleteInfo"; ValueData: 1; Flags: uninsdeletevalue createvalueifdoesntexist +; Special - Set Internet Explorer browser emulation settings +Root: HKCU; Subkey: "Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION"; ValueType: dword; ValueName: "DISMTools.exe"; ValueData: 11001; Flags: uninsdeletevalue createvalueifdoesntexist + [Icons] Name: "{autoprograms}\{#scName}"; Filename: "{#pfDir}\{#MyAppExeName}" Name: "{autodesktop}\{#scName}"; Filename: "{#pfDir}\{#MyAppExeName}"; Tasks: desktopicon diff --git a/MainForm.Designer.vb b/MainForm.Designer.vb index 1508b008..3dba1f54 100644 --- a/MainForm.Designer.vb +++ b/MainForm.Designer.vb @@ -225,6 +225,17 @@ Partial Class MainForm Me.Label9 = New System.Windows.Forms.Label() Me.LinkLabel25 = New System.Windows.Forms.LinkLabel() Me.TutorialVideoPanel = New System.Windows.Forms.Panel() + Me.VideoContainer = New System.Windows.Forms.Panel() + Me.VideosPanel = New System.Windows.Forms.Panel() + Me.ListView2 = New System.Windows.Forms.ListView() + Me.ColumnHeader4 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.ColumnHeader5 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader) + Me.VideoErrorPanel = New System.Windows.Forms.Panel() + Me.Button17 = New System.Windows.Forms.Button() + Me.TextBox2 = New System.Windows.Forms.TextBox() + Me.Label6 = New System.Windows.Forms.Label() + Me.Label7 = New System.Windows.Forms.Label() + Me.Label11 = New System.Windows.Forms.Label() Me.Panel1 = New System.Windows.Forms.Panel() Me.FlowLayoutPanel2 = New System.Windows.Forms.FlowLayoutPanel() Me.LinkLabel22 = New System.Windows.Forms.LinkLabel() @@ -517,6 +528,10 @@ Partial Class MainForm Me.FeedsPanel.SuspendLayout() Me.FeedErrorPanel.SuspendLayout() Me.Panel4.SuspendLayout() + Me.TutorialVideoPanel.SuspendLayout() + Me.VideoContainer.SuspendLayout() + Me.VideosPanel.SuspendLayout() + Me.VideoErrorPanel.SuspendLayout() Me.Panel1.SuspendLayout() Me.FlowLayoutPanel2.SuspendLayout() Me.SidePanel.SuspendLayout() @@ -2009,6 +2024,7 @@ Partial Class MainForm ' 'TutorialVideoPanel ' + Me.TutorialVideoPanel.Controls.Add(Me.VideoContainer) Me.TutorialVideoPanel.Dock = System.Windows.Forms.DockStyle.Fill Me.TutorialVideoPanel.Location = New System.Drawing.Point(0, 0) Me.TutorialVideoPanel.Name = "TutorialVideoPanel" @@ -2016,6 +2032,120 @@ Partial Class MainForm Me.TutorialVideoPanel.TabIndex = 0 Me.TutorialVideoPanel.Visible = False ' + 'VideoContainer + ' + Me.VideoContainer.Controls.Add(Me.VideosPanel) + Me.VideoContainer.Controls.Add(Me.VideoErrorPanel) + Me.VideoContainer.Dock = System.Windows.Forms.DockStyle.Fill + Me.VideoContainer.Location = New System.Drawing.Point(0, 0) + Me.VideoContainer.Name = "VideoContainer" + Me.VideoContainer.Size = New System.Drawing.Size(1008, 619) + Me.VideoContainer.TabIndex = 2 + ' + 'VideosPanel + ' + Me.VideosPanel.Controls.Add(Me.ListView2) + Me.VideosPanel.Dock = System.Windows.Forms.DockStyle.Fill + Me.VideosPanel.Location = New System.Drawing.Point(0, 0) + Me.VideosPanel.Name = "VideosPanel" + Me.VideosPanel.Padding = New System.Windows.Forms.Padding(8) + Me.VideosPanel.Size = New System.Drawing.Size(1008, 619) + Me.VideosPanel.TabIndex = 1 + ' + 'ListView2 + ' + Me.ListView2.BorderStyle = System.Windows.Forms.BorderStyle.None + Me.ListView2.Columns.AddRange(New System.Windows.Forms.ColumnHeader() {Me.ColumnHeader4, Me.ColumnHeader5}) + Me.ListView2.Dock = System.Windows.Forms.DockStyle.Fill + Me.ListView2.FullRowSelect = True + Me.ListView2.Location = New System.Drawing.Point(8, 8) + Me.ListView2.MultiSelect = False + Me.ListView2.Name = "ListView2" + Me.ListView2.Size = New System.Drawing.Size(992, 603) + Me.ListView2.TabIndex = 0 + Me.ListView2.UseCompatibleStateImageBehavior = False + ' + 'ColumnHeader4 + ' + Me.ColumnHeader4.Text = "Name" + Me.ColumnHeader4.Width = 375 + ' + 'ColumnHeader5 + ' + Me.ColumnHeader5.Text = "Description" + Me.ColumnHeader5.Width = 592 + ' + 'VideoErrorPanel + ' + Me.VideoErrorPanel.Controls.Add(Me.Button17) + Me.VideoErrorPanel.Controls.Add(Me.TextBox2) + Me.VideoErrorPanel.Controls.Add(Me.Label6) + Me.VideoErrorPanel.Controls.Add(Me.Label7) + Me.VideoErrorPanel.Controls.Add(Me.Label11) + Me.VideoErrorPanel.Dock = System.Windows.Forms.DockStyle.Fill + Me.VideoErrorPanel.Location = New System.Drawing.Point(0, 0) + Me.VideoErrorPanel.Name = "VideoErrorPanel" + Me.VideoErrorPanel.Size = New System.Drawing.Size(1008, 619) + Me.VideoErrorPanel.TabIndex = 0 + ' + 'Button17 + ' + Me.Button17.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Button17.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.Button17.Location = New System.Drawing.Point(880, 385) + Me.Button17.Name = "Button17" + Me.Button17.Size = New System.Drawing.Size(114, 23) + Me.Button17.TabIndex = 2 + Me.Button17.Text = "Try again" + Me.Button17.UseVisualStyleBackColor = True + ' + 'TextBox2 + ' + Me.TextBox2.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.TextBox2.Font = New System.Drawing.Font("Courier New", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.TextBox2.Location = New System.Drawing.Point(18, 78) + Me.TextBox2.Multiline = True + Me.TextBox2.Name = "TextBox2" + Me.TextBox2.ReadOnly = True + Me.TextBox2.ScrollBars = System.Windows.Forms.ScrollBars.Vertical + Me.TextBox2.Size = New System.Drawing.Size(972, 300) + Me.TextBox2.TabIndex = 1 + ' + 'Label6 + ' + Me.Label6.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Label6.AutoEllipsis = True + Me.Label6.Font = New System.Drawing.Font("Segoe UI", 9.0!) + Me.Label6.Location = New System.Drawing.Point(14, 411) + Me.Label6.Name = "Label6" + Me.Label6.Size = New System.Drawing.Size(978, 49) + Me.Label6.TabIndex = 0 + Me.Label6.Text = "Try connecting your system to the network. If your system is connected to the net" & _ + "work but this error still appears, check whether you can access websites." + ' + 'Label7 + ' + Me.Label7.AutoSize = True + Me.Label7.Font = New System.Drawing.Font("Segoe UI", 9.0!) + Me.Label7.Location = New System.Drawing.Point(14, 55) + Me.Label7.Name = "Label7" + Me.Label7.Size = New System.Drawing.Size(101, 15) + Me.Label7.TabIndex = 0 + Me.Label7.Text = "Error information:" + ' + 'Label11 + ' + Me.Label11.AutoSize = True + Me.Label11.Font = New System.Drawing.Font("Segoe UI", 15.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label11.Location = New System.Drawing.Point(12, 12) + Me.Label11.Name = "Label11" + Me.Label11.Size = New System.Drawing.Size(305, 30) + Me.Label11.TabIndex = 0 + Me.Label11.Text = "We couldn't get the latest news" + ' 'Panel1 ' Me.Panel1.Controls.Add(Me.FlowLayoutPanel2) @@ -2907,9 +3037,9 @@ Partial Class MainForm Me.PrjTasks.Location = New System.Drawing.Point(10, 410) Me.PrjTasks.Name = "PrjTasks" Me.PrjTasks.RowCount = 3 - Me.PrjTasks.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.3333282!)) - Me.PrjTasks.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.3333282!)) - Me.PrjTasks.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.3333282!)) + Me.PrjTasks.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333!)) + Me.PrjTasks.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333!)) + Me.PrjTasks.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 33.33333!)) Me.PrjTasks.Size = New System.Drawing.Size(283, 94) Me.PrjTasks.TabIndex = 13 ' @@ -3039,8 +3169,8 @@ Partial Class MainForm Or System.Windows.Forms.AnchorStyles.Left) _ Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.TableLayoutPanel6.ColumnCount = 2 - Me.TableLayoutPanel6.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 44.4444389!)) - Me.TableLayoutPanel6.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 55.5555611!)) + Me.TableLayoutPanel6.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 44.44444!)) + Me.TableLayoutPanel6.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 55.55556!)) Me.TableLayoutPanel6.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 163.0!)) Me.TableLayoutPanel6.Controls.Add(Me.LinkLabel14, 1, 3) Me.TableLayoutPanel6.Controls.Add(Me.Label50, 1, 2) @@ -3377,8 +3507,8 @@ Partial Class MainForm Or System.Windows.Forms.AnchorStyles.Left) _ Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.TableLayoutPanel5.ColumnCount = 2 - Me.TableLayoutPanel5.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 39.2000008!)) - Me.TableLayoutPanel5.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 60.7999992!)) + Me.TableLayoutPanel5.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 39.2!)) + Me.TableLayoutPanel5.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 60.8!)) Me.TableLayoutPanel5.Controls.Add(Me.Label39, 0, 0) Me.TableLayoutPanel5.Controls.Add(Me.Label40, 0, 4) Me.TableLayoutPanel5.Controls.Add(Me.Label41, 1, 0) @@ -3724,9 +3854,9 @@ Partial Class MainForm Or System.Windows.Forms.AnchorStyles.Left) _ Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.TableLayoutPanel2.ColumnCount = 3 - Me.TableLayoutPanel2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 32.4200897!)) - Me.TableLayoutPanel2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 67.5799103!)) - Me.TableLayoutPanel2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 107.0!)) + Me.TableLayoutPanel2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 32.42009!)) + Me.TableLayoutPanel2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 67.57991!)) + Me.TableLayoutPanel2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 115.0!)) Me.TableLayoutPanel2.Controls.Add(Me.ProjNameEditBtn, 2, 0) Me.TableLayoutPanel2.Controls.Add(Me.LinkLabel1, 1, 3) Me.TableLayoutPanel2.Controls.Add(Me.Panel8, 1, 0) @@ -3761,9 +3891,9 @@ Partial Class MainForm Me.LinkLabel1.Dock = System.Windows.Forms.DockStyle.Fill Me.LinkLabel1.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline Me.LinkLabel1.LinkColor = System.Drawing.Color.DodgerBlue - Me.LinkLabel1.Location = New System.Drawing.Point(62, 146) + Me.LinkLabel1.Location = New System.Drawing.Point(60, 146) Me.LinkLabel1.Name = "LinkLabel1" - Me.LinkLabel1.Size = New System.Drawing.Size(227, 254) + Me.LinkLabel1.Size = New System.Drawing.Size(229, 254) Me.LinkLabel1.TabIndex = 5 Me.LinkLabel1.TabStop = True Me.LinkLabel1.Text = "Click here to mount an image" @@ -3773,9 +3903,9 @@ Partial Class MainForm Me.Panel8.Controls.Add(Me.projName) Me.Panel8.Controls.Add(Me.projNameText) Me.Panel8.Dock = System.Windows.Forms.DockStyle.Fill - Me.Panel8.Location = New System.Drawing.Point(62, 3) + Me.Panel8.Location = New System.Drawing.Point(60, 3) Me.Panel8.Name = "Panel8" - Me.Panel8.Size = New System.Drawing.Size(119, 23) + Me.Panel8.Size = New System.Drawing.Size(113, 23) Me.Panel8.TabIndex = 8 ' 'projName @@ -3784,7 +3914,7 @@ Partial Class MainForm Me.projName.Dock = System.Windows.Forms.DockStyle.Fill Me.projName.Location = New System.Drawing.Point(0, 0) Me.projName.Name = "projName" - Me.projName.Size = New System.Drawing.Size(119, 23) + Me.projName.Size = New System.Drawing.Size(113, 23) Me.projName.TabIndex = 2 Me.projName.Text = "projName" Me.projName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft @@ -3794,7 +3924,7 @@ Partial Class MainForm Me.projNameText.Dock = System.Windows.Forms.DockStyle.Fill Me.projNameText.Location = New System.Drawing.Point(0, 0) Me.projNameText.Name = "projNameText" - Me.projNameText.Size = New System.Drawing.Size(119, 21) + Me.projNameText.Size = New System.Drawing.Size(113, 21) Me.projNameText.TabIndex = 4 Me.projNameText.Text = "projName" Me.projNameText.Visible = False @@ -3805,9 +3935,9 @@ Partial Class MainForm Me.Label5.AutoSize = True Me.TableLayoutPanel2.SetColumnSpan(Me.Label5, 2) Me.Label5.Dock = System.Windows.Forms.DockStyle.Fill - Me.Label5.Location = New System.Drawing.Point(62, 131) + Me.Label5.Location = New System.Drawing.Point(60, 131) Me.Label5.Name = "Label5" - Me.Label5.Size = New System.Drawing.Size(227, 15) + Me.Label5.Size = New System.Drawing.Size(229, 15) Me.Label5.TabIndex = 2 Me.Label5.Text = "imgStatus" ' @@ -3817,7 +3947,7 @@ Partial Class MainForm Me.Label2.Dock = System.Windows.Forms.DockStyle.Fill Me.Label2.Location = New System.Drawing.Point(3, 29) Me.Label2.Name = "Label2" - Me.Label2.Size = New System.Drawing.Size(53, 102) + Me.Label2.Size = New System.Drawing.Size(51, 102) Me.Label2.TabIndex = 1 Me.Label2.Text = "Location:" Me.Label2.TextAlign = System.Drawing.ContentAlignment.TopRight @@ -3827,9 +3957,9 @@ Partial Class MainForm Me.Label3.AutoEllipsis = True Me.TableLayoutPanel2.SetColumnSpan(Me.Label3, 2) Me.Label3.Dock = System.Windows.Forms.DockStyle.Fill - Me.Label3.Location = New System.Drawing.Point(62, 29) + Me.Label3.Location = New System.Drawing.Point(60, 29) Me.Label3.Name = "Label3" - Me.Label3.Size = New System.Drawing.Size(227, 102) + Me.Label3.Size = New System.Drawing.Size(229, 102) Me.Label3.TabIndex = 2 Me.Label3.Text = "projPath" ' @@ -3840,7 +3970,7 @@ Partial Class MainForm Me.Label4.Location = New System.Drawing.Point(3, 131) Me.Label4.Name = "Label4" Me.TableLayoutPanel2.SetRowSpan(Me.Label4, 2) - Me.Label4.Size = New System.Drawing.Size(53, 269) + Me.Label4.Size = New System.Drawing.Size(51, 269) Me.Label4.TabIndex = 1 Me.Label4.Text = "Images mounted?" Me.Label4.TextAlign = System.Drawing.ContentAlignment.TopRight @@ -3851,7 +3981,7 @@ Partial Class MainForm Me.Panel9.Dock = System.Windows.Forms.DockStyle.Fill Me.Panel9.Location = New System.Drawing.Point(3, 3) Me.Panel9.Name = "Panel9" - Me.Panel9.Size = New System.Drawing.Size(53, 23) + Me.Panel9.Size = New System.Drawing.Size(51, 23) Me.Panel9.TabIndex = 9 ' 'Label1 @@ -3859,7 +3989,7 @@ Partial Class MainForm Me.Label1.Dock = System.Windows.Forms.DockStyle.Fill Me.Label1.Location = New System.Drawing.Point(0, 0) Me.Label1.Name = "Label1" - Me.Label1.Size = New System.Drawing.Size(53, 23) + Me.Label1.Size = New System.Drawing.Size(51, 23) Me.Label1.TabIndex = 1 Me.Label1.Text = "Name:" Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight @@ -4015,8 +4145,8 @@ Partial Class MainForm Or System.Windows.Forms.AnchorStyles.Left) _ Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.TableLayoutPanel1.ColumnCount = 2 - Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 39.2000008!)) - Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 60.7999992!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 39.2!)) + Me.TableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 60.8!)) Me.TableLayoutPanel1.Controls.Add(Me.Label15, 0, 0) Me.TableLayoutPanel1.Controls.Add(Me.Label21, 0, 4) Me.TableLayoutPanel1.Controls.Add(Me.Label14, 1, 0) @@ -4945,6 +5075,7 @@ Partial Class MainForm Me.Controls.Add(Me.MenuStrip1) Me.Font = New System.Drawing.Font("Tahoma", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.KeyPreview = True Me.MaximumSize = New System.Drawing.Size(4096, 4096) Me.MinimumSize = New System.Drawing.Size(1280, 718) Me.Name = "MainForm" @@ -4969,6 +5100,11 @@ Partial Class MainForm Me.FeedErrorPanel.ResumeLayout(False) Me.FeedErrorPanel.PerformLayout() Me.Panel4.ResumeLayout(False) + Me.TutorialVideoPanel.ResumeLayout(False) + Me.VideoContainer.ResumeLayout(False) + Me.VideosPanel.ResumeLayout(False) + Me.VideoErrorPanel.ResumeLayout(False) + Me.VideoErrorPanel.PerformLayout() Me.Panel1.ResumeLayout(False) Me.FlowLayoutPanel2.ResumeLayout(False) Me.FlowLayoutPanel2.PerformLayout() @@ -5542,4 +5678,15 @@ Partial Class MainForm Friend WithEvents RecentsLV As System.Windows.Forms.ListView Friend WithEvents ColumnHeader3 As System.Windows.Forms.ColumnHeader Friend WithEvents RecentRemoveLink As System.Windows.Forms.LinkLabel + Friend WithEvents VideoContainer As System.Windows.Forms.Panel + Friend WithEvents VideosPanel As System.Windows.Forms.Panel + Friend WithEvents ListView2 As System.Windows.Forms.ListView + Friend WithEvents ColumnHeader4 As System.Windows.Forms.ColumnHeader + Friend WithEvents ColumnHeader5 As System.Windows.Forms.ColumnHeader + Friend WithEvents VideoErrorPanel As System.Windows.Forms.Panel + Friend WithEvents Button17 As System.Windows.Forms.Button + Friend WithEvents TextBox2 As System.Windows.Forms.TextBox + Friend WithEvents Label6 As System.Windows.Forms.Label + Friend WithEvents Label7 As System.Windows.Forms.Label + Friend WithEvents Label11 As System.Windows.Forms.Label End Class diff --git a/MainForm.resx b/MainForm.resx index ccd80cfb..a965acb8 100644 --- a/MainForm.resx +++ b/MainForm.resx @@ -197,12 +197,6 @@ JCQkJEQxb97/AOrW4M1DfY/XAAAAAElFTkSuQmCC - - 249, 17 - - - 356, 17 - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAABINJREFUWEft @@ -818,12 +812,6 @@ 727, 17 - - 132, 17 - - - 727, 17 - iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 diff --git a/MainForm.vb b/MainForm.vb index 40779edf..e435ee26 100644 --- a/MainForm.vb +++ b/MainForm.vb @@ -249,6 +249,7 @@ Public Class MainForm Dim ImageStatus As ImageWatcher.Status Public RecentList As New List(Of Recents) + Public VideoList As New List(Of Video) Friend NotInheritable Class NativeMethods @@ -425,6 +426,31 @@ Public Class MainForm RecentsLV.Items.Add(If(recentProject.ProjName <> "", recentProject.ProjName, Path.GetFileNameWithoutExtension(recentProject.ProjPath))) Next End Sub + + Function LoadVideos(filePath As String) As List(Of Video) + Dim vidList As New List(Of Video) + Try + Using fs As FileStream = New FileStream(filePath, FileMode.Open) + Dim xs As New XmlReaderSettings() + xs.IgnoreWhitespace = True + Using reader As XmlReader = XmlReader.Create(fs, xs) + While reader.Read() + If reader.NodeType = XmlNodeType.Element AndAlso reader.Name = "Video" Then + Dim vid As New Video() + vid.YT_ID = reader.GetAttribute("ID") + vid.VideoName = reader.GetAttribute("Name") + vid.VideoDesc = reader.GetAttribute("Description") + vidList.Add(vid) + End If + End While + End Using + End Using + Return vidList + Catch ex As Exception + Return Nothing + End Try + Return Nothing + End Function Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' Because of the DISM API, Windows 7 compatibility is out the window (no pun intended) @@ -546,8 +572,112 @@ Public Class MainForm End If End If End If + Try + Dim videoEx As Exception = New Exception() + If File.Exists(Application.StartupPath & "\videos.xml") Then File.Move(Application.StartupPath & "\videos.xml", Application.StartupPath & "\videos.xml.old") + Using client As New WebClient() + ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 + Try + client.DownloadFile("https://raw.githubusercontent.com/CodingWonders/dt_videos/main/videos.xml", Application.StartupPath & "\videos.xml") + Catch ex As Exception + videoEx = ex + Throw New Exception(If(videoEx IsNot Nothing, videoEx, "Could not get video feed")) + Debug.WriteLine("Could not download video list") + End Try + End Using + Try + If File.Exists(Application.StartupPath & "\videos.xml") Then + VideoList = LoadVideos(Application.StartupPath & "\videos.xml") + File.Delete(Application.StartupPath & "\videos.xml.old") + End If + Catch ex As Exception + videoEx = ex + If File.Exists(Application.StartupPath & "\videos.xml.old") Then File.Move(Application.StartupPath & "\videos.xml.old", Application.StartupPath & "\videos.xml") + VideoList = LoadVideos(Application.StartupPath & "\videos.xml") + End Try + ListView2.Items.Clear() + Dim thumbnailList As ImageList = New ImageList() + thumbnailList.ImageSize = New Size(160, 90) + thumbnailList.ColorDepth = ColorDepth.Depth32Bit + ListView2.View = View.LargeIcon + ListView2.LargeImageList = thumbnailList + If VideoList IsNot Nothing Then + If VideoList.Count > 0 Then + For Each VideoLink As Video In VideoList + Dim thumbnail As Image = GetItemThumbnail(VideoLink.YT_ID) + If thumbnail IsNot Nothing Then + Dim newThumb As Image = CombineImages(thumbnail) + thumbnailList.Images.Add(newThumb) + End If + Dim listItem As ListViewItem = New ListViewItem() + listItem.ImageIndex = VideoList.IndexOf(VideoLink) + listItem.Text = VideoLink.VideoName + ListView2.Items.Add(listItem) + Next + Else + Throw New Exception(If(videoEx IsNot Nothing, videoEx, "Could not get video feed")) + End If + Else + Throw New Exception(If(videoEx IsNot Nothing, videoEx, "Could not get video feed")) + End If + VideosPanel.Visible = True + VideoErrorPanel.Visible = False + Catch ex As Exception + VideosPanel.Visible = False + VideoErrorPanel.Visible = True + TextBox2.Text = ex.ToString() & " - " & ex.Message + End Try End Sub + Function GetItemThumbnail(videoId As String) As Image + Try + Dim thumbnailURI As String = "https://img.youtube.com/vi/" & videoId & "/maxresdefault.jpg" + Using client As WebClient = New WebClient() + Dim imgBytes() As Byte = client.DownloadData(thumbnailURI) + Using ms As MemoryStream = New MemoryStream(imgBytes) + Dim ogImg As Image = Image.FromStream(ms) + Dim thumbnail As Image = ResizeThumbnail(ogImg, 160, 90) + Return thumbnail + End Using + End Using + Catch ex As Exception + Return Nothing + End Try + Return Nothing + End Function + + Function ResizeThumbnail(img As Image, width As Integer, height As Integer) As Image + Try + Dim resImg As Bitmap = New Bitmap(width, height) + Using g As Graphics = Graphics.FromImage(resImg) + g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic + g.DrawImage(img, 0, 0, width, height) + End Using + Return resImg + Catch ex As Exception + Return Nothing + End Try + Return Nothing + End Function + + Function CombineImages(thumbnail As Image) As Image + Try + Dim play As Image = My.Resources.video_play + Dim combinedImage As Bitmap = New Bitmap(thumbnail.Width, thumbnail.Height) + Using g As Graphics = Graphics.FromImage(combinedImage) + g.DrawImage(thumbnail, 0, 0, thumbnail.Width, thumbnail.Height) + ' Draw Play symbol + Dim pX As Integer = (thumbnail.Width - play.Width) / 2 + Dim pY As Integer = (thumbnail.Height - play.Height) / 2 + g.DrawImage(play, pX, pY, play.Width, play.Height) + End Using + Return combinedImage + Catch ex As Exception + Return Nothing + End Try + Return Nothing + End Function + ''' ''' Detects all mounted images and their state. Calls the DISM API at program startup ''' @@ -675,7 +805,7 @@ Public Class MainForm File.Delete(Application.StartupPath & "\info.ini") Debug.WriteLine("Comparing versions...") Dim fv As String = My.Application.Info.Version.ToString() - If fv = latestVer Then + If fv = latestVer Or New Version(fv) > New Version(latestVer) Then Debug.WriteLine("There aren't any updates available") UpdatePanel.Visible = False Else @@ -5220,12 +5350,20 @@ Public Class MainForm LinkLabel22.LinkColor = Color.FromArgb(153, 153, 153) LinkLabel23.LinkColor = ForeColor LinkLabel24.LinkColor = Color.FromArgb(153, 153, 153) + ElseIf TutorialVideoPanel.Visible Then + LinkLabel22.LinkColor = Color.FromArgb(153, 153, 153) + LinkLabel23.LinkColor = Color.FromArgb(153, 153, 153) + LinkLabel24.LinkColor = ForeColor End If ListView1.BackColor = LatestNewsPanel.BackColor ListView1.ForeColor = LatestNewsPanel.ForeColor + ListView2.BackColor = TutorialVideoPanel.BackColor + ListView2.ForeColor = TutorialVideoPanel.ForeColor RecentsLV.BackColor = SidePanel.BackColor TextBox1.BackColor = BackColor TextBox1.ForeColor = ForeColor + TextBox2.BackColor = BackColor + TextBox2.ForeColor = ForeColor End Sub Sub ChangeLangs(LangCode As Integer) @@ -5595,6 +5733,11 @@ Public Class MainForm Label34.Text = "Error information:" Label35.Text = "Try connecting your system to the network. If your system is connected to the network but this error still appears, check whether you can access websites." Button59.Text = "Try again" + ' - Tutorial videos panel + Label11.Text = "We couldn't get the latest videos" + Label7.Text = "Error information:" + Label6.Text = "Try connecting your system to the network. If your system is connected to the network but this error still appears, check whether you can access websites." + Button17.Text = "Try again" Case "ESN" ' Top-level menu items FileToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Archivo".ToUpper(), "&Archivo") @@ -5958,6 +6101,11 @@ Public Class MainForm Label34.Text = "Información del error:" Label35.Text = "Pruebe conectar su sistema a la red. Si su sistema está conectado a la red pero sigue apareciendo este error, compruebe si puede acceder a sitios web." Button59.Text = "Intentar de nuevo" + ' - Tutorial videos panel + Label11.Text = "No pudimos obtener los últimos vídeos" + Label7.Text = "Información del error:" + Label6.Text = "Pruebe conectar su sistema a la red. Si su sistema está conectado a la red pero sigue apareciendo este error, compruebe si puede acceder a sitios web." + Button17.Text = "Intentar de nuevo" Case "FRA" ' Top-level menu items FileToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Fichier".ToUpper(), "&Fichier") @@ -6321,6 +6469,11 @@ Public Class MainForm Label34.Text = "Information d'erreur :" Label35.Text = "Essayez de connecter votre système au réseau. Si votre système est connecté au réseau mais que cette erreur persiste, vérifiez si vous pouvez accéder aux sites web." Button59.Text = "Réessayer" + ' - Tutorial videos panel + Label11.Text = "Nous n'avons pas pu obtenir les dernières vidéos" + Label7.Text = "Informations sur l'erreur :" + Label6.Text = "Essayez de connecter votre système au réseau. Si votre système est connecté au réseau mais que cette erreur apparaît toujours, vérifiez si vous pouvez accéder aux sites web." + Button17.Text = "Essayez à nouveau" Case "PTB", "PTG" ' Top-level menu items FileToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Ficheiro".ToUpper(), "&Ficheiro") @@ -6683,6 +6836,11 @@ Public Class MainForm Label34.Text = "Informação de erro:" Label35.Text = "Tente ligar o seu sistema à rede. Se o seu sistema estiver ligado à rede mas este erro continuar a aparecer, verifique se consegue aceder aos sítios Web." Button59.Text = "Tentar novamente" + ' - Tutorial videos panel + Label11.Text = "Não foi possível obter os vídeos mais recentes" + Label7.Text = "Informação de erro:" + Label6.Text = "Tente ligar o seu sistema à rede. Se o seu sistema estiver ligado à rede mas este erro continuar a aparecer, verifique se consegue aceder aos sítios Web." + Button17.Text = "Tentar novamente" Case Else Language = 1 ChangeLangs(Language) @@ -7051,6 +7209,11 @@ Public Class MainForm Label34.Text = "Error information:" Label35.Text = "Try connecting your system to the network. If your system is connected to the network but this error still appears, check whether you can access websites." Button59.Text = "Try again" + ' - Tutorial videos panel + Label11.Text = "We couldn't get the latest videos" + Label7.Text = "Error information:" + Label6.Text = "Try connecting your system to the network. If your system is connected to the network but this error still appears, check whether you can access websites." + Button17.Text = "Try again" Case 2 ' Top-level menu items FileToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Archivo".ToUpper(), "&Archivo") @@ -7413,6 +7576,11 @@ Public Class MainForm Label34.Text = "Información del error:" Label35.Text = "Pruebe conectar su sistema a la red. Si su sistema está conectado a la red pero sigue apareciendo este error, compruebe si puede acceder a sitios web." Button59.Text = "Intentar de nuevo" + ' - Tutorial videos panel + Label11.Text = "No pudimos obtener los últimos vídeos" + Label7.Text = "Información del error:" + Label6.Text = "Pruebe conectar su sistema a la red. Si su sistema está conectado a la red pero sigue apareciendo este error, compruebe si puede acceder a sitios web." + Button17.Text = "Intentar de nuevo" Case 3 ' Top-level menu items FileToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Fichier".ToUpper(), "&Fichier") @@ -7776,6 +7944,11 @@ Public Class MainForm Label34.Text = "Information d'erreur :" Label35.Text = "Essayez de connecter votre système au réseau. Si votre système est connecté au réseau mais que cette erreur persiste, vérifiez si vous pouvez accéder aux sites web." Button59.Text = "Réessayer" + ' - Tutorial videos panel + Label11.Text = "Nous n'avons pas pu obtenir les dernières vidéos" + Label7.Text = "Informations sur l'erreur :" + Label6.Text = "Essayez de connecter votre système au réseau. Si votre système est connecté au réseau mais que cette erreur apparaît toujours, vérifiez si vous pouvez accéder aux sites web." + Button17.Text = "Essayez à nouveau" Case 4 ' Top-level menu items FileToolStripMenuItem.Text = If(Options.CheckBox9.Checked, "&Ficheiro".ToUpper(), "&Ficheiro") @@ -8138,6 +8311,11 @@ Public Class MainForm Label34.Text = "Informação de erro:" Label35.Text = "Tente ligar o seu sistema à rede. Se o seu sistema estiver ligado à rede mas este erro continuar a aparecer, verifique se consegue aceder aos sítios Web." Button59.Text = "Tentar novamente" + ' - Tutorial videos panel + Label11.Text = "Não foi possível obter os vídeos mais recentes" + Label7.Text = "Informação de erro:" + Label6.Text = "Tente ligar o seu sistema à rede. Se o seu sistema estiver ligado à rede mas este erro continuar a aparecer, verifique se consegue aceder aos sítios Web." + Button17.Text = "Tentar novamente" End Select If OnlineManagement Then @@ -11553,7 +11731,7 @@ Public Class MainForm End Sub Private Sub ExplorerView_Click(sender As Object, e As EventArgs) Handles ExplorerView.Click, Button22.Click - Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.Windows) & "\explorer.exe", projPath) + Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.Windows) & "\explorer.exe", "/select," & Quote & projPath & "\" & projName.Text & ".dtproj" & Quote) End Sub Private Sub GetImageInfo_Click(sender As Object, e As EventArgs) Handles GetImageInfo.Click @@ -14981,7 +15159,7 @@ Public Class MainForm End Sub Private Sub LinkLabel16_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel16.LinkClicked - Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.Windows) & "\explorer.exe", projPath) + Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.Windows) & "\explorer.exe", "/select," & Quote & projPath & "\" & projName.Text & ".dtproj" & Quote) End Sub Private Sub LinkLabel17_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel17.LinkClicked @@ -16384,6 +16562,7 @@ Public Class MainForm Private Sub LinkLabel22_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel22.LinkClicked GetStartedPanel.Visible = True LatestNewsPanel.Visible = False + TutorialVideoPanel.Visible = False LinkLabel22.LinkColor = ForeColor LinkLabel23.LinkColor = Color.FromArgb(153, 153, 153) LinkLabel24.LinkColor = Color.FromArgb(153, 153, 153) @@ -16392,12 +16571,16 @@ Public Class MainForm Private Sub LinkLabel23_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel23.LinkClicked GetStartedPanel.Visible = False LatestNewsPanel.Visible = True + TutorialVideoPanel.Visible = False LinkLabel22.LinkColor = Color.FromArgb(153, 153, 153) LinkLabel23.LinkColor = ForeColor LinkLabel24.LinkColor = Color.FromArgb(153, 153, 153) End Sub Private Sub LinkLabel24_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel24.LinkClicked + GetStartedPanel.Visible = False + LatestNewsPanel.Visible = False + TutorialVideoPanel.Visible = True LinkLabel22.LinkColor = Color.FromArgb(153, 153, 153) LinkLabel23.LinkColor = Color.FromArgb(153, 153, 153) LinkLabel24.LinkColor = ForeColor @@ -16906,6 +17089,7 @@ Public Class MainForm "Pretende iniciar o processo de reversão?" End Select If MsgBox(msg, vbYesNo + vbExclamation, Text) = MsgBoxResult.Yes Then + If Not ProgressPanel.IsDisposed Then ProgressPanel.Dispose() ProgressPanel.OperationNum = 86 ProgressPanel.ShowDialog(Me) Close() @@ -16994,6 +17178,7 @@ Public Class MainForm "Pretende remover a capacidade de retroceder para uma versão mais antiga do Windows?" End Select If MsgBox(msg, vbYesNo + vbExclamation, Text) = MsgBoxResult.Yes Then + If Not ProgressPanel.IsDisposed Then ProgressPanel.Dispose() ProgressPanel.OperationNum = 87 ProgressPanel.ShowDialog(Me) Else @@ -17060,4 +17245,108 @@ Public Class MainForm Next RecentRemoveLink.Visible = False End Sub + + Private Sub MainForm_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown + ' Alt-B (Background process panel) + If e.KeyCode = Keys.B And e.Alt Then + If Not HomePanel.Visible Then + BackgroundProcessesButton.PerformClick() + Focus() + End If + End If + End Sub + + Sub LoadVideo(ID As String, Name As String, Description As String) + If File.Exists(Application.StartupPath & "\videos\videoplay.html") Then File.Delete(Application.StartupPath & "\videos\videoplay.html") + If File.Exists(Application.StartupPath & "\videos\videoplay_tmp.html") Then + Dim vidPlayRTB As New RichTextBox() With { + .Text = My.Computer.FileSystem.ReadAllText(Application.StartupPath & "\videos\videoplay_tmp.html") + } + vidPlayRTB.Text = vidPlayRTB.Text.Replace("{#REPLACEME}", ID).Trim().Replace("{#NAME}", Name).Trim().Replace("{#DESCRIPTION}", Description).Trim() + ' Set appropriate color mode in light theme + If BackColor = Color.FromArgb(239, 239, 242) Then + vidPlayRTB.Text = vidPlayRTB.Text.Replace("", "").Trim() + End If + File.WriteAllText(Application.StartupPath & "\videos\videoplay.html", vidPlayRTB.Text, UTF8) + HelpVideoPlayer.WebBrowser1.Navigate(Application.StartupPath & "\videos\videoplay.html") + ' Check emulation mode settings of IE for DISMTools and set them to IE11 (+Edge) (if not detected) + Try + Dim IECompatRk As RegistryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", True) + Dim IECompatInt As Integer = IECompatRk.GetValue("DISMTools.exe", -1) + If IECompatInt <> 11001 Then + IECompatRk.SetValue("DISMTools.exe", 11001, RegistryValueKind.DWord) + MsgBox("Modified Internet Explorer emulation settings for DISMTools. You will need to restart DISMTools in order to start video playback", vbOKOnly + vbInformation, "DISMTools") + IECompatRk.Close() + Exit Sub + End If + IECompatRk.Close() + Catch ex As Exception + MsgBox("DISMTools could not modify Internet Explorer emulation settings. Video playback will not start.", vbOKOnly + vbCritical, "DISMTools") + Exit Sub + End Try + HelpVideoPlayer.Show() + End If + End Sub + + Private Sub ListView2_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles ListView2.MouseDoubleClick + LoadVideo(VideoList(ListView2.FocusedItem.Index).YT_ID, + VideoList(ListView2.FocusedItem.Index).VideoName, + VideoList(ListView2.FocusedItem.Index).VideoDesc) + End Sub + + Private Sub Button17_Click(sender As Object, e As EventArgs) Handles Button17.Click + Try + Dim videoEx As Exception = New Exception() + If File.Exists(Application.StartupPath & "\videos.xml") Then File.Move(Application.StartupPath & "\videos.xml", Application.StartupPath & "\videos.xml.old") + Using client As New WebClient() + ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 + Try + client.DownloadFile("https://raw.githubusercontent.com/CodingWonders/dt_videos/main/videos.xml", Application.StartupPath & "\videos.xml") + Catch ex As Exception + videoEx = ex + Throw New Exception(If(videoEx IsNot Nothing, videoEx, "Could not get video feed")) + Debug.WriteLine("Could not download video list") + End Try + End Using + Try + If File.Exists(Application.StartupPath & "\videos.xml") Then + VideoList = LoadVideos(Application.StartupPath & "\videos.xml") + File.Delete(Application.StartupPath & "\videos.xml.old") + End If + Catch ex As Exception + videoEx = ex + If File.Exists(Application.StartupPath & "\videos.xml.old") Then File.Move(Application.StartupPath & "\videos.xml.old", Application.StartupPath & "\videos.xml") + VideoList = LoadVideos(Application.StartupPath & "\videos.xml") + End Try + ListView2.Items.Clear() + Dim thumbnailList As ImageList = New ImageList() + thumbnailList.ImageSize = New Size(160, 90) + thumbnailList.ColorDepth = ColorDepth.Depth32Bit + ListView2.View = View.LargeIcon + ListView2.LargeImageList = thumbnailList + If VideoList IsNot Nothing Then + If VideoList.Count > 0 Then + For Each VideoLink As Video In VideoList + Dim thumbnail As Image = GetItemThumbnail(VideoLink.YT_ID) + If thumbnail IsNot Nothing Then + Dim newThumb As Image = CombineImages(thumbnail) + thumbnailList.Images.Add(newThumb) + End If + Dim listItem As ListViewItem = New ListViewItem() + listItem.ImageIndex = VideoList.IndexOf(VideoLink) + listItem.Text = VideoLink.VideoName + ListView2.Items.Add(listItem) + Next + End If + ElseIf VideoList Is Nothing OrElse VideoList.Count = 0 Then + Throw New Exception(If(videoEx IsNot Nothing, videoEx, "Could not get video feed")) + End If + VideosPanel.Visible = True + VideoErrorPanel.Visible = False + Catch ex As Exception + VideosPanel.Visible = False + VideoErrorPanel.Visible = True + TextBox2.Text = ex.ToString() & " - " & ex.Message + End Try + End Sub End Class \ No newline at end of file diff --git a/My Project/AssemblyInfo.vb b/My Project/AssemblyInfo.vb index e395550b..7d625954 100644 --- a/My Project/AssemblyInfo.vb +++ b/My Project/AssemblyInfo.vb @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' mediante el asterisco ('*'), como se muestra a continuación: ' - - + + diff --git a/My Project/Resources.Designer.vb b/My Project/Resources.Designer.vb index 746f7958..ebe769ef 100644 --- a/My Project/Resources.Designer.vb +++ b/My Project/Resources.Designer.vb @@ -640,6 +640,16 @@ Namespace My.Resources End Get End Property + ''' + ''' Busca un recurso adaptado de tipo System.Drawing.Bitmap. + ''' + Friend ReadOnly Property error_32px() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("error_32px", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + ''' ''' Busca un recurso adaptado de tipo System.Drawing.Bitmap. ''' @@ -2025,6 +2035,16 @@ Namespace My.Resources End Get End Property + ''' + ''' Busca un recurso adaptado de tipo System.Drawing.Bitmap. + ''' + Friend ReadOnly Property video_play() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("video_play", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + ''' ''' Busca un recurso adaptado de tipo System.Drawing.Bitmap. ''' @@ -2046,20 +2066,9 @@ Namespace My.Resources End Property ''' - ''' Busca una cadena traducida similar a Changes made since last preview - ''' - '''Enhancements: - ''' - '''- The default window size of the image information results dialog is now 1024x600 - '''- The alignment of the Recents list items to the home screen tasks has been improved - '''- Portuguese translations are now complete - ''' - '''Overall changes - ''' - '''Overall bugfixes: + ''' Busca una cadena traducida similar a To get more information about what's new in this release, check out the release notes over at: ''' - '''- Fixed some minor text editor issues in the Configuration List Editor - '''- Fixed an issue where the "Pick..." button in the image file information dialog would not be disabled automatically when selecting " [resto de la cadena truncado]";. + '''https://github.com/CodingWonders/DISMTools/releases/tag/v0.4.2_upd1. ''' Friend ReadOnly Property WhatsNew() As String Get diff --git a/My Project/Resources.resx b/My Project/Resources.resx index 5f738582..fe8b1013 100644 --- a/My Project/Resources.resx +++ b/My Project/Resources.resx @@ -1097,39 +1097,9 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI ..\Resources\get_appxpkg_info.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - Changes made since last preview + To get more information about what's new in this release, check out the release notes over at: -Enhancements: - -- The default window size of the image information results dialog is now 1024x600 -- The alignment of the Recents list items to the home screen tasks has been improved -- Portuguese translations are now complete - -Overall changes - -Overall bugfixes: - -- Fixed some minor text editor issues in the Configuration List Editor -- Fixed an issue where the "Pick..." button in the image file information dialog would not be disabled automatically when selecting "Currently mounted image" - -Overall new features and enhancements: - -- Portuguese translations have been implemented -- When selecting the boot drive in the offline installation source of the driver import dialog, it will switch to the online installation automatically -- You can now pick a mounted image in the image file information dialog -- The managed DISM API library was updated to version 3.1 -- Thanks to the DISM API library update, you can now view the general information of a driver file -- A help entry for downloading applications has been added to the AppX package addition dialog -- Operating system uninstallation tasks have been added. These include: - - Setting the OS uninstall window - - Initiating an OS uninstall - - Removing the ability to roll back to an old Windows version - - Getting the uninstall window -- You can now exclude user OneDrive folders by adding them to your configuration list automatically thanks to the OneDrive folder exclusion tool, available in the Tools menu of the DISM Configuration List Editor -- The Recents list has been implemented -- CODE: updated the assembly description -- CODE: size representation procedures in the "Utilities" class now support petabytes (PB) -- Project creation times have been reduced by ~2 seconds +https://github.com/CodingWonders/DISMTools/releases/tag/v0.4.2_upd1 ..\Resources\split_img.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -1212,4 +1182,10 @@ Overall new features and enhancements: ..\Resources\onedrive_exclusion.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\error_32px.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\video_play.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Panels/DoWork/ProgressPanel.vb b/Panels/DoWork/ProgressPanel.vb index 607b12c4..4522dfa8 100644 --- a/Panels/DoWork/ProgressPanel.vb +++ b/Panels/DoWork/ProgressPanel.vb @@ -5375,7 +5375,7 @@ Public Class ProgressPanel Visible = False ImgConversionSuccessDialog.ShowDialog(MainForm) If ImgConversionSuccessDialog.DialogResult = Windows.Forms.DialogResult.OK Then - Process.Start("\Windows\explorer.exe", Path.GetDirectoryName(imgDestFile)) + Process.Start("\Windows\explorer.exe", "/select," & Quote & imgDestFile & Quote) End If ElseIf OperationNum = 996 Then MainForm.DetectMountedImages(False) diff --git a/Panels/Exceptions/ExceptionForm.Designer.vb b/Panels/Exceptions/ExceptionForm.Designer.vb new file mode 100644 index 00000000..a25170c6 --- /dev/null +++ b/Panels/Exceptions/ExceptionForm.Designer.vb @@ -0,0 +1,171 @@ + _ +Partial Class ExceptionForm + Inherits System.Windows.Forms.Form + + 'Form reemplaza a Dispose para limpiar la lista de componentes. + _ + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + Try + If disposing AndAlso components IsNot Nothing Then + components.Dispose() + End If + Finally + MyBase.Dispose(disposing) + End Try + End Sub + + 'Requerido por el Diseñador de Windows Forms + Private components As System.ComponentModel.IContainer + + 'NOTA: el Diseñador de Windows Forms necesita el siguiente procedimiento + 'Se puede modificar usando el Diseñador de Windows Forms. + 'No lo modifique con el editor de código. + _ + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(ExceptionForm)) + Me.Label1 = New System.Windows.Forms.Label() + Me.PictureBox1 = New System.Windows.Forms.PictureBox() + Me.ErrorText = New System.Windows.Forms.TextBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.Label3 = New System.Windows.Forms.Label() + Me.Issue_Btn = New System.Windows.Forms.Button() + Me.Label4 = New System.Windows.Forms.Label() + Me.Continue_Btn = New System.Windows.Forms.Button() + Me.Exit_Btn = New System.Windows.Forms.Button() + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'Label1 + ' + Me.Label1.AutoEllipsis = True + Me.Label1.Location = New System.Drawing.Point(51, 13) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(561, 57) + Me.Label1.TabIndex = 0 + Me.Label1.Text = "We are sorry for the inconvenience, but DISMTools has run into an error that it c" & _ + "ouldn't handle and we need your help in order to continue." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "Here is the error " & _ + "information if you need it:" + ' + 'PictureBox1 + ' + Me.PictureBox1.Image = Global.DISMTools.My.Resources.Resources.error_32px + Me.PictureBox1.Location = New System.Drawing.Point(13, 13) + Me.PictureBox1.Name = "PictureBox1" + Me.PictureBox1.Size = New System.Drawing.Size(32, 32) + Me.PictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.PictureBox1.TabIndex = 1 + Me.PictureBox1.TabStop = False + ' + 'ErrorText + ' + Me.ErrorText.BorderStyle = System.Windows.Forms.BorderStyle.None + Me.ErrorText.Font = New System.Drawing.Font("Courier New", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.ErrorText.Location = New System.Drawing.Point(54, 73) + Me.ErrorText.Multiline = True + Me.ErrorText.Name = "ErrorText" + Me.ErrorText.ReadOnly = True + Me.ErrorText.ScrollBars = System.Windows.Forms.ScrollBars.Vertical + Me.ErrorText.Size = New System.Drawing.Size(558, 128) + Me.ErrorText.TabIndex = 2 + ' + 'Label2 + ' + Me.Label2.AutoEllipsis = True + Me.Label2.Font = New System.Drawing.Font("Tahoma", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.Label2.Location = New System.Drawing.Point(51, 204) + Me.Label2.Name = "Label2" + Me.Label2.Size = New System.Drawing.Size(561, 17) + Me.Label2.TabIndex = 0 + Me.Label2.Text = "Please help us fix this issue" + ' + 'Label3 + ' + Me.Label3.AutoEllipsis = True + Me.Label3.Location = New System.Drawing.Point(51, 221) + Me.Label3.Name = "Label3" + Me.Label3.Size = New System.Drawing.Size(561, 42) + Me.Label3.TabIndex = 0 + Me.Label3.Text = "In order to prevent this problem from happening again, we would like to know more" & _ + " about it by reporting an issue on the GitHub repository. You will need a GitHub" & _ + " account to report feedback." + ' + 'Issue_Btn + ' + Me.Issue_Btn.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.Issue_Btn.Location = New System.Drawing.Point(184, 266) + Me.Issue_Btn.Name = "Issue_Btn" + Me.Issue_Btn.Size = New System.Drawing.Size(256, 23) + Me.Issue_Btn.TabIndex = 3 + Me.Issue_Btn.Text = "Report this issue" + Me.Issue_Btn.UseVisualStyleBackColor = True + ' + 'Label4 + ' + Me.Label4.AutoEllipsis = True + Me.Label4.Location = New System.Drawing.Point(51, 308) + Me.Label4.Name = "Label4" + Me.Label4.Size = New System.Drawing.Size(561, 65) + Me.Label4.TabIndex = 0 + Me.Label4.Text = resources.GetString("Label4.Text") + ' + 'Continue_Btn + ' + Me.Continue_Btn.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Continue_Btn.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.Continue_Btn.Location = New System.Drawing.Point(350, 406) + Me.Continue_Btn.Name = "Continue_Btn" + Me.Continue_Btn.Size = New System.Drawing.Size(128, 23) + Me.Continue_Btn.TabIndex = 4 + Me.Continue_Btn.Text = "Continue" + Me.Continue_Btn.UseVisualStyleBackColor = True + ' + 'Exit_Btn + ' + Me.Exit_Btn.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.Exit_Btn.FlatStyle = System.Windows.Forms.FlatStyle.System + Me.Exit_Btn.Location = New System.Drawing.Point(484, 406) + Me.Exit_Btn.Name = "Exit_Btn" + Me.Exit_Btn.Size = New System.Drawing.Size(128, 23) + Me.Exit_Btn.TabIndex = 4 + Me.Exit_Btn.Text = "Exit" + Me.Exit_Btn.UseVisualStyleBackColor = True + ' + 'ExceptionForm + ' + Me.AcceptButton = Me.Continue_Btn + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(624, 441) + Me.Controls.Add(Me.Exit_Btn) + Me.Controls.Add(Me.Continue_Btn) + Me.Controls.Add(Me.Issue_Btn) + Me.Controls.Add(Me.ErrorText) + Me.Controls.Add(Me.PictureBox1) + Me.Controls.Add(Me.Label2) + Me.Controls.Add(Me.Label4) + Me.Controls.Add(Me.Label3) + Me.Controls.Add(Me.Label1) + Me.Font = New System.Drawing.Font("Tahoma", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.MaximizeBox = False + Me.MinimizeBox = False + Me.Name = "ExceptionForm" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "DISMTools - Internal Error" + Me.TopMost = True + CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + Friend WithEvents Label1 As System.Windows.Forms.Label + Friend WithEvents PictureBox1 As System.Windows.Forms.PictureBox + Friend WithEvents ErrorText As System.Windows.Forms.TextBox + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents Label3 As System.Windows.Forms.Label + Friend WithEvents Issue_Btn As System.Windows.Forms.Button + Friend WithEvents Label4 As System.Windows.Forms.Label + Friend WithEvents Continue_Btn As System.Windows.Forms.Button + Friend WithEvents Exit_Btn As System.Windows.Forms.Button +End Class diff --git a/Panels/Exceptions/ExceptionForm.resx b/Panels/Exceptions/ExceptionForm.resx new file mode 100644 index 00000000..80d6abd9 --- /dev/null +++ b/Panels/Exceptions/ExceptionForm.resx @@ -0,0 +1,382 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + You may be able to continue running the program by clicking Continue. However, if this error is displayed for a second time, you can forcefully close the program by clicking Exit. Do note that changes made to projects, as well as changes in the Recents list, will not be saved. + +What do you want to do? + + + + + AAABAAMAEBAAAAEAIABoBAAANgAAACAgAAABACAAqBAAAJ4EAAAwMAAAAQAgAKglAABGFQAAKAAAABAA + AAAgAAAAAQAgAAAAAAAwBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACyqqI/s6qh5rOq + ocmzqqEbAAAAAAAAAAAAAAAAAAAAADAgrk8xIK/mMCCvyCsrqgwAAAAAAAAAAAAAAAAAAAAAs6mhnqqB + U/+hfVf/s6qh2rOqoRsAAAAAAAAAADIfsFEyH6/7MSCv/zEgr/8yILBHAAAAAAAAAAAAAAAAAAAAALSp + oUSxoY/7saKR/7Oqof+zqqHas6qhGzAgr1AxH6/7MSCv/zEgr/8yIa/bMyKqDwAAAAAAAAAAAAAAAAAA + AAAAAAAAtKmhXLOqofyzqqH/s6qh/4p/pt8xIa/5MSCv/zEgr/8xIa7jLh+yIQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAC0qaFcs6qh/I2Apv8zIq//MSCv/zEgr/8yIK/cLxyzGwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKGYqGpqWcP/RDOw/zEgr/8+Lq36XVOsNAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACooZomkYap82hYw/9YSK//pZuj/6uhmtuhlo9JoZiPOYCA + gAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACuqJomq6Oa5amhmsSJe7WRqqCl/KSdlP+knJLrpJyU/6Ka + kv+gmJDTnpWNHQAAAAAAAAAAAAAAAAAAAACxo50nraWc5aqjmsSxnZ0NAAAAALCnoVGmnZXZqaGY/6ef + lv+knJT/opqS/6CYkLMAAAAAAAAAAAAAAACxqZ5cr6ad7a2lm7uqqo4JAAAAAAAAAAAAAAAArqad+Kyj + m/+poZiuppmZFKSdlHCimpLuAAAAAAAAAACzqqE5saif/6+mndiioqILAAAAAAAAAAAAAAAAAAAAALGo + n9eupp3/rKKbawAAAAAAAAAApJqUTAAAAAAAAAAAs6ugebGnnqmxo50nAAAAAAAAAAAAAAAAAAAAAAAA + AAC0q6JSsaif/K6mneasppkoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAALOqojyxqKCTraadcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAA//8AAOfnAADDxwAA4YcAAPAP + AAD4HwAA/D8AAPwfAAD4AwAA84EAAOeNAADPnwAA388AAP/vAAD//wAAKAAAACAAAABAAAAAAQAgAAAA + AACAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACzqqIes6qgsrOqofazqqHTs6miSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + gAf+H8AD/D/A4/h/wfPw/8H74f/B/+H/4P/n//B////4P////////////////ygAAAAwAAAAYAAAAAEA + IAAAAAAAUCUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + r/8xIK//MSCv/zEgr/8xIK//MSCv/zEgr/8xIK//MSCv/zEfr8s5HKoJAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALitoxmzqqHXs6qh/7Oq + of+zqqH/s6qh/7Oqof+zqqH/s6qh/7Oqof+zqqH/s6qh/7Oqof+zqqHIu6qZDwAAAAAzIqoPMCCvyDEg + r/8xIK//MSCv/zEgr/8xIK//MSCv/zEgr/8xIK//MSCv/zEgr/8xIK//MSCw1zMfrRkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAC4raMZs6qh17Oqof+zqqH/s6qh/7Oqof+zqqH/s6qh/7Oqof+zqqH/s6qh/7Oqof+zqqH/s6qhyHJh + nh0xILDHMSCv/zEgr/8xIK//MSCv/zEgr/8xIK//MSCv/zEgr/8xIK//MSCv/zEgr/8xILDXMx+tGQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAuK2jGbOqodezqqH/s6qh/7Oqof+zqqH/s6qh/7Oqof+zqqH/s6qh/7Oq + of+zqqH/q6Ki/0g5rfMxIK//MSCv/zEgr/8xIK//MSCv/zEgr/8xIK//MSCv/zEgr/8xIK//MSCv/zEg + sNczH60ZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALitoxmzqqHXs6qh/7Oqof+zqqH/s6qh/7Oq + of+zqqH/s6qh/7Oqof+roqL/TT6s/zEgr/8xIK//MSCv/zEgr/8xIK//MSCv/zEgr/8xIK//MSCv/zEg + r/8xIK//MSCw1zMfrRkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4raMZs6qh17Oq + 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 + nf+tpZz3rqOcSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACyqqIhsqqgvLGp + oP+xqJ//sKee/6+mnv+upp3/raWc+K6im0IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAALOqojyyqZ+Ysaif1bCnnumvpp7srqad1a6lnVsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD/g///g/8AAP8B + //8B/wAA/wD//gH/AAD+AH/8AP8AAP4AP/gA/wAA/gAf8AD/AAD/AA/gAf8AAP8AB8AB/wAA/4ADgAP/ + AAD/wAEAB/8AAP/gAAAP/wAA//AAAB//AAD/+AAAP/8AAP/8AAB//wAA//4AAP//AAD//wAB//8AAP// + gAP//wAA///AAf//AAD//+AA//8AAP//wAB//wAA//+AAAH/AAD//wAAAH8AAP/+DgAAPwAA//wfAAAf + AAD/+D+AAA8AAP/wf8AADwAA/+D/4AAHAAD/wf/gDgcAAP8D/+AfhwAA/gf/4D/HAAD8D//gP+cAAPgP + /+A//wAA+B//8B//AADwP//wH/8AAPB///gP/wAA+////Af/AAD////+A/8AAP////+D/wAA//////// + AAD///////8AAP///////wAA////////AAA= + + + \ No newline at end of file diff --git a/Panels/Exceptions/ExceptionForm.vb b/Panels/Exceptions/ExceptionForm.vb new file mode 100644 index 00000000..bee33415 --- /dev/null +++ b/Panels/Exceptions/ExceptionForm.vb @@ -0,0 +1,92 @@ +Imports Microsoft.VisualBasic.ControlChars + +Public Class ExceptionForm + + Dim copySuccess As String = "This information has been copied to the clipboard." + Dim copyFail As String = "You'll need to copy this information manually." + + Private Sub Issue_Btn_Click(sender As Object, e As EventArgs) Handles Issue_Btn.Click + DialogResult = Windows.Forms.DialogResult.None + Process.Start("https://github.com/CodingWonders/DISMTools/issues/new?assignees=CodingWonders&labels=bug%2C+good+first+issue&projects=&template=bug.md&title=Program%20Exception") + End Sub + + Private Sub Continue_Btn_Click(sender As Object, e As EventArgs) Handles Continue_Btn.Click + DialogResult = Windows.Forms.DialogResult.OK + Close() + End Sub + + Private Sub Exit_Btn_Click(sender As Object, e As EventArgs) Handles Exit_Btn.Click + DialogResult = Windows.Forms.DialogResult.Cancel + Close() + End Sub + + Private Sub ExceptionForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load + ' Use system language in case exception is thrown when trying to load settings + Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName + Case "ENU", "ENG" + Text = "DISMTools - Internal Error" + Label1.Text = "We are sorry for the inconvenience, but DISMTools has run into an error that it couldn't handle and we need your help in order to continue." & CrLf & CrLf & "Here is the error information if you need it:" + Label2.Text = "Please help us fix this issue" + Label3.Text = "In order to prevent this problem from happening again, we would like to know more about it by reporting an issue on the GitHub repository. You will need a GitHub account to report feedback." + Label4.Text = "You may be able to continue running the program by clicking Continue. However, if this error is displayed for a second time, you can forcefully close the program by clicking Exit. Do note that changes made to projects, as well as changes in the Recents list, will not be saved." & CrLf & CrLf & "What do you want to do?" + Issue_Btn.Text = "Report this issue" + Continue_Btn.Text = "Continue" + Exit_Btn.Text = "Exit" + copySuccess = "This information has been copied to the clipboard." + copyFail = "You'll need to copy this information manually." + Case "ESN" + Text = "DISMTools - Error interno" + Label1.Text = "Lo sentimos por el inconveniente, pero DISMTools ha sufrido un error que no pudo controlar y necesitamos su ayuda para poder continuar." & CrLf & CrLf & "Aquí tiene la información del error por si lo necesita:" + Label2.Text = "Por favor, ayúdenos a corregir este problema" + Label3.Text = "Para evitar que este problema ocurra de nuevo, nos gustaría saber más acerca de él reportando un error en el repositorio de GitHub. Necesitará una cuenta de GitHub para enviar comentarios." + Label4.Text = "Podrá ser capaz de continuar con la ejecución del programa haciendo clic en Continuar. En cambio, si este error se muestra por una segunda vez, puede cerrar el programa forzadamente haciendo clic en Salir. Dese cuenta de que los cambios de proyectos y de la lista de Recientes no se guardarán." & CrLf & CrLf & "¿Qué le gustaría hacer?" + Issue_Btn.Text = "Reportar este problema" + Continue_Btn.Text = "Continuar" + Exit_Btn.Text = "Salir" + copySuccess = "Esta información ha sido copiada al portapapeles." + copyFail = "Deberá copiar esta información manualmente." + Case "FRA" + Text = "DISMTools - Erreur interne" + Label1.Text = "Nous sommes désolés pour la gêne occasionnée, mais DISMTools a rencontré une erreur qu'il n'a pas pu gérer et nous avons besoin de votre aide pour continuer" & CrLf & CrLf & "Voici les informations sur l'erreur si vous en avez besoin :" + Label2.Text = "Veuillez nous aider à résoudre ce problème" + Label3.Text = "Afin d'éviter que ce problème ne se reproduise, nous aimerions en savoir plus en signalant un problème sur le dépôt GitHub. Vous devez disposer d'un compte GitHub pour signaler un problème." + Label4.Text = "Vous pouvez continuer à exécuter le programme en cliquant sur Continuer. Cependant, si cette erreur s'affiche une seconde fois, vous pouvez fermer le programme en cliquant sur Quitter. Notez que les modifications apportées aux projets, ainsi que les modifications apportées à la liste Récents, ne seront pas sauvegardées." & CrLf & CrLf & "Que voulez-vous faire ?" + Issue_Btn.Text = "Signaler ce problème" + Continue_Btn.Text = "Continuer" + Exit_Btn.Text = "Quitter" + copySuccess = "Cette information a été copiée dans le presse-papiers" + copyFail = "Vous devrez copier ces informations manuellement." + Case "PTB", "PTG" + Text = "DISMTools - Erro interno" + Label1.Text = "Lamentamos o incómodo, mas o DISMTools deparou-se com um erro que não conseguiu resolver e precisamos da sua ajuda para continuar." & CrLf & CrLf & "Aqui está a informação do erro, se precisar dela:" + Label2.Text = "Por favor, ajude-nos a resolver este problema" + Label3.Text = "Para evitar que este problema volte a acontecer, gostaríamos de saber mais sobre o mesmo, reportando um problema no repositório do GitHub. Necessita de uma conta GitHub para comunicar comentários." + Label4.Text = "Poderá continuar a executar o programa clicando em Continuar. No entanto, se este erro for apresentado pela segunda vez, pode fechar o programa à força, clicando em Sair. Tenha em atenção que as alterações efectuadas nos projectos, bem como as alterações na lista Recentes, não serão guardadas." & CrLf & CrLf & "O que pretende fazer?" + Issue_Btn.Text = "Comunicar este problema" + Continue_Btn.Text = "Continuar" + Exit_Btn.Text = "Sair" + copySuccess = "Esta informação foi copiada para a área de transferência." + copyFail = "Terá de copiar esta informação manualmente." + End Select + If MainForm.BackColor = Color.FromArgb(48, 48, 48) Then + BackColor = Color.FromArgb(31, 31, 31) + ForeColor = Color.White + ElseIf MainForm.BackColor = Color.FromArgb(239, 239, 242) Then + BackColor = Color.FromArgb(238, 238, 242) + ForeColor = Color.Black + End If + ErrorText.BackColor = BackColor + ErrorText.ForeColor = ForeColor + Dim handle As IntPtr = MainForm.GetWindowHandle(Me) + If MainForm.IsWindowsVersionOrGreater(10, 0, 18362) Then MainForm.EnableDarkTitleBar(handle, MainForm.BackColor = Color.FromArgb(48, 48, 48)) + Try + Dim data As New DataObject() + data.SetText(ErrorText.Text, TextDataFormat.Text) + Clipboard.SetDataObject(data, True) + ErrorText.AppendText(CrLf & CrLf & copySuccess) + Catch ex As Exception + ErrorText.AppendText(CrLf & CrLf & copyFail) + End Try + Beep() + End Sub +End Class \ No newline at end of file diff --git a/Panels/Get_Ops/AppxPkgs/GetAppxPkgInfo.vb b/Panels/Get_Ops/AppxPkgs/GetAppxPkgInfo.vb index 6b84c0d0..443bc796 100644 --- a/Panels/Get_Ops/AppxPkgs/GetAppxPkgInfo.vb +++ b/Panels/Get_Ops/AppxPkgs/GetAppxPkgInfo.vb @@ -385,15 +385,19 @@ Public Class GetAppxPkgInfoDlg Label5.Text = (folder & "\AppxManifest.xml").Replace("\\", "\").Trim() End If Next - If pkgDirs.Count <= 1 And Not Label5.Text.Contains(Label23.Text) Then - If File.Exists(pkgDirs(0).Replace("\\", "\").Trim() & "\AppxMetadata\AppxBundleManifest.xml") Then - Label5.Text = pkgDirs(0).Replace("\\", "\").Trim() & "\AppxMetadata\AppxBundleManifest.xml" - ElseIf File.Exists(pkgDirs(0).Replace("\\", "\").Trim() & "\AppxManifest.xml") Then - Label5.Text = pkgDirs(0).Replace("\\", "\").Trim() & "\AppxManifest.xml" - Else - Label5.Text = "" + Try + If pkgDirs.Count <= 1 And Not Label5.Text.Contains(Label23.Text) Then + If File.Exists(pkgDirs(0).Replace("\\", "\").Trim() & "\AppxMetadata\AppxBundleManifest.xml") Then + Label5.Text = pkgDirs(0).Replace("\\", "\").Trim() & "\AppxMetadata\AppxBundleManifest.xml" + ElseIf File.Exists(pkgDirs(0).Replace("\\", "\").Trim() & "\AppxManifest.xml") Then + Label5.Text = pkgDirs(0).Replace("\\", "\").Trim() & "\AppxManifest.xml" + Else + Label5.Text = "" + End If End If - End If + Catch ex As Exception + MsgBox("Could not get some information about this application.", vbOKOnly + vbCritical, Label1.Text) + End Try Panel4.Visible = True Panel7.Visible = False Else diff --git a/Panels/Img_Ops/AppxPkgs/AppInstallerDownloader.Designer.vb b/Panels/Img_Ops/AppxPkgs/AppInstallerDownloader.Designer.vb index 11557047..8762f14b 100644 --- a/Panels/Img_Ops/AppxPkgs/AppInstallerDownloader.Designer.vb +++ b/Panels/Img_Ops/AppxPkgs/AppInstallerDownloader.Designer.vb @@ -27,9 +27,15 @@ Partial Class AppInstallerDownloader Me.Label1 = New System.Windows.Forms.Label() Me.ProgressBar1 = New System.Windows.Forms.ProgressBar() Me.BackgroundWorker1 = New System.ComponentModel.BackgroundWorker() - Me.Label2 = New System.Windows.Forms.Label() + Me.StatusLbl = New System.Windows.Forms.Label() Me.Timer1 = New System.Windows.Forms.Timer(Me.components) + Me.GroupBox1 = New System.Windows.Forms.GroupBox() + Me.Label2 = New System.Windows.Forms.Label() + Me.downUriLbl = New System.Windows.Forms.Label() + Me.downSpdLbl = New System.Windows.Forms.Label() + Me.downETALbl = New System.Windows.Forms.Label() CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.GroupBox1.SuspendLayout() Me.SuspendLayout() ' 'PictureBox1 @@ -56,7 +62,9 @@ Partial Class AppInstallerDownloader ' 'ProgressBar1 ' - Me.ProgressBar1.Location = New System.Drawing.Point(55, 118) + Me.ProgressBar1.Anchor = CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.ProgressBar1.Location = New System.Drawing.Point(55, 238) Me.ProgressBar1.Name = "ProgressBar1" Me.ProgressBar1.Size = New System.Drawing.Size(637, 23) Me.ProgressBar1.TabIndex = 2 @@ -66,30 +74,90 @@ Partial Class AppInstallerDownloader Me.BackgroundWorker1.WorkerReportsProgress = True Me.BackgroundWorker1.WorkerSupportsCancellation = True ' + 'StatusLbl + ' + Me.StatusLbl.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.StatusLbl.AutoEllipsis = True + Me.StatusLbl.Location = New System.Drawing.Point(18, 130) + Me.StatusLbl.Name = "StatusLbl" + Me.StatusLbl.Size = New System.Drawing.Size(600, 18) + Me.StatusLbl.TabIndex = 1 + Me.StatusLbl.Text = "Status" + ' + 'Timer1 + ' + Me.Timer1.Enabled = True + Me.Timer1.Interval = 500 + ' + 'GroupBox1 + ' + Me.GroupBox1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.GroupBox1.Controls.Add(Me.downUriLbl) + Me.GroupBox1.Controls.Add(Me.downETALbl) + Me.GroupBox1.Controls.Add(Me.downSpdLbl) + Me.GroupBox1.Controls.Add(Me.Label2) + Me.GroupBox1.Controls.Add(Me.StatusLbl) + Me.GroupBox1.Location = New System.Drawing.Point(55, 72) + Me.GroupBox1.Name = "GroupBox1" + Me.GroupBox1.Size = New System.Drawing.Size(637, 160) + Me.GroupBox1.TabIndex = 3 + Me.GroupBox1.TabStop = False + Me.GroupBox1.Text = "Transfer details" + ' 'Label2 ' Me.Label2.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) Me.Label2.AutoEllipsis = True - Me.Label2.Location = New System.Drawing.Point(52, 97) + Me.Label2.Location = New System.Drawing.Point(18, 28) Me.Label2.Name = "Label2" - Me.Label2.Size = New System.Drawing.Size(640, 18) + Me.Label2.Size = New System.Drawing.Size(600, 14) Me.Label2.TabIndex = 1 - Me.Label2.Text = "Status" + Me.Label2.Text = "Download URL:" ' - 'Timer1 + 'downUriLbl ' - Me.Timer1.Enabled = True - Me.Timer1.Interval = 500 + Me.downUriLbl.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.downUriLbl.AutoEllipsis = True + Me.downUriLbl.Location = New System.Drawing.Point(18, 44) + Me.downUriLbl.Name = "downUriLbl" + Me.downUriLbl.Size = New System.Drawing.Size(600, 14) + Me.downUriLbl.TabIndex = 1 + ' + 'downSpdLbl + ' + Me.downSpdLbl.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.downSpdLbl.AutoEllipsis = True + Me.downSpdLbl.Location = New System.Drawing.Point(18, 64) + Me.downSpdLbl.Name = "downSpdLbl" + Me.downSpdLbl.Size = New System.Drawing.Size(600, 14) + Me.downSpdLbl.TabIndex = 1 + Me.downSpdLbl.Text = "Download speed:" + ' + 'downETALbl + ' + Me.downETALbl.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.downETALbl.AutoEllipsis = True + Me.downETALbl.Location = New System.Drawing.Point(18, 82) + Me.downETALbl.Name = "downETALbl" + Me.downETALbl.Size = New System.Drawing.Size(600, 14) + Me.downETALbl.TabIndex = 1 + Me.downETALbl.Text = "Estimated time remaining:" ' 'AppInstallerDownloader ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.ClientSize = New System.Drawing.Size(704, 161) + Me.ClientSize = New System.Drawing.Size(704, 281) Me.ControlBox = False + Me.Controls.Add(Me.GroupBox1) Me.Controls.Add(Me.ProgressBar1) - Me.Controls.Add(Me.Label2) Me.Controls.Add(Me.Label1) Me.Controls.Add(Me.PictureBox1) Me.Font = New System.Drawing.Font("Tahoma", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) @@ -101,6 +169,7 @@ Partial Class AppInstallerDownloader Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent Me.Text = "Downloading application package..." CType(Me.PictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.GroupBox1.ResumeLayout(False) Me.ResumeLayout(False) Me.PerformLayout() @@ -109,7 +178,12 @@ Partial Class AppInstallerDownloader Friend WithEvents Label1 As System.Windows.Forms.Label Friend WithEvents ProgressBar1 As System.Windows.Forms.ProgressBar Friend WithEvents BackgroundWorker1 As System.ComponentModel.BackgroundWorker - Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents StatusLbl As System.Windows.Forms.Label Friend WithEvents Timer1 As System.Windows.Forms.Timer + Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox + Friend WithEvents downUriLbl As System.Windows.Forms.Label + Friend WithEvents Label2 As System.Windows.Forms.Label + Friend WithEvents downETALbl As System.Windows.Forms.Label + Friend WithEvents downSpdLbl As System.Windows.Forms.Label End Class diff --git a/Panels/Img_Ops/AppxPkgs/AppInstallerDownloader.vb b/Panels/Img_Ops/AppxPkgs/AppInstallerDownloader.vb index e67ef01c..70600627 100644 --- a/Panels/Img_Ops/AppxPkgs/AppInstallerDownloader.vb +++ b/Panels/Img_Ops/AppxPkgs/AppInstallerDownloader.vb @@ -19,44 +19,84 @@ Public Class AppInstallerDownloader Dim Language As Integer Dim progress As String + Dim downSpd As Long + + Private sw As Stopwatch = New Stopwatch() + Private time As TimeSpan = New TimeSpan() + Private Sub AppInstallerDownloader_Load(sender As Object, e As EventArgs) Handles MyBase.Load Timer1.Enabled = True + downUriLbl.Text = "" + sw.Reset() + sw.Start() Select Case MainForm.Language Case 0 Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName Case "ENU", "ENG" Text = "Downloading application package..." Label1.Text = "Please wait while DISMTools downloads the application package to add it to this image. This can take some time, depending on your network connection speed." - Label2.Text = "Please wait..." + StatusLbl.Text = "Please wait..." + GroupBox1.Text = "Transfer details" + Label2.Text = "Download URL:" + downSpdLbl.Text = "Download speed: unknown" + downETALbl.Text = "Estimated time remaining: unknown" Case "ESN" Text = "Descargando paquete de aplicación..." Label1.Text = "Espere mientras DISMTools descarga el paquete de aplicación para añadirlo a esta imagen. Esto puede llevar algo de tiempo, dependiendo de la velocidad de su conexión de red." - Label2.Text = "Espere..." + StatusLbl.Text = "Espere..." + GroupBox1.Text = "Detalles de la transferencia" + Label2.Text = "URL de descarga:" + downSpdLbl.Text = "Velocidad de descarga: desconocida" + downETALbl.Text = "Tiempo restante estimado: desconocido" Case "FRA" Text = "Téléchargement du paquet de l'application en cours..." Label1.Text = "Veuillez patienter pendant que DISMTools télécharge le paquet d'application pour l'ajouter à cette image. Cela peut prendre un certain temps, en fonction de la vitesse de votre connexion réseau." - Label2.Text = "Veuillez patienter..." + StatusLbl.Text = "Veuillez patienter..." + GroupBox1.Text = "Détails du transfert" + Label2.Text = "URL de téléchargement :" + downSpdLbl.Text = "Vitesse de téléchargement : inconnue" + downETALbl.Text = "Temps restant estimé : inconnu" Case "PTB", "PTG" Text = "Descarregando o pacote da aplicação..." Label1.Text = "Aguarde enquanto o DISMTools baixa o pacote de aplicativos para adicioná-lo a esta imagem. Isso pode levar algum tempo, dependendo da velocidade da conexão de rede." - Label2.Text = "Aguarde..." + StatusLbl.Text = "Aguarde..." + GroupBox1.Text = "Detalhes da transferência" + Label2.Text = "URL de transferência:" + downSpdLbl.Text = "Velocidade de transferência: desconhecida" + downETALbl.Text = "Tempo estimado restante: desconhecido" End Select Case 1 Text = "Downloading application package..." Label1.Text = "Please wait while DISMTools downloads the application package to add it to this image. This can take some time, depending on your network connection speed." - Label2.Text = "Please wait..." + StatusLbl.Text = "Please wait..." + GroupBox1.Text = "Transfer details" + Label2.Text = "Download URL:" + downSpdLbl.Text = "Download speed: unknown" + downETALbl.Text = "Estimated time remaining: unknown" Case 2 Text = "Descargando paquete de aplicación..." Label1.Text = "Espere mientras DISMTools descarga el paquete de aplicación para añadirlo a esta imagen. Esto puede llevar algo de tiempo, dependiendo de la velocidad de su conexión de red." - Label2.Text = "Espere..." + StatusLbl.Text = "Espere..." + GroupBox1.Text = "Detalles de la transferencia" + Label2.Text = "URL de descarga:" + downSpdLbl.Text = "Velocidad de descarga: desconocida" + downETALbl.Text = "Tiempo restante estimado: desconocido" Case 3 Text = "Téléchargement du paquet de l'application en cours..." Label1.Text = "Veuillez patienter pendant que DISMTools télécharge le paquet d'application pour l'ajouter à cette image. Cela peut prendre un certain temps, en fonction de la vitesse de votre connexion réseau." - Label2.Text = "Veuillez patienter..." + StatusLbl.Text = "Veuillez patienter..." + GroupBox1.Text = "Détails du transfert" + Label2.Text = "URL de téléchargement :" + downSpdLbl.Text = "Vitesse de téléchargement : inconnue" + downETALbl.Text = "Temps restant estimé : inconnu" Case 4 Text = "Descarregando o pacote da aplicação..." Label1.Text = "Aguarde enquanto o DISMTools baixa o pacote de aplicativos para adicioná-lo a esta imagem. Isso pode levar algum tempo, dependendo da velocidade da conexão de rede." - Label2.Text = "Aguarde..." + StatusLbl.Text = "Aguarde..." + GroupBox1.Text = "Detalhes da transferência" + Label2.Text = "URL de transferência:" + downSpdLbl.Text = "Velocidade de transferência: desconhecida" + downETALbl.Text = "Tempo estimado restante: desconhecido" End Select If MainForm.BackColor = Color.FromArgb(48, 48, 48) Then BackColor = Color.FromArgb(31, 31, 31) @@ -65,6 +105,7 @@ Public Class AppInstallerDownloader BackColor = Color.FromArgb(238, 238, 242) ForeColor = Color.Black End If + GroupBox1.ForeColor = ForeColor Dim handle As IntPtr = MainForm.GetWindowHandle(Me) If MainForm.IsWindowsVersionOrGreater(10, 0, 18362) Then MainForm.EnableDarkTitleBar(handle, MainForm.BackColor = Color.FromArgb(48, 48, 48)) Language = MainForm.Language @@ -108,6 +149,7 @@ Public Class AppInstallerDownloader ' Detect if a URL has been detected and download it If AppInstallerUri <> "" Then + downUriLbl.Text = AppInstallerUri BackgroundWorker1.RunWorkerAsync() End If Catch ex As Exception @@ -148,6 +190,10 @@ Public Class AppInstallerDownloader Case 4 progress = "Descarregar o pacote da aplicação principal... (" & BytesToReadableSize(e.BytesReceived) & " de " & BytesToReadableSize(e.TotalBytesToReceive) & " descarregados)" End Select + downSpd = CLng(Math.Round(e.BytesReceived / sw.Elapsed.TotalSeconds, 2)) + If e.TotalBytesToReceive > 0 Then + time = TimeSpan.FromSeconds((e.TotalBytesToReceive - e.BytesReceived) / CDbl(downSpd)) + End If End Sub Private Sub WebClient_DownloadFileCompleted(sender As Object, e As AsyncCompletedEventArgs) @@ -158,7 +204,36 @@ Public Class AppInstallerDownloader #End Region Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick - Label2.Text = progress + StatusLbl.Text = progress + Select Case Language + Case 0 + Select Case My.Computer.Info.InstalledUICulture.ThreeLetterWindowsLanguageName + Case "ENU", "ENG" + downSpdLbl.Text = "Download speed: " & BytesToReadableSize(downSpd) & "/s" + downETALbl.Text = "Estimated time remaining: " & time.ToString("m\:ss") & " seconds" + Case "ESN" + downSpdLbl.Text = "Velocidad de descarga: " & BytesToReadableSize(downSpd) & "/s" + downETALbl.Text = "Tiempo restante estimado: " & time.ToString("m\:ss") & " segundos" + Case "FRA" + downSpdLbl.Text = "Vitesse de téléchargement : " & BytesToReadableSize(downSpd, True) & "/s" + downETALbl.Text = "Estimation du temps restant : " & time.ToString("m\:ss") & " secondes" + Case "PTB", "PTG" + downSpdLbl.Text = "Velocidade de transferência: " & BytesToReadableSize(downSpd) & "/s" + downETALbl.Text = "Tempo restante estimado: " & time.ToString("m\:ss") & " segundos" + End Select + Case 1 + downSpdLbl.Text = "Download speed: " & BytesToReadableSize(downSpd) & "/s" + downETALbl.Text = "Estimated time remaining: " & time.ToString("m\:ss") & " seconds" + Case 2 + downSpdLbl.Text = "Velocidad de descarga: " & BytesToReadableSize(downSpd) & "/s" + downETALbl.Text = "Tiempo restante estimado: " & time.ToString("m\:ss") & " segundos" + Case 3 + downSpdLbl.Text = "Vitesse de téléchargement : " & BytesToReadableSize(downSpd, True) & "/s" + downETALbl.Text = "Estimation du temps restant : " & time.ToString("m\:ss") & " secondes" + Case 4 + downSpdLbl.Text = "Velocidade de transferência: " & BytesToReadableSize(downSpd) & "/s" + downETALbl.Text = "Tempo restante estimado: " & time.ToString("m\:ss") & " segundos" + End Select End Sub Private Sub AppInstallerDownloader_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing diff --git a/Panels/Img_Ops/Drivers/ImportDrivers.vb b/Panels/Img_Ops/Drivers/ImportDrivers.vb index 1fc49990..e24fa03a 100644 --- a/Panels/Img_Ops/Drivers/ImportDrivers.vb +++ b/Panels/Img_Ops/Drivers/ImportDrivers.vb @@ -9,6 +9,7 @@ Public Class ImportDrivers Dim ImportSources() As String = New String(2) {"Windows image", "Online installation", "Offline installation"} Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + If Not ProgressPanel.IsDisposed Then ProgressPanel.Dispose() If ImportSourceInt < 0 Then Exit Sub Dim msg As String = "" If ComboBox1.SelectedItem = "" Then @@ -16,7 +17,9 @@ Public Class ImportDrivers MsgBox(msg, vbOKOnly + vbInformation, Label1.Text) Exit Sub Else - If DIList(ListView1.FocusedItem.Index).Name = Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.Windows)) Then ImportSourceInt = 1 + If ListView1.SelectedItems.Count = 1 Then + If DIList(ListView1.FocusedItem.Index).Name = Path.GetPathRoot(Environment.GetFolderPath(Environment.SpecialFolder.Windows)) Then ImportSourceInt = 1 + End If Select Case ImportSourceInt Case 0 If TextBox1.Text <> "" Then diff --git a/Panels/Img_Ops/ImgApply.vb b/Panels/Img_Ops/ImgApply.vb index 6edb7ade..9d5190f6 100644 --- a/Panels/Img_Ops/ImgApply.vb +++ b/Panels/Img_Ops/ImgApply.vb @@ -367,6 +367,8 @@ Public Class ImgApply GroupBox2.ForeColor = Color.Black GroupBox3.ForeColor = Color.Black GroupBox4.ForeColor = Color.Black + ListBox1.BackColor = Color.FromArgb(238, 238, 242) + StatusStrip1.BackColor = Color.FromArgb(238, 238, 242) ComboBox1.BackColor = Color.FromArgb(238, 238, 242) End If ComboBox1.ForeColor = ForeColor diff --git a/Panels/Img_Ops/OSUninst/SetOSUninstWindow.vb b/Panels/Img_Ops/OSUninst/SetOSUninstWindow.vb index f0288299..6172bb05 100644 --- a/Panels/Img_Ops/OSUninst/SetOSUninstWindow.vb +++ b/Panels/Img_Ops/OSUninst/SetOSUninstWindow.vb @@ -8,6 +8,7 @@ Public Class SetOSUninstWindow Dim uninstWindow As Integer Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click + If Not ProgressPanel.IsDisposed Then ProgressPanel.Dispose() If NumericUpDown1.Value = uninstWindow Then Exit Sub ProgressPanel.osUninstDayCount = NumericUpDown1.Value Me.DialogResult = System.Windows.Forms.DialogResult.OK diff --git a/Panels/Startup/SplashScreen.vb b/Panels/Startup/SplashScreen.vb index f998849e..5629e447 100644 --- a/Panels/Startup/SplashScreen.vb +++ b/Panels/Startup/SplashScreen.vb @@ -14,6 +14,8 @@ Public Class SplashScreen Opacity = opacityFade Refresh() Next opacityFade + Opacity = 1 + Refresh() Timer1.Enabled = False Timer1.Stop() End Sub diff --git a/Resources/error_32px.png b/Resources/error_32px.png new file mode 100644 index 00000000..3dcb9c4e Binary files /dev/null and b/Resources/error_32px.png differ diff --git a/Resources/video_play.png b/Resources/video_play.png new file mode 100644 index 00000000..3d553e33 Binary files /dev/null and b/Resources/video_play.png differ diff --git a/Tools/DT_IEConfig.reg b/Tools/DT_IEConfig.reg new file mode 100644 index 00000000..0f016623 --- /dev/null +++ b/Tools/DT_IEConfig.reg @@ -0,0 +1,5 @@ +Windows Registry Editor Version 5.00 + +; Set browser emulation mode for DISMTools to Internet Explorer 11 (+ Edge) +[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION] +"DISMTools.exe"=dword:00002af9 \ No newline at end of file diff --git a/Updater/DISMTools-UCS/MainForm.vb b/Updater/DISMTools-UCS/MainForm.vb index 15bc0059..99748a93 100644 --- a/Updater/DISMTools-UCS/MainForm.vb +++ b/Updater/DISMTools-UCS/MainForm.vb @@ -236,7 +236,7 @@ Public Class MainForm Sub CompareVersions() If File.Exists(Application.StartupPath & "\DISMTools.exe") Then Dim fv As String = FileVersionInfo.GetVersionInfo(Application.StartupPath & "\DISMTools.exe").ProductVersion.ToString() - If fv = latestVer Then + If fv = latestVer Or New Version(fv) > New Version(latestVer) Then MsgBox("There aren't any updates available", vbOKOnly + vbInformation, Text) End Else diff --git a/Updater/DISMTools-UCS/My Project/AssemblyInfo.vb b/Updater/DISMTools-UCS/My Project/AssemblyInfo.vb index 48564e23..f64413c7 100644 --- a/Updater/DISMTools-UCS/My Project/AssemblyInfo.vb +++ b/Updater/DISMTools-UCS/My Project/AssemblyInfo.vb @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' mediante el asterisco ('*'), como se muestra a continuación: ' - - + + diff --git a/Updater/DISMTools-UCS/update-bin/stable.ini b/Updater/DISMTools-UCS/update-bin/stable.ini index 94eaeab4..a1b0b33e 100644 --- a/Updater/DISMTools-UCS/update-bin/stable.ini +++ b/Updater/DISMTools-UCS/update-bin/stable.ini @@ -1,6 +1,6 @@ [Version] -LatestVer = 0.4.2.2424 -ReleaseTag = v0.4.2_stable +LatestVer = 0.4.2.2434 +ReleaseTag = v0.4.2_upd1 [Options] MigrateSettings = False \ No newline at end of file diff --git a/Updater/DISMTools-UCS/update-bin/update.exe b/Updater/DISMTools-UCS/update-bin/update.exe index 7aae6b60..7a622bb0 100644 Binary files a/Updater/DISMTools-UCS/update-bin/update.exe and b/Updater/DISMTools-UCS/update-bin/update.exe differ diff --git a/Updater/DISMTools-UCS/verinfo/stable.ini b/Updater/DISMTools-UCS/verinfo/stable.ini index 94eaeab4..a1b0b33e 100644 --- a/Updater/DISMTools-UCS/verinfo/stable.ini +++ b/Updater/DISMTools-UCS/verinfo/stable.ini @@ -1,6 +1,6 @@ [Version] -LatestVer = 0.4.2.2424 -ReleaseTag = v0.4.2_stable +LatestVer = 0.4.2.2434 +ReleaseTag = v0.4.2_upd1 [Options] MigrateSettings = False \ No newline at end of file diff --git a/Videos/Video.vb b/Videos/Video.vb new file mode 100644 index 00000000..77068fa1 --- /dev/null +++ b/Videos/Video.vb @@ -0,0 +1,19 @@ +Imports System.Xml.Serialization + +Namespace Elements + + + Public Class Video + + + Public Property YT_ID As String + + + Public Property VideoName As String + + + Public Property VideoDesc As String + + End Class + +End Namespace diff --git a/Videos/videoplay.html b/Videos/videoplay.html new file mode 100644 index 00000000..54b98c41 --- /dev/null +++ b/Videos/videoplay.html @@ -0,0 +1,42 @@ + + + + DISMTools Video Player + + + + +

{#NAME}

+

{#DESCRIPTION}

+ + + \ No newline at end of file