mirror of
https://github.com/modernw/App-Installer-For-Windows-8.x-Reset.git
synced 2026-04-11 17:57:19 +10:00
117 lines
3.3 KiB
C#
117 lines
3.3 KiB
C#
using System;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace DataUtils
|
|
{
|
|
public enum TBPFLAG
|
|
{
|
|
TBPF_NOPROGRESS = 0x0,
|
|
TBPF_INDETERMINATE = 0x1,
|
|
TBPF_NORMAL = 0x2,
|
|
TBPF_ERROR = 0x4,
|
|
TBPF_PAUSED = 0x8
|
|
}
|
|
[ComImport]
|
|
[Guid ("EA1AFB91-9E28-4B86-90E9-9E9F8A5EEA84")]
|
|
[InterfaceType (ComInterfaceType.InterfaceIsIUnknown)]
|
|
public interface ITaskbarList3
|
|
{
|
|
void HrInit ();
|
|
void AddTab (IntPtr hwnd);
|
|
void DeleteTab (IntPtr hwnd);
|
|
void ActivateTab (IntPtr hwnd);
|
|
void SetActiveAlt (IntPtr hwnd);
|
|
void MarkFullscreenWindow (IntPtr hwnd, [MarshalAs (UnmanagedType.Bool)] bool fFullscreen);
|
|
void SetProgressValue (IntPtr hwnd, ulong ullCompleted, ulong ullTotal);
|
|
void SetProgressState (IntPtr hwnd, TBPFLAG tbpFlags);
|
|
void RegisterTab (IntPtr hwndTab, IntPtr hwndMDI);
|
|
void UnregisterTab (IntPtr hwndTab);
|
|
void SetTabOrder (IntPtr hwndTab, IntPtr hwndInsertBefore);
|
|
void SetTabActive (IntPtr hwndTab, IntPtr hwndMDI, uint dwReserved);
|
|
void ThumbBarAddButtons (IntPtr hwnd, uint cButtons, IntPtr pButtons);
|
|
void ThumbBarUpdateButtons (IntPtr hwnd, uint cButtons, IntPtr pButtons);
|
|
void ThumbBarSetImageList (IntPtr hwnd, IntPtr himl);
|
|
void SetOverlayIcon (IntPtr hwnd, IntPtr hIcon, string pszDescription);
|
|
void SetThumbnailTooltip (IntPtr hwnd, string pszTip);
|
|
void SetThumbnailClip (IntPtr hwnd, ref RECT prcClip);
|
|
}
|
|
[ComImport]
|
|
[Guid ("56FDF344-FD6D-11d0-958A-006097C9A090")]
|
|
public class TaskbarList { }
|
|
[StructLayout (LayoutKind.Sequential)]
|
|
public struct RECT
|
|
{
|
|
public int left;
|
|
public int top;
|
|
public int right;
|
|
public int bottom;
|
|
}
|
|
public sealed class TaskbarProgress: IDisposable
|
|
{
|
|
private readonly IntPtr _hwnd;
|
|
private ITaskbarList3 _taskbar3;
|
|
public TaskbarProgress (IntPtr hwnd)
|
|
{
|
|
_hwnd = hwnd;
|
|
object obj = new TaskbarList ();
|
|
ITaskbarList baseTaskbar = (ITaskbarList)obj;
|
|
baseTaskbar.HrInit ();
|
|
_taskbar3 = obj as ITaskbarList3;
|
|
}
|
|
public bool IsSupported
|
|
{
|
|
get { return _taskbar3 != null; }
|
|
}
|
|
public void SetState (TBPFLAG state)
|
|
{
|
|
if (_taskbar3 != null)
|
|
_taskbar3.SetProgressState (_hwnd, state);
|
|
}
|
|
public void SetValue (ulong completed, ulong total)
|
|
{
|
|
if (_taskbar3 != null)
|
|
_taskbar3.SetProgressValue (_hwnd, completed, total);
|
|
}
|
|
public void Clear ()
|
|
{
|
|
if (_taskbar3 != null)
|
|
_taskbar3.SetProgressState (_hwnd, TBPFLAG.TBPF_NOPROGRESS);
|
|
}
|
|
public void Dispose ()
|
|
{
|
|
if (_taskbar3 != null)
|
|
{
|
|
Marshal.ReleaseComObject (_taskbar3);
|
|
_taskbar3 = null;
|
|
}
|
|
}
|
|
~TaskbarProgress () { Dispose (); }
|
|
public ITaskbarList3 Instance => _taskbar3;
|
|
}
|
|
[ComImport]
|
|
[Guid ("56FDF342-FD6D-11d0-958A-006097C9A090")]
|
|
[InterfaceType (ComInterfaceType.InterfaceIsIUnknown)]
|
|
public interface ITaskbarList
|
|
{
|
|
void HrInit ();
|
|
void AddTab (IntPtr hwnd);
|
|
void DeleteTab (IntPtr hwnd);
|
|
void ActivateTab (IntPtr hwnd);
|
|
void SetActiveAlt (IntPtr hwnd);
|
|
}
|
|
public interface ITaskbarProgress
|
|
{
|
|
double ProgressValue { set; }
|
|
TBPFLAG ProgressStatus { set; }
|
|
}
|
|
[ComVisible (true)]
|
|
[ClassInterface (ClassInterfaceType.AutoDual)]
|
|
public class _I_Taskbar
|
|
{
|
|
private ITaskbarProgress taskbar = null;
|
|
public double Progress { set { if (taskbar == null) return; taskbar.ProgressValue = value; } }
|
|
public int Status { set { if (taskbar == null) return; taskbar.ProgressStatus = (TBPFLAG)value; } }
|
|
public _I_Taskbar (ITaskbarProgress tp) { taskbar = tp; }
|
|
}
|
|
}
|