777 lines
24 KiB
C#
777 lines
24 KiB
C#
namespace DevComponents.DotNetBar
|
|
{
|
|
using System;
|
|
using System.Runtime.InteropServices;
|
|
using System.Drawing;
|
|
using System.Security;
|
|
|
|
[Flags()]
|
|
internal enum eDrawCaption:uint /* flags for DrawCaption */
|
|
{
|
|
DC_ACTIVE=0x0001,
|
|
DC_SMALLCAP=0x0002,
|
|
DC_ICON=0x0004,
|
|
DC_TEXT=0x0008,
|
|
DC_INBUTTON=0x0010,
|
|
DC_GRADIENT=0x0020
|
|
}
|
|
|
|
/// <summary>
|
|
/// Summary description for NativeFunctions.
|
|
/// </summary>
|
|
[SuppressUnmanagedCodeSecurity()]
|
|
internal class NativeFunctions
|
|
{
|
|
#region Licensing
|
|
#if !TRIAL
|
|
internal static bool keyValidated=false;
|
|
internal static int keyValidated2=0;
|
|
internal static bool ValidateLicenseKey(string key)
|
|
{
|
|
bool ret = false;
|
|
string[] parts = key.Split('-');
|
|
int i = 10;
|
|
foreach(string s in parts)
|
|
{
|
|
if(s=="88405280")
|
|
i++;
|
|
else if(s=="D06E")
|
|
i += 10;
|
|
else if(s=="4617")
|
|
i += 8;
|
|
else if(s=="8810")
|
|
i += 12;
|
|
else if(s=="64462F60FA93")
|
|
i += 3;
|
|
}
|
|
if(i==29)
|
|
return true;
|
|
keyValidated = true;
|
|
return ret;
|
|
}
|
|
internal static bool CheckLicenseKey(string key)
|
|
{
|
|
// F962CEC7-CD8F-4911-A9E9-CAB39962FC1F, 189, 266
|
|
string[] parts = key.Split('-');
|
|
int test = 0;
|
|
for (int i = parts.Length - 1; i >= 0; i--)
|
|
{
|
|
if (parts[i] == "A9E9")
|
|
test += 11;
|
|
else if (parts[i] == "F962CEC7")
|
|
test += 12;
|
|
else if (parts[i] == "CAB39962FC1F")
|
|
test += 2;
|
|
else if (parts[i] == "4911")
|
|
test += 99;
|
|
else if (parts[i] == "CD8F")
|
|
test += 65;
|
|
}
|
|
|
|
keyValidated2 = test + 77;
|
|
|
|
if (test == 23)
|
|
return false;
|
|
|
|
return true;
|
|
}
|
|
#endif
|
|
#endregion
|
|
|
|
#if TRIAL
|
|
private static Color m_ColorExpFlag=Color.Empty;
|
|
internal static bool CheckedThrough = false;
|
|
internal static bool ColorExpAlt()
|
|
{
|
|
#if NOTIMELIMIT
|
|
return false;
|
|
#else
|
|
Color clr=SystemColors.Control;
|
|
Color clr2;
|
|
Color clr3;
|
|
clr2=clr;
|
|
if(clr2.ToArgb()==clr.ToArgb())
|
|
{
|
|
clr3=clr2;
|
|
}
|
|
else
|
|
{
|
|
clr3=clr;
|
|
}
|
|
|
|
if(!m_ColorExpFlag.IsEmpty)
|
|
{
|
|
return (m_ColorExpFlag==Color.Black?false:true);
|
|
}
|
|
try
|
|
{
|
|
Microsoft.Win32.RegistryKey key=Microsoft.Win32.Registry.ClassesRoot;
|
|
try
|
|
{
|
|
key = key.CreateSubKey("CLSID\\{C0093B14-207D-4406-826D-7186EF33C7E5}\\InprocServer32");
|
|
}
|
|
catch (System.UnauthorizedAccessException)
|
|
{
|
|
key = key.OpenSubKey("CLSID\\{C0093B14-207D-4406-826D-7186EF33C7E5}\\InprocServer32");
|
|
}
|
|
try
|
|
{
|
|
if(key.GetValue("")==null || key.GetValue("").ToString()=="")
|
|
{
|
|
key.SetValue("",DateTime.Today.ToOADate().ToString());
|
|
}
|
|
else
|
|
{
|
|
if(key.GetValue("").ToString()=="windows3.dll")
|
|
{
|
|
m_ColorExpFlag=Color.White;
|
|
key.Close();
|
|
key=null;
|
|
return true;
|
|
}
|
|
DateTime date=DateTime.FromOADate(double.Parse(key.GetValue("").ToString()));
|
|
if(((TimeSpan)DateTime.Today.Subtract(date)).TotalDays>28)
|
|
{
|
|
m_ColorExpFlag=Color.White;
|
|
key.SetValue("","windows4.dll");
|
|
key.Close();
|
|
key=null;
|
|
return true;
|
|
}
|
|
if(((TimeSpan)DateTime.Today.Subtract(date)).TotalDays<0)
|
|
{
|
|
m_ColorExpFlag=Color.White;
|
|
key.SetValue("","windows3.dll");
|
|
key.Close();
|
|
key=null;
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
if(key!=null)
|
|
key.Close();
|
|
CheckedThrough = true;
|
|
}
|
|
}
|
|
catch{}
|
|
m_ColorExpFlag=Color.Black;
|
|
return false;
|
|
#endif
|
|
}
|
|
#endif
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct RECT
|
|
{
|
|
public RECT(int left,int top,int right,int bottom)
|
|
{
|
|
this.Left=left;
|
|
this.Top=top;
|
|
this.Right=right;
|
|
this.Bottom=bottom;
|
|
}
|
|
public int Left;
|
|
public int Top;
|
|
public int Right;
|
|
public int Bottom;
|
|
|
|
public static RECT FromRectangle(Rectangle rectangle)
|
|
{
|
|
return new RECT(rectangle.Left, rectangle.Top, rectangle.Right, rectangle.Bottom);
|
|
}
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct POINT
|
|
{
|
|
public POINT(System.Drawing.Point p)
|
|
{
|
|
this.x = p.X;
|
|
this.y = p.Y;
|
|
}
|
|
public POINT(int x, int y)
|
|
{
|
|
this.x = x;
|
|
this.y = y;
|
|
}
|
|
public int x;
|
|
public int y;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct SIZE
|
|
{
|
|
public int cx;
|
|
public int cy;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct TRACKMOUSEEVENT {
|
|
public int cbSize;
|
|
public uint dwFlags;
|
|
public int dwHoverTime;
|
|
public IntPtr hwndTrack;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct WINDOWPOS {
|
|
public int hwnd;
|
|
public int hwndInsertAfter;
|
|
public int x;
|
|
public int y;
|
|
public int cx;
|
|
public int cy;
|
|
public int flags;
|
|
}
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern int MapWindowPoints(
|
|
IntPtr hWndFrom,
|
|
IntPtr hWndTo,
|
|
ref POINT lpPoints,
|
|
int cPoints);
|
|
|
|
[DllImport("user32.dll")]
|
|
static extern int GetClassName(IntPtr hWnd, [Out] System.Text.StringBuilder lpClassName, int nMaxCount);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern IntPtr GetFocus();
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern IntPtr SetFocus(IntPtr hWnd);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern IntPtr GetForegroundWindow();
|
|
|
|
[DllImport("user32")]
|
|
public static extern IntPtr WindowFromPoint(POINT p);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern IntPtr ChildWindowFromPointEx(IntPtr hWndParent, POINT pt, uint uFlags);
|
|
|
|
/// <summary>
|
|
/// For use with ChildWindowFromPointEx
|
|
/// </summary>
|
|
[Flags]
|
|
public enum WindowFromPointFlags
|
|
{
|
|
/// <summary>
|
|
/// Does not skip any child windows
|
|
/// </summary>
|
|
CWP_ALL = 0x0000,
|
|
/// <summary>
|
|
/// Skips invisible child windows
|
|
/// </summary>
|
|
CWP_SKIPINVISIBLE = 0x0001,
|
|
/// <summary>
|
|
/// Skips disabled child windows
|
|
/// </summary>
|
|
CWP_SKIPDISABLED = 0x0002,
|
|
/// <summary>
|
|
/// Skips transparent child windows
|
|
/// </summary>
|
|
CWP_SKIPTRANSPARENT = 0x0004
|
|
}
|
|
|
|
[DllImport("user32")]
|
|
public static extern IntPtr ChildWindowFromPoint(IntPtr parent, POINT p);
|
|
[DllImport("user32.dll")]
|
|
public static extern IntPtr RealChildWindowFromPoint(IntPtr hwndParent, POINT ptParentClientCoords);
|
|
|
|
[DllImport("user32")]
|
|
public static extern bool DrawIconEx(IntPtr hDC, int X, int Y, IntPtr hIcon, int width, int height, int frameIndex, IntPtr flickerFreeBrush, int flags);
|
|
|
|
[DllImport("user32")]
|
|
public static extern uint MapVirtualKey(uint uCode, uint uMapType);
|
|
|
|
[DllImport("user32")]
|
|
public static extern bool GetKeyboardState(byte[] state);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern bool DrawCaption(IntPtr hwnd, IntPtr hdc, ref RECT lprc,eDrawCaption uFlags);
|
|
|
|
[DllImport("user32")]
|
|
public static extern int ToAscii(uint uVirtKey, uint uScanCode, byte[] lpKeyState, byte[] lpChar, uint uFlags);
|
|
|
|
[DllImport("user32")]
|
|
public static extern int SetFocus(int hWnd);
|
|
|
|
[DllImport("user32")]
|
|
public static extern bool IsWindow(int hWnd);
|
|
|
|
[DllImport("user32")]
|
|
public static extern bool TrackMouseEvent(ref TRACKMOUSEEVENT tme);
|
|
|
|
[DllImport("user32")]
|
|
public static extern bool DrawEdge(int hdc,ref RECT pRect, uint edge, uint grfFlags);
|
|
|
|
[DllImport("user32")]
|
|
public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, int uFlags);
|
|
|
|
// [DllImport("user32")]
|
|
// public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
|
|
[DllImport("user32")]
|
|
public static extern int SetWindowRgn(IntPtr hWnd, IntPtr hRgn, bool bRedraw);
|
|
|
|
//[DllImport("user32")]
|
|
//public static extern bool InvalidateRect(IntPtr hWnd, ref RECT lpRect, bool bErase);
|
|
|
|
[DllImport("user32")]
|
|
public static extern bool RedrawWindow(IntPtr hWnd, [In] ref RECT lprcUpdate, IntPtr hrgnUpdate, uint flags);
|
|
//[DllImport("user32")]
|
|
//public static extern bool RedrawWindow(IntPtr hWnd, IntPtr lprcUpdate, IntPtr hrgnUpdate, uint flags);
|
|
|
|
[DllImport("user32")]
|
|
public static extern bool SystemParametersInfo(
|
|
uint uiAction, // system parameter to retrieve or set
|
|
uint uiParam, // depends on action to be taken
|
|
ref bool pvParam, // depends on action to be taken
|
|
uint fWinIni // user profile update option
|
|
);
|
|
[DllImport("user32")]
|
|
public static extern bool SystemParametersInfo(
|
|
uint uiAction, // system parameter to retrieve or set
|
|
uint uiParam, // depends on action to be taken
|
|
ref int pvParam, // depends on action to be taken
|
|
uint fWinIni // user profile update option
|
|
);
|
|
public const uint SPI_GETMENUANIMATION=0x1002;
|
|
public const uint SPI_GETMENUFADE=0x1012;
|
|
public const uint SPI_GETMENUUNDERLINES=0x100A;
|
|
public const uint SPI_GETDROPSHADOW=0x1024;
|
|
public const uint SPI_GETCURSORSHADOW=0x101A;
|
|
public const uint SPI_GETMENUDROPALIGNMENT=27;
|
|
public const uint SM_CXBORDER = 5;
|
|
|
|
public static int BorderMultiplierFactor
|
|
{
|
|
get
|
|
{
|
|
int i = 0;
|
|
SystemParametersInfo(SM_CXBORDER, 0, ref i, 0);
|
|
return i;
|
|
}
|
|
}
|
|
|
|
[DllImport("gdi32")]
|
|
public static extern int SetROP2(int hDC, int DrawMode);
|
|
|
|
[DllImport("gdi32")]
|
|
public static extern int SelectClipRgn(IntPtr hDC, int hRgn);
|
|
[DllImport("gdi32")]
|
|
public static extern int CreateRectRgn(
|
|
int nLeftRect, // x-coordinate of upper-left corner
|
|
int nTopRect, // y-coordinate of upper-left corner
|
|
int nRightRect, // x-coordinate of lower-right corner
|
|
int nBottomRect // y-coordinate of lower-right corner
|
|
);
|
|
|
|
[DllImport("gdi32")]
|
|
public static extern int CreateDC(string lpszDriver, int lpszDevice, int lpszOutput, int lpInitData);
|
|
|
|
[DllImport("gdi32")]
|
|
public static extern bool DeleteDC(int hDC);
|
|
|
|
[DllImport("user32")]
|
|
public static extern bool DrawFocusRect(int hDC, ref RECT r);
|
|
[DllImport("User32.dll", CharSet=CharSet.Auto)]
|
|
public static extern IntPtr GetDC(IntPtr hWnd);
|
|
|
|
[DllImport("user32")]
|
|
public static extern bool PostMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
|
|
[DllImport("user32")]
|
|
public static extern bool PostMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
|
|
[DllImport("user32")]
|
|
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern int TrackPopupMenu(IntPtr hMenu, uint uFlags, int x, int y,
|
|
int nReserved, IntPtr hWnd, IntPtr prcRect);
|
|
[DllImport("user32.dll")]
|
|
public static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);
|
|
|
|
[DllImport("user32")]
|
|
public static extern IntPtr GetDesktopWindow();
|
|
[DllImport("user32")]
|
|
public static extern IntPtr GetActiveWindow();
|
|
|
|
[DllImport("user32")]
|
|
public static extern bool SetLayeredWindowAttributes(IntPtr hwnd, int crKey, byte bAlpha, int dwFlags);
|
|
public const int LWA_COLORKEY=0x00000001;
|
|
public const int LWA_ALPHA=0x00000002;
|
|
[DllImport("User32.dll", CharSet=CharSet.Auto)]
|
|
public static extern bool UpdateLayeredWindow(IntPtr hwnd, IntPtr hdcDst, ref POINT pptDst, ref SIZE psize, IntPtr hdcSrc, ref POINT pprSrc, Int32 crKey, ref BLENDFUNCTION pblend, Int32 dwFlags);
|
|
[DllImport("user32.dll", ExactSpelling = true, SetLastError = true)]
|
|
public static extern bool UpdateLayeredWindow(IntPtr hwnd, IntPtr hdcDst, ref Point pptDst, ref Size psize, IntPtr hdcSrc, ref Point pprSrc, Int32 crKey, ref BLENDFUNCTION pblend, Int32 dwFlags);
|
|
|
|
[StructLayout(LayoutKind.Sequential, Pack=1)]
|
|
public struct BLENDFUNCTION
|
|
{
|
|
public byte BlendOp;
|
|
public byte BlendFlags;
|
|
public byte SourceConstantAlpha;
|
|
public byte AlphaFormat;
|
|
}
|
|
public enum Win32UpdateLayeredWindowsFlags
|
|
{
|
|
ULW_COLORKEY = 0x00000001,
|
|
ULW_ALPHA = 0x00000002,
|
|
ULW_OPAQUE = 0x00000004
|
|
}
|
|
|
|
public enum Win23AlphaFlags : byte
|
|
{
|
|
AC_SRC_OVER = 0x00,
|
|
AC_SRC_ALPHA = 0x01
|
|
}
|
|
|
|
const int R2_NOTXORPEN=10; // DPx
|
|
|
|
[DllImport("winmm")]
|
|
public static extern int sndPlaySound(string lpszSoundName, int uFlags);
|
|
public const int SND_ASYNC=0x0001; /* play asynchronously */
|
|
public const int SND_NODEFAULT=0x0002; /* silence (!default) if sound not found */
|
|
|
|
[DllImport("user32")]
|
|
public static extern bool ValidateRect(IntPtr hWnd,ref NativeFunctions.RECT pRect);
|
|
[DllImport("user32")]
|
|
public static extern bool LockWindowUpdate(IntPtr hWndLock);
|
|
|
|
// 3D border styles
|
|
public const uint
|
|
BDR_RAISEDOUTER=0x0001,
|
|
BDR_SUNKENOUTER=0x0002,
|
|
BDR_RAISEDINNER=0x0004,
|
|
BDR_SUNKENINNER=0x0008,
|
|
BDR_OUTER=(BDR_RAISEDOUTER | BDR_SUNKENOUTER),
|
|
BDR_INNER=(BDR_RAISEDINNER | BDR_SUNKENINNER),
|
|
BDR_RAISED=(BDR_RAISEDOUTER | BDR_RAISEDINNER),
|
|
BDR_SUNKEN=(BDR_SUNKENOUTER | BDR_SUNKENINNER),
|
|
EDGE_RAISED=(BDR_RAISEDOUTER | BDR_RAISEDINNER),
|
|
EDGE_SUNKEN=(BDR_SUNKENOUTER | BDR_SUNKENINNER),
|
|
EDGE_ETCHED=(BDR_SUNKENOUTER | BDR_RAISEDINNER),
|
|
EDGE_BUMP=(BDR_RAISEDOUTER | BDR_SUNKENINNER);
|
|
// Border flags
|
|
public const uint
|
|
BF_LEFT=0x0001,
|
|
BF_TOP=0x0002,
|
|
BF_RIGHT=0x0004,
|
|
BF_BOTTOM=0x0008,
|
|
BF_TOPLEFT=(BF_TOP | BF_LEFT),
|
|
BF_TOPRIGHT=(BF_TOP | BF_RIGHT),
|
|
BF_BOTTOMLEFT=(BF_BOTTOM | BF_LEFT),
|
|
BF_BOTTOMRIGHT=(BF_BOTTOM | BF_RIGHT),
|
|
BF_RECT=(BF_LEFT | BF_TOP | BF_RIGHT | BF_BOTTOM),
|
|
BF_DIAGONAL=0x0010,
|
|
// For diagonal lines, the BF_RECT flags specify the end point of the
|
|
// vector bounded by the rectangle parameter.
|
|
BF_DIAGONAL_ENDTOPRIGHT=(BF_DIAGONAL | BF_TOP | BF_RIGHT),
|
|
BF_DIAGONAL_ENDTOPLEFT=(BF_DIAGONAL | BF_TOP | BF_LEFT),
|
|
BF_DIAGONAL_ENDBOTTOMLEFT=(BF_DIAGONAL | BF_BOTTOM | BF_LEFT),
|
|
BF_DIAGONAL_ENDBOTTOMRIGHT=(BF_DIAGONAL | BF_BOTTOM | BF_RIGHT),
|
|
BF_MIDDLE=0x0800, /* Fill in the middle */
|
|
BF_SOFT=0x1000, /* For softer buttons */
|
|
BF_ADJUST=0x2000, /* Calculate the space left over */
|
|
BF_FLAT=0x4000, /* For flat rather than 3D borders */
|
|
BF_MONO=0x8000; /* For monochrome borders */
|
|
|
|
// Track Mouse Event Flags
|
|
public const uint
|
|
TME_HOVER=0x00000001,
|
|
TME_LEAVE=0x00000002,
|
|
TME_NONCLIENT=0x00000010,
|
|
TME_QUERY=0x40000000,
|
|
TME_CANCEL=0x80000000,
|
|
HOVER_DEFAULT=0xFFFFFFFF;
|
|
|
|
public const long WM_ACTIVATEAPP=0x001C;
|
|
public const int WM_LBUTTONDOWN=0x0201;
|
|
public const int WM_LBUTTONUP=0x0202;
|
|
public const int WM_LBUTTONDBLCLK=0x0203;
|
|
public const int WM_NCLBUTTONDOWN=0x00A1;
|
|
public const int WM_NCMBUTTONDBLCLK=0x00A9;
|
|
public const int WM_NCACTIVATE=0x0086;
|
|
public const int WM_RBUTTONDOWN=0x0204;
|
|
public const int WM_RBUTTONUP=0x0205;
|
|
public const int WM_MBUTTONDOWN=0x0207;
|
|
public const int WM_NCRBUTTONDOWN=0x00A4;
|
|
public const int WM_NCMBUTTONDOWN=0x00A7;
|
|
public const int WM_CONTEXTMENU=0x007B;
|
|
public const int WM_USER=0x0400;
|
|
public const int WM_MOUSEMOVE=0x0200;
|
|
public const int WM_MOUSELEAVE=0x02A3;
|
|
public const int HWND_TOP=0;
|
|
public const int HWND_BOTTOM=1;
|
|
public const int HWND_TOPMOST=-1;
|
|
public const int HWND_NOTOPMOST=-2;
|
|
public const int SWP_NOMOVE=0x0002;
|
|
public const int SWP_NOSIZE=0x0001;
|
|
public const int SWP_NOACTIVATE=0x0010;
|
|
public const int SWP_NOZORDER=0x0004;
|
|
public const int SWP_SHOWWINDOW=0x0040;
|
|
public const int SWP_HIDEWINDOW=0x0080;
|
|
public const int SWP_FRAMECHANGED = 0x0020;
|
|
public const int SWP_NOOWNERZORDER = 0x0200; /* Don't do owner Z ordering */
|
|
public const int SWP_NOSENDCHANGING = 0x0400;
|
|
|
|
public const int WM_SETFOCUS=0x0007;
|
|
public const int WM_KILLFOCUS=0x0008;
|
|
public const int WM_SHOWWINDOW = 0x18;
|
|
public const int WM_SETREDRAW=0x000B;
|
|
public const int WM_PAINT=0x000F;
|
|
public const int WM_MOUSEWHEEL = 0x20A;
|
|
public const int WM_HSCROLL = 0x0114;
|
|
public const int WM_VSCROLL = 0x0115;
|
|
|
|
|
|
|
|
//public const int WM_KEYFIRST =0x0100;
|
|
//public const int WM_KEYUP =0x0101;
|
|
//public const int WM_CHAR =0x0102;
|
|
//public const int WM_DEADCHAR =0x0103;
|
|
public const int WM_SYSKEYDOWN =0x0104;
|
|
public const int WM_SYSKEYUP =0x0105;
|
|
//public const int WM_SYSCHAR =0x0106;
|
|
|
|
public const int WM_ACTIVATE=0x0006;
|
|
public const int WA_INACTIVE=0;
|
|
public const int WA_ACTIVE=1;
|
|
public const int WA_CLICKACTIVE=2;
|
|
|
|
// Animate Window Constants
|
|
public const int AW_HOR_POSITIVE =0x00000001;
|
|
public const int AW_HOR_NEGATIVE =0x00000002;
|
|
public const int AW_VER_POSITIVE =0x00000004;
|
|
public const int AW_VER_NEGATIVE =0x00000008;
|
|
public const int AW_CENTER =0x00000010;
|
|
public const int AW_HIDE =0x00010000;
|
|
public const int AW_ACTIVATE =0x00020000;
|
|
public const int AW_SLIDE =0x00040000;
|
|
public const int AW_BLEND =0x00080000;
|
|
|
|
public const int WM_SYSCOMMAND=0x0112;
|
|
public const int SC_CLOSE=0xF060;
|
|
public const int SC_CONTEXTHELP = 0xF180;
|
|
public const int SC_NEXTWINDOW=0xF040;
|
|
public const int SC_PREVWINDOW=0xF050;
|
|
public const int SC_KEYMENU=0xF100;
|
|
public const int SC_RESTORE=0xF120;
|
|
public const int SC_MINIMIZE=0xF020;
|
|
public const int SC_MAXIMIZE=0xF030;
|
|
public const int SC_MOVE = 0xF010;
|
|
public const int SC_SIZE = 0xF000;
|
|
|
|
public const int WM_MOUSEACTIVATE = 0x21;
|
|
public const int MA_NOACTIVATE = 3;
|
|
public const int MA_NOACTIVATEANDEAT = 4;
|
|
public const uint WS_POPUP=0x80000000;
|
|
public const uint WS_CLIPSIBLINGS=0x04000000;
|
|
public const uint WS_CLIPCHILDREN=0x02000000;
|
|
public const uint WS_EX_TOPMOST=0x00000008;
|
|
public const uint WS_EX_TOOLWINDOW=0x00000080;
|
|
|
|
public const int WM_THEMECHANGED=0x031A;
|
|
public const int WM_PRINTCLIENT=0x0318;
|
|
|
|
[DllImport("user32",SetLastError=true, CharSet=CharSet.Auto)]
|
|
public static extern int AnimateWindow(IntPtr hWnd, int dwTime, int dwFlags);
|
|
|
|
[DllImport("gdi32",SetLastError=true, CharSet=CharSet.Auto)]
|
|
public static extern int GetDeviceCaps(int hdc, int nIndex);
|
|
public const int WM_DISPLAYCHANGE = 0x7E;
|
|
public const int BITSPIXEL = 12; // Number of bits per pixel
|
|
//[DllImport("gdi32",SetLastError=true, CharSet=CharSet.Auto, EntryPoint="CreateDC")]
|
|
//public static extern int CreateDCAsNull(string lpDriverName, int lpDeviceName, int lpOutput, int lpInitData);
|
|
// [DllImport("gdi32",SetLastError=true, CharSet=CharSet.Auto)]
|
|
// public static extern int DeleteDC(int hdc);
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct OSVERSIONINFO
|
|
{
|
|
public int dwOSVersionInfoSize;
|
|
public int dwMajorVersion;
|
|
public int dwMinorVersion;
|
|
public int dwBuildNumber;
|
|
public int dwPlatformId;
|
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=128)]
|
|
public string szCSDVersion;
|
|
}
|
|
[DllImport("kernel32.Dll")] public static extern short GetVersionEx(ref OSVERSIONINFO o);
|
|
|
|
public static void DrawReversibleDesktopRect(System.Drawing.Rectangle rect, int iWidth)
|
|
{
|
|
// System.Windows.Forms.ControlPaint.DrawReversibleFrame(rect,System.Drawing.SystemColors.ControlText,System.Windows.Forms.FrameStyle.Thick);
|
|
// return;
|
|
RECT r;
|
|
r.Left=rect.Left;
|
|
r.Top=rect.Top;
|
|
r.Right=rect.Right;
|
|
r.Bottom=rect.Bottom;
|
|
int dc=CreateDC("DISPLAY",0,0,0);
|
|
int oldRop=SetROP2(dc,R2_NOTXORPEN);
|
|
for(int i=0;i<iWidth;i++)
|
|
{
|
|
DrawFocusRect(dc,ref r);
|
|
r.Left++;
|
|
r.Top++;
|
|
r.Right--;
|
|
r.Bottom--;
|
|
}
|
|
SetROP2(dc,oldRop);
|
|
DeleteDC(dc);
|
|
}
|
|
|
|
public static char GetAccessKey(string s)
|
|
{
|
|
int i=s.IndexOf('&',0);
|
|
while(i>=0 && i<s.Length-1)
|
|
{
|
|
i++;
|
|
if(s[i]!='&')
|
|
{
|
|
return (s.Substring(i,1).ToLower())[0];
|
|
}
|
|
i=s.IndexOf('&',i);
|
|
}
|
|
return '\0';
|
|
}
|
|
|
|
public static void DrawRectangle(System.Drawing.Graphics g, System.Drawing.Pen pen, int x, int y, int Width, int Height)
|
|
{
|
|
// TODO: BETA 2 fix for drawing the rectangle
|
|
Width--;
|
|
Height--;
|
|
g.DrawRectangle(pen,x,y,Width,Height);
|
|
}
|
|
public static void DrawRectangle(System.Drawing.Graphics g, System.Drawing.Pen pen, System.Drawing.Rectangle r)
|
|
{
|
|
DrawRectangle(g,pen,r.X,r.Y,r.Width,r.Height);
|
|
}
|
|
|
|
public static ePopupAnimation SystemMenuAnimation
|
|
{
|
|
get
|
|
{
|
|
bool bRet=false;
|
|
SystemParametersInfo(SPI_GETMENUANIMATION,0,ref bRet,0);
|
|
if(bRet)
|
|
{
|
|
bRet=false;
|
|
SystemParametersInfo(SPI_GETMENUFADE,0,ref bRet,0);
|
|
if(bRet)
|
|
return ePopupAnimation.Fade;
|
|
else
|
|
return ePopupAnimation.Slide;
|
|
}
|
|
return ePopupAnimation.None;
|
|
}
|
|
}
|
|
|
|
private static bool m_ShowKeyboardCues=true;
|
|
public static bool ShowKeyboardCues
|
|
{
|
|
get
|
|
{
|
|
return m_ShowKeyboardCues;
|
|
}
|
|
}
|
|
private static bool m_ShowDropShadow=true;
|
|
public static bool ShowDropShadow
|
|
{
|
|
get
|
|
{
|
|
return m_ShowDropShadow;
|
|
}
|
|
}
|
|
internal static void RefreshSettings()
|
|
{
|
|
#if FRAMEWORK20
|
|
m_ShowKeyboardCues = System.Windows.Forms.SystemInformation.MenuAccessKeysUnderlined;
|
|
m_ShowDropShadow = System.Windows.Forms.SystemInformation.IsDropShadowEnabled;
|
|
m_CursorShadow = m_ShowDropShadow;
|
|
m_RightHandedMenus = System.Windows.Forms.SystemInformation.RightAlignedMenus;
|
|
#else
|
|
bool bRet=false;
|
|
SystemParametersInfo(SPI_GETMENUUNDERLINES,0,ref bRet,0);
|
|
m_ShowKeyboardCues=bRet;
|
|
bRet=false;
|
|
SystemParametersInfo(SPI_GETDROPSHADOW,0,ref bRet,0);
|
|
m_ShowDropShadow=bRet;
|
|
bRet=false;
|
|
SystemParametersInfo(SPI_GETCURSORSHADOW,0,ref bRet,0);
|
|
m_CursorShadow=bRet;
|
|
bRet=false;
|
|
SystemParametersInfo(SPI_GETMENUDROPALIGNMENT,0,ref bRet,0);
|
|
m_RightHandedMenus=bRet;
|
|
#endif
|
|
}
|
|
|
|
public static int ColorDepth=0;
|
|
internal static void OnDisplayChange()
|
|
{
|
|
int hdc = CreateDC("DISPLAY", 0, 0, 0);
|
|
ColorDepth = GetColorDepth(hdc);
|
|
DeleteDC(hdc);
|
|
}
|
|
|
|
internal static int GetColorDepth(int hdc)
|
|
{
|
|
return GetDeviceCaps(hdc, BITSPIXEL);
|
|
}
|
|
|
|
public static bool AlphaBlendingSupported
|
|
{
|
|
get
|
|
{
|
|
if(Environment.OSVersion.Version.Major>=5) // Windows 2000 and up
|
|
return true;
|
|
else
|
|
return false;
|
|
}
|
|
}
|
|
|
|
private static bool m_CursorShadow=true;
|
|
public static bool CursorShadow
|
|
{
|
|
get
|
|
{
|
|
return m_CursorShadow;
|
|
}
|
|
}
|
|
|
|
private static bool m_RightHandedMenus=false;
|
|
public static bool RightHandedMenus
|
|
{
|
|
get { return m_RightHandedMenus; }
|
|
}
|
|
|
|
[DllImport("user32.dll")]
|
|
public static extern int GetSystemMetrics(int nIndex);
|
|
public const int SM_REMOTESESSION = 0x1000;
|
|
public static bool IsTerminalSession()
|
|
{
|
|
return ( 0 != GetSystemMetrics(SM_REMOTESESSION) );
|
|
}
|
|
|
|
public static string GetClassName(IntPtr handle)
|
|
{
|
|
System.Text.StringBuilder className = new System.Text.StringBuilder(150);
|
|
//Get the window class name
|
|
int res = GetClassName(handle, className, className.Capacity);
|
|
if (res != 0)
|
|
{
|
|
return className.ToString();
|
|
}
|
|
|
|
return "";
|
|
}
|
|
|
|
public static int MAKELPARAM(int low, int high)
|
|
{
|
|
return ((high << 0x10) | (low & 0xffff));
|
|
}
|
|
}
|
|
}
|