Common WinAPI for Inno
PS: This will get updates with the time with changelog
Code:
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif
#ifndef WINDOWSH
#define WINDOWSH
#endif
const
{PRIORITY_CLASSES}
//https://msdn.microsoft.com/en-us/library/windows/desktop/ms686219(v=vs.85).aspx
NORMAL_PRIORITY_CLASS = $00000020;
IDLE_PRIORITY_CLASS = $00000040;
HIGH_PRIORITY_CLASS = $00000080;
REALTIME_PRIORITY_CLASS = $00000100;
{MOUSE_EVENTS}
//https://msdn.microsoft.com/en-us/library/windows/desktop/ms646260(v=vs.85).aspx
MOUSEEVENTF_MOVE = $0001; { mouse move }
MOUSEEVENTF_LEFTDOWN = $0002; { left button down }
MOUSEEVENTF_LEFTUP = $0004; { left button up }
MOUSEEVENTF_RIGHTDOWN = $0008; { right button down }
MOUSEEVENTF_RIGHTUP = $0010; { right button up }
MOUSEEVENTF_MIDDLEDOWN = $0020; { middle button down }
MOUSEEVENTF_MIDDLEUP = $0040; { middle button up }
MOUSEEVENTF_WHEEL = $0800; { wheel button rolled }
MOUSEEVENTF_HWHEEL = $1000; { hwheel button rolled }
MOUSEEVENTF_MOVE_NOCOALESCE = $2000; { hwheel button rolled }
MOUSEEVENTF_ABSOLUTE = $8000; { absolute move }
{ANIMATE_WINDOWS}
//https://msdn.microsoft.com/en-us/library/windows/desktop/ms632669(v=vs.85).aspx
AW_FADE_IN = $00080000;
AW_FADE_OUT = $00090000;
AW_SLIDE_IN_LEFT = $00040001;
AW_SLIDE_OUT_LEFT = $00050002;
AW_SLIDE_IN_RIGHT = $00040002;
AW_SLIDE_OUT_RIGHT = $00050001;
AW_SLIDE_IN_TOP = $00040004;
AW_SLIDE_OUT_TOP = $00050008;
AW_SLIDE_IN_BOTTOM = $00040008;
AW_SLIDE_OUT_BOTTOM = $00050004;
AW_DIAG_SLIDE_IN_TOPLEFT = $00040005;
AW_DIAG_SLIDE_OUT_TOPLEFT = $0005000a;
AW_DIAG_SLIDE_IN_TOPRIGHT = $00040006;
AW_DIAG_SLIDE_OUT_TOPRIGHT = $00050009;
AW_DIAG_SLIDE_IN_BOTTOMLEFT = $00040009;
AW_DIAG_SLIDE_OUT_BOTTOMLEFT = $00050006;
AW_DIAG_SLIDE_IN_BOTTOMRIGHT = $0004000a;
AW_DIAG_SLIDE_OUT_BOTTOMRIGHT = $00050005;
AW_EXPLODE = $00040010;
AW_IMPLODE = $00050010;
AW_HOR_POSITIVE = $00000001;
AW_HOR_NEGATIVE = $00000002;
AW_VER_POSITIVE = $00000004;
AW_VER_NEGATIVE = $00000008;
AW_CENTER = $00000010;
AW_HIDE = $00010000;
AW_ACTIVATE = $00020000;
AW_SLIDE = $00040000;
AW_BLEND = $00080000;
{System Metrices}
//https://msdn.microsoft.com/en-us/library/windows/desktop/ms724385(v=vs.85).aspx
SM_ARRANGE = 56;
SM_CLEANBOOT = 67;
SM_CMONITORS = 80;
SM_CMOUSEBUTTONS = 43;
SM_CONVERTIBLESLATEMODE = $2003;
SM_CXBORDER = 5;
SM_CXCURSOR = 13;
SM_CXDLGFRAME = 7;
SM_CXDOUBLECLK = 36;
SM_CXDRAG = 68;
SM_CXEDGE = 45;
SM_CXFIXEDFRAME = 7;
SM_CXFOCUSBORDER = 83;
SM_CXFRAME = 32;
SM_CXFULLSCREEN = 16;
SM_CXHSCROLL = 16;
SM_CXHTHUMB = 10;
SM_CXICON = 11;
SM_CXICONSPACING = 38;
SM_CXMAXIMIZED = 61;
SM_CXMAXTRACK = 59;
SM_CXMENUCHECK = 71;
SM_CXMENUSIZE = 54;
SM_CXMIN = 28;
SM_CXMINIMIZED = 57;
SM_CXMINSPACING = 47;
SM_CXMINTRACK = 34;
SM_CXPADDEDBORDER = 92;
SM_CXSCREEN = 0;
SM_CXSIZE = 30;
SM_CXSIZEFRAME = 32;
SM_CXSMICON = 49;
SM_CXSMSIZE = 52;
SM_CXVIRTUALSCREEN = 78;
SM_CXVSCROLL = 2;
SM_CYBORDER = 6;
SM_CYCAPTION = 4;
SM_CYCURSOR = 14;
SM_CYDLGFRAME = 8 ;
SM_CYDOUBLECLK = 37;
SM_CYDRAG = 69;
SM_CYEDGE = 46;
SM_CYFIXEDFRAME = 8;
SM_CYFOCUSBORDER = 84;
SM_CYFRAME = 33;
SM_CYFULLSCREEN = 17;
SM_CYHSCROLL = 3;
SM_CYICON = 12;
SM_CYICONSPACING = 39;
SM_CYKANJIWINDOW = 18;
SM_CYMAXIMIZED = 62;
SM_CYMAXTRACK = 60;
SM_CYMENU = 15;
SM_CYMENUCHECK = 72 ;
SM_CYMENUSIZE = 55;
SM_CYMIN = 29;
SM_CYMINIMIZED = 58;
SM_CYMINSPACING = 48;
SM_CYMINTRACK = 35;
SM_CYSCREEN = 1;
SM_CYSIZE = 31;
SM_CYSIZEFRAME = 33;
SM_CYSMCAPTION = 51;
SM_CYSMICON = 50;
SM_CYSMSIZE = 53;
SM_CYVIRTUALSCREEN = 79;
SM_CYVSCROLL = 20;
SM_CYVTHUMB = 9 ;
SM_DIGITIZER = 94;
SM_IMMENABLED = 82;
SM_MAXIMUMTOUCHES = 95;
SM_MEDIACENTER = 87;
SM_MENUDROPALIGNMENT = 40;
SM_MIDEASTENABLED = 74;
SM_MOUSEPRESENT = 19;
SM_MOUSEHORIZONTALWHEELPRESENT = 91;
SM_MOUSEWHEELPRESENT = 75;
SM_NETWORK = 63;
SM_PENWINDOWS = 41;
SM_REMOTECONTROL = $2001;
SM_REMOTESESSION = $1000;
SM_SAMEDISPLAYFORMAT = 81;
SM_SECURE =44;
SM_SERVERR2 = 89;
SM_SHOWSOUNDS = 70;
SM_SHUTTINGDOWN = $2000;
SM_SLOWMACHINE = 73;
SM_STARTER = 88;
SM_SWAPBUTTON = 23;
SM_SYSTEMDOCKED = $2004;
SM_TABLETPC = 86;
SM_XVIRTUALSCREEN = 76;
SM_YVIRTUALSCREEN = 77;
{ Window field offsets for GetWindowLong() }
{$EXTERNALSYM GWL_WNDPROC}
GWL_WNDPROC = -4;
{$EXTERNALSYM GWL_HINSTANCE}
GWL_HINSTANCE = -6;
{$EXTERNALSYM GWL_HWNDPARENT}
GWL_HWNDPARENT = -8;
{$EXTERNALSYM GWL_STYLE}
GWL_STYLE = -16;
{$EXTERNALSYM GWL_EXSTYLE}
GWL_EXSTYLE = -20;
{$EXTERNALSYM GWL_USERDATA}
GWL_USERDATA = -21;
{$EXTERNALSYM GWL_ID}
GWL_ID = -12;
{ Class field offsets for GetClassLong() }
{$EXTERNALSYM GCL_MENUNAME}
GCL_MENUNAME = -8;
{$EXTERNALSYM GCL_HBRBACKGROUND}
GCL_HBRBACKGROUND = -10;
{$EXTERNALSYM GCL_HCURSOR}
GCL_HCURSOR = -12;
{$EXTERNALSYM GCL_HICON}
GCL_HICON = -14;
{$EXTERNALSYM GCL_HMODULE}
GCL_HMODULE = -16;
{$EXTERNALSYM GCL_CBWNDEXTRA}
GCL_CBWNDEXTRA = -18;
{$EXTERNALSYM GCL_CBCLSEXTRA}
GCL_CBCLSEXTRA = -20;
{$EXTERNALSYM GCL_WNDPROC}
GCL_WNDPROC = -24;
{$EXTERNALSYM GCL_STYLE}
GCL_STYLE = -26;
{$EXTERNALSYM GCW_ATOM}
GCW_ATOM = -32;
{$EXTERNALSYM GCL_HICONSM}
GCL_HICONSM = -34;
{EXTENDED WINDOWS STYLES}
{ Window Styles }
{$EXTERNALSYM WS_OVERLAPPED}
WS_OVERLAPPED = 0;
{$EXTERNALSYM WS_POPUP}
WS_POPUP = $80000000;
{$EXTERNALSYM WS_CHILD}
WS_CHILD = $40000000;
{$EXTERNALSYM WS_MINIMIZE}
WS_MINIMIZE = $20000000;
{$EXTERNALSYM WS_VISIBLE}
WS_VISIBLE = $10000000;
{$EXTERNALSYM WS_DISABLED}
WS_DISABLED = $8000000;
{$EXTERNALSYM WS_CLIPSIBLINGS}
WS_CLIPSIBLINGS = $4000000;
{$EXTERNALSYM WS_CLIPCHILDREN}
WS_CLIPCHILDREN = $2000000;
{$EXTERNALSYM WS_MAXIMIZE}
WS_MAXIMIZE = $1000000;
{$EXTERNALSYM WS_CAPTION}
WS_CAPTION = $C00000; { WS_BORDER or WS_DLGFRAME }
{$EXTERNALSYM WS_BORDER}
WS_BORDER = $800000;
{$EXTERNALSYM WS_DLGFRAME}
WS_DLGFRAME = $400000;
{$EXTERNALSYM WS_VSCROLL}
WS_VSCROLL = $200000;
{$EXTERNALSYM WS_HSCROLL}
WS_HSCROLL = $100000;
{$EXTERNALSYM WS_SYSMENU}
WS_SYSMENU = $80000;
{$EXTERNALSYM WS_THICKFRAME}
WS_THICKFRAME = $40000;
{$EXTERNALSYM WS_GROUP}
WS_GROUP = $20000;
{$EXTERNALSYM WS_TABSTOP}
WS_TABSTOP = $10000;
{$EXTERNALSYM WS_MINIMIZEBOX}
WS_MINIMIZEBOX = $20000;
{$EXTERNALSYM WS_MAXIMIZEBOX}
WS_MAXIMIZEBOX = $10000;
{$EXTERNALSYM WS_TILED}
WS_TILED = WS_OVERLAPPED;
{$EXTERNALSYM WS_ICONIC}
WS_ICONIC = WS_MINIMIZE;
{$EXTERNALSYM WS_SIZEBOX}
WS_SIZEBOX = WS_THICKFRAME;
{ Common Window Styles }
{$EXTERNALSYM WS_OVERLAPPEDWINDOW}
WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED or WS_CAPTION or WS_SYSMENU or
WS_THICKFRAME or WS_MINIMIZEBOX or WS_MAXIMIZEBOX);
{$EXTERNALSYM WS_TILEDWINDOW}
WS_TILEDWINDOW = WS_OVERLAPPEDWINDOW;
{$EXTERNALSYM WS_POPUPWINDOW}
WS_POPUPWINDOW = (WS_POPUP or WS_BORDER or WS_SYSMENU);
{$EXTERNALSYM WS_CHILDWINDOW}
WS_CHILDWINDOW = (WS_CHILD);
{ Extended Window Styles }
{$EXTERNALSYM WS_EX_DLGMODALFRAME}
WS_EX_DLGMODALFRAME = 1;
{$EXTERNALSYM WS_EX_NOPARENTNOTIFY}
WS_EX_NOPARENTNOTIFY = 4;
{$EXTERNALSYM WS_EX_TOPMOST}
WS_EX_TOPMOST = 8;
{$EXTERNALSYM WS_EX_ACCEPTFILES}
WS_EX_ACCEPTFILES = $10;
{$EXTERNALSYM WS_EX_TRANSPARENT}
WS_EX_TRANSPARENT = $20;
{$EXTERNALSYM WS_EX_MDICHILD}
WS_EX_MDICHILD = $40;
{$EXTERNALSYM WS_EX_TOOLWINDOW}
WS_EX_TOOLWINDOW = $80;
{$EXTERNALSYM WS_EX_WINDOWEDGE}
WS_EX_WINDOWEDGE = $100;
{$EXTERNALSYM WS_EX_CLIENTEDGE}
WS_EX_CLIENTEDGE = $200;
{$EXTERNALSYM WS_EX_CONTEXTHELP}
WS_EX_CONTEXTHELP = $400;
{$EXTERNALSYM WS_EX_RIGHT}
WS_EX_RIGHT = $1000;
{$EXTERNALSYM WS_EX_LEFT}
WS_EX_LEFT = 0;
{$EXTERNALSYM WS_EX_RTLREADING}
WS_EX_RTLREADING = $2000;
{$EXTERNALSYM WS_EX_LTRREADING}
WS_EX_LTRREADING = 0;
{$EXTERNALSYM WS_EX_LEFTSCROLLBAR}
WS_EX_LEFTSCROLLBAR = $4000;
{$EXTERNALSYM WS_EX_RIGHTSCROLLBAR}
WS_EX_RIGHTSCROLLBAR = 0;
{$EXTERNALSYM WS_EX_CONTROLPARENT}
WS_EX_CONTROLPARENT = $10000;
{$EXTERNALSYM WS_EX_STATICEDGE}
WS_EX_STATICEDGE = $20000;
{$EXTERNALSYM WS_EX_APPWINDOW}
WS_EX_APPWINDOW = $40000;
{$EXTERNALSYM WS_EX_OVERLAPPEDWINDOW}
WS_EX_OVERLAPPEDWINDOW = (WS_EX_WINDOWEDGE or WS_EX_CLIENTEDGE);
{$EXTERNALSYM WS_EX_PALETTEWINDOW}
WS_EX_PALETTEWINDOW = (WS_EX_WINDOWEDGE or WS_EX_TOOLWINDOW or WS_EX_TOPMOST);
{$EXTERNALSYM WS_EX_LAYERED}
WS_EX_LAYERED = $00080000;
{$EXTERNALSYM WS_EX_NOINHERITLAYOUT}
WS_EX_NOINHERITLAYOUT = $00100000; // Disable inheritence of mirroring by children
{$EXTERNALSYM WS_EX_LAYOUTRTL}
WS_EX_LAYOUTRTL = $00400000; // Right to left mirroring
{$EXTERNALSYM WS_EX_COMPOSITED}
WS_EX_COMPOSITED = $02000000;
{$EXTERNALSYM WS_EX_NOACTIVATE}
WS_EX_NOACTIVATE = $08000000;
LWA_ALPHA = $2;
{ ShowWindow() Commands }
{$EXTERNALSYM SW_SHOWNA}
SW_SHOWNA = 8;
{$EXTERNALSYM SW_RESTORE}
SW_RESTORE = 9;
{$EXTERNALSYM SW_SHOWDEFAULT}
SW_SHOWDEFAULT = 10;
{$EXTERNALSYM SW_FORCEMINIMIZE}
SW_FORCEMINIMIZE = 11;
{$EXTERNALSYM SW_MAX}
SW_MAX = 11;
{ Old ShowWindow() Commands }
{$EXTERNALSYM HIDE_WINDOW}
HIDE_WINDOW = 0;
{$EXTERNALSYM SHOW_OPENWINDOW}
SHOW_OPENWINDOW = 1;
{$EXTERNALSYM SHOW_ICONWINDOW}
SHOW_ICONWINDOW = 2;
{$EXTERNALSYM SHOW_FULLSCREEN}
SHOW_FULLSCREEN = 3;
{$EXTERNALSYM SHOW_OPENNOACTIVATE}
SHOW_OPENNOACTIVATE = 4;
{ Identifiers for the WM_SHOWWINDOW message }
{$EXTERNALSYM SW_PARENTCLOSING}
SW_PARENTCLOSING = 1;
{$EXTERNALSYM SW_OTHERZOOM}
SW_OTHERZOOM = 2;
{$EXTERNALSYM SW_PARENTOPENING}
SW_PARENTOPENING = 3;
{$EXTERNALSYM SW_OTHERUNZOOM}
SW_OTHERUNZOOM = 4;
{ SetWindowPos Flags }
{$EXTERNALSYM SWP_NOSIZE}
SWP_NOSIZE = 1;
{$EXTERNALSYM SWP_NOMOVE}
SWP_NOMOVE = 2;
{$EXTERNALSYM SWP_NOZORDER}
SWP_NOZORDER = 4;
{$EXTERNALSYM SWP_NOREDRAW}
SWP_NOREDRAW = 8;
{$EXTERNALSYM SWP_NOACTIVATE}
SWP_NOACTIVATE = $10;
{$EXTERNALSYM SWP_FRAMECHANGED}
SWP_FRAMECHANGED = $20; { The frame changed: send WM_NCCALCSIZE }
{$EXTERNALSYM SWP_SHOWWINDOW}
SWP_SHOWWINDOW = $40;
{$EXTERNALSYM SWP_HIDEWINDOW}
SWP_HIDEWINDOW = $80;
{$EXTERNALSYM SWP_NOCOPYBITS}
SWP_NOCOPYBITS = $100;
{$EXTERNALSYM SWP_NOOWNERZORDER}
SWP_NOOWNERZORDER = $200; { Don't do owner Z ordering }
{$EXTERNALSYM SWP_NOSENDCHANGING}
SWP_NOSENDCHANGING = $400; { Don't send WM_WINDOWPOSCHANGING }
{$EXTERNALSYM SWP_DRAWFRAME}
SWP_DRAWFRAME = SWP_FRAMECHANGED;
{$EXTERNALSYM SWP_NOREPOSITION}
SWP_NOREPOSITION = SWP_NOOWNERZORDER;
{$EXTERNALSYM SWP_DEFERERASE}
SWP_DEFERERASE = $2000;
{$EXTERNALSYM SWP_ASYNCWINDOWPOS}
SWP_ASYNCWINDOWPOS = $4000;
{$EXTERNALSYM HWND_TOP}
HWND_TOP = (0);
{$EXTERNALSYM HWND_BOTTOM}
HWND_BOTTOM = (1);
{$EXTERNALSYM HWND_TOPMOST}
HWND_TOPMOST = (-1);
{$EXTERNALSYM HWND_NOTOPMOST}
HWND_NOTOPMOST = (-2);
{ GetSetWindowWordLong offsets for use with WC_DIALOG windows }
{$EXTERNALSYM DWL_MSGRESULT}
DWL_MSGRESULT = 0;
{$EXTERNALSYM DWL_DLGPROC}
DWL_DLGPROC = 4;
{$EXTERNALSYM DWL_USER}
DWL_USER = 8;
{ Background Modes }
{$EXTERNALSYM TRANSPARENT}
TRANSPARENT = 1;
{$EXTERNALSYM OPAQUE}
OPAQUE = 2;
{$EXTERNALSYM BKMODE_LAST}
BKMODE_LAST = 2;
{ARC Direction}
{$EXTERNALSYM AD_COUNTERCLOCKWISE}
AD_COUNTERCLOCKWISE = 1;
{$EXTERNALSYM AD_CLOCKWISE}
AD_CLOCKWISE = 2;
{TBPFLAG}
TBPF_NOPROGRESS = $0;
TBPF_INDETERMINATE = $1;
TBPF_NORMAL = $2;
TBPF_ERROR = $4;
TBPF_PAUSED = $8;
type
HDC = THandle;
function ReleaseCapture: HWND;
external '[email protected] stdcall';
function GetCapture: HWND;
external '[email protected] stdcall';
function SetCapture(hWnd: HWND): HWND;
external '[email protected] stdcall';
function AnimateWindow(hWnd: HWND; dwTime: DWORD; dwFlags: DWORD): Boolean;
external '[email protected] stdcall';
function ShowWindow(hWnd: HWND; nCmdShow: Integer):Boolean;
external '[email protected] stdcall';
function DestroyWindow(hWnd: HWND):Boolean;
external '[email protected] stdcall';
function GetSystemMetrics(nIndex :Integer):Integer;
external '[email protected] stdcall';
function SetWindowPos(hWnd, hWndInsertAfter, X, Y, cx, cy, wFlags: Longint):Boolean;
external '[email protected] stdcall';
function MoveWindow(hWnd: HWND; X, Y, nWidth, nHeight: Longint; bRepaint: BOOL):Boolean;
external '[email protected] stdcall';
function GetClientRect(hWnd: HWND; var lpRect :TRECT):BOOL;
external '[email protected] stdcall';
function GetWindowRect(hWnd: HWND; var lpRect :TRECT):BOOL;
external '[email protected] stdcall';
function ScreenToClient(hWnd: HWND; var lpPoint :TPoint):BOOL;
external '[email protected] stdcall';
function ClientToScreen(hWnd: HWND; var lpPoint :TPoint):BOOL;
external '[email protected] stdcall';
function GetDC( hWnd: HWND ):HDC;
external '[email protected] stdcall';
function GetCursorPos(var lpPoint : TPoint):BOOL;
external '[email protected] stdcall';
function SetBkMode(hdc: HDC; iBkMode :Integer):Integer;
external '[email protected] stdcall';
{Line And Curve Function}
function Arc(hdc: HDC; nLeftRect, nTopRect, nRightRect, nBottomRect, nXStartArc, nYStartArc, nXEndArc, nYEndArc:Integer):BOOL;
external '[email protected] stdcall';
function AngleArc(hdc: HDC; X, Y :Integer; dwRadius : DWORD; eStartAngle, eSweepAngle :Single):BOOL;
external '[email protected] stdcall';
function ArcTo(hdc: HDC; nLeftRect, nTopRect, nRightRect, nBottomRect, nXRadial1, nYRadial1, nXRadial2, nYRadial2 : Integer):BOOL;
external '[email protected] stdcall';
function GetArcDirection(hdc: HDC):Integer;
external '[email protected] stdcall';
function SetArcDirection(DC: HDC; Direction: Integer): Integer;
external '[email protected] stdcall';
function LineTo(DC: HDC; X, Y: Integer): BOOL;
external '[email protected] stdcall';
function MoveToEx(DC: HDC; p2, p3: Integer; var p4: TPoint): BOOL;
external '[email protected] stdcall';
function Rectangle( hdc: HDC; nLeftRect, nTopRect, nRightRect, nBottomRect :Integer):BOOL;
external '[email protected] stdcall';
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint;
external 'SetWindowLong{#A}@user32.dll stdcall';
function GetWindowLong(hWnd: HWND; nIndex: Longint): Longint;
external 'GetWindowLong{#A}@user32.dll stdcall';
function SetLayeredWindowAttributes(hwnd:HWND; crKey:Longint; bAlpha:byte; dwFlags:longint ):longint;
external 'SetLayeredWindowAttributes@user32 stdcall';
function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint;
external '[email protected] stdcall';
function GetTickCount: DWORD;
external '[email protected] stdcall';
function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord;
external '[email protected] stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord;
external '[email protected] stdcall';
function Size64(Hi, Lo: Integer): Extended;
begin
Result:= Lo;
if Lo < 0 then
Result := Result + MaxInt + MaxInt + 2;
for Hi := Hi - 1 Downto 0 do
Result:= Result + MaxInt + MaxInt + 2;
Result:=Result/(1024*1024);
End;
function GetFileSize(FileName :String): Extended;
var
TempRec : TFindRec;
begin
FindFirst(FileName,TempRec);
Result := Size64(TempRec.SizeHigh,TempRec.SizeLow);
end;