| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 | // Some interop code taken from Mike Marshall's AnyFormusing System;using System.Drawing;using System.Runtime.InteropServices;namespace Hardcodet.Wpf.TaskbarNotification.Interop{    public class AppBarInfo    {        [DllImport("user32.dll")]        private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);        [DllImport("shell32.dll")]        private static extern uint SHAppBarMessage(uint dwMessage, ref APPBARDATA data);        [DllImport("user32.dll")]        private static extern int SystemParametersInfo(uint uiAction, uint uiParam,            IntPtr pvParam, uint fWinIni);        private const int ABE_BOTTOM = 3;        private const int ABE_LEFT = 0;        private const int ABE_RIGHT = 2;        private const int ABE_TOP = 1;        private const int ABM_GETTASKBARPOS = 0x00000005;        // SystemParametersInfo constants        private const uint SPI_GETWORKAREA = 0x0030;        private APPBARDATA m_data;        public ScreenEdge Edge        {            get { return (ScreenEdge) m_data.uEdge; }        }        public Rectangle WorkArea        {            get { return GetRectangle(m_data.rc); }        }        private Rectangle GetRectangle(RECT rc)        {            return new Rectangle(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top);        }             public void GetPosition(string strClassName, string strWindowName)        {            m_data = new APPBARDATA();            m_data.cbSize = (uint) Marshal.SizeOf(m_data.GetType());            IntPtr hWnd = FindWindow(strClassName, strWindowName);            if (hWnd != IntPtr.Zero)            {                uint uResult = SHAppBarMessage(ABM_GETTASKBARPOS, ref m_data);                if (uResult != 1)                {                    throw new Exception("Failed to communicate with the given AppBar");                }            }            else            {                throw new Exception("Failed to find an AppBar that matched the given criteria");            }        }        public void GetSystemTaskBarPosition()        {            GetPosition("Shell_TrayWnd", null);        }        public enum ScreenEdge        {            Undefined = -1,            Left = ABE_LEFT,            Top = ABE_TOP,            Right = ABE_RIGHT,            Bottom = ABE_BOTTOM        }        [StructLayout(LayoutKind.Sequential)]        private struct APPBARDATA        {            public uint cbSize;            public IntPtr hWnd;            public uint uCallbackMessage;            public uint uEdge;            public RECT rc;            public int lParam;        }        [StructLayout(LayoutKind.Sequential)]        private struct RECT        {            public int left;            public int top;            public int right;            public int bottom;        }    }}
 |