kopia lustrzana https://github.com/dl2alf/AirScout
194 wiersze
5.9 KiB
C#
194 wiersze
5.9 KiB
C#
// Requires ShlObjIdl.cs
|
|
|
|
using System;
|
|
using System.Drawing;
|
|
using System.Runtime.InteropServices;
|
|
using System.Windows.Forms;
|
|
|
|
namespace Vanara.Interop
|
|
{
|
|
[System.Security.SuppressUnmanagedCodeSecurity]
|
|
internal static partial class NativeMethods
|
|
{
|
|
public static class TaskbarList
|
|
{
|
|
static readonly Finalizer finalizer = new Finalizer();
|
|
static ITaskbarList2 taskbar2;
|
|
static ITaskbarList4 taskbar4;
|
|
|
|
static TaskbarList()
|
|
{
|
|
var tb = new CTaskbarList();
|
|
taskbar2 = (ITaskbarList2)tb;
|
|
try { taskbar4 = (ITaskbarList4)tb; } catch { taskbar4 = null; }
|
|
taskbar2?.HrInit();
|
|
}
|
|
|
|
sealed class Finalizer
|
|
{
|
|
~Finalizer()
|
|
{
|
|
if (taskbar2 != null)
|
|
Marshal.ReleaseComObject(taskbar2);
|
|
if (taskbar4 != null)
|
|
Marshal.ReleaseComObject(taskbar4);
|
|
}
|
|
}
|
|
|
|
public static uint TaskbarButtonCreatedWinMsgId => RegisterWindowMessage("TaskbarButtonCreated");
|
|
|
|
public static void ActivateTaskbarItem(IWin32Window parent)
|
|
{
|
|
if (parent == null)
|
|
throw new ArgumentNullException(nameof(parent));
|
|
taskbar2?.ActivateTab(parent.Handle);
|
|
}
|
|
|
|
public static void MarkFullscreenWindow(IWin32Window parent, bool fullscreen)
|
|
{
|
|
if (parent == null)
|
|
throw new ArgumentNullException(nameof(parent));
|
|
taskbar2?.MarkFullscreenWindow(parent.Handle, fullscreen);
|
|
}
|
|
|
|
public static void SetActiveAlt(IWin32Window parent)
|
|
{
|
|
if (parent == null)
|
|
throw new ArgumentNullException(nameof(parent));
|
|
taskbar2?.SetActiveAlt(parent.Handle);
|
|
}
|
|
|
|
// Thumbnail Toolbars ============================================
|
|
|
|
public static void ThumbBarAddButtons(IWin32Window parent, THUMBBUTTON[] buttons)
|
|
{
|
|
Validate7OrLater();
|
|
if (parent == null)
|
|
throw new ArgumentNullException(nameof(parent));
|
|
if (buttons == null)
|
|
throw new ArgumentNullException(nameof(buttons));
|
|
taskbar4?.ThumbBarAddButtons(parent.Handle, (uint)buttons.Length, buttons);
|
|
}
|
|
|
|
public static void ThumbBarSetImageList(IWin32Window parent, ImageList imageList)
|
|
{
|
|
Validate7OrLater();
|
|
if (parent == null)
|
|
throw new ArgumentNullException(nameof(parent));
|
|
if (imageList == null)
|
|
throw new ArgumentNullException(nameof(imageList));
|
|
taskbar4?.ThumbBarSetImageList(parent.Handle, imageList.Handle);
|
|
}
|
|
|
|
public static void ThumbBarUpdateButtons(IWin32Window parent, THUMBBUTTON[] buttons)
|
|
{
|
|
Validate7OrLater();
|
|
if (parent == null)
|
|
throw new ArgumentNullException(nameof(parent));
|
|
if (buttons == null)
|
|
throw new ArgumentNullException(nameof(buttons));
|
|
taskbar4?.ThumbBarUpdateButtons(parent.Handle, (uint)buttons.Length, buttons);
|
|
}
|
|
|
|
// Overlays ============================================
|
|
|
|
public static void SetOverlayIcon(IWin32Window parent, Icon icon, string description)
|
|
{
|
|
Validate7OrLater();
|
|
if (parent == null)
|
|
throw new ArgumentNullException(nameof(parent));
|
|
taskbar4?.SetOverlayIcon(parent.Handle, icon == null ? IntPtr.Zero : icon.Handle, description);
|
|
}
|
|
|
|
// Progress Bars ============================================
|
|
|
|
public static void SetProgressState(IWin32Window parent, TBPF status)
|
|
{
|
|
Validate7OrLater();
|
|
if (parent == null)
|
|
throw new ArgumentNullException(nameof(parent));
|
|
taskbar4?.SetProgressState(parent.Handle, status);
|
|
}
|
|
|
|
public static void SetProgressValue(IWin32Window parent, ulong completed, ulong total)
|
|
{
|
|
Validate7OrLater();
|
|
if (parent == null)
|
|
throw new ArgumentNullException(nameof(parent));
|
|
taskbar4?.SetProgressValue(parent.Handle, completed, total);
|
|
}
|
|
|
|
// Thumbnails ============================================
|
|
|
|
public static void RegisterTab(IWin32Window parent, IWin32Window childWindow)
|
|
{
|
|
Validate7OrLater();
|
|
if (childWindow == null)
|
|
throw new ArgumentNullException(nameof(childWindow));
|
|
if (parent == null)
|
|
throw new ArgumentNullException(nameof(parent));
|
|
taskbar4?.RegisterTab(childWindow.Handle, parent.Handle);
|
|
}
|
|
|
|
public static void SetTabActive(IWin32Window parent, IWin32Window childWindow)
|
|
{
|
|
Validate7OrLater();
|
|
if (childWindow == null)
|
|
throw new ArgumentNullException(nameof(childWindow));
|
|
if (parent == null)
|
|
throw new ArgumentNullException(nameof(parent));
|
|
taskbar4?.SetTabActive(childWindow.Handle, parent.Handle, 0);
|
|
}
|
|
|
|
public static void SetTabOrder(IWin32Window childWindow, IWin32Window insertBeforeChildWindow = null)
|
|
{
|
|
Validate7OrLater();
|
|
if (childWindow == null)
|
|
throw new ArgumentNullException(nameof(childWindow));
|
|
taskbar4?.SetTabOrder(childWindow.Handle, insertBeforeChildWindow == null ? IntPtr.Zero : insertBeforeChildWindow.Handle);
|
|
}
|
|
|
|
public static void SetTabProperties(IWin32Window childWindow, STPF properties)
|
|
{
|
|
Validate7OrLater();
|
|
if (childWindow == null)
|
|
throw new ArgumentNullException(nameof(childWindow));
|
|
taskbar4?.SetTabProperties(childWindow.Handle, properties);
|
|
}
|
|
|
|
public static void UnregisterTab(IWin32Window childWindow)
|
|
{
|
|
Validate7OrLater();
|
|
if (childWindow == null)
|
|
throw new ArgumentNullException(nameof(childWindow));
|
|
taskbar4?.UnregisterTab(childWindow.Handle);
|
|
}
|
|
|
|
public static void SetThumbnailClip(IWin32Window parent, Rectangle windowClipRect)
|
|
{
|
|
Validate7OrLater();
|
|
if (parent == null)
|
|
throw new ArgumentNullException(nameof(parent));
|
|
RECT cr = windowClipRect;
|
|
taskbar4?.SetThumbnailClip(parent.Handle, ref cr);
|
|
}
|
|
|
|
public static void SetThumbnailTooltip(IWin32Window parent, string tip)
|
|
{
|
|
Validate7OrLater();
|
|
if (parent == null)
|
|
throw new ArgumentNullException(nameof(parent));
|
|
taskbar4?.SetThumbnailTooltip(parent.Handle, tip);
|
|
}
|
|
|
|
static readonly Version Win7Ver = new Version(6, 1);
|
|
|
|
private static void Validate7OrLater()
|
|
{
|
|
if (Environment.OSVersion.Version < Win7Ver)
|
|
throw new InvalidOperationException("This method is only available on Windows 7 and later.");
|
|
}
|
|
}
|
|
}
|
|
}
|