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
+
+
+
+
+