improved setup dialog

This commit is contained in:
Frank Skare
2020-12-06 16:54:06 +01:00
parent 85a3506403
commit a1a408da1d
6 changed files with 191 additions and 11 deletions

131
mpv.net/Native/StockIcon.cs Normal file
View File

@@ -0,0 +1,131 @@

using System;
using System.Runtime.InteropServices;
public class StockIcon
{
[DllImport("shell32.dll")]
public static extern int SHGetStockIconInfo(SHSTOCKICONID siid, SHSTOCKICONFLAGS uFlags, ref SHSTOCKICONINFO info);
[DllImport("user32.dll")]
public static extern bool DestroyIcon(IntPtr handle);
public static IntPtr GetIcon(SHSTOCKICONID identifier, SHSTOCKICONFLAGS flags)
{
SHSTOCKICONINFO info = new SHSTOCKICONINFO();
info.cbSize = Convert.ToUInt32(Marshal.SizeOf(typeof(SHSTOCKICONINFO)));
Marshal.ThrowExceptionForHR(SHGetStockIconInfo(identifier, flags, ref info));
return info.hIcon;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SHSTOCKICONINFO
{
public uint cbSize;
public IntPtr hIcon;
int iSysImageIndex;
int iIcon;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
string szPath;
}
public enum SHSTOCKICONFLAGS : uint
{
SHGSI_ICONLOCATION = 0,
SHGSI_ICON = 0x000000100,
SHGSI_SYSICONINDEX = 0x000004000,
SHGSI_LINKOVERLAY = 0x000008000,
SHGSI_SELECTED = 0x000010000,
SHGSI_LARGEICON = 0x000000000,
SHGSI_SMALLICON = 0x000000001,
SHGSI_SHELLICONSIZE = 0x000000004
}
public enum SHSTOCKICONID : uint
{
DocumentNotAssociated = 0,
DocumentAssociated = 1,
Application = 2,
Folder = 3,
FolderOpen = 4,
Drive525 = 5,
Drive35 = 6,
DriveRemove = 7,
DriveFixed = 8,
DriveNetwork = 9,
DriveNetworkDisabled = 10,
DriveCD = 11,
DriveRAM = 12,
World = 13,
Server = 15,
Printer = 16,
MyNetwork = 17,
Find = 22,
Help = 23,
Share = 28,
Link = 29,
SlowFile = 30,
Recycler = 31,
RecyclerFull = 32,
MediaCDAudio = 40,
Lock = 47,
AutoList = 49,
PrinterNet = 50,
ServerShare = 51,
PrinterFax = 52,
PrinterFaxNet = 53,
PrinterFile = 54,
Stack = 55,
MediaSVCD = 56,
StuffedFolder = 57,
DriveUnknown = 58,
DriveDVD = 59,
MediaDVD = 60,
MediaDVDRAM = 61,
MediaDVDRW = 62,
MediaDVDR = 63,
MediaDVDROM = 64,
MediaCDAudioPlus = 65,
MediaCDRW = 66,
MediaCDR = 67,
MediaCDBurn = 68,
MediaBlankCD = 69,
MediaCDROM = 70,
AudioFiles = 71,
ImageFiles = 72,
VideoFiles = 73,
MixedFiles = 74,
FolderBack = 75,
FolderFront = 76,
Shield = 77,
Warning = 78,
Info = 79,
Error = 80,
Key = 81,
Software = 82,
Rename = 83,
Delete = 84,
MediaAudioDVD = 85,
MediaMovieDVD = 86,
MediaEnhancedCD = 87,
MediaEnhancedDVD = 88,
MediaHDDVD = 89,
MediaBluRay = 90,
MediaVCD = 91,
MediaDVDPlusR = 92,
MediaDVDPlusRW = 93,
DesktopPC = 94,
MobilePC = 95,
Users = 96,
MediaSmartMedia = 97,
MediaCompactFlash = 98,
DeviceCellPhone = 99,
DeviceCamera = 100,
DeviceVideoCamera = 101,
DeviceAudioPlayer = 102,
NetworkConnect = 103,
Internet = 104,
ZipFile = 105,
Settings = 106
}
}

View File

@@ -15,19 +15,31 @@
<Window.Resources>
<Style TargetType="Button">
<Setter Property="Padding" Value="10"></Setter>
<Setter Property="Margin" Value="5"></Setter>
<Setter Property="Margin" Value="3"></Setter>
<Setter Property="Height" Value="25"></Setter>
</Style>
<ControlTemplate x:Key = "ShieldButtonTemplate" TargetType = "Button">
<Button Margin="0">
<StackPanel Orientation="Horizontal">
<Image Source="{x:Static mpvnet:SetupWindow.ShieldIcon}"
Width="18"
Height="18"
Margin="0,0,3,0"/>
<ContentPresenter/>
</StackPanel>
</Button>
</ControlTemplate>
</Window.Resources>
<Grid>
<StackPanel Margin="10">
<Button Name="RegisterVideo" Click="RegisterVideo_Click">Register video file extensions (requires admin rights)</Button>
<Button Name="RegisterAudio" Click="RegisterAudio_Click">Register audio file extensions (requires admin rights)</Button>
<Button Name="RegisterImage" Click="RegisterImage_Click">Register image file extensions (requires admin rights)</Button>
<Button Name="UnregisterFileAssociations" Click="UnregisterFileAssociations_Click">Unregister file extensions (requires admin rights)</Button>
<Button Name="AddToPathEnvVar" Click="AddToPathEnvVar_Click">Add mpv.net to Path environment variable</Button>
<Button Name="RemoveFromPathEnvVar" Click="RemoveFromPathEnvVar_Click">Remove mpv.net from Path environment variable</Button>
<Button Name="RegisterVideo" Click="RegisterVideo_Click" Template="{StaticResource ShieldButtonTemplate}">Register video file extensions</Button>
<Button Name="RegisterAudio" Click="RegisterAudio_Click" Template="{StaticResource ShieldButtonTemplate}">Register audio file extensions</Button>
<Button Name="RegisterImage" Click="RegisterImage_Click" Template="{StaticResource ShieldButtonTemplate}">Register image file extensions</Button>
<Button Name="UnregisterFileAssociations" Click="UnregisterFileAssociations_Click" Template="{StaticResource ShieldButtonTemplate}">Unregister file extensions</Button>
<Button Name="AddToPathEnvVar" Margin="3,15,3,3" Click="AddToPathEnvVar_Click">Add to Path environment variable</Button>
<Button Name="RemoveFromPathEnvVar" Padding="10,0,10,0" Click="RemoveFromPathEnvVar_Click">Remove from Path environment variable</Button>
</StackPanel>
</Grid>
</Window>

View File

@@ -2,15 +2,34 @@
using System;
using System.Diagnostics;
using System.Windows;
using System.Windows.Media.Imaging;
using System.Windows.Interop;
using WinForms = System.Windows.Forms;
using static StockIcon;
namespace mpvnet
{
public partial class SetupWindow : Window
{
public SetupWindow() => InitializeComponent();
static BitmapSource _ShieldIcon;
public static BitmapSource ShieldIcon {
get {
if (_ShieldIcon == null)
{
IntPtr icon = GetIcon(SHSTOCKICONID.Shield, SHSTOCKICONFLAGS.SHGSI_ICON);
_ShieldIcon = Imaging.CreateBitmapSourceFromHIcon(
icon, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
DestroyIcon(icon);
}
return _ShieldIcon;
}
}
void RegisterFileAssociations(string value)
{
try
@@ -60,5 +79,18 @@ namespace mpvnet
else
Msg.ShowWarning("Path was not containing mpv.net.");
}
void aaa()
{
BitmapSource shieldSource = null;
IntPtr icon = GetIcon(SHSTOCKICONID.Shield, SHSTOCKICONFLAGS.SHGSI_LARGEICON);
shieldSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon(
icon, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
DestroyIcon(icon);
//shieldSource = System.Windows.Interop.Imaging.CreateBitmapSourceFromHIcon(
// System.Drawing.SystemIcons.Shield.Handle,
// Int32Rect.Empty,
// BitmapSizeOptions.FromEmptyOptions());
}
}
}
}

View File

@@ -1,4 +1,5 @@
using System;

using System;
using System.Windows;
namespace WPF
@@ -17,4 +18,4 @@ namespace WPF
}
}
}
}
}

View File

@@ -814,6 +814,9 @@ namespace mpvnet
core.LoadScripts();
Task.Run(() => App.Extension = new Extension());
ShownTickCount = Environment.TickCount;
SetupWindow win = new SetupWindow();
win.Show();
}
protected override void OnActivated(EventArgs e)

View File

@@ -134,6 +134,7 @@
<Compile Include="Misc\RegistryHelp.cs" />
<Compile Include="Misc\Theme.cs" />
<Compile Include="Misc\PowerShell.cs" />
<Compile Include="Native\StockIcon.cs" />
<Compile Include="WPF\SearchTextBoxUserControl.xaml.cs">
<DependentUpon>SearchTextBoxUserControl.xaml</DependentUpon>
</Compile>