mirror of
https://github.com/terrymacdonald/DisplayMagician.git
synced 2024-08-30 18:32:20 +00:00
[WIP] Partially working taskbar moving
This commit is contained in:
parent
71505faa13
commit
cd25f9a0fa
@ -131,6 +131,22 @@ namespace DisplayMagician
|
|||||||
[SuppressUnmanagedCodeSecurity]
|
[SuppressUnmanagedCodeSecurity]
|
||||||
internal static class NativeMethods
|
internal static class NativeMethods
|
||||||
{
|
{
|
||||||
|
|
||||||
|
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
|
||||||
|
private static extern IntPtr SendMessageTimeout(IntPtr windowHandle, uint message, IntPtr wordParameter, IntPtr longParameter, SendMessageTimeoutFlag flag, uint timeout, out IntPtr resultHandle);
|
||||||
|
|
||||||
|
[Flags]
|
||||||
|
public enum SendMessageTimeoutFlag : uint
|
||||||
|
{
|
||||||
|
SMTO_NORMAL = 0x0,
|
||||||
|
SMTO_BLOCK = 0x1,
|
||||||
|
SMTO_ABORTIFHUNG = 0x2,
|
||||||
|
SMTO_NOTIMEOUTIFNOTHUNG = 0x8,
|
||||||
|
SMTO_ERRORONEXIT = 0x20
|
||||||
|
}
|
||||||
|
|
||||||
|
public const Int32 WM_WININICHANGE = 0x001A;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Delegate declaration that matches WndProc signatures.
|
/// Delegate declaration that matches WndProc signatures.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -26,8 +26,8 @@ using System.Resources;
|
|||||||
[assembly: Guid("e4ceaf5e-ad01-4695-b179-31168eb74c48")]
|
[assembly: Guid("e4ceaf5e-ad01-4695-b179-31168eb74c48")]
|
||||||
|
|
||||||
// Version information
|
// Version information
|
||||||
[assembly: AssemblyVersion("2.2.0.112")]
|
[assembly: AssemblyVersion("2.2.0.152")]
|
||||||
[assembly: AssemblyFileVersion("2.2.0.112")]
|
[assembly: AssemblyFileVersion("2.2.0.152")]
|
||||||
[assembly: NeutralResourcesLanguageAttribute( "en" )]
|
[assembly: NeutralResourcesLanguageAttribute( "en" )]
|
||||||
[assembly: CLSCompliant(true)]
|
[assembly: CLSCompliant(true)]
|
||||||
|
|
||||||
|
@ -629,6 +629,7 @@ namespace DisplayMagician.UIForms
|
|||||||
// otherwise we'll save it only when the user wants to save this profile.
|
// otherwise we'll save it only when the user wants to save this profile.
|
||||||
if (_saveOrRenameMode == "rename" && profileSettingsForm.ProfileSettingChanged)
|
if (_saveOrRenameMode == "rename" && profileSettingsForm.ProfileSettingChanged)
|
||||||
{
|
{
|
||||||
|
//_selectedProfile = profileSettingsForm.Profile;
|
||||||
ProfileRepository.SaveProfiles();
|
ProfileRepository.SaveProfiles();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -40,8 +40,13 @@ namespace DisplayMagician.UIForms
|
|||||||
this.btn_select = new System.Windows.Forms.Button();
|
this.btn_select = new System.Windows.Forms.Button();
|
||||||
this.lbl_style = new System.Windows.Forms.Label();
|
this.lbl_style = new System.Windows.Forms.Label();
|
||||||
this.cmb_wallpaper_display_mode = new System.Windows.Forms.ComboBox();
|
this.cmb_wallpaper_display_mode = new System.Windows.Forms.ComboBox();
|
||||||
|
this.gb_taskbar = new System.Windows.Forms.GroupBox();
|
||||||
|
this.cmb_forced_taskbar_location = new System.Windows.Forms.ComboBox();
|
||||||
|
this.rb_default_taskbar = new System.Windows.Forms.RadioButton();
|
||||||
|
this.rb_forced_taskbar = new System.Windows.Forms.RadioButton();
|
||||||
this.gb_general.SuspendLayout();
|
this.gb_general.SuspendLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pb_wallpaper)).BeginInit();
|
((System.ComponentModel.ISupportInitialize)(this.pb_wallpaper)).BeginInit();
|
||||||
|
this.gb_taskbar.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// btn_back
|
// btn_back
|
||||||
@ -52,7 +57,7 @@ namespace DisplayMagician.UIForms
|
|||||||
this.btn_back.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Brown;
|
this.btn_back.FlatAppearance.MouseOverBackColor = System.Drawing.Color.Brown;
|
||||||
this.btn_back.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
this.btn_back.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
|
||||||
this.btn_back.ForeColor = System.Drawing.Color.White;
|
this.btn_back.ForeColor = System.Drawing.Color.White;
|
||||||
this.btn_back.Location = new System.Drawing.Point(476, 436);
|
this.btn_back.Location = new System.Drawing.Point(476, 554);
|
||||||
this.btn_back.Name = "btn_back";
|
this.btn_back.Name = "btn_back";
|
||||||
this.btn_back.Size = new System.Drawing.Size(75, 23);
|
this.btn_back.Size = new System.Drawing.Size(75, 23);
|
||||||
this.btn_back.TabIndex = 9;
|
this.btn_back.TabIndex = 9;
|
||||||
@ -73,7 +78,7 @@ namespace DisplayMagician.UIForms
|
|||||||
this.gb_general.Controls.Add(this.cmb_wallpaper_display_mode);
|
this.gb_general.Controls.Add(this.cmb_wallpaper_display_mode);
|
||||||
this.gb_general.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
this.gb_general.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
this.gb_general.ForeColor = System.Drawing.Color.White;
|
this.gb_general.ForeColor = System.Drawing.Color.White;
|
||||||
this.gb_general.Location = new System.Drawing.Point(27, 27);
|
this.gb_general.Location = new System.Drawing.Point(27, 131);
|
||||||
this.gb_general.Name = "gb_general";
|
this.gb_general.Name = "gb_general";
|
||||||
this.gb_general.Size = new System.Drawing.Size(525, 381);
|
this.gb_general.Size = new System.Drawing.Size(525, 381);
|
||||||
this.gb_general.TabIndex = 11;
|
this.gb_general.TabIndex = 11;
|
||||||
@ -205,12 +210,62 @@ namespace DisplayMagician.UIForms
|
|||||||
this.cmb_wallpaper_display_mode.TabIndex = 12;
|
this.cmb_wallpaper_display_mode.TabIndex = 12;
|
||||||
this.cmb_wallpaper_display_mode.SelectedIndexChanged += new System.EventHandler(this.cmb_wallpaper_display_mode_SelectedIndexChanged);
|
this.cmb_wallpaper_display_mode.SelectedIndexChanged += new System.EventHandler(this.cmb_wallpaper_display_mode_SelectedIndexChanged);
|
||||||
//
|
//
|
||||||
|
// gb_taskbar
|
||||||
|
//
|
||||||
|
this.gb_taskbar.Controls.Add(this.rb_default_taskbar);
|
||||||
|
this.gb_taskbar.Controls.Add(this.rb_forced_taskbar);
|
||||||
|
this.gb_taskbar.Controls.Add(this.cmb_forced_taskbar_location);
|
||||||
|
this.gb_taskbar.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
|
this.gb_taskbar.ForeColor = System.Drawing.Color.White;
|
||||||
|
this.gb_taskbar.Location = new System.Drawing.Point(27, 22);
|
||||||
|
this.gb_taskbar.Name = "gb_taskbar";
|
||||||
|
this.gb_taskbar.Size = new System.Drawing.Size(524, 100);
|
||||||
|
this.gb_taskbar.TabIndex = 12;
|
||||||
|
this.gb_taskbar.TabStop = false;
|
||||||
|
this.gb_taskbar.Text = "TaskBar Settings";
|
||||||
|
//
|
||||||
|
// cmb_forced_taskbar_location
|
||||||
|
//
|
||||||
|
this.cmb_forced_taskbar_location.Enabled = false;
|
||||||
|
this.cmb_forced_taskbar_location.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||||
|
this.cmb_forced_taskbar_location.FormattingEnabled = true;
|
||||||
|
this.cmb_forced_taskbar_location.Location = new System.Drawing.Point(220, 59);
|
||||||
|
this.cmb_forced_taskbar_location.Name = "cmb_forced_taskbar_location";
|
||||||
|
this.cmb_forced_taskbar_location.Size = new System.Drawing.Size(189, 24);
|
||||||
|
this.cmb_forced_taskbar_location.TabIndex = 13;
|
||||||
|
this.cmb_forced_taskbar_location.SelectedIndexChanged += new System.EventHandler(this.cmb_forced_taskbar_location_SelectedIndexChanged);
|
||||||
|
//
|
||||||
|
// rb_default_taskbar
|
||||||
|
//
|
||||||
|
this.rb_default_taskbar.AutoSize = true;
|
||||||
|
this.rb_default_taskbar.Checked = true;
|
||||||
|
this.rb_default_taskbar.Location = new System.Drawing.Point(28, 34);
|
||||||
|
this.rb_default_taskbar.Name = "rb_default_taskbar";
|
||||||
|
this.rb_default_taskbar.Size = new System.Drawing.Size(288, 20);
|
||||||
|
this.rb_default_taskbar.TabIndex = 24;
|
||||||
|
this.rb_default_taskbar.TabStop = true;
|
||||||
|
this.rb_default_taskbar.Text = "Leave TaskBar Location as set by Windows";
|
||||||
|
this.rb_default_taskbar.UseVisualStyleBackColor = true;
|
||||||
|
this.rb_default_taskbar.CheckedChanged += new System.EventHandler(this.rb_default_taskbar_CheckedChanged);
|
||||||
|
//
|
||||||
|
// rb_forced_taskbar
|
||||||
|
//
|
||||||
|
this.rb_forced_taskbar.AutoSize = true;
|
||||||
|
this.rb_forced_taskbar.Location = new System.Drawing.Point(28, 60);
|
||||||
|
this.rb_forced_taskbar.Name = "rb_forced_taskbar";
|
||||||
|
this.rb_forced_taskbar.Size = new System.Drawing.Size(190, 20);
|
||||||
|
this.rb_forced_taskbar.TabIndex = 23;
|
||||||
|
this.rb_forced_taskbar.Text = "Force TaskBar Location to :";
|
||||||
|
this.rb_forced_taskbar.UseVisualStyleBackColor = true;
|
||||||
|
this.rb_forced_taskbar.CheckedChanged += new System.EventHandler(this.rb_forced_taskbar_CheckedChanged);
|
||||||
|
//
|
||||||
// ProfileSettingsForm
|
// ProfileSettingsForm
|
||||||
//
|
//
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.BackColor = System.Drawing.Color.Black;
|
this.BackColor = System.Drawing.Color.Black;
|
||||||
this.ClientSize = new System.Drawing.Size(580, 483);
|
this.ClientSize = new System.Drawing.Size(580, 594);
|
||||||
|
this.Controls.Add(this.gb_taskbar);
|
||||||
this.Controls.Add(this.gb_general);
|
this.Controls.Add(this.gb_general);
|
||||||
this.Controls.Add(this.btn_back);
|
this.Controls.Add(this.btn_back);
|
||||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
||||||
@ -227,6 +282,8 @@ namespace DisplayMagician.UIForms
|
|||||||
this.gb_general.ResumeLayout(false);
|
this.gb_general.ResumeLayout(false);
|
||||||
this.gb_general.PerformLayout();
|
this.gb_general.PerformLayout();
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pb_wallpaper)).EndInit();
|
((System.ComponentModel.ISupportInitialize)(this.pb_wallpaper)).EndInit();
|
||||||
|
this.gb_taskbar.ResumeLayout(false);
|
||||||
|
this.gb_taskbar.PerformLayout();
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -243,5 +300,9 @@ namespace DisplayMagician.UIForms
|
|||||||
private System.Windows.Forms.RadioButton rb_leave_wallpaper;
|
private System.Windows.Forms.RadioButton rb_leave_wallpaper;
|
||||||
private System.Windows.Forms.RadioButton rb_clear_wallpaper;
|
private System.Windows.Forms.RadioButton rb_clear_wallpaper;
|
||||||
private System.Windows.Forms.RadioButton rb_apply_wallpaper;
|
private System.Windows.Forms.RadioButton rb_apply_wallpaper;
|
||||||
|
private System.Windows.Forms.GroupBox gb_taskbar;
|
||||||
|
private System.Windows.Forms.RadioButton rb_default_taskbar;
|
||||||
|
private System.Windows.Forms.RadioButton rb_forced_taskbar;
|
||||||
|
private System.Windows.Forms.ComboBox cmb_forced_taskbar_location;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,4 +1,5 @@
|
|||||||
using DisplayMagicianShared;
|
using DisplayMagicianShared;
|
||||||
|
using DisplayMagicianShared.Windows;
|
||||||
//using Microsoft.Win32;
|
//using Microsoft.Win32;
|
||||||
using NHotkey;
|
using NHotkey;
|
||||||
using NHotkey.WindowsForms;
|
using NHotkey.WindowsForms;
|
||||||
@ -19,6 +20,7 @@ namespace DisplayMagician.UIForms
|
|||||||
|
|
||||||
private Dictionary<Wallpaper.Style, string> wallpaperStyleText = new Dictionary<Wallpaper.Style, string>();
|
private Dictionary<Wallpaper.Style, string> wallpaperStyleText = new Dictionary<Wallpaper.Style, string>();
|
||||||
Bitmap wallpaperImage = null;
|
Bitmap wallpaperImage = null;
|
||||||
|
private Dictionary<TaskBarStuckRectangle.TaskBarForcedEdge, string> forcedTaskBarEdgeText = new Dictionary<TaskBarStuckRectangle.TaskBarForcedEdge, string>();
|
||||||
private bool _profileSettingChanged = false;
|
private bool _profileSettingChanged = false;
|
||||||
|
|
||||||
public ProfileSettingsForm()
|
public ProfileSettingsForm()
|
||||||
@ -38,6 +40,28 @@ namespace DisplayMagician.UIForms
|
|||||||
cmb_wallpaper_display_mode.DisplayMember = "Value";
|
cmb_wallpaper_display_mode.DisplayMember = "Value";
|
||||||
cmb_wallpaper_display_mode.ValueMember = "Text";
|
cmb_wallpaper_display_mode.ValueMember = "Text";
|
||||||
cmb_wallpaper_display_mode.DataSource = new BindingSource(wallpaperStyleText, null);
|
cmb_wallpaper_display_mode.DataSource = new BindingSource(wallpaperStyleText, null);
|
||||||
|
|
||||||
|
// Populate the Forced Taskbar Location dictionary
|
||||||
|
if (Utils.IsWindows11())
|
||||||
|
{
|
||||||
|
// Is Windows 11
|
||||||
|
forcedTaskBarEdgeText.Add(TaskBarStuckRectangle.TaskBarForcedEdge.Left, "Left");
|
||||||
|
forcedTaskBarEdgeText.Add(TaskBarStuckRectangle.TaskBarForcedEdge.Top, "Top");
|
||||||
|
forcedTaskBarEdgeText.Add(TaskBarStuckRectangle.TaskBarForcedEdge.Right, "Right");
|
||||||
|
forcedTaskBarEdgeText.Add(TaskBarStuckRectangle.TaskBarForcedEdge.Bottom, "Bottom");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Is Windows 10
|
||||||
|
forcedTaskBarEdgeText.Add(TaskBarStuckRectangle.TaskBarForcedEdge.Left, "Left");
|
||||||
|
forcedTaskBarEdgeText.Add(TaskBarStuckRectangle.TaskBarForcedEdge.Top, "Top");
|
||||||
|
forcedTaskBarEdgeText.Add(TaskBarStuckRectangle.TaskBarForcedEdge.Right, "Right");
|
||||||
|
forcedTaskBarEdgeText.Add(TaskBarStuckRectangle.TaskBarForcedEdge.Bottom, "Bottom");
|
||||||
|
}
|
||||||
|
|
||||||
|
cmb_forced_taskbar_location.DisplayMember = "Value";
|
||||||
|
cmb_forced_taskbar_location.ValueMember = "Text";
|
||||||
|
cmb_forced_taskbar_location.DataSource = new BindingSource(forcedTaskBarEdgeText, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ProfileItem Profile
|
public ProfileItem Profile
|
||||||
@ -89,6 +113,18 @@ namespace DisplayMagician.UIForms
|
|||||||
cmb_wallpaper_display_mode.SelectedIndex = 0;
|
cmb_wallpaper_display_mode.SelectedIndex = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (Profile.ForcedTaskBarEdge.Equals(TaskBarStuckRectangle.TaskBarForcedEdge.None))
|
||||||
|
{
|
||||||
|
rb_default_taskbar.Checked = true;
|
||||||
|
cmb_forced_taskbar_location.SelectedIndex = 3;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rb_forced_taskbar.Checked = true;
|
||||||
|
cmb_forced_taskbar_location.SelectedIndex = cmb_forced_taskbar_location.FindStringExact(forcedTaskBarEdgeText[Profile.ForcedTaskBarEdge]);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ProfileSettingsForm_FormClosing(object sender, FormClosingEventArgs e)
|
private void ProfileSettingsForm_FormClosing(object sender, FormClosingEventArgs e)
|
||||||
@ -107,6 +143,18 @@ namespace DisplayMagician.UIForms
|
|||||||
}
|
}
|
||||||
|
|
||||||
Profile.WallpaperStyle = ((KeyValuePair<Wallpaper.Style, string>)cmb_wallpaper_display_mode.SelectedItem).Key;
|
Profile.WallpaperStyle = ((KeyValuePair<Wallpaper.Style, string>)cmb_wallpaper_display_mode.SelectedItem).Key;
|
||||||
|
|
||||||
|
if (rb_default_taskbar.Checked)
|
||||||
|
{
|
||||||
|
Profile.ForcedTaskBarEdge = TaskBarStuckRectangle.TaskBarForcedEdge.None;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Profile.ForcedTaskBarEdge = ((KeyValuePair<TaskBarStuckRectangle.TaskBarForcedEdge, string>)cmb_forced_taskbar_location.SelectedItem).Key;
|
||||||
|
}
|
||||||
|
// Apply the changed taskbar settings to the windows config if needed
|
||||||
|
WINDOWS_DISPLAY_CONFIG winDispConfig = Profile.WindowsDisplayConfig;
|
||||||
|
TaskBarStuckRectangle.ForceTaskBarIfNeeded(ref winDispConfig.TaskBarLayout, Profile.ForcedTaskBarEdge);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void btn_back_Click(object sender, EventArgs e)
|
private void btn_back_Click(object sender, EventArgs e)
|
||||||
@ -315,5 +363,30 @@ namespace DisplayMagician.UIForms
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void cmb_forced_taskbar_location_SelectedIndexChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
_profileSettingChanged = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void rb_default_taskbar_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
_profileSettingChanged = true;
|
||||||
|
if (rb_default_taskbar.Checked)
|
||||||
|
{
|
||||||
|
// Disable all the things
|
||||||
|
cmb_forced_taskbar_location.Enabled = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void rb_forced_taskbar_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
_profileSettingChanged = true;
|
||||||
|
if (rb_forced_taskbar.Checked)
|
||||||
|
{
|
||||||
|
// Disable all the things
|
||||||
|
cmb_forced_taskbar_location.Enabled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -73,6 +73,7 @@ namespace DisplayMagicianShared
|
|||||||
private bool _isPossible = false;
|
private bool _isPossible = false;
|
||||||
private Keys _hotkey = Keys.None;
|
private Keys _hotkey = Keys.None;
|
||||||
private string _wallpaperBitmapFilename = "";
|
private string _wallpaperBitmapFilename = "";
|
||||||
|
private TaskBarStuckRectangle.TaskBarForcedEdge _forcedTaskBarEdge = TaskBarStuckRectangle.TaskBarForcedEdge.None;
|
||||||
|
|
||||||
|
|
||||||
#region JsonConverterBitmap
|
#region JsonConverterBitmap
|
||||||
@ -289,6 +290,17 @@ namespace DisplayMagicianShared
|
|||||||
}
|
}
|
||||||
|
|
||||||
public string SavedProfileIconCacheFilename { get; set; }
|
public string SavedProfileIconCacheFilename { get; set; }
|
||||||
|
|
||||||
|
public TaskBarStuckRectangle.TaskBarForcedEdge ForcedTaskBarEdge {
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return _forcedTaskBarEdge;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_forcedTaskBarEdge = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public Wallpaper.Mode WallpaperMode { get; set; }
|
public Wallpaper.Mode WallpaperMode { get; set; }
|
||||||
|
|
||||||
@ -449,6 +461,7 @@ namespace DisplayMagicianShared
|
|||||||
profile.WallpaperMode = WallpaperMode;
|
profile.WallpaperMode = WallpaperMode;
|
||||||
profile.WallpaperBitmapFilename = WallpaperBitmapFilename;
|
profile.WallpaperBitmapFilename = WallpaperBitmapFilename;
|
||||||
profile.WallpaperStyle = WallpaperStyle;
|
profile.WallpaperStyle = WallpaperStyle;
|
||||||
|
profile.ForcedTaskBarEdge = ForcedTaskBarEdge;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -672,11 +685,10 @@ namespace DisplayMagicianShared
|
|||||||
// Lets update the screens so Windows knows whats happening
|
// Lets update the screens so Windows knows whats happening
|
||||||
// NVIDIA makes such large changes to the available screens in windows, we need to do this.
|
// NVIDIA makes such large changes to the available screens in windows, we need to do this.
|
||||||
winLibrary.UpdateActiveConfig();
|
winLibrary.UpdateActiveConfig();
|
||||||
|
|
||||||
|
|
||||||
// Then let's try to also apply the windows changes
|
// Then let's try to also apply the windows changes
|
||||||
// Note: we are unable to check if the Windows CCD display config is possible, as it won't match if either the current display config is a Mosaic config,
|
// Note: we are unable to check if the Windows CCD display config is possible, as it won't match if either the current display config is a Mosaic config,
|
||||||
// or if the display config we want to change to is a Mosaic config. So we just have to assume that it will work!
|
// or if the display config we want to change to is a Mosaic config. So we just have to assume that it will work
|
||||||
bool itWorkedforWindows = winLibrary.SetActiveConfig(_windowsDisplayConfig);
|
bool itWorkedforWindows = winLibrary.SetActiveConfig(_windowsDisplayConfig);
|
||||||
if (itWorkedforWindows)
|
if (itWorkedforWindows)
|
||||||
{
|
{
|
||||||
|
@ -839,7 +839,24 @@ namespace DisplayMagicianShared
|
|||||||
// We do the actual change we were trying to do
|
// We do the actual change we were trying to do
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
// Now we try to patch in a Windows Taskbar Stuck Rects list into the json if there isnt one
|
||||||
|
SharedLogger.logger.Trace($"ProfileRepository/MigrateJsonToLatestVersion: Looking for a missing ForcedTaskBarEdge setting in Profile.");
|
||||||
|
// Create a default object (a default of NONE)
|
||||||
|
TaskBarStuckRectangle.TaskBarForcedEdge taskBarForcedEdge = TaskBarStuckRectangle.TaskBarForcedEdge.None;
|
||||||
|
for (int i = 0; i < root.Count; i++)
|
||||||
|
{
|
||||||
|
JObject profile = (JObject)root[i];
|
||||||
|
JValue forcedTaskBarEdge = (JValue)profile.SelectToken("ForcedTaskBarEdge");
|
||||||
|
if (forcedTaskBarEdge == null)
|
||||||
|
{
|
||||||
|
JProperty newForcedTaskBarEdge = new JProperty("ForcedTaskBarEdge", TaskBarStuckRectangle.TaskBarForcedEdge.None);
|
||||||
|
profile.Add("ForcedTaskBarEdge", newForcedTaskBarEdge);
|
||||||
|
changedJson = true;
|
||||||
|
SharedLogger.logger.Trace($"ProfileRepository/MigrateJsonToLatestVersion: Patched missing ForcedTaskBarEdge in profile {profile.SelectToken("Name")} (index {i}).");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Now we try to patch in a Windows Taskbar Stuck Rects list into the json if there isnt one
|
// Now we try to patch in a Windows Taskbar Stuck Rects list into the json if there isnt one
|
||||||
SharedLogger.logger.Trace($"ProfileRepository/MigrateJsonToLatestVersion: Looking for missing Windows Taskbar layout.");
|
SharedLogger.logger.Trace($"ProfileRepository/MigrateJsonToLatestVersion: Looking for missing Windows Taskbar layout.");
|
||||||
// Create a default object (an empty list)
|
// Create a default object (an empty list)
|
||||||
@ -879,11 +896,11 @@ namespace DisplayMagicianShared
|
|||||||
}
|
}
|
||||||
catch (JsonReaderException ex)
|
catch (JsonReaderException ex)
|
||||||
{
|
{
|
||||||
SharedLogger.logger.Error($"ProfileRepository/MigrateJsonToLatestVersion: JSONReaderException while trying to process the Profiles json data to migrate any older feature to the latest version.");
|
SharedLogger.logger.Error(ex, $"ProfileRepository/MigrateJsonToLatestVersion: JSONReaderException while trying to process the Profiles json data to migrate any older feature to the latest version.");
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
SharedLogger.logger.Error($"ProfileRepository/MigrateJsonToLatestVersion: Exception while trying to process the Profiles json data to migrate any older feature to the latest version.");
|
SharedLogger.logger.Error(ex, $"ProfileRepository/MigrateJsonToLatestVersion: Exception while trying to process the Profiles json data to migrate any older feature to the latest version.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now write the changed json to the json string but only if we've changed something
|
// Now write the changed json to the json string but only if we've changed something
|
||||||
|
@ -300,7 +300,7 @@ namespace DisplayMagicianShared
|
|||||||
RestartManagerSession restartManager = new RestartManagerSession();
|
RestartManagerSession restartManager = new RestartManagerSession();
|
||||||
FileInfo explorerFileInfo = new FileInfo(@"C:\Windows\explorer.exe");
|
FileInfo explorerFileInfo = new FileInfo(@"C:\Windows\explorer.exe");
|
||||||
restartManager.RegisterProcessFile(explorerFileInfo);
|
restartManager.RegisterProcessFile(explorerFileInfo);
|
||||||
restartManager.Shutdown(RestartManagerSession.ShutdownType.ForceShutdown);
|
restartManager.Shutdown(RestartManagerSession.ShutdownType.Normal);
|
||||||
restartManager.Restart();
|
restartManager.Restart();
|
||||||
restartManager.Dispose();
|
restartManager.Dispose();
|
||||||
return true;
|
return true;
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
@ -18,5 +19,25 @@ namespace DisplayMagicianShared
|
|||||||
|
|
||||||
return currentBuild >= 22000;
|
return currentBuild >= 22000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
|
||||||
|
public static extern IntPtr SendMessageTimeout(IntPtr windowHandle, uint message, IntPtr wordParameter, IntPtr longParameter, SendMessageTimeoutFlag flag, uint timeout, out IntPtr resultHandle);
|
||||||
|
|
||||||
|
[DllImport("User32.dll", SetLastError = true, CharSet = CharSet.Auto)]
|
||||||
|
public static extern bool SendNotifyMessage(IntPtr hWnd, uint Msg, UIntPtr wParam, string lParam);
|
||||||
|
|
||||||
|
[Flags]
|
||||||
|
public enum SendMessageTimeoutFlag : uint
|
||||||
|
{
|
||||||
|
SMTO_NORMAL = 0x0,
|
||||||
|
SMTO_BLOCK = 0x1,
|
||||||
|
SMTO_ABORTIFHUNG = 0x2,
|
||||||
|
SMTO_NOTIMEOUTIFNOTHUNG = 0x8,
|
||||||
|
SMTO_ERRORONEXIT = 0x20
|
||||||
|
}
|
||||||
|
|
||||||
|
public const int NULL = 0;
|
||||||
|
public const int HWND_BROADCAST = 0xffff;
|
||||||
|
public const int WM_SETTINGCHANGE = 0x001a;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,8 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using DisplayMagicianShared.Windows;
|
using System.Threading.Tasks;
|
||||||
|
using DisplayMagicianShared;
|
||||||
using Microsoft.Win32;
|
using Microsoft.Win32;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
@ -15,6 +16,15 @@ namespace DisplayMagicianShared.Windows
|
|||||||
{
|
{
|
||||||
public class TaskBarStuckRectangle
|
public class TaskBarStuckRectangle
|
||||||
{
|
{
|
||||||
|
public enum TaskBarForcedEdge : UInt32
|
||||||
|
{
|
||||||
|
Left = 0,
|
||||||
|
Top = 1,
|
||||||
|
Right = 2,
|
||||||
|
Bottom = 3,
|
||||||
|
None = 9999
|
||||||
|
}
|
||||||
|
|
||||||
public enum TaskBarEdge : UInt32
|
public enum TaskBarEdge : UInt32
|
||||||
{
|
{
|
||||||
Left = 0,
|
Left = 0,
|
||||||
@ -87,6 +97,8 @@ namespace DisplayMagicianShared.Windows
|
|||||||
|
|
||||||
public byte[] Binary { get; set; }
|
public byte[] Binary { get; set; }
|
||||||
|
|
||||||
|
public byte[] BinaryBackup { get; set; }
|
||||||
|
|
||||||
public string DevicePath { get; set; }
|
public string DevicePath { get; set; }
|
||||||
|
|
||||||
public bool MainScreen { get; set; }
|
public bool MainScreen { get; set; }
|
||||||
@ -259,16 +271,23 @@ namespace DisplayMagicianShared.Windows
|
|||||||
|
|
||||||
public override bool Equals(object obj) => obj is TaskBarStuckRectangle other && this.Equals(other);
|
public override bool Equals(object obj) => obj is TaskBarStuckRectangle other && this.Equals(other);
|
||||||
public bool Equals(TaskBarStuckRectangle other)
|
public bool Equals(TaskBarStuckRectangle other)
|
||||||
=> Version == other.Version &&
|
{
|
||||||
MainScreen == other.MainScreen &&
|
// We return all the fields
|
||||||
DevicePath == other.DevicePath &&
|
return Version == other.Version &&
|
||||||
Xor(Binary, other.Binary);
|
MainScreen == other.MainScreen &&
|
||||||
|
DevicePath == other.DevicePath &&
|
||||||
|
Edge == other.Edge &&
|
||||||
|
Location == other.Location;
|
||||||
|
// &&
|
||||||
|
//Xor(Binary, other.Binary);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public override int GetHashCode()
|
public override int GetHashCode()
|
||||||
{
|
{
|
||||||
//return (DisplayConfigPaths, DisplayConfigModes, DisplayHDRStates, GdiDisplaySettings.Values, IsCloned, DisplayIdentifiers).GetHashCode();
|
//return (Version, MainScreen, DevicePath, Binary).GetHashCode();
|
||||||
return (Version, MainScreen, DevicePath, Binary).GetHashCode();
|
return (Version, MainScreen, DevicePath, Edge, Location).GetHashCode();
|
||||||
}
|
}
|
||||||
public static bool operator ==(TaskBarStuckRectangle lhs, TaskBarStuckRectangle rhs) => lhs.Equals(rhs);
|
public static bool operator ==(TaskBarStuckRectangle lhs, TaskBarStuckRectangle rhs) => lhs.Equals(rhs);
|
||||||
|
|
||||||
@ -292,80 +311,13 @@ namespace DisplayMagicianShared.Windows
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*public static TaskBarStuckRectangle GetCurrent()
|
|
||||||
{
|
|
||||||
return GetCurrent((string)null);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
/*public static TaskBarStuckRectangle GetCurrent(PathDisplayTarget pathTargetInfo)
|
|
||||||
{
|
|
||||||
var devicePath = pathTargetInfo?.DevicePath;
|
|
||||||
var index = devicePath?.IndexOf("{", StringComparison.InvariantCultureIgnoreCase);
|
|
||||||
|
|
||||||
if (index > 0)
|
|
||||||
{
|
|
||||||
devicePath = devicePath.Substring(0, index.Value).TrimEnd('#');
|
|
||||||
}
|
|
||||||
|
|
||||||
index = devicePath?.IndexOf("#", StringComparison.InvariantCultureIgnoreCase);
|
|
||||||
|
|
||||||
if (index > 0)
|
|
||||||
{
|
|
||||||
devicePath = devicePath.Substring(index.Value).TrimStart('#');
|
|
||||||
}
|
|
||||||
|
|
||||||
return GetCurrent(devicePath);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
public static List<TaskBarStuckRectangle> GetCurrent(List<string> displayIdentifiers)
|
public static List<TaskBarStuckRectangle> GetCurrent(List<string> displayIdentifiers)
|
||||||
{
|
{
|
||||||
List<TaskBarStuckRectangle> taskBarStuckRectangles = new List<TaskBarStuckRectangle>();
|
List<TaskBarStuckRectangle> taskBarStuckRectangles = new List<TaskBarStuckRectangle>();
|
||||||
|
|
||||||
int version = 2;
|
int version = 2;
|
||||||
var address = string.Format(MainDisplayAddress, version);
|
string address = "";
|
||||||
if (Registry.CurrentUser.OpenSubKey(address) == null)
|
|
||||||
{
|
|
||||||
// If it's not version 2, then try version 3
|
|
||||||
version = 3;
|
|
||||||
address = string.Format(MainDisplayAddress, version);
|
|
||||||
if (Registry.CurrentUser.OpenSubKey(address) == null)
|
|
||||||
{
|
|
||||||
// It's not v2 or v3, so error
|
|
||||||
version = -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (version >= 2)
|
|
||||||
{
|
|
||||||
// Grab the main screen taskbar placement
|
|
||||||
try
|
|
||||||
{
|
|
||||||
using (var key = Registry.CurrentUser.OpenSubKey(
|
|
||||||
address,
|
|
||||||
RegistryKeyPermissionCheck.ReadSubTree))
|
|
||||||
{
|
|
||||||
var settings = key?.GetValue("Settings") as byte[];
|
|
||||||
|
|
||||||
if (settings?.Length > 0)
|
|
||||||
{
|
|
||||||
TaskBarStuckRectangle taskBarStuckRectangle = new TaskBarStuckRectangle
|
|
||||||
{
|
|
||||||
MainScreen = true,
|
|
||||||
DevicePath = "Settings",
|
|
||||||
Binary = settings,
|
|
||||||
Version = version
|
|
||||||
};
|
|
||||||
taskBarStuckRectangles.Add(taskBarStuckRectangle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
SharedLogger.logger.Error(ex, $"TaskBarStuckRectangle/GetCurrent: Unable to read the Main Screen TaskBarStuckRectangle registry settings due to an exception!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
version = 2;
|
|
||||||
address = string.Format(MultiDisplayAddress, version);
|
address = string.Format(MultiDisplayAddress, version);
|
||||||
if (Registry.CurrentUser.OpenSubKey(address) == null)
|
if (Registry.CurrentUser.OpenSubKey(address) == null)
|
||||||
{
|
{
|
||||||
@ -396,7 +348,6 @@ namespace DisplayMagicianShared.Windows
|
|||||||
RegistryKeyPermissionCheck.ReadSubTree))
|
RegistryKeyPermissionCheck.ReadSubTree))
|
||||||
{
|
{
|
||||||
var settings = key?.GetValue(tbStuckRectKey) as byte[];
|
var settings = key?.GetValue(tbStuckRectKey) as byte[];
|
||||||
|
|
||||||
if (settings?.Length > 0)
|
if (settings?.Length > 0)
|
||||||
{
|
{
|
||||||
taskBarStuckRectangle = new TaskBarStuckRectangle
|
taskBarStuckRectangle = new TaskBarStuckRectangle
|
||||||
@ -404,6 +355,7 @@ namespace DisplayMagicianShared.Windows
|
|||||||
MainScreen = false,
|
MainScreen = false,
|
||||||
DevicePath = tbStuckRectKey,
|
DevicePath = tbStuckRectKey,
|
||||||
Binary = settings,
|
Binary = settings,
|
||||||
|
BinaryBackup = settings,
|
||||||
Version = version
|
Version = version
|
||||||
};
|
};
|
||||||
taskBarStuckRectangles.Add(taskBarStuckRectangle);
|
taskBarStuckRectangles.Add(taskBarStuckRectangle);
|
||||||
@ -413,7 +365,7 @@ namespace DisplayMagicianShared.Windows
|
|||||||
{
|
{
|
||||||
SharedLogger.logger.Trace($"WinLibrary/GetWindowsDisplayConfig: Unable to get the TaskBarStuckRectangle for {displayId}.");
|
SharedLogger.logger.Trace($"WinLibrary/GetWindowsDisplayConfig: Unable to get the TaskBarStuckRectangle for {displayId}.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -422,43 +374,100 @@ namespace DisplayMagicianShared.Windows
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
version = 2;
|
||||||
|
address = string.Format(MainDisplayAddress, version);
|
||||||
|
if (Registry.CurrentUser.OpenSubKey(address) == null)
|
||||||
|
{
|
||||||
|
// If it's not version 2, then try version 3
|
||||||
|
version = 3;
|
||||||
|
address = string.Format(MainDisplayAddress, version);
|
||||||
|
if (Registry.CurrentUser.OpenSubKey(address) == null)
|
||||||
|
{
|
||||||
|
// It's not v2 or v3, so error
|
||||||
|
version = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (version >= 2)
|
||||||
|
{
|
||||||
|
// Grab the main screen taskbar placement
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (var key = Registry.CurrentUser.OpenSubKey(
|
||||||
|
address,
|
||||||
|
RegistryKeyPermissionCheck.ReadSubTree))
|
||||||
|
{
|
||||||
|
var settings = key?.GetValue("Settings") as byte[];
|
||||||
|
|
||||||
|
if (settings?.Length > 0)
|
||||||
|
{
|
||||||
|
TaskBarStuckRectangle taskBarStuckRectangle = new TaskBarStuckRectangle
|
||||||
|
{
|
||||||
|
MainScreen = true,
|
||||||
|
DevicePath = "Settings",
|
||||||
|
Binary = settings,
|
||||||
|
BinaryBackup = settings,
|
||||||
|
Version = version
|
||||||
|
};
|
||||||
|
taskBarStuckRectangles.Add(taskBarStuckRectangle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
SharedLogger.logger.Error(ex, $"TaskBarStuckRectangle/GetCurrent: Unable to read the Main Screen TaskBarStuckRectangle registry settings due to an exception!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return taskBarStuckRectangles;
|
return taskBarStuckRectangles;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool Apply(List<TaskBarStuckRectangle> taskBarStuckRectangles)
|
public static bool ForceTaskBarIfNeeded(ref List<TaskBarStuckRectangle> taskBarStuckRectangles, TaskBarForcedEdge forcedEdge = TaskBarForcedEdge.None)
|
||||||
{
|
{
|
||||||
if (taskBarStuckRectangles.Count == 0)
|
try
|
||||||
|
{
|
||||||
|
if (forcedEdge != TaskBarForcedEdge.None)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < taskBarStuckRectangles.Count; i++)
|
||||||
|
{
|
||||||
|
// Force the taskbar change
|
||||||
|
taskBarStuckRectangles[i].Edge = (TaskBarEdge)forcedEdge;
|
||||||
|
taskBarStuckRectangles[i].Location = Rectangle.Empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (forcedEdge == TaskBarForcedEdge.None)
|
||||||
|
{
|
||||||
|
// Revert the forced taskbar change from the backup
|
||||||
|
for (int i = 0; i < taskBarStuckRectangles.Count; i++)
|
||||||
|
{
|
||||||
|
taskBarStuckRectangles[i].Binary = taskBarStuckRectangles[i].BinaryBackup;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool Apply(List<TaskBarStuckRectangle> taskBarStuckRectangles, TaskBarForcedEdge forcedEdge = TaskBarForcedEdge.None)
|
||||||
|
{
|
||||||
string address;
|
string address;
|
||||||
|
if (taskBarStuckRectangles.Count < 1)
|
||||||
|
{
|
||||||
|
SharedLogger.logger.Trace($"TaskBarStuckRectangle/Apply: There are no TaskBarStuckRectangle registry settings to apply! This taskbar configuration is invalid.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
foreach (TaskBarStuckRectangle tbsr in taskBarStuckRectangles)
|
foreach (TaskBarStuckRectangle tbsr in taskBarStuckRectangles)
|
||||||
{
|
{
|
||||||
if (tbsr.Version >= 2 && tbsr.Version <= 3)
|
if (tbsr.Version >= 2 && tbsr.Version <= 3)
|
||||||
{
|
{
|
||||||
if (tbsr.MainScreen)
|
if (!tbsr.MainScreen)
|
||||||
{
|
|
||||||
address = string.Format(MainDisplayAddress, tbsr.Version);
|
|
||||||
// Grab the main screen taskbar placement
|
|
||||||
try
|
|
||||||
{
|
|
||||||
using (var key = Registry.CurrentUser.OpenSubKey(
|
|
||||||
address,
|
|
||||||
RegistryKeyPermissionCheck.ReadWriteSubTree))
|
|
||||||
{
|
|
||||||
key.SetValue("Settings", tbsr.Binary);
|
|
||||||
SharedLogger.logger.Trace($"TaskBarStuckRectangle/Apply: Successfully applied TaskBarStuckRectangle registry settings for the Main Screen!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
SharedLogger.logger.Error(ex, $"TaskBarStuckRectangle/GetCurrent: Unable to set the Main Screen TaskBarStuckRectangle registry settings due to an exception!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
address = string.Format(MultiDisplayAddress, tbsr.Version);
|
address = string.Format(MultiDisplayAddress, tbsr.Version);
|
||||||
// Grab the main screen taskbar placement
|
// Grab the main screen taskbar placement
|
||||||
@ -473,6 +482,40 @@ namespace DisplayMagicianShared.Windows
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
SharedLogger.logger.Error(ex, $"TaskBarStuckRectangle/GetCurrent: Unable to set the {tbsr.DevicePath} TaskBarStuckRectangle registry settings due to an exception!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SharedLogger.logger.Error($"TaskBarStuckRectangle/GetCurrent: Unable to set the {tbsr.DevicePath} TaskBarStuckRectangle registry settings as the version isn't v2 or v3!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tell Windows to refresh the Windows Taskbar (which will only refresh the non-main screen)
|
||||||
|
Utils.SendNotifyMessage((IntPtr)Utils.HWND_BROADCAST, Utils.WM_SETTINGCHANGE, (UIntPtr)Utils.NULL, "TraySettings");
|
||||||
|
|
||||||
|
foreach (TaskBarStuckRectangle tbsr in taskBarStuckRectangles)
|
||||||
|
{
|
||||||
|
if (tbsr.Version >= 2 && tbsr.Version <= 3)
|
||||||
|
{
|
||||||
|
if (tbsr.MainScreen)
|
||||||
|
{
|
||||||
|
|
||||||
|
address = string.Format(MainDisplayAddress, tbsr.Version);
|
||||||
|
// Grab the main screen taskbar placement
|
||||||
|
try
|
||||||
|
{
|
||||||
|
using (var key2 = Registry.CurrentUser.OpenSubKey(
|
||||||
|
address,
|
||||||
|
RegistryKeyPermissionCheck.ReadWriteSubTree))
|
||||||
|
{
|
||||||
|
key2.SetValue("Settings", tbsr.Binary);
|
||||||
|
SharedLogger.logger.Trace($"TaskBarStuckRectangle/Apply: Successfully applied TaskBarStuckRectangle registry settings for the Main Screen!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
SharedLogger.logger.Error(ex, $"TaskBarStuckRectangle/GetCurrent: Unable to set the Main Screen TaskBarStuckRectangle registry settings due to an exception!");
|
SharedLogger.logger.Error(ex, $"TaskBarStuckRectangle/GetCurrent: Unable to set the Main Screen TaskBarStuckRectangle registry settings due to an exception!");
|
||||||
}
|
}
|
||||||
@ -480,10 +523,18 @@ namespace DisplayMagicianShared.Windows
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SharedLogger.logger.Error($"TaskBarStuckRectangle/GetCurrent: Unable to set the Main Screen TaskBarStuckRectangle registry settings due to an exception!");
|
SharedLogger.logger.Error($"TaskBarStuckRectangle/GetCurrent: Unable to set the Main Screen TaskBarStuckRectangle registry settings as the version isn't v2 or v3!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Tell Windows to refresh the Windows Taskbar (which will only refresh the non-main screen)
|
||||||
|
Utils.SendNotifyMessage((IntPtr)Utils.HWND_BROADCAST, Utils.WM_SETTINGCHANGE, (UIntPtr)Utils.NULL, "TraySettings");
|
||||||
|
|
||||||
|
Task.Delay(2000);
|
||||||
|
|
||||||
|
// This will refresh the main screen as well. No idea why the above notification doesn't update the main screen too :/)
|
||||||
|
//RestartManagerSession.RestartExplorer();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user