From 40e5ec5f42eca8dfa4907d689cf579021e41caa0 Mon Sep 17 00:00:00 2001 From: Elektro Date: Thu, 30 May 2019 13:48:21 +0200 Subject: [PATCH] New release v1.1 New release v1.1 --- Preview/Easy Link File Viewer 01.png | Bin 41555 -> 38664 bytes Preview/Easy Link File Viewer 02.png | Bin 40886 -> 36450 bytes Preview/Easy Link File Viewer 03.png | Bin 0 -> 39663 bytes README.md | 2 + src/App.config | 3 + src/DevCase/FileOrFolderNameEditor.vb | 127 +++++ src/DevCase/FileSizeConverter.vb | 189 +++++++ src/DevCase/FileUtil.vb | 103 ++++ src/DevCase/Filesize.vb | 474 +++++++++++++++++ src/DevCase/IconFileNameEditor.vb | 80 +++ src/DevCase/ImageUtil.vb | 170 +++++- src/DevCase/OpenFileOrFolderDialog.vb | 490 ++++++++++++++++++ src/DevCase/ShortcutFileInfo.vb | 101 ++-- .../ShortcutFileInfoIconIndexEditor.vb | 206 ++++++++ src/DevCase/SizeUnits.vb | 83 +++ src/DevCase/Win32/IShellItem.vb | 93 ++++ src/DevCase/Win32/NativeMethods.vb | 118 ++++- src/Easy Link File Viewer.vbproj | 17 + src/My Project/AssemblyInfo.vb | 4 +- src/My Project/Resources.Designer.vb | 40 ++ src/My Project/Resources.resx | 12 + src/My Project/Settings.Designer.vb | 12 + src/My Project/Settings.settings | 3 + src/Resources/FolderOpen_16x.png | Bin 0 -> 345 bytes src/Resources/FontSize_16x.png | Bin 0 -> 288 bytes src/Resources/NewFile_16x.png | Bin 0 -> 270 bytes src/Resources/Open_16x.png | Bin 0 -> 452 bytes src/UI/Form1.Designer.vb | 233 +++++++-- src/UI/Form1.resx | 3 + src/UI/Form1.vb | 484 +++++++++++++++-- 30 files changed, 2905 insertions(+), 142 deletions(-) create mode 100644 Preview/Easy Link File Viewer 03.png create mode 100644 src/DevCase/FileOrFolderNameEditor.vb create mode 100644 src/DevCase/FileSizeConverter.vb create mode 100644 src/DevCase/FileUtil.vb create mode 100644 src/DevCase/Filesize.vb create mode 100644 src/DevCase/IconFileNameEditor.vb create mode 100644 src/DevCase/OpenFileOrFolderDialog.vb create mode 100644 src/DevCase/ShortcutFileInfoIconIndexEditor.vb create mode 100644 src/DevCase/SizeUnits.vb create mode 100644 src/DevCase/Win32/IShellItem.vb create mode 100644 src/Resources/FolderOpen_16x.png create mode 100644 src/Resources/FontSize_16x.png create mode 100644 src/Resources/NewFile_16x.png create mode 100644 src/Resources/Open_16x.png diff --git a/Preview/Easy Link File Viewer 01.png b/Preview/Easy Link File Viewer 01.png index b27b15ac5401c8b72f2a0c8398a1331c1dd9cf50..30cca2b604cf08bc3e788f64fe84160d043c57d5 100644 GIT binary patch literal 38664 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 + ''' Provides a user interface for selecting a file or folder name. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' ---------------------------------------------------------------------------------------------------- + Friend Class FileOrFolderNameEditor : Inherits UITypeEditor + +#Region " Constructors " + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Initializes a new instance of the class. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Public Sub New() + MyBase.New() + End Sub + +#End Region + +#Region " Public Methods " + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Gets the editor style used by the method. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' An that can be used to gain additional context information. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' A value that indicates the style of editor used + ''' by the method. + ''' + ''' If the does not support this method, + ''' then will return . + ''' + ''' ---------------------------------------------------------------------------------------------------- + Public Overrides Function GetEditStyle(ByVal context As ITypeDescriptorContext) As UITypeEditorEditStyle + Return UITypeEditorEditStyle.Modal + End Function + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Edits the specified object's value using the editor style indicated by the method. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' An that can be used to gain additional context information. + ''' + ''' + ''' + ''' An that this editor can use to obtain services. + ''' + ''' + ''' + ''' The object to edit. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The new value of the object. + ''' + ''' If the value of the object has not changed, this should return the same object it was passed. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Public Overrides Function EditValue(ByVal context As ITypeDescriptorContext, ByVal provider As IServiceProvider, ByVal value As Object) As Object + + Using dlg As New OpenFileOrFolderDialog() With { + .Title = "Select a file or folder...", + .AutoUpgradeEnabled = True, + .DereferenceLinks = True, + .RestoreDirectory = True, + .ShowHelp = False + } + + If (dlg.ShowDialog = DialogResult.OK) Then + Return dlg.ItemName + End If + End Using + + Return MyBase.EditValue(context, provider, value) + + End Function + +#End Region + + End Class + +End Namespace + +#End Region diff --git a/src/DevCase/FileSizeConverter.vb b/src/DevCase/FileSizeConverter.vb new file mode 100644 index 0000000..30bc727 --- /dev/null +++ b/src/DevCase/FileSizeConverter.vb @@ -0,0 +1,189 @@ +' This source-code is freely distributed as part of "DevCase for .NET Framework". +' +' Maybe you would like to consider to buy this powerful set of libraries to support me. +' You can do loads of things with my apis for a big amount of diverse thematics. +' +' Here is a link to the purchase page: +' https://codecanyon.net/item/elektrokit-class-library-for-net/19260282 +' +' Thank you. + +#Region " Usage Examples " + +' +' +'Public ReadOnly Property FileSize As Long = 2048 ' Bytes + +' +' +'Public ReadOnly Property FileSize As New Filesize(2048, SizeUnits.Byte) + +#End Region + +#Region " Option Statements " + +Option Strict On +Option Explicit On +Option Infer Off + +#End Region + +#Region " Imports " + +Imports System.ComponentModel +Imports System.ComponentModel.Design.Serialization +Imports System.Globalization + +Imports DevCase.Core.IO + +#End Region + +#Region " FileSizeConverter " + +Namespace DevCase.Core.Design + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Provides a type converter to convert from a file size specified in bytes, + ''' to a rounded file size string using the most approximated unit of size. + ''' + ''' Conversion examples: + ''' + ''' Input value -> Result string + ''' + ''' 793 -> 793 Bytes + ''' + ''' 1533 -> 1,49 KB + ''' + ''' 2049 -> 2,00 KB + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' This is a code example. + ''' + ''' <TypeConverter(GetType(FileSizeConverter))> + ''' <Browsable(True)> + ''' Public ReadOnly Property FileSize As Long = 2048 ' Bytes + ''' + ''' <TypeConverter(GetType(FileSizeConverter))> + ''' <Browsable(True)> + ''' Public ReadOnly Property FileSize As New Filesize(2048, SizeUnits.Byte) + ''' + ''' + ''' ---------------------------------------------------------------------------------------------------- + Friend Class FileSizeConverter : Inherits TypeConverter + +#Region " Constructors " + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Initializes a new instance of the class. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Public Sub New() + MyBase.New() + End Sub + +#End Region + +#Region " Public Methods " + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Determines if this converter can convert an object in the given source type to the native type of the converter. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' An that provides a format context. + ''' + ''' + ''' + ''' A that represents the type from which you want to convert. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' if this converter can perform the operation; otherwise, . + ''' + ''' ---------------------------------------------------------------------------------------------------- + Public Overrides Function CanConvertFrom(ByVal context As ITypeDescriptorContext, ByVal sourceType As Type) As Boolean + + Return False + + End Function + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Returns whether this converter can convert the object to the specified type, using the specified context. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' An that provides a format context. + ''' + ''' + ''' + ''' A that represents the type you want to convert to. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' if this converter can perform the conversion; otherwise, . + ''' + ''' ---------------------------------------------------------------------------------------------------- + Public Overloads Overrides Function CanConvertTo(ByVal context As ITypeDescriptorContext, ByVal destinationType As Type) As Boolean + + If (destinationType = GetType(InstanceDescriptor)) Then + Return True + End If + + Return MyBase.CanConvertTo(context, destinationType) + + End Function + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Converts the specified object to another type. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' An that provides a format context. + ''' + ''' + ''' + ''' A that specifies the culture to represent the number. + ''' + ''' + ''' + ''' The object to convert. + ''' + ''' + ''' + ''' The type to convert the object to. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' An that represents the converted value. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Public Overrides Function ConvertTo(ByVal context As ITypeDescriptorContext, ByVal culture As CultureInfo, ByVal value As Object, ByVal destinationType As Type) As Object + + If (destinationType Is Nothing) Then + Throw New ArgumentNullException("destinationType") + End If + + If (destinationType Is GetType(String)) Then + If (TypeOf value Is Filesize) Then + Return DirectCast(value, Filesize).ToString() + End If + + Return New Filesize(CType(value, Double), SizeUnits.Byte).ToString() + End If + + Return MyBase.ConvertTo(context, culture, value, destinationType) + + End Function + +#End Region + + End Class + +End Namespace + +#End Region diff --git a/src/DevCase/FileUtil.vb b/src/DevCase/FileUtil.vb new file mode 100644 index 0000000..b216bfd --- /dev/null +++ b/src/DevCase/FileUtil.vb @@ -0,0 +1,103 @@ +' *********************************************************************** +' Author : ElektroStudios +' Modified : 29-April-2017 +' *********************************************************************** + +#Region " Public Members Summary " + +#Region " Methods " + +' OpenInExplorer(String) +' OpenInExplorer(FileInfo) + +#End Region + +#End Region + +#Region " Option Statements " + +Option Strict On +Option Explicit On +Option Infer Off + +#End Region + +#Region " Imports " + +Imports System.IO + +#End Region + +#Region " Files " + +Namespace DevCase.Core.IO.Tools + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Contains file related utilities. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Friend NotInheritable Class FileUtil + +#Region " Constructors " + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Prevents a default instance of the class from being created. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Private Sub New() + + End Sub + +#End Region + +#Region " Public Methods " + +#End Region + +#Region " Private Methods " + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Opens the specified file or folder in Explorer. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The file or folder path. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' File or directory not found.;itemPath + ''' + ''' ---------------------------------------------------------------------------------------------------- + + Friend Shared Sub InternalOpenInExplorer(ByVal itemPath As String) + + Dim arguments As String + + If File.Exists(itemPath) Then + Dim file As New FileInfo(itemPath) + arguments = String.Format("/Select,""{0}""", Path.Combine(file.DirectoryName, file.Name)) + + ElseIf Directory.Exists(itemPath) Then + Dim dir As New DirectoryInfo(itemPath) + arguments = String.Format("""{0}""", dir.FullName) + + Else + Throw New FileNotFoundException("File or directory not found.", fileName:=itemPath) + + End If + + Using p As Process = Process.Start("Explorer.exe", arguments) + End Using + + End Sub + +#End Region + + End Class + +End Namespace + +#End Region diff --git a/src/DevCase/Filesize.vb b/src/DevCase/Filesize.vb new file mode 100644 index 0000000..1a93774 --- /dev/null +++ b/src/DevCase/Filesize.vb @@ -0,0 +1,474 @@ +' This source-code is freely distributed as part of "DevCase for .NET Framework". +' +' Maybe you would like to consider to buy this powerful set of libraries to support me. +' You can do loads of things with my apis for a big amount of diverse thematics. +' +' Here is a link to the purchase page: +' https://codecanyon.net/item/elektrokit-class-library-for-net/19260282 +' +' Thank you. + +#Region " Public Members Summary " + +#Region " Constructors " + +' New(Double, SizeUnits) + +#End Region + +#Region " Properties " + +' Size(SizeUnits) As Double +' Size(SizeUnits, Integer, Opt: NumberFormatInfo) As String +' SizeRounded As Double +' SizeRounded(Integer, Opt: NumberFormatInfo) As String +' SizeUnit As SizeUnits +' SizeUnitNameShort As String +' SizeUnitNameLong As String + +#End Region + +#Region " Functions " + +' ToString() As String + +#End Region + +#End Region + +#Region " Option Statements " + +Option Strict On +Option Explicit On +Option Infer Off + +#End Region + +#Region " Imports " + +Imports System.ComponentModel +Imports System.Globalization +Imports System.Xml.Serialization + +Imports DevCase.Core.IO +Imports DevCase.Core.Design + +#End Region + +#Region " Filesize " + +Namespace DevCase.Core.IO + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Defines a filesize. + ''' + ''' Provides methods to round or convert a filesize between different units of size. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' This is a code example that performs a simple conversion between units of size. + ''' + ''' Dim fs As New Filesize(1073741824, Filesize.SizeUnits.Byte) + ''' + ''' Dim b As Double = fs.Size(Filesize.SizeUnits.Byte) + ''' Dim kb As Double = fs.Size(Filesize.SizeUnits.KiloByte) + ''' Dim mb As Double = fs.Size(Filesize.SizeUnits.MegaByte) + ''' Dim gb As Double = fs.Size(Filesize.SizeUnits.GigaByte) + ''' Dim tb As Double = fs.Size(Filesize.SizeUnits.TeraByte) + ''' Dim pb As Double = fs.Size(Filesize.SizeUnits.PetaByte) + ''' + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' This is a code example that rounds a filesize in bytes, to its most approximated unit of size. + ''' + ''' For Each sizeUnit As Filesize.SizeUnits In [Enum].GetValues(GetType(Filesize.SizeUnits)) + ''' + ''' Dim fsize As New Filesize(sizeUnit, Filesize.SizeUnits.Byte) + ''' + ''' Dim stringFormat As String = + ''' String.Format("{0} Bytes rounded to {1} {2}.", + ''' fsize.Size(Filesize.SizeUnits.Byte, CultureInfo.CurrentCulture.NumberFormat), + ''' fsize.SizeRounded(decimalPrecision:=2, numberFormatInfo:=Nothing), + ''' fsize.SizeUnitNameLong) + ''' + ''' Console.WriteLine(stringFormat) + ''' + ''' Next sizeUnit + ''' + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' This is a code example that converts a Terabyte (1099511627776 Bytes) to other units of size. + ''' + ''' Dim fsize As New Filesize(Filesize.SizeUnits.TeraByte, Filesize.SizeUnits.Byte) + ''' + ''' For Each sizeUnit As Filesize.SizeUnits In [Enum].GetValues(GetType(Filesize.SizeUnits)) + ''' + ''' Dim stringFormat As String = + ''' String.Format("{0} Bytes equals to {1} {2}.", + ''' fsize.Size(Filesize.SizeUnits.Byte, Nothing, CultureInfo.CurrentCulture.NumberFormat), + ''' fsize.Size(sizeUnit, 2, CultureInfo.CurrentCulture.NumberFormat), + ''' sizeUnit.ToString()) + ''' + ''' Console.WriteLine(stringFormat) + ''' + ''' Next sizeUnit + ''' + ''' + ''' ---------------------------------------------------------------------------------------------------- + + + Friend NotInheritable Class Filesize + +#Region " Private Fields " + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The filesize, in Bytes. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Private ReadOnly bytesB As Double + +#End Region + +#Region " Properties " + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Gets the filesize, in the specified unit of size. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The unit of size. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The filesize. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Public ReadOnly Property Size(ByVal sizeUnit As SizeUnits) As Double + + Get + Return Me.Convert(size:=Me.bytesB, fromUnit:=SizeUnits.Byte, toUnit:=sizeUnit) + End Get + End Property + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Gets the filesize, in the specified unit of size, using the specified numeric format. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The unit of size. + ''' + ''' + ''' + ''' A custom format provider. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The filesize. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Public ReadOnly Property Size(ByVal sizeUnit As SizeUnits, + ByVal decimalPrecision As Integer, + Optional ByVal numberFormatInfo As NumberFormatInfo = Nothing) As String + + Get + If (numberFormatInfo Is Nothing) Then + numberFormatInfo = CultureInfo.CurrentCulture.NumberFormat + End If + Return Me.Size(sizeUnit).ToString(String.Format("N{0}", decimalPrecision), numberFormatInfo) + End Get + End Property + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Gets the filesize, rounded using the most approximated unit of size. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The rounded filesize. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Public ReadOnly Property SizeRounded As Double + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Gets the filesize, rounded using the most approximated unit of size, with the specified decimal precision. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The decimal precision. + ''' + ''' + ''' + ''' A format provider. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The rounded value, with the specified decimal precision. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Public ReadOnly Property SizeRounded(ByVal decimalPrecision As Integer, + Optional ByVal numberFormatInfo As NumberFormatInfo = Nothing) As String + + Get + If numberFormatInfo Is Nothing Then + numberFormatInfo = CultureInfo.CurrentCulture.NumberFormat + End If + Return Me.SizeRounded.ToString(String.Format("N{0}", decimalPrecision), numberFormatInfo) + End Get + End Property + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Gets the used to round the . + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The . + ''' + ''' ---------------------------------------------------------------------------------------------------- + Public ReadOnly Property SizeUnit As SizeUnits + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Gets the short name of the used to round the . + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The short name of the . + ''' + ''' ---------------------------------------------------------------------------------------------------- + Public ReadOnly Property SizeUnitNameShort As String + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Gets the long name of the used to round the . + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The short long of the . + ''' + ''' ---------------------------------------------------------------------------------------------------- + Public ReadOnly Property SizeUnitNameLong As String + +#End Region + +#Region " Constructors " + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Prevents a default instance of the class from being created. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Private Sub New() + End Sub + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Initializes a new instance of the class. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The filesize. + ''' + ''' + ''' + ''' The unit of size. + ''' + ''' ---------------------------------------------------------------------------------------------------- + + Public Sub New(ByVal size As Double, ByVal sizeUnit As SizeUnits) + + Me.bytesB = Global.System.Convert.ToDouble(size * sizeUnit) + + Select Case Math.Abs(Me.bytesB) + + Case Is >= SizeUnits.Petabyte + Me.SizeRounded = (Me.bytesB / SizeUnits.Petabyte) + Me.SizeUnit = SizeUnits.Petabyte + Me.SizeUnitNameShort = "PB" + Me.SizeUnitNameLong = "PetaBytes" + + Case Is >= SizeUnits.Terabyte + Me.SizeRounded = (Me.bytesB / SizeUnits.Terabyte) + Me.SizeUnit = SizeUnits.Terabyte + Me.SizeUnitNameShort = "TB" + Me.SizeUnitNameLong = "TeraBytes" + + Case Is >= SizeUnits.Gigabyte + Me.SizeRounded = (Me.bytesB / SizeUnits.Gigabyte) + Me.SizeUnit = SizeUnits.Gigabyte + Me.SizeUnitNameShort = "GB" + Me.SizeUnitNameLong = "GigaBytes" + + Case Is >= SizeUnits.Megabyte + Me.SizeRounded = (Me.bytesB / SizeUnits.Megabyte) + Me.SizeUnit = SizeUnits.Megabyte + Me.SizeUnitNameShort = "MB" + Me.SizeUnitNameLong = "MegaBytes" + + Case Is >= SizeUnits.Kilobyte + Me.SizeRounded = (Me.bytesB / SizeUnits.Kilobyte) + Me.SizeUnit = SizeUnits.Kilobyte + Me.SizeUnitNameShort = "KB" + Me.SizeUnitNameLong = "KiloBytes" + + Case Is >= SizeUnits.Byte, Is = 0 + Me.SizeRounded = (Me.bytesB / SizeUnits.Byte) + Me.SizeUnit = SizeUnits.Byte + Me.SizeUnitNameShort = "Bytes" + Me.SizeUnitNameLong = "Bytes" + + End Select + + End Sub + +#End Region + +#Region " Public Methods " + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Returns a that represents this filesize. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' A that represents this filesize. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Public Overrides Function ToString() As String + Return Me.ToString(CultureInfo.InvariantCulture.NumberFormat) + End Function + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Returns a that represents this filesize. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' A that represents this filesize. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Public Overloads Function ToString(ByVal provider As IFormatProvider) As String + If Me.SizeUnit = SizeUnits.Byte Then + Return String.Format(provider, "{0:0.##} {1}", Math.Floor(Me.SizeRounded * 100) / 100, Me.SizeUnitNameShort) + Else + Return String.Format(provider, "{0:0.00} {1}", Math.Floor(Me.SizeRounded * 100) / 100, Me.SizeUnitNameShort) + End If + End Function + +#End Region + +#Region " Private Methods " + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Converts the specified filesize to a different unit of size. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The filesize. + ''' + ''' + ''' + ''' The unit size to convert from. + ''' + ''' + ''' + ''' The unit size to convert to. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The resulting value of the unit conversion. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' + ''' ---------------------------------------------------------------------------------------------------- + + Private Function Convert(ByVal size As Double, + ByVal fromUnit As SizeUnits, + ByVal toUnit As SizeUnits) As Double + + Dim bytes As Double + + If fromUnit = SizeUnits.Byte Then + bytes = size + + Else + bytes = Global.System.Convert.ToDouble(size * fromUnit) + + End If + + If (toUnit < fromUnit) Then + + Select Case toUnit + + Case SizeUnits.Byte + Return bytes + + Case SizeUnits.Kilobyte + Return (bytes / SizeUnits.Kilobyte) + + Case SizeUnits.Megabyte + Return (bytes / SizeUnits.Megabyte) + + Case SizeUnits.Gigabyte + Return (bytes / SizeUnits.Gigabyte) + + Case SizeUnits.Terabyte + Return (bytes / SizeUnits.Terabyte) + + Case SizeUnits.Petabyte + Return (bytes / SizeUnits.Petabyte) + + Case Else + Throw New InvalidEnumArgumentException(argumentName:=NameOf(toUnit), invalidValue:=CInt(toUnit), + enumClass:=GetType(SizeUnits)) + + End Select + + ElseIf (toUnit > fromUnit) Then + + Select Case toUnit + + Case SizeUnits.Byte + Return bytes + + Case SizeUnits.Kilobyte + Return (bytes * SizeUnits.Kilobyte / SizeUnits.Kilobyte ^ 2) + + Case SizeUnits.Megabyte + Return (bytes * SizeUnits.Megabyte / SizeUnits.Megabyte ^ 2) + + Case SizeUnits.Gigabyte + Return (bytes * SizeUnits.Gigabyte / SizeUnits.Gigabyte ^ 2) + + Case SizeUnits.Terabyte + Return (bytes * SizeUnits.Terabyte / SizeUnits.Terabyte ^ 2) + + Case SizeUnits.Petabyte + Return (bytes * SizeUnits.Petabyte / SizeUnits.Petabyte ^ 2) + + Case Else + Throw New InvalidEnumArgumentException(argumentName:=NameOf(toUnit), invalidValue:=CInt(toUnit), + enumClass:=GetType(SizeUnits)) + + End Select + + Else ' If toUnit = fromUnit + Return bytes + + End If + + End Function + +#End Region + + End Class + +End Namespace + +#End Region diff --git a/src/DevCase/IconFileNameEditor.vb b/src/DevCase/IconFileNameEditor.vb new file mode 100644 index 0000000..2e34808 --- /dev/null +++ b/src/DevCase/IconFileNameEditor.vb @@ -0,0 +1,80 @@ +' This source-code is freely distributed as part of "DevCase for .NET Framework". +' +' Maybe you would like to consider to buy this powerful set of libraries to support me. +' You can do loads of things with my apis for a big amount of diverse thematics. +' +' Here is a link to the purchase page: +' https://codecanyon.net/item/elektrokit-class-library-for-net/19260282 +' +' Thank you. + +#Region " Option Statements " + +Option Strict On +Option Explicit On +Option Infer Off + +#End Region + +#Region " Imports " + +Imports System.Windows.Forms.Design + +#End Region + +#Region " IconFileNameEditor " + +Namespace DevCase.Core.Design + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Provides a user interface for selecting a icon file name. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' ---------------------------------------------------------------------------------------------------- + Friend Class IconFileNameEditor : Inherits FileNameEditor + +#Region " Constructors " + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Initializes a new instance of the class. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Public Sub New() + MyBase.New() + End Sub + +#End Region + +#Region " Private Methods " + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Initializes the open file dialog when it is created. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The to use to select a file name. + ''' + Protected Overrides Sub InitializeDialog(ByVal dlg As OpenFileDialog) + MyBase.InitializeDialog(dlg) + + With dlg + .Multiselect = False + .RestoreDirectory = True + .DereferenceLinks = True + .Filter = "Icon Files (*.ico;*.icl;*.exe;*.dll)|*.ico;*.icl;*.exe;*.dll|Icons|*.ico|Libraries|*.dll|Programs|*.exe" + .FilterIndex = 1 + .SupportMultiDottedExtensions = True + End With + End Sub + +#End Region + + End Class + +End Namespace + +#End Region diff --git a/src/DevCase/ImageUtil.vb b/src/DevCase/ImageUtil.vb index 8c2d8fb..19a2b88 100644 --- a/src/DevCase/ImageUtil.vb +++ b/src/DevCase/ImageUtil.vb @@ -53,6 +53,51 @@ Namespace DevCase.Core.Imaging.Tools #Region " Public Methods " + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Extracts the icon associated for the specified directory. + ''' + ''' Note: the maximum size of the returned icon only can be 32x32. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' This is a code example. + ''' + ''' Dim path As String = "C:\Windows" + ''' Dim ico As Icon = ExtractIconFromDirectory(path) + ''' Dim bmp As Bitmap = ico.ToBitmap() + ''' PictureBox1.BackgroundImage = bmp + ''' + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The full path to a directory. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The resulting icon. + ''' + ''' ---------------------------------------------------------------------------------------------------- + + Public Shared Function ExtractIconFromDirectory(ByVal directoryPath As String) As Icon + + ' Note that the icon returned by "SHGetFileInfo" function + ' is limited to "SHGetFileInfoFlags.IconSizeSmall" (16x16) + ' and "SHGetFileInfoFlags.IconSizeLarge" (32x32) icon size. + + Dim shInfo As New ShellFileInfo() + + Dim result As IntPtr = NativeMethods.SHGetFileInfo(directoryPath, FileAttributes.Directory, shInfo, CUInt(Marshal.SizeOf(shInfo)), SHGetFileInfoFlags.Icon Or SHGetFileInfoFlags.IconSizeLarge) + + If (result = IntPtr.Zero) Then + Return Nothing + End If + + Dim ico As Icon = TryCast(Icon.FromHandle(shInfo.IconHandle).Clone(), Icon) + NativeMethods.DestroyIcon(shInfo.IconHandle) + Return ico + + End Function + ''' ---------------------------------------------------------------------------------------------------- ''' ''' Extracts the icon associated for the specified file. @@ -95,12 +140,135 @@ Namespace DevCase.Core.Imaging.Tools Return Nothing End If - Dim ico As Icon = TryCast(Drawing.Icon.FromHandle(shInfo.IconHandle).Clone(), Drawing.Icon) + Dim ico As Icon = TryCast(Icon.FromHandle(shInfo.IconHandle).Clone(), Icon) + NativeMethods.DestroyIcon(shInfo.IconHandle) + Return ico + + End Function + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Extracts the icon associated for the specified file extension. + ''' + ''' Note: the maximum size of the returned icon only can be 32x32. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' This is a code example. + ''' + ''' Dim ext As String = ".txt" + ''' Dim ico As Icon = ExtractIconFromFileExtension(ext) + ''' Dim bmp As Bitmap = ico.ToBitmap() + ''' PictureBox1.BackgroundImage = bmp + ''' + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The file extension. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The resulting icon. + ''' + ''' ---------------------------------------------------------------------------------------------------- + + Public Shared Function ExtractIconFromFileExtension(ByVal ext As String) As Icon + + ' Note that the icon returned by "SHGetFileInfo" function + ' is limited to "SHGetFileInfoFlags.IconSizeSmall" (16x16) + ' and "SHGetFileInfoFlags.IconSizeLarge" (32x32) icon size. + + Dim shInfo As New ShellFileInfo() + + Dim result As IntPtr = NativeMethods.SHGetFileInfo(ext, FileAttributes.Normal, shInfo, CUInt(Marshal.SizeOf(shInfo)), SHGetFileInfoFlags.UseFileAttributes Or SHGetFileInfoFlags.Icon Or SHGetFileInfoFlags.IconSizeLarge) + If (result = IntPtr.Zero) Then + result = NativeMethods.SHGetFileInfo(ext, FileAttributes.Normal, shInfo, CUInt(Marshal.SizeOf(shInfo)), SHGetFileInfoFlags.Icon Or SHGetFileInfoFlags.IconSizeLarge) + End If + + If (result = IntPtr.Zero) Then + Return Nothing + End If + + Dim ico As Icon = TryCast(Icon.FromHandle(shInfo.IconHandle).Clone(), Icon) NativeMethods.DestroyIcon(shInfo.IconHandle) Return ico End Function + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Extracts a icon stored in the specified executable, dll or icon file. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' This is a code example. + ''' + ''' Dim ico As Icon = ExtractIconFromExecutableFile("C:\Windows\Explorer.exe", 0) + ''' Dim bmp As Bitmap = ico.ToBitmap() + ''' PictureBox1.BackgroundImage = bmp + ''' + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The source filepath. + ''' + ''' + ''' + ''' The index of the icon to be extracted. + ''' + ''' ---------------------------------------------------------------------------------------------------- + + Public Shared Function ExtractIconFromExecutableFile(ByVal filepath As String, + ByVal iconIndex As Integer) As Icon + + Return ImageUtil.ExtractIconFromExecutableFile(filepath, iconIndex, 0) + + End Function + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Extracts a icon stored in the specified executable, dll or icon file. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' This is a code example. + ''' + ''' Dim ico As Icon = ExtractIconFromExecutableFile("C:\Windows\Explorer.exe", 0, 256) + ''' Dim bmp As Bitmap = ico.ToBitmap() + ''' PictureBox1.BackgroundImage = bmp + ''' + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The source filepath. + ''' + ''' + ''' + ''' The index of the icon to be extracted. + ''' + ''' + ''' + ''' The icon size, in pixels. + ''' + ''' ---------------------------------------------------------------------------------------------------- + + Public Shared Function ExtractIconFromExecutableFile(ByVal filepath As String, + ByVal iconIndex As Integer, + ByVal iconSize As Integer) As Icon + + Dim hiconLarge As IntPtr + Dim result As Integer = NativeMethods.SHDefExtractIcon(filepath, iconIndex, 0, hiconLarge, Nothing, CUInt(iconSize)) + + If (CType(result, HResult) <> HResult.S_OK) Then + Marshal.ThrowExceptionForHR(result) + Return Nothing + + Else + Dim ico As Icon = TryCast(Icon.FromHandle(hiconLarge).Clone(), Icon) + NativeMethods.DestroyIcon(hiconLarge) + Return ico + + End If + + End Function + #End Region End Class diff --git a/src/DevCase/OpenFileOrFolderDialog.vb b/src/DevCase/OpenFileOrFolderDialog.vb new file mode 100644 index 0000000..ada9ed4 --- /dev/null +++ b/src/DevCase/OpenFileOrFolderDialog.vb @@ -0,0 +1,490 @@ +' This source-code is freely distributed as part of "DevCase for .NET Framework". +' +' Maybe you would like to consider to buy this powerful set of libraries to support me. +' You can do loads of things with my apis for a big amount of diverse thematics. +' +' Here is a link to the purchase page: +' https://codecanyon.net/item/elektrokit-class-library-for-net/19260282 +' +' Thank you. + +#Region " Option Statements " + +Option Explicit On +Option Strict On +Option Infer Off + +#End Region + +#Region " Imports " + +Imports System.ComponentModel +Imports System.IO + +#End Region + +#Region " OpenFileOrFolderDialog " + +Namespace DevCase.UserControls.Controls + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Displays a dialog box that prompts the user to open a (single) file or folder. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Original source-code: + ''' + ''' + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' ---------------------------------------------------------------------------------------------------- + + + + + + + + + Friend Class OpenFileOrFolderDialog : Inherits CommonDialog + +#Region " Private Fields " + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The underlying . + ''' + ''' ---------------------------------------------------------------------------------------------------- + Protected WithEvents Dialog As OpenFileDialog + +#End Region + +#Region " Properties " + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Gets the custom places collection for this instance. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The custom places collection for this instance. + ''' + ''' ---------------------------------------------------------------------------------------------------- + + + Public ReadOnly Property CustomPlaces As FileDialogCustomPlacesCollection + + Get + Return Me.Dialog.CustomPlaces + End Get + End Property + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Gets or sets the dialog box title. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The dialog box title. The default value is an empty string (""). + ''' + ''' ---------------------------------------------------------------------------------------------------- + + + + Public Property Title As String + + Get + Return Me.Dialog.Title + End Get + + Set(value As String) + Me.Dialog.Title = value + End Set + End Property + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Gets or sets a value indicating whether the Help button is displayed in the dialog box. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' if the dialog box includes a help button; + ''' otherwise, . + ''' + ''' The default value is . + ''' + ''' ---------------------------------------------------------------------------------------------------- + + + Public Property ShowHelp As Boolean + + Get + Return Me.Dialog.ShowHelp + End Get + + Set(value As Boolean) + Me.Dialog.ShowHelp = value + End Set + End Property + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Gets or sets a value indicating whether the dialog box restores the directory + ''' to the previously selected directory before closing. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' if the dialog box restores the current directory + ''' to the previously selected directory if the user changed the directory while searching for files; + ''' otherwise, . + ''' + ''' The default value is . + ''' + ''' ---------------------------------------------------------------------------------------------------- + + + Public Property RestoreDirectory As Boolean + + Get + Return Me.Dialog.RestoreDirectory + End Get + + Set(value As Boolean) + Me.Dialog.RestoreDirectory = value + End Set + End Property + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Gets or sets the initial directory displayed by the dialog box. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The initial directory displayed by the dialog box. The default is an empty string (""). + ''' + ''' ---------------------------------------------------------------------------------------------------- + + + Public Property InitialDirectory As String + + Get + Return Me.Dialog.InitialDirectory + End Get + + Set(value As String) + Me.Dialog.InitialDirectory = value + End Set + End Property + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Gets or sets a value indicating whether this dialog box should + ''' automatically upgrade appearance and behavior when running on Windows Vista. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' if this System.Windows.Forms.FileDialog instance + ''' should automatically upgrade appearance and behavior when running on Windows Vista; + ''' otherwise, . + ''' + ''' The default value is . + ''' + ''' ---------------------------------------------------------------------------------------------------- + + + Public Property AutoUpgradeEnabled As Boolean + + Get + Return Me.Dialog.AutoUpgradeEnabled + End Get + + Set(value As Boolean) + Me.Dialog.AutoUpgradeEnabled = value + End Set + End Property + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Gets or sets a value indicating whether the dialog box returns the location of the + ''' file referenced by the shortcut or whether it returns the location of the shortcut (.lnk). + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' if the dialog box returns the location of the file referenced by the shortcut; + ''' otherwise, . + ''' + ''' The default value is . + ''' + ''' ---------------------------------------------------------------------------------------------------- + + + Public Property DereferenceLinks As Boolean + + Get + Return Me.Dialog.DereferenceLinks + End Get + + Set(value As Boolean) + Me.Dialog.DereferenceLinks = value + End Set + End Property + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Gets or sets a string containing the name of the item selected in the dialog box. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' The name of the item selected in the dialog box. + ''' + ''' The default value is an empty string (""). + ''' + ''' ---------------------------------------------------------------------------------------------------- + + + Public Property ItemName As String + + Get + Try + If Not String.IsNullOrWhiteSpace(Me.Dialog.FileName) AndAlso + (Me.Dialog.FileName.EndsWith("Folder Selection.", StringComparison.OrdinalIgnoreCase) OrElse + Not File.Exists(Me.Dialog.FileName)) AndAlso + Not Directory.Exists(Me.Dialog.FileName) Then + Return Path.GetDirectoryName(Me.Dialog.FileName) + Else + Return Me.Dialog.FileName + + End If + + Catch + Return Me.Dialog.FileName + End Try + End Get + + Set(ByVal value As String) + Me.Dialog.FileName = value + End Set + End Property + +#End Region + +#Region " Events " + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Occurs when the user clicks on the Open button on the dialog box to select a file or folder. + ''' + ''' ---------------------------------------------------------------------------------------------------- + + Public Event ItemOk As CancelEventHandler + +#End Region + +#Region " Constructors " + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Initializes a new instance of the class. + ''' + ''' ---------------------------------------------------------------------------------------------------- + + Public Sub New() + ' Set validate names to false. Otherwise, windows will not let you select "Folder Selection." + Me.Dialog = New OpenFileDialog With { + .Multiselect = False, + .ValidateNames = False, + .CheckFileExists = False, + .CheckPathExists = True + } + End Sub + +#End Region + +#Region " Public Methods " + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Runs a common dialog box with a default owner. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' if the user clicks OK in the dialog box; + ''' otherwise, . + ''' + ''' ---------------------------------------------------------------------------------------------------- + + Public Shadows Function ShowDialog() As DialogResult + Return Me.ShowDialog(Nothing) + End Function + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Runs a common dialog box with a default owner. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Any object that implements that represents the + ''' top-level window that will own the modal dialog box. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' if the user clicks OK in the dialog box; + ''' otherwise, . + ''' + ''' ---------------------------------------------------------------------------------------------------- + + Public Shadows Function ShowDialog(ByVal owner As IWin32Window) As DialogResult + ' Set initial directory (used when 'Me.dialog.FileName' is set from outside) + If Not (String.IsNullOrWhiteSpace(Me.Dialog.FileName)) Then + Try + If Directory.Exists(Me.Dialog.FileName) Then + Me.Dialog.InitialDirectory = Me.Dialog.FileName + Else + Me.Dialog.InitialDirectory = Path.GetDirectoryName(Me.Dialog.FileName) + End If + + Catch + ' Do nothing + End Try + End If + + ' Always default to "Folder Selection." + Me.Dialog.FileName = "Folder Selection." + + If (owner Is Nothing) Then + Return Me.Dialog.ShowDialog() + Else + Return Me.Dialog.ShowDialog(owner) + End If + End Function + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Resets the properties of a common dialog box to their default values. + ''' + ''' ---------------------------------------------------------------------------------------------------- + + Public Overrides Sub Reset() + Me.Dialog.Reset() + End Sub + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Returns a string version of this object. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' A string version of this object. + ''' + ''' ---------------------------------------------------------------------------------------------------- + + Public Overrides Function ToString() As String + Return Me.Dialog.ToString() + End Function + +#End Region + +#Region " Event Invocators " + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Raises the System.Windows.Forms.FileDialog.FileOk event. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' A that contains the event data. + ''' + ''' ---------------------------------------------------------------------------------------------------- + + Protected Sub OnItemOk(ByVal e As CancelEventArgs) + If (Me.ItemOkEvent IsNot Nothing) Then + RaiseEvent ItemOk(Me, e) + End If + End Sub + +#End Region + +#Region " Event Handlers " + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Handles the event of the component. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The source of the event. + ''' + ''' + ''' + ''' The instance containing the event data. + ''' + ''' ---------------------------------------------------------------------------------------------------- + + Private Sub Dialog_OnFileOk(ByVal sender As Object, ByVal e As CancelEventArgs) Handles Dialog.FileOk + Me.OnItemOk(e) + End Sub + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Handles the event of the component. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The source of the event. + ''' + ''' + ''' + ''' The instance containing the event data. + ''' + ''' ---------------------------------------------------------------------------------------------------- + + Private Sub Dialog_OnFileOk(ByVal sender As Object, ByVal e As EventArgs) Handles Dialog.HelpRequest + Me.OnHelpRequest(e) + End Sub + +#End Region + +#Region " Private Methods " + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Specifies a common dialog box. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' A value that represents the window handle of the owner window for the common dialog box. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' if the dialog box was successfully run; otherwise, . + ''' + ''' ---------------------------------------------------------------------------------------------------- + + Protected Overrides Function RunDialog(ByVal hwndOwner As IntPtr) As Boolean + Return True + End Function + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Releases the unmanaged resources used by the and optionally releases the managed resources. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' to release both managed and unmanaged resources; + ''' to release only unmanaged resources. + ''' + ''' ---------------------------------------------------------------------------------------------------- + + Protected Overrides Sub Dispose(disposing As Boolean) + Me.Dialog?.Dispose() + MyBase.Dispose(disposing) + End Sub + +#End Region + + End Class + +End Namespace + +#End Region \ No newline at end of file diff --git a/src/DevCase/ShortcutFileInfo.vb b/src/DevCase/ShortcutFileInfo.vb index 9e18bb8..b60e13b 100644 --- a/src/DevCase/ShortcutFileInfo.vb +++ b/src/DevCase/ShortcutFileInfo.vb @@ -40,6 +40,7 @@ ' Name As String ' Target As String ' TargetArguments As String +' TargetDisplayName As String ' ViewMode As Boolean ' WindowState As ShortcutWindowState ' WorkingDirectory As String @@ -102,16 +103,19 @@ Option Infer Off #Region " Imports " Imports System.ComponentModel +Imports System.Drawing.Design Imports System.IO Imports System.Runtime.InteropServices Imports System.Security Imports System.Security.AccessControl Imports System.Text +Imports System.Windows.Forms.Design Imports System.Xml.Serialization + +Imports DevCase.Core.Design Imports DevCase.Interop.Unmanaged.Win32 Imports DevCase.Interop.Unmanaged.Win32.Enums Imports DevCase.Interop.Unmanaged.Win32.Interfaces -Imports DevCase.Interop.Unmanaged.Win32.Structures #End Region @@ -151,7 +155,7 @@ Namespace DevCase.Core.IO - + Friend NotInheritable Class ShortcutFileInfo : Inherits FileSystemInfo #Region " Properties " @@ -195,10 +199,11 @@ Namespace DevCase.Core.IO ''' The file attributes. ''' ''' ---------------------------------------------------------------------------------------------------- - + + Public ReadOnly Property Length As Long Get Return New FileInfo(Me.FullName).Length @@ -211,14 +216,14 @@ Namespace DevCase.Core.IO ''' ---------------------------------------------------------------------------------------------------- ''' - ''' Gets or sets the file attributes of the current shortcut file. + ''' Gets or sets the file attributes of the shortcut file. ''' ''' ---------------------------------------------------------------------------------------------------- ''' ''' The file attributes. ''' ''' ---------------------------------------------------------------------------------------------------- - + @@ -235,14 +240,14 @@ Namespace DevCase.Core.IO ''' ---------------------------------------------------------------------------------------------------- ''' - ''' Gets or sets a value that determines if the current shortcut file is read-only. + ''' Gets or sets a value that determines if the shortcut file is read-only. ''' ''' ---------------------------------------------------------------------------------------------------- ''' - ''' if the current shortcut file is read-only; otherwise, . + ''' if the shortcut file is read-only; otherwise, . ''' ''' ---------------------------------------------------------------------------------------------------- - + @@ -325,14 +330,14 @@ Namespace DevCase.Core.IO ''' ---------------------------------------------------------------------------------------------------- ''' - ''' Gets or sets the creation time, in coordinated universal time (UTC) of the current shortcut file. + ''' Gets or sets the creation time, in coordinated universal time (UTC) of the shortcut file. ''' ''' ---------------------------------------------------------------------------------------------------- ''' ''' The creation time UTC. ''' ''' ---------------------------------------------------------------------------------------------------- - + @@ -349,14 +354,14 @@ Namespace DevCase.Core.IO ''' ---------------------------------------------------------------------------------------------------- ''' - ''' Gets or sets the time, in coordinated universal time (UTC), the current shortcut file was last accessed. + ''' Gets or sets the time, in coordinated universal time (UTC), the shortcut file was last accessed. ''' ''' ---------------------------------------------------------------------------------------------------- ''' ''' The last access time UTC. ''' ''' ---------------------------------------------------------------------------------------------------- - + @@ -373,14 +378,14 @@ Namespace DevCase.Core.IO ''' ---------------------------------------------------------------------------------------------------- ''' - ''' Gets or sets the time, in coordinated universal time (UTC), the current shortcut file was last written to. + ''' Gets or sets the time, in coordinated universal time (UTC), the shortcut file was last written to. ''' ''' ---------------------------------------------------------------------------------------------------- ''' ''' The last write time UTC. ''' ''' ---------------------------------------------------------------------------------------------------- - + @@ -397,14 +402,14 @@ Namespace DevCase.Core.IO ''' ---------------------------------------------------------------------------------------------------- ''' - ''' Gets or sets the creation time of the current shortcut file. + ''' Gets or sets the creation time of the shortcut file. ''' ''' ---------------------------------------------------------------------------------------------------- ''' ''' The creation time. ''' ''' ---------------------------------------------------------------------------------------------------- - + @@ -421,14 +426,14 @@ Namespace DevCase.Core.IO ''' ---------------------------------------------------------------------------------------------------- ''' - ''' Gets or sets the time the current shortcut file was last accessed. + ''' Gets or sets the time the shortcut file was last accessed. ''' ''' ---------------------------------------------------------------------------------------------------- ''' ''' The last access time. ''' ''' ---------------------------------------------------------------------------------------------------- - + @@ -445,14 +450,14 @@ Namespace DevCase.Core.IO ''' ---------------------------------------------------------------------------------------------------- ''' - ''' Gets or sets the time the current shortcut file was last written to. + ''' Gets or sets the time the shortcut file was last written to. ''' ''' ---------------------------------------------------------------------------------------------------- ''' ''' The last write time. ''' ''' ---------------------------------------------------------------------------------------------------- - + @@ -509,6 +514,7 @@ Namespace DevCase.Core.IO + Public Property Hotkey As Keys Get Return Me.hotkey_ @@ -531,13 +537,14 @@ Namespace DevCase.Core.IO ''' ---------------------------------------------------------------------------------------------------- ''' - ''' Gets or sets the full path to the icon file. + ''' Gets or sets the full path of the icon file. ''' ''' ---------------------------------------------------------------------------------------------------- - + + Public Property Icon As String Get Return Me.icon_ @@ -553,17 +560,18 @@ Namespace DevCase.Core.IO ''' ''' ( Backing Field of property. ) ''' - ''' The full path to the icon file. + ''' The full path of the icon file. ''' ''' ---------------------------------------------------------------------------------------------------- Private icon_ As String ''' ---------------------------------------------------------------------------------------------------- ''' - ''' Gets or sets the index of the image to use for the icon file. + ''' Gets or sets the image index within the icon file. ''' ''' ---------------------------------------------------------------------------------------------------- - + + @@ -582,7 +590,7 @@ Namespace DevCase.Core.IO ''' ''' ( Backing Field of property. ) ''' - ''' The index of the image to use for the icon file. + ''' The image index within the icon file. ''' ''' ---------------------------------------------------------------------------------------------------- Private iconIndex_ As Integer @@ -611,20 +619,21 @@ Namespace DevCase.Core.IO ''' ''' ( Backing Field of property. ) ''' - ''' The window state for the target file or directory. + ''' The window state of the target file or directory. ''' ''' ---------------------------------------------------------------------------------------------------- Private windowState_ As ShortcutWindowState ''' ---------------------------------------------------------------------------------------------------- ''' - ''' Gets or sets the full path to the target file or directory. + ''' Gets or sets the full path of the target file or directory. ''' ''' ---------------------------------------------------------------------------------------------------- - + + Public Property Target As String Get Return Me.target_ @@ -640,17 +649,17 @@ Namespace DevCase.Core.IO ''' ''' ( Backing Field of property. ) ''' - ''' The full path to the target file or directory. + ''' The full path of the target file or directory. ''' ''' ---------------------------------------------------------------------------------------------------- Private target_ As String ''' ---------------------------------------------------------------------------------------------------- ''' - ''' Gets or sets the command-line arguments for a target executable file. + ''' Gets or sets the command-line arguments of the target. ''' ''' ---------------------------------------------------------------------------------------------------- - + @@ -669,11 +678,30 @@ Namespace DevCase.Core.IO ''' ''' ( Backing Field of property. ) ''' - ''' The command-line arguments for a target executable file. + ''' The command-line arguments of the target. ''' ''' ---------------------------------------------------------------------------------------------------- Private targetArguments_ As String + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Gets the display name of the target file or directory. + ''' + ''' Returns a empty string if the target does not exist. + ''' + ''' ---------------------------------------------------------------------------------------------------- + + + + + Public ReadOnly Property TargetDisplayName As String + Get + Dim shellItem As IShellItem = Nothing + NativeMethods.SHCreateItemFromParsingName(Me.target_, IntPtr.Zero, GetType(IShellItem).GUID, shellItem) + Return shellItem?.GetDisplayName(ShellItemGetDisplayName.NormalDisplay).ToString() + End Get + End Property + ''' ---------------------------------------------------------------------------------------------------- ''' ''' Gets or sets the working directory of the target file or directory. @@ -683,6 +711,7 @@ Namespace DevCase.Core.IO + Public Property WorkingDirectory As String Get Return Me.workingDirectory_ @@ -721,7 +750,7 @@ Namespace DevCase.Core.IO ''' ''' ---------------------------------------------------------------------------------------------------- - + Public Property ViewMode As Boolean Get Return Me.viewMode_ @@ -1112,7 +1141,6 @@ Namespace DevCase.Core.IO ''' ---------------------------------------------------------------------------------------------------- Private Sub ReadLink() - Dim arguments As New StringBuilder(260) Dim description As New StringBuilder(260) Dim hotkey As UShort @@ -1138,8 +1166,9 @@ Namespace DevCase.Core.IO .GetWorkingDirectory(workingDir, workingDir.Capacity) ' SHGetNameFromIDList() can retrieve common file system paths, and CLSIDs/virtual folders. - If NativeMethods.SHGetNameFromIDList(pidl, ShellItemGetDisplayName.DesktopAbsoluteParsing, target) <> HResult.S_OK Then + If (pidl = IntPtr.Zero) OrElse NativeMethods.SHGetNameFromIDList(pidl, ShellItemGetDisplayName.DesktopAbsoluteParsing, target) <> HResult.S_OK Then target.Clear() + ' IShellLinkW.GetPath() only can retrieve common file system paths. .GetPath(target, target.Capacity, Nothing, IShellLinkGetPathFlags.RawPath) End If diff --git a/src/DevCase/ShortcutFileInfoIconIndexEditor.vb b/src/DevCase/ShortcutFileInfoIconIndexEditor.vb new file mode 100644 index 0000000..4510fc1 --- /dev/null +++ b/src/DevCase/ShortcutFileInfoIconIndexEditor.vb @@ -0,0 +1,206 @@ +' This source-code is freely distributed as part of "DevCase for .NET Framework". +' +' Maybe you would like to consider to buy this powerful set of libraries to support me. +' You can do loads of things with my apis for a big amount of diverse thematics. +' +' Here is a link to the purchase page: +' https://codecanyon.net/item/elektrokit-class-library-for-net/19260282 +' +' Thank you. + +#Region " Option Statements " + +Option Strict On +Option Explicit On +Option Infer Off + +#End Region + +#Region " Imports " + +Imports System.ComponentModel +Imports System.Drawing.Design +Imports System.IO + +Imports DevCase.Core.Imaging.Tools +Imports DevCase.Core.IO + +#End Region + +#Region " ShortcutFileInfoIconIndexEditor " + +Namespace DevCase.Core.Design + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Provides a user interface for selecting the value of property. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' ---------------------------------------------------------------------------------------------------- + Friend NotInheritable Class ShortcutFileInfoIconIndexEditor : Inherits IconEditor + +#Region " Private Fields " + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' A reference to property. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Private iconPath As String + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' A reference to property. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Private target As String + +#End Region + +#Region " Public Methods " + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Paints a representative value of the given object to the provided canvas. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' What to paint and where to paint it. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Public Overrides Sub PaintValue(ByVal e As PaintValueEventArgs) + + Dim ico As Icon = Nothing + Dim index As Integer = CInt(e.Value) + + Dim isIconPathEmpty As Boolean = String.IsNullOrWhiteSpace(Me.iconPath) + Dim iconFileExist As Boolean = File.Exists(Me.iconPath) + + Dim isTargetEmpty As Boolean = String.IsNullOrWhiteSpace(Me.target) + Dim targetFileExist As Boolean = File.Exists(Me.target) + Dim targetDirExist As Boolean = System.IO.Directory.Exists(Me.target) + + ' Try extract icon from icon file path. + If Not isIconPathEmpty AndAlso (iconFileExist) Then + Try + ico = ImageUtil.ExtractIconFromExecutableFile(Me.iconPath, index) + Catch + End Try + End If + + ' Try extract icon from target file path. + If (ico Is Nothing) AndAlso Not (isTargetEmpty) AndAlso (targetFileExist) Then + Try + ico = ImageUtil.ExtractIconFromExecutableFile(Me.target, index) + Catch + End Try + End If + + ' Try extract icon from target file extension. + If (ico Is Nothing) AndAlso Not (isTargetEmpty) AndAlso (targetFileExist) Then + Try + Dim ext As String = Path.GetExtension(Me.target) + ico = ImageUtil.ExtractIconFromFileExtension(ext) + Catch + End Try + End If + + ' Try extract icon from target directory path. + If (ico Is Nothing) AndAlso Not (isTargetEmpty) AndAlso (targetDirExist) Then + Try + ico = ImageUtil.ExtractIconFromDirectory(Me.target) + Catch + End Try + End If + + ' Set default (null) file icon. + If (ico Is Nothing) Then + Try + ico = ImageUtil.ExtractIconFromExecutableFile("Shell32.dll", 0) + Catch + End Try + End If + + ' Draw the icon. + If (ico IsNot Nothing) Then + e.Graphics.DrawIcon(ico, e.Bounds) + End If + + MyBase.PaintValue(e) + End Sub + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Edits the given object value using the editor style provided by the + ''' method. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' A type descriptor context that can be used to provide additional context information. + ''' + ''' + ''' + ''' A service provider object through which editing services may be obtained. + ''' + ''' + ''' + ''' An instance of the value being edited. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The new value of the object. + ''' + ''' If the value of the object has not changed, this should return the same object it was passed. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Public Overrides Function EditValue(ByVal context As ITypeDescriptorContext, ByVal provider As IServiceProvider, ByVal value As Object) As Object + Me.UpdateFields(context) + Return MyBase.EditValue(context, provider, value) + End Function + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Retrieves the editing style of the method. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' A type descriptor context that can be used to provide additional context information. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' One of the values indicating the provided editing style. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Public Overrides Function GetEditStyle(ByVal context As ITypeDescriptorContext) As UITypeEditorEditStyle + Me.UpdateFields(context) + Return UITypeEditorEditStyle.None + End Function + +#End Region + +#Region " Private Methods " + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Updates the and + ''' values. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' A type descriptor context that can be used to provide additional context information. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Private Sub UpdateFields(ByVal context As ITypeDescriptorContext) + Dim lnk As ShortcutFileInfo = DirectCast(context.Instance, ShortcutFileInfo) + Me.iconPath = lnk.Icon + Me.target = lnk.Target + End Sub + +#End Region + + End Class + +End Namespace + +#End Region diff --git a/src/DevCase/SizeUnits.vb b/src/DevCase/SizeUnits.vb new file mode 100644 index 0000000..6d3ed51 --- /dev/null +++ b/src/DevCase/SizeUnits.vb @@ -0,0 +1,83 @@ +' This source-code is freely distributed as part of "DevCase for .NET Framework". +' +' Maybe you would like to consider to buy this powerful set of libraries to support me. +' You can do loads of things with my apis for a big amount of diverse thematics. +' +' Here is a link to the purchase page: +' https://codecanyon.net/item/elektrokit-class-library-for-net/19260282 +' +' Thank you. + +#Region " Option Statements " + +Option Strict On +Option Explicit On +Option Infer Off + +#End Region + +#Region " Size Units " + +Namespace DevCase.Core.IO + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Specifies a size unit. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Friend Enum SizeUnits As Long + + ''' + ''' Represents 1 Byte. + ''' + ''' (8 Bits) + ''' + [Byte] = CLng(2 ^ 0) + + ''' + ''' Represents 1 Kilobyte. + ''' + ''' (1.024 Bytes) + ''' + Kilobyte = CLng(2 ^ 10) + + ''' + ''' Represents 1 MegaByte. + ''' + ''' (1.048.576 Bytes) + ''' + Megabyte = CLng(2 ^ 20) + + ''' + ''' Represents 1 Gigabyte. + ''' + ''' (1.073.741.824 Bytes) + ''' + Gigabyte = CLng(2 ^ 30) + + ''' + ''' Represents 1 Terabyte. + ''' + ''' (1.099.511.627.776 Bytes) + ''' + Terabyte = CLng(2 ^ 40) + + ''' + ''' Represents 1 Petabyte. + ''' + ''' (1.125.899.906.842.624 Bytes) + ''' + Petabyte = CLng(2 ^ 50) + + ''' + ''' Represents 1 Exabyte. + ''' + ''' (1.152.921.504.606.846.976 Bytes) + ''' + Exabyte = CLng(2 ^ 60) + + End Enum + +End Namespace + +#End Region diff --git a/src/DevCase/Win32/IShellItem.vb b/src/DevCase/Win32/IShellItem.vb new file mode 100644 index 0000000..6100dc2 --- /dev/null +++ b/src/DevCase/Win32/IShellItem.vb @@ -0,0 +1,93 @@ +' This source-code is freely distributed as part of "DevCase for .NET Framework". +' +' Maybe you would like to consider to buy this powerful set of libraries to support me. +' You can do loads of things with my apis for a big amount of diverse thematics. +' +' Here is a link to the purchase page: +' https://codecanyon.net/item/elektrokit-class-library-for-net/19260282 +' +' Thank you. + +#Region " Option Statements " + +Option Strict On +Option Explicit On +Option Infer Off + +#End Region + +#Region " Imports " + +Imports System.ComponentModel +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices +Imports System.Security +Imports System.Text + +Imports DevCase.Interop.Unmanaged.Win32.Enums + +#End Region + +#Region " IShellItem " + +Namespace DevCase.Interop.Unmanaged.Win32.Interfaces + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Exposes a method to return either icons or thumbnails for Shell items. + ''' + ''' If no thumbnail or icon is available for the requested item, a per-class icon may be provided from the Shell + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' + ''' + ''' ---------------------------------------------------------------------------------------------------- + + + + + Public Interface IShellItem + + + Function NotImplemented_BindToHandler() As Object + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Gets the parent of an object. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The address of a pointer to the parent of an interface. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Function GetParent() As IShellItem + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Gets the display name of the object. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' One of the values that indicates how the name should look. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' A value that, when this function returns successfully, + ''' receives the address of a pointer to the retrieved display name. + ''' + ''' ---------------------------------------------------------------------------------------------------- + + Function GetDisplayName(ByVal sigdn As ShellItemGetDisplayName) As StringBuilder + + + Function NotImplemented_GetAttributes() As UInteger + + + Function NotImplemented_Compare() As Integer + + End Interface + +End Namespace + +#End Region diff --git a/src/DevCase/Win32/NativeMethods.vb b/src/DevCase/Win32/NativeMethods.vb index 1bfdfb4..9f30b2a 100644 --- a/src/DevCase/Win32/NativeMethods.vb +++ b/src/DevCase/Win32/NativeMethods.vb @@ -18,12 +18,13 @@ Option Infer Off #Region " Imports " -Imports System.Diagnostics.CodeAnalysis Imports System.IO Imports System.Runtime.InteropServices Imports System.Security Imports System.Text + Imports DevCase.Interop.Unmanaged.Win32.Enums +Imports DevCase.Interop.Unmanaged.Win32.Interfaces Imports DevCase.Interop.Unmanaged.Win32.Structures #End Region @@ -143,11 +144,11 @@ Namespace DevCase.Interop.Unmanaged.Win32 ''' A PIDL that identifies the item. ''' ''' - ''' + ''' ''' A value from the enumeration that specifies the type of display name to retrieve. ''' ''' - ''' + ''' ''' A value that, when this function returns successfully, receives the retrieved display name. ''' ''' ---------------------------------------------------------------------------------------------------- @@ -160,7 +161,116 @@ Namespace DevCase.Interop.Unmanaged.Win32 Public Shared Function SHGetNameFromIDList(ByVal pidl As IntPtr, ByVal sigdn As ShellItemGetDisplayName, - ByRef name As StringBuilder + ByRef refName As StringBuilder + ) As HResult + End Function + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Creates and initializes a Shell item object from a parsing name. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' A display name. + ''' + ''' + ''' + ''' Optional. A pointer to a bind context used to pass parameters as inputs and outputs to the parsing function. + ''' + ''' These passed parameters are often specific to the data source and are documented by the data source owners. + ''' + ''' For example, the file system data source accepts the name being parsed (as a structure), + ''' using the STR_FILE_SYS_BIND_DATA bind context parameter. + ''' + ''' + ''' + ''' A reference to the IID of the interface to retrieve through ppv, typically IID_IShellItem or IID_IShellItem2. + ''' + ''' + ''' + ''' When this method returns successfully, contains the interface pointer requested in . + ''' This is typically or IShellItem2. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' If this function succeeds, it returns . + ''' Otherwise, it returns an error code. + ''' + ''' ---------------------------------------------------------------------------------------------------- + + Public Shared Function SHCreateItemFromParsingName(ByVal path As String, + ByVal pbc As IntPtr, + ByRef refIID As Guid, + ByRef refShellItem As IShellItem + ) As HResult + End Function + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Provides a default handler to extract an icon from a file. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' A pointer to a null-terminated buffer that contains the path and name of the file from which the icon is extracted. + ''' + ''' + ''' + ''' The location of the icon within the file named in pszIconFile. + ''' + ''' If this is a positive number, it refers to the zero-based position of the icon in the file. + ''' + ''' For instance, 0 refers to the 1st icon in the resource file and 2 refers to the 3rd. + ''' If this is a negative number, it refers to the icon's resource ID. + ''' + ''' + ''' + ''' A flag that controls the icon extraction. + ''' + ''' + ''' + ''' A pointer to an HICON that, when this function returns successfully, + ''' receives the handle of the large version of the icon specified in the LOWORD of nIconSize. + ''' + ''' This value can be . + ''' + ''' + ''' + ''' A pointer to an HICON that, when this function returns successfully, + ''' receives the handle of the small version of the icon specified in the HIWORD of param. + ''' + ''' This value can be . + ''' + ''' + ''' + ''' A value that contains the large icon size in its LOWORD and the small icon size in its HIWORD. + ''' + ''' Size is measured in pixels. + ''' + ''' Pass 0 to specify default large and small sizes. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' This function can return one of these values: + ''' + ''' , or . + ''' + ''' ---------------------------------------------------------------------------------------------------- + + + Public Shared Function SHDefExtractIcon(ByVal iconFile As String, + ByVal iconIndex As Integer, + ByVal flags As UInteger, + ByRef refHiconLarge As IntPtr, + ByRef refHiconSmall As IntPtr, + ByVal iconSize As UInteger ) As HResult End Function diff --git a/src/Easy Link File Viewer.vbproj b/src/Easy Link File Viewer.vbproj index 673f63c..e29fe94 100644 --- a/src/Easy Link File Viewer.vbproj +++ b/src/Easy Link File Viewer.vbproj @@ -58,7 +58,9 @@ + + @@ -78,8 +80,19 @@ + + + + + + + Component + + + + AboutBox1.vb @@ -155,6 +168,10 @@ + + + + diff --git a/src/My Project/AssemblyInfo.vb b/src/My Project/AssemblyInfo.vb index 38485d4..debc8d0 100644 --- a/src/My Project/AssemblyInfo.vb +++ b/src/My Project/AssemblyInfo.vb @@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices ' by using the '*' as shown below: ' - - + + diff --git a/src/My Project/Resources.Designer.vb b/src/My Project/Resources.Designer.vb index 1dcacc8..5d5c30c 100644 --- a/src/My Project/Resources.Designer.vb +++ b/src/My Project/Resources.Designer.vb @@ -120,6 +120,26 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property FolderOpen_16x() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("FolderOpen_16x", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property FontSize_16x() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("FontSize_16x", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' @@ -140,6 +160,26 @@ Namespace My.Resources End Get End Property + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property NewFile_16x() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("NewFile_16x", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + ''' + ''' Looks up a localized resource of type System.Drawing.Bitmap. + ''' + Friend ReadOnly Property Open_16x() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("Open_16x", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + ''' ''' Looks up a localized resource of type System.Drawing.Bitmap. ''' diff --git a/src/My Project/Resources.resx b/src/My Project/Resources.resx index 842faa3..1ea8537 100644 --- a/src/My Project/Resources.resx +++ b/src/My Project/Resources.resx @@ -154,4 +154,16 @@ ..\Resources\Settings_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\FolderOpen_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Open_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\FontSize_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\NewFile_16x.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/src/My Project/Settings.Designer.vb b/src/My Project/Settings.Designer.vb index 0aa669d..a262b63 100644 --- a/src/My Project/Settings.Designer.vb +++ b/src/My Project/Settings.Designer.vb @@ -65,6 +65,18 @@ Namespace My Me("VisualThemeIndex") = value End Set End Property + + _ + Public Property FontSize() As Single + Get + Return CType(Me("FontSize"),Single) + End Get + Set + Me("FontSize") = value + End Set + End Property End Class End Namespace diff --git a/src/My Project/Settings.settings b/src/My Project/Settings.settings index c73fd52..82054f0 100644 --- a/src/My Project/Settings.settings +++ b/src/My Project/Settings.settings @@ -5,5 +5,8 @@ 0 + + 10 + \ No newline at end of file diff --git a/src/Resources/FolderOpen_16x.png b/src/Resources/FolderOpen_16x.png new file mode 100644 index 0000000000000000000000000000000000000000..7e788e4dc84ea942ab44b4f1de81f6c2113f1817 GIT binary patch literal 345 zcmV-f0jBa!Koo}2FJpud6)c3^!eTo+OSKU36?}u;-qOlO z1S_$zw%GUz7M8k&g@T1zS%|J68c-ynWLMbT@g_LIh0#QE;3q|xJNM3vgNWm}21tH& z;ro7sg)57jK%Kt@Km!Zs{q;#dpYJi~b+H-oCaEl}B31y?MO!**^WDC_Ib7HBwdU?< zTff|%+Ws{WE;%M@OGMWPX$<9hR2SFkKqI$+U!6_!(_?E3Ls5c^v8*WP*d3}EUYS{Q zg(o}7ISh}`2`?$io0>rcS%H4{jnC+wqQ<7@5c^qykB2jg8Xd1BNgh*6nS1TX{Ka>l rN9>x1v?+(N!T$vaM{7+Pijuwn{i}S$3EO>H00000NkvXXu0mjfRH2hp literal 0 HcmV?d00001 diff --git a/src/Resources/FontSize_16x.png b/src/Resources/FontSize_16x.png new file mode 100644 index 0000000000000000000000000000000000000000..89e171222dcb3daeb105409d7176c6301bd79ff9 GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9F5he4R}c>anMpx`A> z7srr_xTV1xd6^7(&T!-$VB?u+C(3={V(>qP`^|*Q-CT`PU$zEuMU*;W5Kyc3$UO%*z|?puaSE5yHV<7%l%O}1dxtDmLja5F%= z#l}VRel@>_^jWpFFWUtg`gj@D;+<{=2z*jyGuu+L^WH{Y%i1e{*6r@S_T{JciKk{$ j{#+Bk`FrP?{m*%s)XzOOcH-d$`i{ZV)z4*}Q$iB}*C}xa literal 0 HcmV?d00001 diff --git a/src/Resources/NewFile_16x.png b/src/Resources/NewFile_16x.png new file mode 100644 index 0000000000000000000000000000000000000000..12354ce14e9cedf2c377ae0d7b11f6344e05e741 GIT binary patch literal 270 zcmV+p0rCEcP)zr?|{uKfu|b?JB@I6L?O{zL0>YrGUL9J%6&PCf|X z1>VaeL_q*+Eqan=nSulm5e8o9#kc(g#Oy6PgHR}W(!g(-ZVoJ>PMnZRp~xWIHs3x# z@&K)?g}cw4Z{S5#99_(cqUfrss*$4?w{!;b`q$kU`+D0vx$->6vMg!dkO?PRx~@TMt$YH0p6G$ne-Pup42FWsV|{NxSN;SF5#blS09loe UG8Nz?4*&oF07*qoM6N<$f{3ehNB{r; literal 0 HcmV?d00001 diff --git a/src/Resources/Open_16x.png b/src/Resources/Open_16x.png new file mode 100644 index 0000000000000000000000000000000000000000..88cfc578a283383a81ce78f38104a67ec9144269 GIT binary patch literal 452 zcmV;#0XzPQP)g{jqdHyED5a*Ng9G=Rbn#j>!Kx#zKQVTHII!jTWyPE{-gX4qekl-1 zX%}>OQ=ki4LAUBh^P|Q8E|CDgKVRNt0tC!sq+WY;-yYUgZwDNjH6D`qSgfuc=WJmE zkc#bGX#fHdz5w@0000 Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container() Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Form1)) Me.MenuStrip1 = New System.Windows.Forms.MenuStrip() + Me.PropertyGrid1 = New System.Windows.Forms.PropertyGrid() + Me.ContextMenuStrip1 = New System.Windows.Forms.ContextMenuStrip(Me.components) + Me.StatusStrip1 = New System.Windows.Forms.StatusStrip() + Me.ToolStripStatusLabelIcon = New System.Windows.Forms.ToolStripStatusLabel() + Me.ToolStripStatusLabelFileName = New System.Windows.Forms.ToolStripStatusLabel() Me.FileToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.OpenToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.NewToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator3 = New System.Windows.Forms.ToolStripSeparator() Me.RecentToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator1 = New System.Windows.Forms.ToolStripSeparator() + Me.OpenToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.SaveToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.SaveAsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.CloseToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripSeparator2 = New System.Windows.Forms.ToolStripSeparator() Me.ExitToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.SettingsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.FontSizeToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ToolStripComboBoxFontSize = New System.Windows.Forms.ToolStripComboBox() Me.VisualThemeToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.DefaultToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.DarkToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.AboutToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() - Me.PropertyGrid1 = New System.Windows.Forms.PropertyGrid() - Me.StatusStrip1 = New System.Windows.Forms.StatusStrip() - Me.ToolStripStatusLabel1 = New System.Windows.Forms.ToolStripStatusLabel() + Me.OpenShortcutMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.OpenTargetMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.OpenTargetWithArgsMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ViewShortcutMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ViewTargetMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ViewWorkingDirectoryMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.ViewIconMenuItem = New System.Windows.Forms.ToolStripMenuItem() Me.MenuStrip1.SuspendLayout() + Me.ContextMenuStrip1.SuspendLayout() Me.StatusStrip1.SuspendLayout() Me.SuspendLayout() ' 'MenuStrip1 ' + Me.MenuStrip1.Font = New System.Drawing.Font("Segoe UI", 10.0!) Me.MenuStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.FileToolStripMenuItem, Me.SettingsToolStripMenuItem, Me.AboutToolStripMenuItem}) Me.MenuStrip1.Location = New System.Drawing.Point(0, 0) Me.MenuStrip1.Name = "MenuStrip1" - Me.MenuStrip1.Size = New System.Drawing.Size(684, 24) + Me.MenuStrip1.Size = New System.Drawing.Size(684, 27) Me.MenuStrip1.TabIndex = 0 Me.MenuStrip1.Text = "MenuStrip1" ' + 'PropertyGrid1 + ' + Me.PropertyGrid1.AllowDrop = True + Me.PropertyGrid1.Dock = System.Windows.Forms.DockStyle.Fill + Me.PropertyGrid1.Font = New System.Drawing.Font("Microsoft Sans Serif", 10.0!) + Me.PropertyGrid1.Location = New System.Drawing.Point(0, 27) + Me.PropertyGrid1.Name = "PropertyGrid1" + Me.PropertyGrid1.Size = New System.Drawing.Size(684, 360) + Me.PropertyGrid1.TabIndex = 1 + ' + 'ContextMenuStrip1 + ' + Me.ContextMenuStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.OpenShortcutMenuItem, Me.OpenTargetMenuItem, Me.OpenTargetWithArgsMenuItem, Me.ViewShortcutMenuItem, Me.ViewTargetMenuItem, Me.ViewWorkingDirectoryMenuItem, Me.ViewIconMenuItem}) + Me.ContextMenuStrip1.Name = "ContextMenuStrip1" + Me.ContextMenuStrip1.Size = New System.Drawing.Size(257, 158) + ' + 'StatusStrip1 + ' + Me.StatusStrip1.BackColor = System.Drawing.SystemColors.Control + Me.StatusStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ToolStripStatusLabelIcon, Me.ToolStripStatusLabelFileName}) + Me.StatusStrip1.Location = New System.Drawing.Point(0, 387) + Me.StatusStrip1.Name = "StatusStrip1" + Me.StatusStrip1.Size = New System.Drawing.Size(684, 24) + Me.StatusStrip1.TabIndex = 2 + Me.StatusStrip1.Text = "StatusStrip1" + ' + 'ToolStripStatusLabelIcon + ' + Me.ToolStripStatusLabelIcon.Font = New System.Drawing.Font("Segoe UI", 10.0!) + Me.ToolStripStatusLabelIcon.ImageAlign = System.Drawing.ContentAlignment.MiddleRight + Me.ToolStripStatusLabelIcon.Name = "ToolStripStatusLabelIcon" + Me.ToolStripStatusLabelIcon.Size = New System.Drawing.Size(42, 19) + Me.ToolStripStatusLabelIcon.Text = "{icon}" + Me.ToolStripStatusLabelIcon.TextImageRelation = System.Windows.Forms.TextImageRelation.Overlay + ' + 'ToolStripStatusLabelFileName + ' + Me.ToolStripStatusLabelFileName.AutoToolTip = True + Me.ToolStripStatusLabelFileName.Font = New System.Drawing.Font("Segoe UI", 10.0!) + Me.ToolStripStatusLabelFileName.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft + Me.ToolStripStatusLabelFileName.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline + Me.ToolStripStatusLabelFileName.Name = "ToolStripStatusLabelFileName" + Me.ToolStripStatusLabelFileName.Size = New System.Drawing.Size(627, 19) + Me.ToolStripStatusLabelFileName.Spring = True + Me.ToolStripStatusLabelFileName.Text = "{fullpath} " + Me.ToolStripStatusLabelFileName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft + ' 'FileToolStripMenuItem ' - Me.FileToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.OpenToolStripMenuItem, Me.RecentToolStripMenuItem, Me.SaveToolStripMenuItem, Me.SaveAsToolStripMenuItem, Me.CloseToolStripMenuItem, Me.ExitToolStripMenuItem}) + Me.FileToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.NewToolStripMenuItem, Me.ToolStripSeparator3, Me.RecentToolStripMenuItem, Me.ToolStripSeparator1, Me.OpenToolStripMenuItem, Me.SaveToolStripMenuItem, Me.SaveAsToolStripMenuItem, Me.CloseToolStripMenuItem, Me.ToolStripSeparator2, Me.ExitToolStripMenuItem}) Me.FileToolStripMenuItem.Image = Global.My.Resources.Resources.FSFile_16x Me.FileToolStripMenuItem.Name = "FileToolStripMenuItem" - Me.FileToolStripMenuItem.Size = New System.Drawing.Size(53, 20) + Me.FileToolStripMenuItem.Size = New System.Drawing.Size(57, 23) Me.FileToolStripMenuItem.Text = "File" ' - 'OpenToolStripMenuItem + 'NewToolStripMenuItem ' - Me.OpenToolStripMenuItem.Image = Global.My.Resources.Resources.OpenFile_16x - Me.OpenToolStripMenuItem.Name = "OpenToolStripMenuItem" - Me.OpenToolStripMenuItem.Size = New System.Drawing.Size(123, 22) - Me.OpenToolStripMenuItem.Text = "Open" + Me.NewToolStripMenuItem.Image = Global.My.Resources.Resources.NewFile_16x + Me.NewToolStripMenuItem.Name = "NewToolStripMenuItem" + Me.NewToolStripMenuItem.Size = New System.Drawing.Size(180, 24) + Me.NewToolStripMenuItem.Text = "New" + ' + 'ToolStripSeparator3 + ' + Me.ToolStripSeparator3.Name = "ToolStripSeparator3" + Me.ToolStripSeparator3.Size = New System.Drawing.Size(177, 6) ' 'RecentToolStripMenuItem ' Me.RecentToolStripMenuItem.Enabled = False Me.RecentToolStripMenuItem.Image = Global.My.Resources.Resources.FileGroup_16x Me.RecentToolStripMenuItem.Name = "RecentToolStripMenuItem" - Me.RecentToolStripMenuItem.Size = New System.Drawing.Size(123, 22) + Me.RecentToolStripMenuItem.Size = New System.Drawing.Size(180, 24) Me.RecentToolStripMenuItem.Text = "Recent..." ' + 'ToolStripSeparator1 + ' + Me.ToolStripSeparator1.Name = "ToolStripSeparator1" + Me.ToolStripSeparator1.Size = New System.Drawing.Size(177, 6) + ' + 'OpenToolStripMenuItem + ' + Me.OpenToolStripMenuItem.Image = Global.My.Resources.Resources.OpenFile_16x + Me.OpenToolStripMenuItem.Name = "OpenToolStripMenuItem" + Me.OpenToolStripMenuItem.Size = New System.Drawing.Size(180, 24) + Me.OpenToolStripMenuItem.Text = "Open" + ' 'SaveToolStripMenuItem ' Me.SaveToolStripMenuItem.Enabled = False Me.SaveToolStripMenuItem.Image = Global.My.Resources.Resources.Save_16x Me.SaveToolStripMenuItem.Name = "SaveToolStripMenuItem" - Me.SaveToolStripMenuItem.Size = New System.Drawing.Size(123, 22) + Me.SaveToolStripMenuItem.Size = New System.Drawing.Size(180, 24) Me.SaveToolStripMenuItem.Text = "Save" ' 'SaveAsToolStripMenuItem @@ -88,7 +170,7 @@ Partial Friend Class Form1 Me.SaveAsToolStripMenuItem.Enabled = False Me.SaveAsToolStripMenuItem.Image = Global.My.Resources.Resources.Save_16x Me.SaveAsToolStripMenuItem.Name = "SaveAsToolStripMenuItem" - Me.SaveAsToolStripMenuItem.Size = New System.Drawing.Size(123, 22) + Me.SaveAsToolStripMenuItem.Size = New System.Drawing.Size(180, 24) Me.SaveAsToolStripMenuItem.Text = "Save As..." ' 'CloseToolStripMenuItem @@ -96,86 +178,129 @@ Partial Friend Class Form1 Me.CloseToolStripMenuItem.Enabled = False Me.CloseToolStripMenuItem.Image = Global.My.Resources.Resources.FileExclude_16x Me.CloseToolStripMenuItem.Name = "CloseToolStripMenuItem" - Me.CloseToolStripMenuItem.Size = New System.Drawing.Size(123, 22) + Me.CloseToolStripMenuItem.Size = New System.Drawing.Size(180, 24) Me.CloseToolStripMenuItem.Text = "Close" ' + 'ToolStripSeparator2 + ' + Me.ToolStripSeparator2.Name = "ToolStripSeparator2" + Me.ToolStripSeparator2.Size = New System.Drawing.Size(177, 6) + ' 'ExitToolStripMenuItem ' Me.ExitToolStripMenuItem.Image = Global.My.Resources.Resources.Close_red_16x Me.ExitToolStripMenuItem.Name = "ExitToolStripMenuItem" - Me.ExitToolStripMenuItem.Size = New System.Drawing.Size(123, 22) + Me.ExitToolStripMenuItem.Size = New System.Drawing.Size(180, 24) Me.ExitToolStripMenuItem.Text = "Exit" ' 'SettingsToolStripMenuItem ' - Me.SettingsToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.VisualThemeToolStripMenuItem}) + Me.SettingsToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.FontSizeToolStripMenuItem, Me.VisualThemeToolStripMenuItem}) Me.SettingsToolStripMenuItem.Image = Global.My.Resources.Resources.Settings_16x Me.SettingsToolStripMenuItem.Name = "SettingsToolStripMenuItem" - Me.SettingsToolStripMenuItem.Size = New System.Drawing.Size(77, 20) + Me.SettingsToolStripMenuItem.Size = New System.Drawing.Size(86, 23) Me.SettingsToolStripMenuItem.Text = "Settings" ' + 'FontSizeToolStripMenuItem + ' + Me.FontSizeToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ToolStripComboBoxFontSize}) + Me.FontSizeToolStripMenuItem.Image = Global.My.Resources.Resources.FontSize_16x + Me.FontSizeToolStripMenuItem.Name = "FontSizeToolStripMenuItem" + Me.FontSizeToolStripMenuItem.Size = New System.Drawing.Size(159, 24) + Me.FontSizeToolStripMenuItem.Text = "Font Size" + ' + 'ToolStripComboBoxFontSize + ' + Me.ToolStripComboBoxFontSize.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.ToolStripComboBoxFontSize.Items.AddRange(New Object() {"8", "9", "10", "11", "12"}) + Me.ToolStripComboBoxFontSize.Name = "ToolStripComboBoxFontSize" + Me.ToolStripComboBoxFontSize.Size = New System.Drawing.Size(121, 23) + ' 'VisualThemeToolStripMenuItem ' Me.VisualThemeToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.DefaultToolStripMenuItem, Me.DarkToolStripMenuItem}) Me.VisualThemeToolStripMenuItem.Image = Global.My.Resources.Resources.ColorPalette_16x Me.VisualThemeToolStripMenuItem.Name = "VisualThemeToolStripMenuItem" - Me.VisualThemeToolStripMenuItem.Size = New System.Drawing.Size(145, 22) + Me.VisualThemeToolStripMenuItem.Size = New System.Drawing.Size(159, 24) Me.VisualThemeToolStripMenuItem.Text = "Visual Theme" ' 'DefaultToolStripMenuItem ' Me.DefaultToolStripMenuItem.Image = Global.My.Resources.Resources.ColorWheel_16x Me.DefaultToolStripMenuItem.Name = "DefaultToolStripMenuItem" - Me.DefaultToolStripMenuItem.Size = New System.Drawing.Size(112, 22) + Me.DefaultToolStripMenuItem.Size = New System.Drawing.Size(122, 24) Me.DefaultToolStripMenuItem.Text = "Default" ' 'DarkToolStripMenuItem ' Me.DarkToolStripMenuItem.Image = Global.My.Resources.Resources.DarkTheme_16x Me.DarkToolStripMenuItem.Name = "DarkToolStripMenuItem" - Me.DarkToolStripMenuItem.Size = New System.Drawing.Size(112, 22) + Me.DarkToolStripMenuItem.Size = New System.Drawing.Size(122, 24) Me.DarkToolStripMenuItem.Text = "Dark" ' 'AboutToolStripMenuItem ' Me.AboutToolStripMenuItem.Image = Global.My.Resources.Resources.Question_16x Me.AboutToolStripMenuItem.Name = "AboutToolStripMenuItem" - Me.AboutToolStripMenuItem.Size = New System.Drawing.Size(77, 20) + Me.AboutToolStripMenuItem.Size = New System.Drawing.Size(84, 23) Me.AboutToolStripMenuItem.Text = "About..." ' - 'PropertyGrid1 + 'OpenShortcutMenuItem ' - Me.PropertyGrid1.AllowDrop = True - Me.PropertyGrid1.Dock = System.Windows.Forms.DockStyle.Fill - Me.PropertyGrid1.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) - Me.PropertyGrid1.Location = New System.Drawing.Point(0, 24) - Me.PropertyGrid1.Name = "PropertyGrid1" - Me.PropertyGrid1.Size = New System.Drawing.Size(684, 337) - Me.PropertyGrid1.TabIndex = 1 + Me.OpenShortcutMenuItem.Image = Global.My.Resources.Resources.Open_16x + Me.OpenShortcutMenuItem.Name = "OpenShortcutMenuItem" + Me.OpenShortcutMenuItem.Size = New System.Drawing.Size(256, 22) + Me.OpenShortcutMenuItem.Text = "Open Shortcut" ' - 'StatusStrip1 + 'OpenTargetMenuItem ' - Me.StatusStrip1.BackColor = System.Drawing.SystemColors.Control - Me.StatusStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ToolStripStatusLabel1}) - Me.StatusStrip1.Location = New System.Drawing.Point(0, 339) - Me.StatusStrip1.Name = "StatusStrip1" - Me.StatusStrip1.Size = New System.Drawing.Size(684, 22) - Me.StatusStrip1.TabIndex = 2 - Me.StatusStrip1.Text = "StatusStrip1" + Me.OpenTargetMenuItem.Image = Global.My.Resources.Resources.Open_16x + Me.OpenTargetMenuItem.Name = "OpenTargetMenuItem" + Me.OpenTargetMenuItem.Size = New System.Drawing.Size(256, 22) + Me.OpenTargetMenuItem.Text = "Open Target" + ' + 'OpenTargetWithArgsMenuItem + ' + Me.OpenTargetWithArgsMenuItem.Image = Global.My.Resources.Resources.Open_16x + Me.OpenTargetWithArgsMenuItem.Name = "OpenTargetWithArgsMenuItem" + Me.OpenTargetWithArgsMenuItem.Size = New System.Drawing.Size(256, 22) + Me.OpenTargetWithArgsMenuItem.Text = "Open Target with Arguments" ' - 'ToolStripStatusLabel1 + 'ViewShortcutMenuItem ' - Me.ToolStripStatusLabel1.Name = "ToolStripStatusLabel1" - Me.ToolStripStatusLabel1.Size = New System.Drawing.Size(37, 17) - Me.ToolStripStatusLabel1.Text = " " + Me.ViewShortcutMenuItem.Image = Global.My.Resources.Resources.FolderOpen_16x + Me.ViewShortcutMenuItem.Name = "ViewShortcutMenuItem" + Me.ViewShortcutMenuItem.Size = New System.Drawing.Size(256, 22) + Me.ViewShortcutMenuItem.Text = "View Shortcut in Explorer" + ' + 'ViewTargetMenuItem + ' + Me.ViewTargetMenuItem.Image = Global.My.Resources.Resources.FolderOpen_16x + Me.ViewTargetMenuItem.Name = "ViewTargetMenuItem" + Me.ViewTargetMenuItem.Size = New System.Drawing.Size(256, 22) + Me.ViewTargetMenuItem.Text = "View Target in Explorer" + ' + 'ViewWorkingDirectoryMenuItem + ' + Me.ViewWorkingDirectoryMenuItem.Image = Global.My.Resources.Resources.FolderOpen_16x + Me.ViewWorkingDirectoryMenuItem.Name = "ViewWorkingDirectoryMenuItem" + Me.ViewWorkingDirectoryMenuItem.Size = New System.Drawing.Size(256, 22) + Me.ViewWorkingDirectoryMenuItem.Text = "View Working Directory in Explorer" + ' + 'ViewIconMenuItem + ' + Me.ViewIconMenuItem.Image = Global.My.Resources.Resources.FolderOpen_16x + Me.ViewIconMenuItem.Name = "ViewIconMenuItem" + Me.ViewIconMenuItem.Size = New System.Drawing.Size(256, 22) + Me.ViewIconMenuItem.Text = "View Icon in Explorer" ' 'Form1 ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.ClientSize = New System.Drawing.Size(684, 361) - Me.Controls.Add(Me.StatusStrip1) + Me.ClientSize = New System.Drawing.Size(684, 411) Me.Controls.Add(Me.PropertyGrid1) + Me.Controls.Add(Me.StatusStrip1) Me.Controls.Add(Me.MenuStrip1) Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) Me.MainMenuStrip = Me.MenuStrip1 @@ -184,6 +309,7 @@ Partial Friend Class Form1 Me.Text = "Easy Link File Viewer" Me.MenuStrip1.ResumeLayout(False) Me.MenuStrip1.PerformLayout() + Me.ContextMenuStrip1.ResumeLayout(False) Me.StatusStrip1.ResumeLayout(False) Me.StatusStrip1.PerformLayout() Me.ResumeLayout(False) @@ -205,6 +331,21 @@ Partial Friend Class Form1 Friend WithEvents AboutToolStripMenuItem As ToolStripMenuItem Friend WithEvents PropertyGrid1 As PropertyGrid Friend WithEvents StatusStrip1 As StatusStrip - Friend WithEvents ToolStripStatusLabel1 As ToolStripStatusLabel + Friend WithEvents ToolStripStatusLabelFileName As ToolStripStatusLabel Friend WithEvents RecentToolStripMenuItem As ToolStripMenuItem + Friend WithEvents ContextMenuStrip1 As ContextMenuStrip + Friend WithEvents OpenShortcutMenuItem As ToolStripMenuItem + Friend WithEvents ViewShortcutMenuItem As ToolStripMenuItem + Friend WithEvents ViewTargetMenuItem As ToolStripMenuItem + Friend WithEvents ViewWorkingDirectoryMenuItem As ToolStripMenuItem + Friend WithEvents OpenTargetMenuItem As ToolStripMenuItem + Friend WithEvents OpenTargetWithArgsMenuItem As ToolStripMenuItem + Friend WithEvents ViewIconMenuItem As ToolStripMenuItem + Friend WithEvents ToolStripSeparator1 As ToolStripSeparator + Friend WithEvents ToolStripSeparator2 As ToolStripSeparator + Friend WithEvents FontSizeToolStripMenuItem As ToolStripMenuItem + Friend WithEvents ToolStripComboBoxFontSize As ToolStripComboBox + Friend WithEvents ToolStripStatusLabelIcon As ToolStripStatusLabel + Friend WithEvents NewToolStripMenuItem As ToolStripMenuItem + Friend WithEvents ToolStripSeparator3 As ToolStripSeparator End Class diff --git a/src/UI/Form1.resx b/src/UI/Form1.resx index 6620e73..00edaea 100644 --- a/src/UI/Form1.resx +++ b/src/UI/Form1.resx @@ -126,6 +126,9 @@ True + + 261, 17 + 138, 17 diff --git a/src/UI/Form1.vb b/src/UI/Form1.vb index b41a773..4173be8 100644 --- a/src/UI/Form1.vb +++ b/src/UI/Form1.vb @@ -1,6 +1,6 @@ ' *********************************************************************** ' Author : ElektroStudios -' Modified : 27-May-2019 +' Modified : 30-May-2019 ' *********************************************************************** #Region " Option Statements " @@ -13,10 +13,13 @@ Option Infer Off #Region " Imports " +Imports System.ComponentModel +Imports System.IO + Imports DevCase.Core.Extensions Imports DevCase.Core.IO +Imports DevCase.Core.IO.Tools Imports DevCase.Core.Imaging.Tools -Imports System.IO #End Region @@ -29,6 +32,17 @@ Imports System.IO ''' ---------------------------------------------------------------------------------------------------- Friend NotInheritable Class Form1 : Inherits Form +#Region " Private Fields " + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The current instance that is loaded in the control. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Private CurrentShortcut As ShortcutFileInfo + +#End Region + #Region " Constructors " ''' ---------------------------------------------------------------------------------------------------- @@ -44,6 +58,8 @@ Friend NotInheritable Class Form1 : Inherits Form #Region " Event Handlers " +#Region " Form " + ''' ---------------------------------------------------------------------------------------------------- ''' ''' Handles the event of the control. @@ -58,6 +74,10 @@ Friend NotInheritable Class Form1 : Inherits Form ''' ''' ---------------------------------------------------------------------------------------------------- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load + Me.ToolStripStatusLabelIcon.Text = "" + Me.ToolStripStatusLabelFileName.Text = "" + Me.ToolStripComboBoxFontSize.SelectedItem = CStr(My.Settings.FontSize) + Me.LoadVisualTheme() End Sub @@ -75,12 +95,33 @@ Friend NotInheritable Class Form1 : Inherits Form ''' ''' ---------------------------------------------------------------------------------------------------- Private Sub Form1_Shown(sender As Object, e As EventArgs) Handles MyBase.Shown - Dim minWidth As Integer = (From item As ToolStripMenuItem In MenuStrip1.Items.Cast(Of ToolStripMenuItem) + Dim minWidth As Integer = (From item As ToolStripMenuItem In Me.MenuStrip1.Items.Cast(Of ToolStripMenuItem) Select item.Width + item.Padding.Horizontal).Sum() - Me.MinimumSize = New Size(minWidth, Me.Size.Height) + Me.MinimumSize = New Size(minWidth, Me.Height) + End Sub + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Handles the event of the control. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The source of the event. + ''' + ''' + ''' + ''' The instance containing the event data. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Private Sub Form1_Resize(sender As Object, e As EventArgs) Handles MyBase.Resize + Me.PropertyGrid1.MoveSplitterTo(180) End Sub +#End Region + +#Region " PropertyGrid " + ''' ---------------------------------------------------------------------------------------------------- ''' ''' Handles the event of the control. @@ -130,6 +171,70 @@ Friend NotInheritable Class Form1 : Inherits Form End Sub + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Handles the event of the control. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The source of the event. + ''' + ''' + ''' + ''' The instance containing the event data. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Private Sub PropertyGrid1_PropertyValueChanged(sender As Object, e As PropertyValueChangedEventArgs) Handles PropertyGrid1.PropertyValueChanged + ' Force refresh of ShortcutFileInfo properties. + Me.PropertyGrid1.Refresh() + End Sub + +#End Region + +#Region " Menu Strip " + +#Region " File Menu " + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Handles the event of the control. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The source of the event. + ''' + ''' + ''' + ''' The instance containing the event data. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Private Sub NewToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles NewToolStripMenuItem.Click + + Using dlg As New SaveFileDialog() + dlg.FileName = "New Shortcut.lnk" + dlg.DefaultExt = "lnk" + dlg.DereferenceLinks = False + dlg.Filter = "Shortcut files (*.lnk)|*.lnk" + dlg.FilterIndex = 1 + dlg.RestoreDirectory = True + dlg.SupportMultiDottedExtensions = True + dlg.Title = "Select a destination to save the shortcut file..." + + If dlg.ShowDialog() = DialogResult.OK Then + Try + File.Delete(dlg.FileName) + Catch ex As Exception + MessageBox.Show(Me, "Can't overwrite file.", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) + End Try + Dim newShortcut As New ShortcutFileInfo(dlg.FileName) With {.ViewMode = True} + newShortcut.Create() + + Me.LoadShortcutInPropertyGrid(newShortcut.FullName) + End If + End Using + + End Sub + ''' ---------------------------------------------------------------------------------------------------- ''' ''' Handles the event of the control. @@ -145,18 +250,18 @@ Friend NotInheritable Class Form1 : Inherits Form ''' ---------------------------------------------------------------------------------------------------- Private Sub OpenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles OpenToolStripMenuItem.Click - Using ofd As New OpenFileDialog - ofd.DefaultExt = "lnk" - ofd.DereferenceLinks = False - ofd.Filter = "Shortcut files (*.lnk)|*.lnk" - ofd.FilterIndex = 1 - ofd.Multiselect = False - ofd.RestoreDirectory = True - ofd.SupportMultiDottedExtensions = True - ofd.Title = "Select a shortcut file to open..." - - If ofd.ShowDialog = DialogResult.OK Then - Me.LoadShortcutInPropertyGrid(ofd.FileName) + Using dlg As New OpenFileDialog() + dlg.DefaultExt = "lnk" + dlg.DereferenceLinks = False + dlg.Filter = "Shortcut files (*.lnk)|*.lnk" + dlg.FilterIndex = 1 + dlg.Multiselect = False + dlg.RestoreDirectory = True + dlg.SupportMultiDottedExtensions = True + dlg.Title = "Select a shortcut file to open..." + + If dlg.ShowDialog = DialogResult.OK Then + Me.LoadShortcutInPropertyGrid(dlg.FileName) End If End Using @@ -177,10 +282,8 @@ Friend NotInheritable Class Form1 : Inherits Form ''' ''' ---------------------------------------------------------------------------------------------------- Private Sub SaveToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SaveToolStripMenuItem.Click - - Dim shortcut As ShortcutFileInfo = DirectCast(Me.PropertyGrid1.SelectedObject, ShortcutFileInfo) - shortcut.Create() - + Me.CurrentShortcut.Create() + Me.PropertyGrid1.Refresh() End Sub ''' ---------------------------------------------------------------------------------------------------- @@ -198,37 +301,35 @@ Friend NotInheritable Class Form1 : Inherits Form ''' ---------------------------------------------------------------------------------------------------- Private Sub SaveAsToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SaveAsToolStripMenuItem.Click - Dim shortcut As ShortcutFileInfo = DirectCast(Me.PropertyGrid1.SelectedObject, ShortcutFileInfo) - - Using ofd As New SaveFileDialog - ofd.FileName = shortcut.FullName - ofd.DefaultExt = "lnk" - ofd.DereferenceLinks = False - ofd.Filter = "Shortcut files (*.lnk)|*.lnk" - ofd.FilterIndex = 1 - ofd.RestoreDirectory = True - ofd.SupportMultiDottedExtensions = True - ofd.Title = "Select a destination to save the shortcut file..." + Using dlg As New SaveFileDialog() + dlg.FileName = Me.CurrentShortcut.FullName + dlg.DefaultExt = "lnk" + dlg.DereferenceLinks = False + dlg.Filter = "Shortcut files (*.lnk)|*.lnk" + dlg.FilterIndex = 1 + dlg.RestoreDirectory = True + dlg.SupportMultiDottedExtensions = True + dlg.Title = "Select a destination to save the shortcut file..." - If ofd.ShowDialog() = DialogResult.OK Then + If dlg.ShowDialog() = DialogResult.OK Then - Dim dstShortcut As New ShortcutFileInfo(ofd.FileName) With {.ViewMode = True} + Dim dstShortcut As New ShortcutFileInfo(dlg.FileName) With {.ViewMode = True} With dstShortcut - .Description = shortcut.Description - .Hotkey = shortcut.Hotkey - .Icon = shortcut.Icon - .IconIndex = shortcut.IconIndex - .Target = shortcut.Target - .TargetArguments = shortcut.TargetArguments - .WindowState = shortcut.WindowState - .WorkingDirectory = shortcut.WorkingDirectory + .Description = Me.CurrentShortcut.Description + .Hotkey = Me.CurrentShortcut.Hotkey + .Icon = Me.CurrentShortcut.Icon + .IconIndex = Me.CurrentShortcut.IconIndex + .Target = Me.CurrentShortcut.Target + .TargetArguments = Me.CurrentShortcut.TargetArguments + .WindowState = Me.CurrentShortcut.WindowState + .WorkingDirectory = Me.CurrentShortcut.WorkingDirectory .Create() - .Attributes = shortcut.Attributes - .CreationTime = shortcut.CreationTime - .LastAccessTime = shortcut.LastAccessTime - .LastWriteTime = shortcut.LastWriteTime + .Attributes = Me.CurrentShortcut.Attributes + .CreationTime = Me.CurrentShortcut.CreationTime + .LastAccessTime = Me.CurrentShortcut.LastAccessTime + .LastWriteTime = Me.CurrentShortcut.LastWriteTime End With End If @@ -251,11 +352,14 @@ Friend NotInheritable Class Form1 : Inherits Form ''' ---------------------------------------------------------------------------------------------------- Private Sub CloseToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles CloseToolStripMenuItem.Click Me.PropertyGrid1.SelectedObject = Nothing - Me.ToolStripStatusLabel1.Text = "" + Me.ToolStripStatusLabelFileName.Image = Nothing + Me.ToolStripStatusLabelFileName.Text = "" Me.SaveToolStripMenuItem.Enabled = False Me.SaveAsToolStripMenuItem.Enabled = False Me.CloseToolStripMenuItem.Enabled = False + + Me.PropertyGrid1.ContextMenuStrip = Nothing End Sub ''' ---------------------------------------------------------------------------------------------------- @@ -275,6 +379,31 @@ Friend NotInheritable Class Form1 : Inherits Form Me.Close() End Sub +#End Region + +#Region " Settings Menu " + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Handles the event of the control. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The source of the event. + ''' + ''' + ''' + ''' The instance containing the event data. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Private Sub ToolStripComboBoxFontSize_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ToolStripComboBoxFontSize.SelectedIndexChanged + + Dim sz As Single = CSng(DirectCast(sender, ToolStripComboBox).SelectedItem) + My.Settings.FontSize = sz + Me.LoadFontSize() + + End Sub + ''' ---------------------------------------------------------------------------------------------------- ''' ''' Handles the event of the control. @@ -311,6 +440,10 @@ Friend NotInheritable Class Form1 : Inherits Form Me.LoadVisualTheme() End Sub +#End Region + +#Region " About Menu " + ''' ---------------------------------------------------------------------------------------------------- ''' ''' Handles the event of the control. @@ -330,8 +463,250 @@ Friend NotInheritable Class Form1 : Inherits Form #End Region +#End Region + +#Region " PropertyGrid Context Menu " + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Handles the event of the menu. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The source of the event. + ''' + ''' + ''' + ''' The instance containing the event data. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Private Sub ContextMenuStrip1_Opening(sender As Object, e As CancelEventArgs) Handles ContextMenuStrip1.Opening + + Me.OpenShortcutMenuItem.Enabled = Me.CurrentShortcut.Exists + Me.ViewShortcutMenuItem.Enabled = Me.OpenShortcutMenuItem.Enabled + + Me.OpenTargetMenuItem.Enabled = File.Exists(Me.CurrentShortcut.Target) OrElse Directory.Exists(Me.CurrentShortcut.Target) + Me.OpenTargetWithArgsMenuItem.Enabled = File.Exists(Me.CurrentShortcut.Target) AndAlso Not String.IsNullOrWhiteSpace(Me.CurrentShortcut.TargetArguments) + Me.ViewTargetMenuItem.Enabled = Me.OpenTargetMenuItem.Enabled + + Me.ViewWorkingDirectoryMenuItem.Enabled = Directory.Exists(Me.CurrentShortcut.WorkingDirectory) + Me.ViewIconMenuItem.Enabled = File.Exists(Me.CurrentShortcut.Icon) + + End Sub + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Handles the event of the menu item. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The source of the event. + ''' + ''' + ''' + ''' The instance containing the event data. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Private Sub OpenShortcutMenuItem_Click(sender As Object, e As EventArgs) Handles OpenShortcutMenuItem.Click + + Try + Process.Start(Me.CurrentShortcut.FullName) + + Catch ex As Exception + MessageBox.Show(Me, ex.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) + + End Try + + End Sub + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Handles the event of the menu item. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The source of the event. + ''' + ''' + ''' + ''' The instance containing the event data. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Private Sub OpenTargetMenuItem1_Click(sender As Object, e As EventArgs) Handles OpenTargetMenuItem.Click + + Dim target As String = Me.CurrentShortcut.Target + + If File.Exists(target) Then + Try + Process.Start(target) + Exit Sub + + Catch ex As Exception + MessageBox.Show(Me, ex.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) + + End Try + End If + + If Directory.Exists(target) Then + Try + FileUtil.InternalOpenInExplorer(target) + Exit Sub + + Catch ex As Exception + MessageBox.Show(Me, ex.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) + + End Try + End If + + MessageBox.Show(Me, "Can't find the shortcut target.", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) + + End Sub + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Handles the event of the menu item. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The source of the event. + ''' + ''' + ''' + ''' The instance containing the event data. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Private Sub OpenTargetWithArgsMenuItem_Click(sender As Object, e As EventArgs) Handles OpenTargetWithArgsMenuItem.Click + + Try + Process.Start(Me.CurrentShortcut.Target, Me.CurrentShortcut.TargetArguments) + Exit Sub + + Catch ex As Exception + MessageBox.Show(Me, ex.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) + + End Try + + End Sub + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Handles the event of the menu item. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The source of the event. + ''' + ''' + ''' + ''' The instance containing the event data. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Private Sub ViewShortcutMenuItem_Click(sender As Object, e As EventArgs) Handles ViewShortcutMenuItem.Click + + Try + FileUtil.InternalOpenInExplorer(Me.CurrentShortcut.FullName) + + Catch ex As Exception + MessageBox.Show(Me, ex.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) + + End Try + + End Sub + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Handles the event of the menu item. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The source of the event. + ''' + ''' + ''' + ''' The instance containing the event data. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Private Sub ViewTargetMenuItem_Click(sender As Object, e As EventArgs) Handles ViewTargetMenuItem.Click + + Try + FileUtil.InternalOpenInExplorer(Me.CurrentShortcut.Target) + + Catch ex As Exception + MessageBox.Show(Me, ex.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) + + End Try + + End Sub + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Handles the event of the menu item. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The source of the event. + ''' + ''' + ''' + ''' The instance containing the event data. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Private Sub ViewWorkingDirectoryMenuItem_Click(sender As Object, e As EventArgs) Handles ViewWorkingDirectoryMenuItem.Click + + Try + FileUtil.InternalOpenInExplorer(Me.CurrentShortcut.WorkingDirectory) + + Catch ex As Exception + MessageBox.Show(Me, ex.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) + + End Try + + End Sub + + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Handles the event of the menu item. + ''' + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' The source of the event. + ''' + ''' + ''' + ''' The instance containing the event data. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Private Sub ViewIconMenuItem_Click(sender As Object, e As EventArgs) Handles ViewIconMenuItem.Click + + Try + FileUtil.InternalOpenInExplorer(Me.CurrentShortcut.Icon) + + Catch ex As Exception + MessageBox.Show(Me, ex.Message, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Error) + + End Try + + End Sub + +#End Region + +#End Region + #Region " Private Methods " + ''' ---------------------------------------------------------------------------------------------------- + ''' + ''' Loads the saved font size for the user-interface. + ''' + ''' ---------------------------------------------------------------------------------------------------- + Private Sub LoadFontSize() + Me.MenuStrip1.Font = New Font(Me.MenuStrip1.Font.FontFamily, My.Settings.FontSize, Me.MenuStrip1.Font.Style) + Me.StatusStrip1.Font = New Font(Me.StatusStrip1.Font.FontFamily, My.Settings.FontSize, Me.StatusStrip1.Font.Style) + Me.ToolStripStatusLabelIcon.Font = New Font(Me.ToolStripStatusLabelIcon.Font.FontFamily, My.Settings.FontSize, Me.ToolStripStatusLabelIcon.Font.Style) + Me.ToolStripStatusLabelFileName.Font = New Font(Me.ToolStripStatusLabelFileName.Font.FontFamily, My.Settings.FontSize, Me.ToolStripStatusLabelFileName.Font.Style) + Me.PropertyGrid1.Font = New Font(Me.PropertyGrid1.Font.FontFamily, My.Settings.FontSize, Me.PropertyGrid1.Font.Style) + End Sub + ''' ---------------------------------------------------------------------------------------------------- ''' ''' Loads the saved visual theme for the user-interface. @@ -420,22 +795,25 @@ Friend NotInheritable Class Form1 : Inherits Form ''' ---------------------------------------------------------------------------------------------------- Private Sub LoadShortcutInPropertyGrid(ByVal filePath As String) - Dim shortcut As New ShortcutFileInfo(filePath) With {.ViewMode = True} - If Not shortcut.Exists Then - MessageBox.Show(Me, $"The lnk file does not exist: {shortcut.FullName}", Me.Name, MessageBoxButtons.OK, MessageBoxIcon.Error) + Me.CurrentShortcut = New ShortcutFileInfo(filePath) With {.ViewMode = True} + If Not Me.CurrentShortcut.Exists Then + MessageBox.Show(Me, $"The lnk file does not exist: {Me.CurrentShortcut.FullName}", Me.Name, MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub End If - Me.PropertyGrid1.MoveSplitterTo(160) - Me.PropertyGrid1.SelectedObject = shortcut - Me.ToolStripStatusLabel1.Text = filePath + Me.PropertyGrid1.MoveSplitterTo(180) + Me.PropertyGrid1.SelectedObject = Me.CurrentShortcut + Me.ToolStripStatusLabelFileName.Text = filePath Me.RecentToolStripMenuItem.Enabled = True Me.SaveToolStripMenuItem.Enabled = True Me.SaveAsToolStripMenuItem.Enabled = True Me.CloseToolStripMenuItem.Enabled = True - Me.UpdateMruItems(shortcut) + Me.UpdateMruItems(Me.CurrentShortcut) + Me.ToolStripStatusLabelIcon.Image = Me.RecentToolStripMenuItem.DropDown.Items(0).Image + + Me.PropertyGrid1.ContextMenuStrip = Me.ContextMenuStrip1 End Sub

-*+K`-yQS(}_;lNlfISI!LrWV$|hi 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 diff --git a/Preview/Easy Link File Viewer 02.png b/Preview/Easy Link File Viewer 02.png index 5195c83d44af71145128b427ac7d0f2287319e88..7ed8a774078ada5fab4be6df3be4af371e398b83 100644 GIT binary patch literal 36450 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 Q+7Y^X$@DMu1;@z$1xh?t9RL6T literal 40886 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%0A>g?5*nOC&V8OMo2$@64#0w{*RZcv#R#q# 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�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 Studio 2017 Image Library. diff --git a/src/App.config b/src/App.config index cf3df4d..7e8019a 100644 --- a/src/App.config +++ b/src/App.config @@ -13,6 +13,9 @@ 0 + + 10 + \ No newline at end of file diff --git a/src/DevCase/FileOrFolderNameEditor.vb b/src/DevCase/FileOrFolderNameEditor.vb new file mode 100644 index 0000000..75f4c1c --- /dev/null +++ b/src/DevCase/FileOrFolderNameEditor.vb @@ -0,0 +1,127 @@ +' This source-code is freely distributed as part of "DevCase for .NET Framework". +' +' Maybe you would like to consider to buy this powerful set of libraries to support me. +' You can do loads of things with my apis for a big amount of diverse thematics. +' +' Here is a link to the purchase page: +' https://codecanyon.net/item/elektrokit-class-library-for-net/19260282 +' +' Thank you. + +#Region " Option Statements " + +Option Strict On +Option Explicit On +Option Infer Off + +#End Region + +#Region " Imports " + +Imports System.ComponentModel +Imports System.Drawing.Design +Imports System.IO +Imports System.Text +Imports System.Windows.Forms.Design +Imports DevCase.UserControls.Controls + +#End Region + +#Region " FileOrFolderNameEditor " + +Namespace DevCase.Core.Design + + ''' ---------------------------------------------------------------------------------------------------- + '''