mirror of
https://github.com/terrymacdonald/DisplayMagician.git
synced 2024-08-30 18:32:20 +00:00
Mostly working Game icons!
Well this took enough time! I have almost corrected all the issues with the icon parsing functions, but I still have a couple of edge cases to fix.
This commit is contained in:
parent
22964f07df
commit
5bdb2adba8
@ -41,6 +41,7 @@
|
|||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<Prefer32Bit>false</Prefer32Bit>
|
<Prefer32Bit>false</Prefer32Bit>
|
||||||
<UseVSHostingProcess>true</UseVSHostingProcess>
|
<UseVSHostingProcess>true</UseVSHostingProcess>
|
||||||
|
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
@ -279,6 +280,9 @@
|
|||||||
<PackageReference Include="HtmlAgilityPack">
|
<PackageReference Include="HtmlAgilityPack">
|
||||||
<Version>1.11.33</Version>
|
<Version>1.11.33</Version>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
<PackageReference Include="IconExtractor">
|
||||||
|
<Version>1.0.1</Version>
|
||||||
|
</PackageReference>
|
||||||
<PackageReference Include="IconExtractor.dll">
|
<PackageReference Include="IconExtractor.dll">
|
||||||
<Version>1.0.2.1-beta</Version>
|
<Version>1.0.2.1-beta</Version>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
@ -295,7 +299,7 @@
|
|||||||
<Version>3.1.0</Version>
|
<Version>3.1.0</Version>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="Microsoft.Toolkit.Uwp.Notifications">
|
<PackageReference Include="Microsoft.Toolkit.Uwp.Notifications">
|
||||||
<Version>7.0.1</Version>
|
<Version>7.0.2</Version>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="MintPlayer.IconUtils">
|
<PackageReference Include="MintPlayer.IconUtils">
|
||||||
<Version>1.0.4</Version>
|
<Version>1.0.4</Version>
|
||||||
@ -310,7 +314,7 @@
|
|||||||
<Version>2.1.0</Version>
|
<Version>2.1.0</Version>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="NLog">
|
<PackageReference Include="NLog">
|
||||||
<Version>4.7.9</Version>
|
<Version>4.7.10</Version>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="QueryString.NET">
|
<PackageReference Include="QueryString.NET">
|
||||||
<Version>1.0.0</Version>
|
<Version>1.0.0</Version>
|
||||||
|
@ -583,10 +583,10 @@ namespace DisplayMagician
|
|||||||
IntPtr hIcon = IntPtr.Zero;
|
IntPtr hIcon = IntPtr.Zero;
|
||||||
int ILD_TRANSPARENT = 1;
|
int ILD_TRANSPARENT = 1;
|
||||||
hres = iml.GetIcon(iconIndex, ILD_TRANSPARENT, ref hIcon);
|
hres = iml.GetIcon(iconIndex, ILD_TRANSPARENT, ref hIcon);
|
||||||
//if (hres == 0)
|
/*if (hres == 0)
|
||||||
//{
|
{
|
||||||
// throw (new System.Exception("Error iml.GetIcon"));
|
return new Bitmap(1, 1);
|
||||||
//}
|
}*/
|
||||||
|
|
||||||
var myIcon = System.Drawing.Icon.FromHandle(hIcon);
|
var myIcon = System.Drawing.Icon.FromHandle(hIcon);
|
||||||
Bitmap bm = myIcon.ToBitmap();
|
Bitmap bm = myIcon.ToBitmap();
|
||||||
|
@ -10,6 +10,8 @@ using System.Text;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using TsudaKageyu;
|
using TsudaKageyu;
|
||||||
using DisplayMagicianShared;
|
using DisplayMagicianShared;
|
||||||
|
using MintPlayer.IconUtils;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
namespace DisplayMagician
|
namespace DisplayMagician
|
||||||
{
|
{
|
||||||
@ -130,125 +132,171 @@ namespace DisplayMagician
|
|||||||
return newBitmap;
|
return newBitmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* public static Bitmap ToLargeBitmap(string fileNameAndPath)
|
/* public static Bitmap ToLargeBitmap(string fileNameAndPath)
|
||||||
{
|
{
|
||||||
Bitmap bmToReturn = null;
|
Bitmap bmToReturn = null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (String.IsNullOrWhiteSpace(fileNameAndPath))
|
||||||
|
{
|
||||||
|
logger.Warn($"ShortcutItem/ToLargeBitmap: Bitmap fileNameAndPath is empty! Unable to get the large icon from the file (256px x 256px).");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fileNameAndPath.EndsWith(".ico"))
|
||||||
|
{
|
||||||
|
logger.Trace($"ShortcutItem/ToLargeBitmap: The file we want to get the image from is an icon file. Attempting to extract the icon file from {fileNameAndPath}.");
|
||||||
|
|
||||||
|
Icon myIcon = new Icon(fileNameAndPath,128,128);
|
||||||
|
bmToReturn = myIcon.ToBitmap();
|
||||||
|
MultiIcon myMultiIcon = new MultiIcon();
|
||||||
|
SingleIcon mySingleIcon = myMultiIcon.Add("Icon1");
|
||||||
|
//mySingleIcon.CreateFrom(fileNameAndPath,IconOutputFormat.Vista);
|
||||||
|
mySingleIcon.Load(fileNameAndPath);
|
||||||
|
Bitmap bm = null;
|
||||||
|
foreach (IconImage myIconImage in mySingleIcon)
|
||||||
|
{
|
||||||
|
bm = myIconImage.Image;
|
||||||
|
|
||||||
|
if (bm.Width > bmToReturn.Width && bm.Height > bmToReturn.Height)
|
||||||
|
{
|
||||||
|
bmToReturn = bm;
|
||||||
|
logger.Trace($"ShortcutItem/ToLargeBitmap: This new bitmap from the icon file {fileNameAndPath} is larger than the previous one at {bm.Width} x {bm.Height}, so using that instead.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Icon myIcon = Icon.ExtractAssociatedIcon(fileNameAndPath);
|
||||||
|
bmToReturn = myIcon.ToBitmap();
|
||||||
|
|
||||||
|
logger.Trace($"ShortcutItem/ToLargeBitmap: The file {fileNameAndPath} isn't an Icon file, so trying to use GetLargeBitmapFromFile to extract the image.");
|
||||||
|
Bitmap bm = null;
|
||||||
|
bm = IconFromFile.GetLargeBitmapFromFile(fileNameAndPath, false, false);
|
||||||
|
|
||||||
|
if (bm.Width > bmToReturn.Width && bm.Height > bmToReturn.Height)
|
||||||
|
{
|
||||||
|
bmToReturn = bm;
|
||||||
|
logger.Trace($"ShortcutItem/ToLargeBitmap: This new bitmap from the icon file {fileNameAndPath} is larger than the previous one at {bm.Width} x {bm.Height}, so using that instead.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return bmToReturn;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
logger.Warn(ex, $"ShortcutItem/ToLargeBitmap: Exception while trying to save the Shortcut icon initially. Trying again with GetLargeBitmapFromFile.");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
logger.Trace($"ShortcutItem/ToLargeBitmap: Attempt2. The file {fileNameAndPath} isn't an Icon file, so trying to use GetLargeBitmapFromFile to extract the image.");
|
||||||
|
bmToReturn = IconFromFile.GetLargeBitmapFromFile(fileNameAndPath, true, false);
|
||||||
|
return bmToReturn;
|
||||||
|
}
|
||||||
|
catch (Exception innerex)
|
||||||
|
{
|
||||||
|
logger.Warn(innerex, $"ShortcutItem/ToLargeBitmap: Exception while trying to save the Shortcut icon a second time. Giving up.");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Bitmap ToLargeBitmap(ArrayList fileNamesAndPaths)
|
||||||
|
{
|
||||||
|
Bitmap bmToReturn = null;
|
||||||
|
|
||||||
|
|
||||||
|
if (fileNamesAndPaths.Count == 0)
|
||||||
|
{
|
||||||
|
logger.Warn($"ShortcutItem/ToLargeBitmap2: The fileNamesAndPaths list is empty! Can't get the large bitmap.");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
foreach (string fileNameAndPath in fileNamesAndPaths)
|
||||||
|
{
|
||||||
|
Bitmap bm = ToLargeBitmap(fileNameAndPath);
|
||||||
|
|
||||||
|
if (bmToReturn == null)
|
||||||
|
{
|
||||||
|
bmToReturn = bm;
|
||||||
|
}
|
||||||
|
if (bm.Width > bmToReturn.Width && bm.Height > bmToReturn.Height)
|
||||||
|
{
|
||||||
|
bmToReturn = bm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return bmToReturn;
|
||||||
|
|
||||||
|
}*/
|
||||||
|
|
||||||
|
public static Bitmap GetMeABitmapFromFile(string fileNameAndPath)
|
||||||
|
{
|
||||||
|
if (String.IsNullOrWhiteSpace(fileNameAndPath))
|
||||||
|
{
|
||||||
|
logger.Warn($"ShortcutItem/GetMeABitmapFromFile: Bitmap fileNameAndPath is empty! Unable to get the icon from the file.");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Icon myIcon = null;
|
||||||
|
Bitmap bm = null;
|
||||||
|
Bitmap bmToReturn = new Bitmap(1, 1);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (String.IsNullOrWhiteSpace(fileNameAndPath))
|
|
||||||
{
|
|
||||||
logger.Warn($"ShortcutItem/ToLargeBitmap: Bitmap fileNameAndPath is empty! Unable to get the large icon from the file (256px x 256px).");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fileNameAndPath.EndsWith(".ico"))
|
List<Icon> myExtractedIcons = MintPlayer.IconUtils.IconExtractor.Split(fileNameAndPath);
|
||||||
|
foreach (Icon myExtractedIcon in myExtractedIcons)
|
||||||
{
|
{
|
||||||
logger.Trace($"ShortcutItem/ToLargeBitmap: The file we want to get the image from is an icon file. Attempting to extract the icon file from {fileNameAndPath}.");
|
Size largeSize = new Size(256, 256);
|
||||||
|
myIcon = myExtractedIcon.TryGetIcon(largeSize, 32, true, true);
|
||||||
|
|
||||||
Icon myIcon = new Icon(fileNameAndPath,128,128);
|
if (myIcon != null)
|
||||||
bmToReturn = myIcon.ToBitmap();
|
|
||||||
MultiIcon myMultiIcon = new MultiIcon();
|
|
||||||
SingleIcon mySingleIcon = myMultiIcon.Add("Icon1");
|
|
||||||
//mySingleIcon.CreateFrom(fileNameAndPath,IconOutputFormat.Vista);
|
|
||||||
mySingleIcon.Load(fileNameAndPath);
|
|
||||||
Bitmap bm = null;
|
|
||||||
foreach (IconImage myIconImage in mySingleIcon)
|
|
||||||
{
|
{
|
||||||
bm = myIconImage.Image;
|
bm = myIcon.ToBitmap();
|
||||||
|
|
||||||
if (bm.Width > bmToReturn.Width && bm.Height > bmToReturn.Height)
|
if (bm.Width > bmToReturn.Width && bm.Height > bmToReturn.Height)
|
||||||
{
|
{
|
||||||
bmToReturn = bm;
|
bmToReturn = bm;
|
||||||
logger.Trace($"ShortcutItem/ToLargeBitmap: This new bitmap from the icon file {fileNameAndPath} is larger than the previous one at {bm.Width} x {bm.Height}, so using that instead.");
|
logger.Trace($"ShortcutItem/ToSmallBitmap: This new bitmap from the icon file {fileNameAndPath} is larger than the previous one at {bm.Width} x {bm.Height}, so using that instead.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
}
|
||||||
{
|
catch (Exception ex)
|
||||||
Icon myIcon = Icon.ExtractAssociatedIcon(fileNameAndPath);
|
{
|
||||||
bmToReturn = myIcon.ToBitmap();
|
logger.Warn(ex, $"ShortcutItem/GetMeABitmapFromFile: Exception while trying to Split the icon using MintPlayer IconExtractor! ");
|
||||||
|
}
|
||||||
|
|
||||||
logger.Trace($"ShortcutItem/ToLargeBitmap: The file {fileNameAndPath} isn't an Icon file, so trying to use GetLargeBitmapFromFile to extract the image.");
|
if (fileNameAndPath.EndsWith(".ico"))
|
||||||
Bitmap bm = null;
|
{
|
||||||
bm = IconFromFile.GetLargeBitmapFromFile(fileNameAndPath, false, false);
|
try
|
||||||
|
{
|
||||||
|
|
||||||
|
logger.Trace($"ShortcutItem/ToSmallBitmap: The file we want to get the image from is an icon file. Attempting to extract the icon file from {fileNameAndPath}.");
|
||||||
|
|
||||||
|
|
||||||
|
myIcon = new Icon(fileNameAndPath, 256, 256);
|
||||||
|
//Icon myIcon = Icon.ExtractAssociatedIcon(fileNameAndPath);
|
||||||
|
bm = myIcon.ToBitmap();
|
||||||
|
|
||||||
|
|
||||||
|
//myIcon = Icon.ExtractAssociatedIcon(fileNameAndPath);
|
||||||
|
//bm = myIcon.ToBitmap();
|
||||||
|
|
||||||
if (bm.Width > bmToReturn.Width && bm.Height > bmToReturn.Height)
|
if (bm.Width > bmToReturn.Width && bm.Height > bmToReturn.Height)
|
||||||
{
|
{
|
||||||
bmToReturn = bm;
|
bmToReturn = bm;
|
||||||
logger.Trace($"ShortcutItem/ToLargeBitmap: This new bitmap from the icon file {fileNameAndPath} is larger than the previous one at {bm.Width} x {bm.Height}, so using that instead.");
|
logger.Trace($"ShortcutItem/ToSmallBitmap: This new bitmap from the icon file {fileNameAndPath} is larger than the previous one at {bm.Width} x {bm.Height}, so using that instead.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return bmToReturn;
|
catch (Exception ex)
|
||||||
}
|
{
|
||||||
catch (Exception ex)
|
logger.Warn(ex, $"ShortcutItem/GetMeABitmapFromFile: Exception while trying to extract the icon from a *.ico using Standard Icon tools.");
|
||||||
{
|
}
|
||||||
logger.Warn(ex, $"ShortcutItem/ToLargeBitmap: Exception while trying to save the Shortcut icon initially. Trying again with GetLargeBitmapFromFile.");
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
logger.Trace($"ShortcutItem/ToLargeBitmap: Attempt2. The file {fileNameAndPath} isn't an Icon file, so trying to use GetLargeBitmapFromFile to extract the image.");
|
|
||||||
bmToReturn = IconFromFile.GetLargeBitmapFromFile(fileNameAndPath, true, false);
|
|
||||||
return bmToReturn;
|
|
||||||
}
|
|
||||||
catch (Exception innerex)
|
|
||||||
{
|
|
||||||
logger.Warn(innerex, $"ShortcutItem/ToLargeBitmap: Exception while trying to save the Shortcut icon a second time. Giving up.");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Bitmap ToLargeBitmap(ArrayList fileNamesAndPaths)
|
|
||||||
{
|
|
||||||
Bitmap bmToReturn = null;
|
|
||||||
|
|
||||||
|
|
||||||
if (fileNamesAndPaths.Count == 0)
|
|
||||||
{
|
|
||||||
logger.Warn($"ShortcutItem/ToLargeBitmap2: The fileNamesAndPaths list is empty! Can't get the large bitmap.");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
foreach (string fileNameAndPath in fileNamesAndPaths)
|
|
||||||
{
|
|
||||||
Bitmap bm = ToLargeBitmap(fileNameAndPath);
|
|
||||||
|
|
||||||
if (bmToReturn == null)
|
|
||||||
{
|
|
||||||
bmToReturn = bm;
|
|
||||||
}
|
|
||||||
if (bm.Width > bmToReturn.Width && bm.Height > bmToReturn.Height)
|
|
||||||
{
|
|
||||||
bmToReturn = bm;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return bmToReturn;
|
|
||||||
|
|
||||||
}*/
|
|
||||||
|
|
||||||
public static Bitmap GetMeABitmapFromFile(string fileNameAndPath)
|
|
||||||
{
|
|
||||||
Bitmap bmToReturn = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
|
|
||||||
if (String.IsNullOrWhiteSpace(fileNameAndPath))
|
|
||||||
{
|
|
||||||
logger.Warn($"ShortcutItem/ToSmallBitmap: Bitmap fileNameAndPath is empty! Unable to get the small icon from the file (128px x 128px).");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
Icon myIcon = null;
|
|
||||||
Bitmap bm = null;
|
|
||||||
|
|
||||||
if (fileNameAndPath.EndsWith(".ico"))
|
|
||||||
{
|
|
||||||
logger.Trace($"ShortcutItem/ToSmallBitmap: The file we want to get the image from is an icon file. Attempting to extract the icon file from {fileNameAndPath}.");
|
|
||||||
myIcon = new Icon(fileNameAndPath, 128, 128);
|
|
||||||
//Icon myIcon = Icon.ExtractAssociatedIcon(fileNameAndPath);
|
|
||||||
bmToReturn = myIcon.ToBitmap();
|
|
||||||
MultiIcon myMultiIcon = new MultiIcon();
|
MultiIcon myMultiIcon = new MultiIcon();
|
||||||
SingleIcon mySingleIcon = myMultiIcon.Add("Icon1");
|
SingleIcon mySingleIcon = myMultiIcon.Add("Icon1");
|
||||||
mySingleIcon.CreateFrom(fileNameAndPath, IconOutputFormat.Vista);
|
//mySingleIcon.Load(fileNameAndPath, IconOutputFormat.All);
|
||||||
|
mySingleIcon.Load(fileNameAndPath);
|
||||||
|
|
||||||
foreach (IconImage myIconImage in mySingleIcon)
|
foreach (IconImage myIconImage in mySingleIcon)
|
||||||
{
|
{
|
||||||
@ -260,32 +308,39 @@ namespace DisplayMagician
|
|||||||
logger.Trace($"ShortcutItem/ToSmallBitmap: This new bitmap from the icon file {fileNameAndPath} is larger than the previous one at {bm.Width} x {bm.Height}, so using that instead.");
|
logger.Trace($"ShortcutItem/ToSmallBitmap: This new bitmap from the icon file {fileNameAndPath} is larger than the previous one at {bm.Width} x {bm.Height}, so using that instead.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
myIcon = Icon.ExtractAssociatedIcon(fileNameAndPath);
|
catch (Exception ex)
|
||||||
bm = myIcon.ToBitmap();
|
{
|
||||||
|
logger.Warn(ex, $"ShortcutItem/GetMeABitmapFromFile: Exception while trying to extract the icon from a *.ico using MultiIcon tools.");
|
||||||
if (bm.Width > bmToReturn.Width && bm.Height > bmToReturn.Height)
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
List<Icon> myIcons = ImageUtils.ExtractIconsFromExe(fileNameAndPath, true);
|
||||||
|
if (myIcons != null && myIcons.Count > 0)
|
||||||
{
|
{
|
||||||
bmToReturn = bm;
|
foreach (Icon myExtractedIcon in myIcons)
|
||||||
logger.Trace($"ShortcutItem/ToSmallBitmap: This new bitmap from the icon file {fileNameAndPath} is larger than the previous one at {bm.Width} x {bm.Height}, so using that instead.");
|
{
|
||||||
|
bm = myExtractedIcon.ToBitmap();
|
||||||
|
|
||||||
|
if (bm.Width > bmToReturn.Width && bm.Height > bmToReturn.Height)
|
||||||
|
{
|
||||||
|
bmToReturn = bm;
|
||||||
|
logger.Trace($"ShortcutItem/ToSmallBitmap: This new bitmap from the icon file {fileNameAndPath} is larger than the previous one at {bm.Width} x {bm.Height}, so using that instead.");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
myIcon = Icon.ExtractAssociatedIcon(fileNameAndPath);
|
logger.Warn(ex, $"ShortcutItem/GetMeABitmapFromFile: Exception while trying to extract the icon from an *.exe or *.dll using ImageUtils.ExtractIconsFromExe.");
|
||||||
bmToReturn = myIcon.ToBitmap();
|
}
|
||||||
|
|
||||||
logger.Trace($"ShortcutItem/ToSmallBitmap: The file {fileNameAndPath} isn't an Icon file, so trying to use GetLargeBitmapFromFile to extract the image.");
|
try
|
||||||
//bm = IconFromFile.GetSmallBitmapFromFile(fileNameAndPath, false, false, false);
|
{
|
||||||
bm = IconFromFile.GetSmallBitmapFromFile(fileNameAndPath, false, false, false);
|
var ie = new TsudaKageyu.IconExtractor(fileNameAndPath);
|
||||||
|
|
||||||
if (bm.Width > bmToReturn.Width && bm.Height > bmToReturn.Height)
|
|
||||||
{
|
|
||||||
bmToReturn = bm;
|
|
||||||
logger.Trace($"ShortcutItem/ToSmallBitmap: This new bitmap from the icon file {fileNameAndPath} is larger than the previous one at {bm.Width} x {bm.Height}, so using that instead.");
|
|
||||||
}
|
|
||||||
|
|
||||||
IconExtractor ie = new IconExtractor(fileNameAndPath);
|
|
||||||
Icon[] allIcons = ie.GetAllIcons();
|
Icon[] allIcons = ie.GetAllIcons();
|
||||||
foreach (Icon myExtractedIcon in allIcons)
|
foreach (Icon myExtractedIcon in allIcons)
|
||||||
{
|
{
|
||||||
@ -297,25 +352,31 @@ namespace DisplayMagician
|
|||||||
logger.Trace($"ShortcutItem/ToSmallBitmap: This new bitmap from the icon file {fileNameAndPath} is larger than the previous one at {bm.Width} x {bm.Height}, so using that instead.");
|
logger.Trace($"ShortcutItem/ToSmallBitmap: This new bitmap from the icon file {fileNameAndPath} is larger than the previous one at {bm.Width} x {bm.Height}, so using that instead.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
logger.Warn(ex, $"ShortcutItem/GetMeABitmapFromFile: Exception while trying to extract the icon from an *.exe or *.dll using TsudaKageyu.IconExtractor.");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bmToReturn == null)
|
||||||
|
{
|
||||||
|
// If we couldn't get any bitmaps at all
|
||||||
|
logger.Warn( $"ShortcutItem/GetMeABitmapFromFile: Haven't managed to get a valid icon file so returning null :(.");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
else if (bmToReturn.Width == 1 && bmToReturn.Height == 1)
|
||||||
|
{
|
||||||
|
// If we couldn't extract anything, so we return null
|
||||||
|
logger.Warn($"ShortcutItem/GetMeABitmapFromFile: Haven't managed to get a valid icon file so returning null instead of a 1x1 bitmap!.");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
return bmToReturn;
|
return bmToReturn;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
logger.Warn(ex, $"ShortcutItem/ToSmallBitmap: Exception while trying to save the Shortcut icon initially. Trying again with GetSmallBitmapFromFile.");
|
|
||||||
try
|
|
||||||
{
|
|
||||||
logger.Trace($"ShortcutItem/ToSmallBitmap: Attempt2. The file {fileNameAndPath} isn't an Icon file, so trying to use GetSmallBitmapFromFile to extract the image.");
|
|
||||||
bmToReturn = IconFromFile.GetSmallBitmapFromFile(fileNameAndPath, false, false, false);
|
|
||||||
return bmToReturn;
|
|
||||||
}
|
|
||||||
catch (Exception innerex)
|
|
||||||
{
|
|
||||||
logger.Warn(innerex, $"ShortcutItem/ToSmallBitmap: Exception while trying to save the Shortcut icon a second time. Giving up.");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Bitmap GetMeABitmapFromFile(ArrayList fileNamesAndPaths)
|
public static Bitmap GetMeABitmapFromFile(ArrayList fileNamesAndPaths)
|
||||||
@ -336,7 +397,7 @@ namespace DisplayMagician
|
|||||||
{
|
{
|
||||||
bmToReturn = bm;
|
bmToReturn = bm;
|
||||||
}
|
}
|
||||||
if (bm.Width > bmToReturn.Width && bm.Height > bmToReturn.Height)
|
if (bm != null && bm.Width > bmToReturn.Width && bm.Height > bmToReturn.Height)
|
||||||
{
|
{
|
||||||
bmToReturn = bm;
|
bmToReturn = bm;
|
||||||
}
|
}
|
||||||
@ -477,6 +538,144 @@ namespace DisplayMagician
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
[DllImport("Shell32", CharSet = CharSet.Auto)]
|
||||||
|
private static unsafe extern int ExtractIconEx(string lpszFile, int nIconIndex, IntPtr[] phIconLarge, IntPtr[] phIconSmall, int nIcons);
|
||||||
|
|
||||||
|
[DllImport("user32.dll", EntryPoint = "DestroyIcon", SetLastError = true)]
|
||||||
|
private static unsafe extern int DestroyIcon(IntPtr hIcon);
|
||||||
|
|
||||||
|
public static List<Icon> ExtractIconsFromExe(string file, bool large)
|
||||||
|
{
|
||||||
|
unsafe
|
||||||
|
{
|
||||||
|
int readIconCount = 0;
|
||||||
|
IntPtr[] hLargeIconEx = new IntPtr[] { IntPtr.Zero };
|
||||||
|
IntPtr[] hSmallIconEx = new IntPtr[] { IntPtr.Zero };
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
List<Icon> extractedIcons = new List<Icon>() { };
|
||||||
|
// First we get the total number of icons using ExtractIconEx
|
||||||
|
int totalIconCount = ExtractIconEx(file, -1, null, null, 0);
|
||||||
|
if (totalIconCount > 0)
|
||||||
|
{
|
||||||
|
for (int iconNum = 0; iconNum < totalIconCount; iconNum++)
|
||||||
|
{
|
||||||
|
hLargeIconEx = new IntPtr[] { IntPtr.Zero };
|
||||||
|
hSmallIconEx = new IntPtr[] { IntPtr.Zero };
|
||||||
|
//if (large)
|
||||||
|
//readIconCount = ExtractIconEx(file, 0, hIconEx, hDummy, 1);
|
||||||
|
// readIconCount = ExtractIconEx(file, iconNum, hIconEx, null, 1);
|
||||||
|
//else
|
||||||
|
//readIconCount = ExtractIconEx(file, 0, hDummy, hIconEx, 1);
|
||||||
|
// readIconCount = ExtractIconEx(file, iconNum, null, hIconEx, 1);
|
||||||
|
|
||||||
|
readIconCount = ExtractIconEx(file, iconNum, hLargeIconEx, hSmallIconEx, 1);
|
||||||
|
|
||||||
|
if (readIconCount > 0)
|
||||||
|
{
|
||||||
|
if (hLargeIconEx[0] != IntPtr.Zero)
|
||||||
|
{
|
||||||
|
Icon extractedIcon = (Icon)Icon.FromHandle(hLargeIconEx[0]).Clone();
|
||||||
|
extractedIcons.Add(extractedIcon);
|
||||||
|
}
|
||||||
|
else if (hSmallIconEx[0] != IntPtr.Zero)
|
||||||
|
{
|
||||||
|
Icon extractedIcon = (Icon)Icon.FromHandle(hSmallIconEx[0]).Clone();
|
||||||
|
extractedIcons.Add(extractedIcon);
|
||||||
|
}
|
||||||
|
// GET FIRST EXTRACTED ICON
|
||||||
|
return extractedIcons;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return extractedIcons;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return null;
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
/* EXTRACT ICON ERROR */
|
||||||
|
|
||||||
|
// BUBBLE UP
|
||||||
|
throw new ApplicationException("Could not extract icon", ex);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
// RELEASE RESOURCES
|
||||||
|
foreach (IntPtr ptr in hLargeIconEx)
|
||||||
|
if (ptr != IntPtr.Zero)
|
||||||
|
DestroyIcon(ptr);
|
||||||
|
|
||||||
|
foreach (IntPtr ptr in hSmallIconEx)
|
||||||
|
if (ptr != IntPtr.Zero)
|
||||||
|
DestroyIcon(ptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
|
||||||
|
private static extern IntPtr LoadImage(IntPtr hinst, string lpszName, uint uType,
|
||||||
|
int cxDesired, int cyDesired, uint fuLoad);
|
||||||
|
|
||||||
|
/*[DllImport("user32.dll", SetLastError = true)]
|
||||||
|
private static extern int DestroyIcon(IntPtr hIcon);*/
|
||||||
|
|
||||||
|
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
|
||||||
|
private static extern IntPtr LoadLibraryEx(string lpFileName, IntPtr hFile, LoadLibraryFlags dwFlags);
|
||||||
|
|
||||||
|
private enum LoadLibraryFlags : uint
|
||||||
|
{
|
||||||
|
DONT_RESOLVE_DLL_REFERENCES = 0x00000001,
|
||||||
|
LOAD_IGNORE_CODE_AUTHZ_LEVEL = 0x00000010,
|
||||||
|
LOAD_LIBRARY_AS_DATAFILE = 0x00000002,
|
||||||
|
LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE = 0x00000040,
|
||||||
|
LOAD_LIBRARY_AS_IMAGE_RESOURCE = 0x00000020,
|
||||||
|
LOAD_WITH_ALTERED_SEARCH_PATH = 0x00000008
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns an icon of given size.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="path">Path to a file (.exe/.dll) that contains the icons.
|
||||||
|
/// Skip it or use <c>null</c> to use current application's file.</param>
|
||||||
|
/// <param name="resId">Name of the resource icon that should be loaded.
|
||||||
|
/// Skip it to use the default <c>#32512</c> (value of <c>IDI_APPLICATION</c>) to use
|
||||||
|
/// the application's icon.</param>
|
||||||
|
/// <param name="size">Size of the icon to load. If there is no such size available, a larger or smaller
|
||||||
|
/// sized-icon is scaled.</param>
|
||||||
|
/// <returns>List of all icons.</returns>
|
||||||
|
public static Icon GetIconFromExe(string path = null, string resId = "#32512", int size = 32)
|
||||||
|
{
|
||||||
|
// load module
|
||||||
|
IntPtr h;
|
||||||
|
if (path == null)
|
||||||
|
//h = Marshal.GetHINSTANCE(Assembly.GetEntryAssembly().GetModules()[0]);
|
||||||
|
return null;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
h = LoadLibraryEx(path, IntPtr.Zero, LoadLibraryFlags.LOAD_LIBRARY_AS_DATAFILE);
|
||||||
|
if (h == IntPtr.Zero)
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 1 is IMAGE_ICON
|
||||||
|
IntPtr ptr = LoadImage(h, resId, 1, size, size, 0);
|
||||||
|
if (ptr != IntPtr.Zero)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Icon icon = (Icon)Icon.FromHandle(ptr).Clone();
|
||||||
|
return icon;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
DestroyIcon(ptr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -881,18 +881,25 @@ namespace DisplayMagician {
|
|||||||
Bitmap bm = null;
|
Bitmap bm = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
/*ArrayList filesToSearchForIcon = new ArrayList();
|
ArrayList filesToSearchForIcon = new ArrayList();
|
||||||
filesToSearchForIcon.Add(game.ExePath);
|
filesToSearchForIcon.Add(game.ExePath);
|
||||||
filesToSearchForIcon.Add(game.IconPath);
|
if (game.IconPath != game.ExePath)
|
||||||
|
filesToSearchForIcon.Add(game.IconPath);
|
||||||
|
|
||||||
bm = ImageUtils.ToSmallBitmap(filesToSearchForIcon);*/
|
bm = ImageUtils.GetMeABitmapFromFile(filesToSearchForIcon);
|
||||||
|
|
||||||
|
|
||||||
|
//bm = ImageUtils.GetMeABitmapFromFile(game.IconPath);
|
||||||
|
|
||||||
|
|
||||||
bm = ImageUtils.GetMeABitmapFromFile(game.IconPath);
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
logger.Error(ex, $"Program/LoadGamesInBackground: Exception building game bitmaps during load");
|
logger.Error(ex, $"Program/LoadGamesInBackground: Exception building game bitmaps during load");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bm == null)
|
||||||
|
{
|
||||||
if (game.GameLibrary.Equals(SupportedGameLibraryType.Steam))
|
if (game.GameLibrary.Equals(SupportedGameLibraryType.Steam))
|
||||||
bm = Properties.Resources.Steam.ToBitmap();
|
bm = Properties.Resources.Steam.ToBitmap();
|
||||||
else if (game.GameLibrary.Equals(SupportedGameLibraryType.Uplay))
|
else if (game.GameLibrary.Equals(SupportedGameLibraryType.Uplay))
|
||||||
@ -902,6 +909,7 @@ namespace DisplayMagician {
|
|||||||
else
|
else
|
||||||
bm = Properties.Resources.DisplayMagician.ToBitmap();
|
bm = Properties.Resources.DisplayMagician.ToBitmap();
|
||||||
}
|
}
|
||||||
|
|
||||||
game.GameBitmap = bm;
|
game.GameBitmap = bm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
8
DisplayMagician/UIForms/ShortcutForm.Designer.cs
generated
8
DisplayMagician/UIForms/ShortcutForm.Designer.cs
generated
@ -205,6 +205,7 @@ namespace DisplayMagician.UIForms
|
|||||||
this.tabc_shortcut.ShowToolTips = true;
|
this.tabc_shortcut.ShowToolTips = true;
|
||||||
this.tabc_shortcut.Size = new System.Drawing.Size(1090, 654);
|
this.tabc_shortcut.Size = new System.Drawing.Size(1090, 654);
|
||||||
this.tabc_shortcut.TabIndex = 28;
|
this.tabc_shortcut.TabIndex = 28;
|
||||||
|
this.tabc_shortcut.VisibleChanged += new System.EventHandler(this.tabc_shortcut_VisibleChanged);
|
||||||
//
|
//
|
||||||
// tabp_display
|
// tabp_display
|
||||||
//
|
//
|
||||||
@ -896,13 +897,16 @@ namespace DisplayMagician.UIForms
|
|||||||
//
|
//
|
||||||
// ilv_games
|
// ilv_games
|
||||||
//
|
//
|
||||||
this.ilv_games.Dock = System.Windows.Forms.DockStyle.Bottom;
|
this.ilv_games.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
|
||||||
|
| System.Windows.Forms.AnchorStyles.Right)));
|
||||||
this.ilv_games.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
this.ilv_games.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
|
this.ilv_games.IntegralScroll = true;
|
||||||
this.ilv_games.Location = new System.Drawing.Point(0, 97);
|
this.ilv_games.Location = new System.Drawing.Point(0, 97);
|
||||||
this.ilv_games.Name = "ilv_games";
|
this.ilv_games.Name = "ilv_games";
|
||||||
this.ilv_games.PersistentCacheDirectory = "";
|
this.ilv_games.PersistentCacheDirectory = "";
|
||||||
this.ilv_games.PersistentCacheSize = ((long)(100));
|
this.ilv_games.PersistentCacheSize = ((long)(100));
|
||||||
this.ilv_games.Size = new System.Drawing.Size(1076, 226);
|
this.ilv_games.Size = new System.Drawing.Size(1076, 226);
|
||||||
|
this.ilv_games.SortOrder = Manina.Windows.Forms.SortOrder.Ascending;
|
||||||
this.ilv_games.TabIndex = 28;
|
this.ilv_games.TabIndex = 28;
|
||||||
this.ilv_games.UseWIC = true;
|
this.ilv_games.UseWIC = true;
|
||||||
this.ilv_games.ItemClick += new Manina.Windows.Forms.ItemClickEventHandler(this.ilv_games_ItemClick);
|
this.ilv_games.ItemClick += new Manina.Windows.Forms.ItemClickEventHandler(this.ilv_games_ItemClick);
|
||||||
@ -1405,6 +1409,6 @@ namespace DisplayMagician.UIForms
|
|||||||
private System.Windows.Forms.FlowLayoutPanel flp_start_programs;
|
private System.Windows.Forms.FlowLayoutPanel flp_start_programs;
|
||||||
private System.Windows.Forms.Button btn_add_new_start_program;
|
private System.Windows.Forms.Button btn_add_new_start_program;
|
||||||
private System.Windows.Forms.Label label3;
|
private System.Windows.Forms.Label label3;
|
||||||
private Manina.Windows.Forms.ImageListView ilv_games;
|
internal Manina.Windows.Forms.ImageListView ilv_games;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -463,7 +463,7 @@ namespace DisplayMagician.UIForms
|
|||||||
_capturePermanence = ShortcutPermanence.Temporary;
|
_capturePermanence = ShortcutPermanence.Temporary;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Scan through the list of
|
// Add the startprograms to the list
|
||||||
List<StartProgram> newStartPrograms = new List<StartProgram>() { };
|
List<StartProgram> newStartPrograms = new List<StartProgram>() { };
|
||||||
foreach (StartProgramControl myStartProgramControl in flp_start_programs.Controls)
|
foreach (StartProgramControl myStartProgramControl in flp_start_programs.Controls)
|
||||||
{
|
{
|
||||||
@ -472,54 +472,6 @@ namespace DisplayMagician.UIForms
|
|||||||
|
|
||||||
// Replace the old start programs with the ones we've created now
|
// Replace the old start programs with the ones we've created now
|
||||||
_startPrograms = newStartPrograms;
|
_startPrograms = newStartPrograms;
|
||||||
// Save the start program 1
|
|
||||||
/*StartProgram myStartProgram = new StartProgram
|
|
||||||
{
|
|
||||||
Priority = 1,
|
|
||||||
Enabled = cb_start_program1.Checked,
|
|
||||||
Executable = txt_start_program1.Text,
|
|
||||||
ExecutableArgumentsRequired = cb_start_program_pass_args1.Checked,
|
|
||||||
Arguments = txt_start_program_args1.Text,
|
|
||||||
CloseOnFinish = cb_start_program_close1.Checked,
|
|
||||||
DontStartIfAlreadyRunning = cb_dont_start_if_running1.Checked
|
|
||||||
};
|
|
||||||
_startPrograms.Add(myStartProgram);
|
|
||||||
|
|
||||||
myStartProgram = new StartProgram
|
|
||||||
{
|
|
||||||
Priority = 2,
|
|
||||||
Executable = txt_start_program2.Text,
|
|
||||||
Enabled = cb_start_program2.Checked,
|
|
||||||
ExecutableArgumentsRequired = cb_start_program_pass_args2.Checked,
|
|
||||||
Arguments = txt_start_program_args2.Text,
|
|
||||||
CloseOnFinish = cb_start_program_close2.Checked,
|
|
||||||
DontStartIfAlreadyRunning = cb_dont_start_if_running2.Checked
|
|
||||||
};
|
|
||||||
_startPrograms.Add(myStartProgram);
|
|
||||||
|
|
||||||
myStartProgram = new StartProgram
|
|
||||||
{
|
|
||||||
Priority = 3,
|
|
||||||
Executable = txt_start_program3.Text,
|
|
||||||
Enabled = cb_start_program3.Checked,
|
|
||||||
ExecutableArgumentsRequired = cb_start_program_pass_args3.Checked,
|
|
||||||
Arguments = txt_start_program_args3.Text,
|
|
||||||
CloseOnFinish = cb_start_program_close3.Checked,
|
|
||||||
DontStartIfAlreadyRunning = cb_dont_start_if_running3.Checked
|
|
||||||
};
|
|
||||||
_startPrograms.Add(myStartProgram);
|
|
||||||
|
|
||||||
myStartProgram = new StartProgram
|
|
||||||
{
|
|
||||||
Priority = 4,
|
|
||||||
Executable = txt_start_program4.Text,
|
|
||||||
Enabled = cb_start_program4.Checked,
|
|
||||||
ExecutableArgumentsRequired = cb_start_program_pass_args4.Checked,
|
|
||||||
Arguments = txt_start_program_args4.Text,
|
|
||||||
CloseOnFinish = cb_start_program_close4.Checked,
|
|
||||||
DontStartIfAlreadyRunning = cb_dont_start_if_running4.Checked
|
|
||||||
};
|
|
||||||
_startPrograms.Add(myStartProgram); */
|
|
||||||
|
|
||||||
// Now we create the Shortcut Object ready to save
|
// Now we create the Shortcut Object ready to save
|
||||||
// If we're launching a game
|
// If we're launching a game
|
||||||
@ -731,21 +683,26 @@ namespace DisplayMagician.UIForms
|
|||||||
IEnumerable<ImageListViewItem> matchingImageListViewItems = (from item in ilv_saved_profiles.Items where item.Text == profile.Name select item);
|
IEnumerable<ImageListViewItem> matchingImageListViewItems = (from item in ilv_saved_profiles.Items where item.Text == profile.Name select item);
|
||||||
if (matchingImageListViewItems.Any())
|
if (matchingImageListViewItems.Any())
|
||||||
{
|
{
|
||||||
matchingImageListViewItems.First().Selected = true;
|
ImageListViewItem itemToSelect = matchingImageListViewItems.First();
|
||||||
matchingImageListViewItems.First().Focused = true;
|
itemToSelect.Selected = true;
|
||||||
matchingImageListViewItems.First().Enabled = true;
|
itemToSelect.Focused = true;
|
||||||
|
itemToSelect.Enabled = true;
|
||||||
|
ilv_saved_profiles.EnsureVisible(itemToSelect.Index);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RefreshGameImageListView(Game game)
|
private void SelectGameInImageListView()
|
||||||
{
|
{
|
||||||
ilv_games.ClearSelection();
|
ilv_games.ClearSelection();
|
||||||
IEnumerable<ImageListViewItem> matchingImageListViewItems = (from item in ilv_games.Items where item.Text == game.Name select item);
|
IEnumerable<ImageListViewItem> matchingImageListViewItems = (from item in ilv_games.Items where item.Text == _shortcutToEdit.GameName select item);
|
||||||
if (matchingImageListViewItems.Any())
|
if (matchingImageListViewItems.Any())
|
||||||
{
|
{
|
||||||
matchingImageListViewItems.First().Selected = true;
|
ImageListViewItem itemToSelect = matchingImageListViewItems.First();
|
||||||
matchingImageListViewItems.First().Focused = true;
|
itemToSelect.Selected = true;
|
||||||
matchingImageListViewItems.First().Enabled = true;
|
itemToSelect.Focused = true;
|
||||||
|
itemToSelect.Enabled = true;
|
||||||
|
ilv_games.EnsureVisible(itemToSelect.Index);
|
||||||
|
ilv_games.Refresh();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -965,17 +922,6 @@ namespace DisplayMagician.UIForms
|
|||||||
rb_set_capture_volume.Checked = false;
|
rb_set_capture_volume.Checked = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Populate a full list of games
|
|
||||||
// Start with the Steam Games
|
|
||||||
/*allGames = new List<Game>();
|
|
||||||
allGames.AddRange(SteamLibrary.GetLibrary().AllInstalledGames);
|
|
||||||
// Then add the Uplay Games
|
|
||||||
allGames.AddRange(UplayLibrary.GetLibrary().AllInstalledGames);
|
|
||||||
// Then add the Origin Games
|
|
||||||
allGames.AddRange(OriginLibrary.GetLibrary().AllInstalledGames);*/
|
|
||||||
|
|
||||||
|
|
||||||
// Load all the Games into the Games ListView
|
// Load all the Games into the Games ListView
|
||||||
foreach (var game in DisplayMagician.GameLibraries.GameLibrary.AllInstalledGamesInAllLibraries.OrderBy(game => game.Name))
|
foreach (var game in DisplayMagician.GameLibraries.GameLibrary.AllInstalledGamesInAllLibraries.OrderBy(game => game.Name))
|
||||||
{
|
{
|
||||||
@ -985,6 +931,7 @@ namespace DisplayMagician.UIForms
|
|||||||
ilv_games.Items.Add(newItem, _gameAdaptor);
|
ilv_games.Items.Add(newItem, _gameAdaptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SelectGameInImageListView();
|
||||||
|
|
||||||
if (_shortcutToEdit != null)
|
if (_shortcutToEdit != null)
|
||||||
{
|
{
|
||||||
@ -1129,6 +1076,7 @@ namespace DisplayMagician.UIForms
|
|||||||
if (gameItem.Text.Equals(_shortcutToEdit.GameName))
|
if (gameItem.Text.Equals(_shortcutToEdit.GameName))
|
||||||
{
|
{
|
||||||
gameItem.Selected = true;
|
gameItem.Selected = true;
|
||||||
|
ilv_games.EnsureVisible(gameItem.Index);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1427,21 +1375,36 @@ namespace DisplayMagician.UIForms
|
|||||||
ilv_saved_profiles.ResumeLayout();
|
ilv_saved_profiles.ResumeLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DisplayMagician.GameLibraries.GameLibrary.AllInstalledGamesInAllLibraries.Count > 0)
|
/*if (DisplayMagician.GameLibraries.GameLibrary.AllInstalledGamesInAllLibraries.Count > 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
// Temporarily stop updating the saved_profiles listview
|
// Temporarily stop updating the saved_profiles listview
|
||||||
ilv_games.SuspendLayout();
|
ilv_games.SuspendLayout();
|
||||||
|
|
||||||
ImageListViewItem newItem = null;
|
ImageListViewItem ilvItem = null;
|
||||||
foreach (Game loadedGame in DisplayMagician.GameLibraries.GameLibrary.AllInstalledGamesInAllLibraries)
|
foreach (Game loadedGame in DisplayMagician.GameLibraries.GameLibrary.AllInstalledGamesInAllLibraries)
|
||||||
{
|
{
|
||||||
bool thisLoadedProfileIsAlreadyHere = (from item in ilv_games.Items where item.Text == loadedGame.Name orderby item.Text select item.Text).Any();
|
bool thisLoadedProfileIsAlreadyHere = (from item in ilv_games.Items where item.Text == loadedGame.Name orderby item.Text select item.Text).Any();
|
||||||
if (!thisLoadedProfileIsAlreadyHere)
|
if (!thisLoadedProfileIsAlreadyHere)
|
||||||
{
|
{
|
||||||
newItem = new ImageListViewItem(loadedGame, loadedGame.Name);
|
ilvItem = new ImageListViewItem(loadedGame, loadedGame.Name);
|
||||||
//ilv_saved_profiles.Items.Add(newItem);
|
//ilv_saved_profiles.Items.Add(newItem);
|
||||||
ilv_games.Items.Add(newItem, _gameAdaptor);
|
ilv_games.Items.Add(ilvItem, _gameAdaptor);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// If a game has been selected
|
||||||
|
if (!String.IsNullOrEmpty(_shortcutToEdit.GameName))
|
||||||
|
{
|
||||||
|
foreach (ImageListViewItem gameItem in ilv_games.Items)
|
||||||
|
{
|
||||||
|
if (gameItem.Text == _shortcutToEdit.GameName)
|
||||||
|
{
|
||||||
|
gameItem.Selected = true;
|
||||||
|
ilv_games.EnsureVisible(gameItem.Index);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1449,7 +1412,7 @@ namespace DisplayMagician.UIForms
|
|||||||
// Restart updating the saved_profiles listview
|
// Restart updating the saved_profiles listview
|
||||||
ilv_games.ResumeLayout();
|
ilv_games.ResumeLayout();
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
UpdateHotkeyLabel(_shortcutToEdit.Hotkey);
|
UpdateHotkeyLabel(_shortcutToEdit.Hotkey);
|
||||||
EnableSaveButtonIfValid();
|
EnableSaveButtonIfValid();
|
||||||
}
|
}
|
||||||
@ -2235,5 +2198,17 @@ namespace DisplayMagician.UIForms
|
|||||||
SuggestShortcutName();
|
SuggestShortcutName();
|
||||||
EnableSaveButtonIfValid();
|
EnableSaveButtonIfValid();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void tabc_shortcut_VisibleChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (tabc_shortcut.Visible == true)
|
||||||
|
SelectGameInImageListView();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*private void ilv_games_VisibleChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
if (ilv_games.SelectedItems.Count > 0)
|
||||||
|
ilv_games.EnsureVisible(ilv_games.SelectedItems[0].Index);
|
||||||
|
}*/
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -256,30 +256,33 @@ namespace DisplayMagician.UIForms
|
|||||||
|
|
||||||
private void btn_edit_Click(object sender, EventArgs e)
|
private void btn_edit_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
int currentIlvIndex = ilv_saved_shortcuts.SelectedItems[0].Index;
|
if (ilv_saved_shortcuts.SelectedItems.Count > 0)
|
||||||
string shortcutUUID = ilv_saved_shortcuts.Items[currentIlvIndex].EquipmentModel;
|
|
||||||
_selectedShortcut = GetShortcutFromUUID(shortcutUUID);
|
|
||||||
|
|
||||||
if (_selectedShortcut == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
this.Cursor = Cursors.WaitCursor;
|
|
||||||
|
|
||||||
// We need to stop ImageListView redrawing things before we're ready
|
|
||||||
// This stops an exception when ILV is just too keen!
|
|
||||||
|
|
||||||
|
|
||||||
var shortcutForm = new ShortcutForm(_selectedShortcut);
|
|
||||||
//ilv_saved_shortcuts.SuspendLayout();
|
|
||||||
shortcutForm.ShowDialog(this);
|
|
||||||
if (shortcutForm.DialogResult == DialogResult.OK)
|
|
||||||
{
|
{
|
||||||
RefreshShortcutLibraryUI();
|
int currentIlvIndex = ilv_saved_shortcuts.SelectedItems[0].Index;
|
||||||
// As this is an edit, we need to manually force saving the shortcut library
|
string shortcutUUID = ilv_saved_shortcuts.Items[currentIlvIndex].EquipmentModel;
|
||||||
ShortcutRepository.SaveShortcuts();
|
_selectedShortcut = GetShortcutFromUUID(shortcutUUID);
|
||||||
}
|
|
||||||
|
|
||||||
this.Cursor = Cursors.Default;
|
if (_selectedShortcut == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
this.Cursor = Cursors.WaitCursor;
|
||||||
|
|
||||||
|
// We need to stop ImageListView redrawing things before we're ready
|
||||||
|
// This stops an exception when ILV is just too keen!
|
||||||
|
|
||||||
|
|
||||||
|
var shortcutForm = new ShortcutForm(_selectedShortcut);
|
||||||
|
//ilv_saved_shortcuts.SuspendLayout();
|
||||||
|
shortcutForm.ShowDialog(this);
|
||||||
|
if (shortcutForm.DialogResult == DialogResult.OK)
|
||||||
|
{
|
||||||
|
RefreshShortcutLibraryUI();
|
||||||
|
// As this is an edit, we need to manually force saving the shortcut library
|
||||||
|
ShortcutRepository.SaveShortcuts();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.Cursor = Cursors.Default;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void btn_delete_Click(object sender, EventArgs e)
|
private void btn_delete_Click(object sender, EventArgs e)
|
||||||
|
@ -125,7 +125,7 @@
|
|||||||
<Version>2.1.0</Version>
|
<Version>2.1.0</Version>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="NLog">
|
<PackageReference Include="NLog">
|
||||||
<Version>4.7.9</Version>
|
<Version>4.7.10</Version>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="NvAPIWrapper.Net">
|
<PackageReference Include="NvAPIWrapper.Net">
|
||||||
<Version>0.8.1.101</Version>
|
<Version>0.8.1.101</Version>
|
||||||
|
Loading…
Reference in New Issue
Block a user