view dwt/internal/win32/OS.d @ 189:f804bcfb9e49

don't do the theming stuff for win2k and earlier
author Frank Benoit <benoit@tionex.de>
date Sat, 15 Mar 2008 02:43:59 +0100
parents 03f179597782
children 72ef824d4983
line wrap: on
line source

/*******************************************************************************
 * Copyright (c) 2000, 2007 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 * Port to the D programming language:
 *     Frank Benoit <benoit@tionex.de>
 *******************************************************************************/
module dwt.internal.win32.OS;

public import dwt.internal.win32.WINTYPES;
private import dwt.internal.win32.WINAPI;
alias dwt.internal.win32.WINAPI WINAPI;

import dwt.internal.C;
import dwt.internal.Library;
import tango.sys.SharedLib : SharedLib;
import tango.sys.Common : SysError;
static import tango.stdc.stdlib;

import tango.stdc.string : memset;
import tango.stdc.stringz : toString16z;
import tango.text.convert.Utf : toString16;
import tango.io.FilePath;
static import tango.io.TempFile;
import tango.io.File;


import tango.util.log.Trace;
import tango.io.Console;
void trace(int line ){
    //Trace.formatln( "OS {}", line );
}

// declare of Callback functions
extern (Windows)
{
alias int function() Function0;
alias int function(void*) Function1;
alias int function(void*, int) Function2;
alias int function(void*, int, int) Function3;
alias int function(void*, int, int, int) Function4;
alias int function(void*, int, int, int, int) Function5;
alias int function(void*, int, int, int, int, int) Function6;
alias int function(void*, int, int, int, int, int, int) Function7;
alias int function(void*, int, int, int, int, int, int, int) Function8;
alias int function(void*, int, int, int, int, int, int, int, int) Function9;
}


/*
Compile time versions
    ANSI
    WinCE

    OS.IsUnicode
    OS.IsWinCE

    OS.IsHPC

    OS.IsSP
    OS.IsPPC
    OS.IsWin95
    OS.IsWinNT

*/

public class LDWTRESULT {
    public int value;
    // initalize ONE and ZERO in static OS.this();
    public static LDWTRESULT ONE;
    public static LDWTRESULT ZERO;
    public this (int value) { this.value = value; }
}


public class OS : C {

    struct Symbol {
        char[] name;
        void** symbol;
        int major;
        int minor;
    }
    static void loadLib( Symbol[] symbols, char[] libname ){
        if (auto lib = SharedLib.load(libname)) {
            foreach( inout s; symbols ){
                if( OS.WIN32_VERSION >= OS.VERSION( s.major, s.minor )){
                    *s.symbol = lib.getSymbol( s.name.ptr );
                    if( s.symbol is null ){
                        Trace.formatln( "{}: Symbol '{}' not found", libname, s.name );
                    }
                }
            }
        } else {
            Trace.formatln( "Could not load the library {}", libname );
        }
    }

    public static HINSTANCE GetLibraryHandle(){
        //PORTING_FIXME: GetLibraryHandle
        // is the hInstance of the DLL or null, if not a DLL.
        // At the moment DWT is statically linked but this needs to be fixed
        return null;
    }

    // macro from winnt.h
    public static int PRIMARYLANGID( int lgid ){
        return lgid & 0x3FF;
    }

    private static int getNOTIFYICONDATAA_V2_SIZE (){
        // hm, NOTIFYICONDATAA.dwInfoFlags.offsetof did not compile
        return IsWinCE ? NOTIFYICONDATAA.sizeof : cast(int)(&(cast(NOTIFYICONDATAA*)null).dwInfoFlags) + int.sizeof;
    }

    private static int getNOTIFYICONDATAW_V2_SIZE (){
        return IsWinCE ? NOTIFYICONDATAW.sizeof : cast(int)(&(cast(NOTIFYICONDATAW*)null).dwInfoFlags) + int.sizeof;
    }

    /*
    * DWT Windows flags
    */
    public static BOOL IsWin32s;
    public static BOOL IsWin95;
    public static BOOL IsWinNT;

    version(WinCE) {
        public const static BOOL IsWinCE = true;
        public static const BOOL IsHPC   = false; //todo
    }
    else {
        public const static BOOL IsWinCE = false;
        public static const BOOL IsHPC   = false;
    }

    public static const BOOL IsPPC = false;

    // PORTING_FIXME, is it Windows WFSP?
    public static const BOOL IsSP = false;

    public static const BOOL IsDBLocale;

    version(ANSI) {
        public const BOOL IsUnicode = false;
    }else{
        public const BOOL IsUnicode = true;
    }

    public static const int WIN32_MAJOR, WIN32_MINOR, WIN32_VERSION;
    public static const int COMCTL32_MAJOR, COMCTL32_MINOR, COMCTL32_VERSION;
    public static const int SHELL32_MAJOR, SHELL32_MINOR, SHELL32_VERSION;

    public static const char[] NO_MANIFEST = "dwt.internal.win32.OS.NO_MANIFEST";


    /*
    * Flags for Window API GetVersionEx()
    */
    public static const int VER_PLATFORM_WIN32s = 0;
    public static const int VER_PLATFORM_WIN32_WINDOWS = 1;
    public static const int VER_PLATFORM_WIN32_NT = 2;
    public static const int VER_PLATFORM_WIN32_CE = 3;

    /* Forward references */
    public static const int HEAP_ZERO_MEMORY = 0x8;
    public static const int ACTCTX_FLAG_RESOURCE_NAME_VALID    = 0x00000008;
    public static const int ACTCTX_FLAG_SET_PROCESS_DEFAULT    = 0x00000010;
    public static const int ACTCTX_FLAG_APPLICATION_NAME_VALID = 0x00000020;
    public static const int ACTCTX_FLAG_OVERRIDEMANIFEST_VALID = 0x00000100;
    public static const TCHAR* MANIFEST_RESOURCE_ID = cast(TCHAR*)2;
    public static const int SM_DBCSENABLED = 0x2A;
    public static const int SM_IMMENABLED = 0x52;
    public static const int LANG_KOREAN = 0x12;
    public static const int MAX_PATH = 260;

//     static this(){
//         NOTIFYICONDATAA_V2_SIZE = getNOTIFYICONDATAA_V2_SIZE ();
//         NOTIFYICONDATAW_V2_SIZE = getNOTIFYICONDATAW_V2_SIZE ();
//         NOTIFYICONDATA_V2_SIZE = IsUnicode ? getNOTIFYICONDATAW_V2_SIZE : getNOTIFYICONDATAA_V2_SIZE;
//         OSVERSIONINFO info;
//         IsWin32s = (info.dwPlatformId is VER_PLATFORM_WIN32s);
//         IsWin95 = (info.dwPlatformId is VER_PLATFORM_WIN32_WINDOWS);
//         IsWinNT = (info.dwPlatformId is VER_PLATFORM_WIN32_NT);
//         //IsSP_ = false;
//         //IsPPC_ = false;
//         //IsHPC = false;
//         IsDBLocale = false;
//         WIN32_MAJOR = info.dwMajorVersion;
//         WIN32_MINOR = info.dwMinorVersion;
//         WIN32_VERSION = VERSION (WIN32_MAJOR, WIN32_MINOR);
//         //IsUnicode = !IsWin32s && !IsWin95;
//         DLLVERSIONINFO dvi;
//         COMCTL32_MAJOR = dvi.dwMajorVersion;
//         COMCTL32_MINOR = dvi.dwMinorVersion;
//         COMCTL32_VERSION = VERSION (COMCTL32_MAJOR, COMCTL32_MINOR);
//         SHELL32_MAJOR = dvi.dwMajorVersion;
//         SHELL32_MINOR = dvi.dwMinorVersion;
//         SHELL32_VERSION = VERSION (SHELL32_MAJOR, SHELL32_MINOR);
//     }

    /* Get the Windows version and the flags */
    public static this() {
        LDWTRESULT.ONE = new LDWTRESULT(1);
        LDWTRESULT.ZERO = new LDWTRESULT(0);
        /*
        * Try the UNICODE version of GetVersionEx first
        * and then the ANSI version.  The UNICODE version
        * is present on all versions of Windows but is not
        * implemented on Win95/98/ME.
        *
        * NOTE: The value of OSVERSIONINFO.sizeof cannot
        * be static final because it relies on the Windows
        * platform version to be initialized and IsUnicode
        * has not been calculated.  It must be initialized
        * here, after the platform is determined in order
        * for the value to be correct.
        */
        OSVERSIONINFO info;
        info.dwOSVersionInfoSize = OSVERSIONINFO.sizeof;
        if(!OS.GetVersionEx(&info)){
            MessageBoxA(null, "DWT Unicode version applications can't run in a non-Unicode platform !", "Error", MB_OK|MB_ICONERROR);
            tango.stdc.stdlib.exit(-1);
        }
        //OSVERSIONINFO info = new OSVERSIONINFOW ();
        //info.dwOSVersionInfoSize = OSVERSIONINFOW.sizeof;
        //if (!OS.GetVersionExW ((OSVERSIONINFOW)info)) {
        //    info = new OSVERSIONINFOA ();
        //    info.dwOSVersionInfoSize = OSVERSIONINFOA.sizeof;
        //    OS.GetVersionExA ((OSVERSIONINFOA)info);
        //}
        //OSVERSIONINFO.sizeof = info.dwOSVersionInfoSize;

        IsWin32s = (info.dwPlatformId is VER_PLATFORM_WIN32s);
        IsWin95 = (info.dwPlatformId is VER_PLATFORM_WIN32_WINDOWS);
        IsWinNT = (info.dwPlatformId is VER_PLATFORM_WIN32_NT);
        //PORTING_CHANGE: made by version
        //IsWinCE = (info.dwPlatformId is VER_PLATFORM_WIN32_CE);
        //PORTING_CHANGE: made by version
        //IsSP  = IsSP();
        //PORTING_CHANGE: made by version
        //IsPPC = IsPPC();
        version(WinCE) {
            IsHPC = IsWinCE && !IsPPC && !IsSP;
        }
        WIN32_MAJOR = info.dwMajorVersion;
        WIN32_MINOR = info.dwMinorVersion;
        WIN32_VERSION = VERSION (WIN32_MAJOR, WIN32_MINOR);

        if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (5, 1)) {
            loadLib( Symbols_Kernel32, `Kernel32.dll` );
        }

        //PORTING_CHANGE: made by version
        //IsUnicode = !IsWin32s && !IsWin95;

        /* Load the manifest to force the XP Theme */
        if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (5, 1)) {
            enableVisualStyles();
        }

        // when to load uxtheme
        if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (5, 1)) {
            loadLib( Symbols_UxTheme, `UxTheme.dll` );
        }
        if (OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (5, 1)) {
            loadLib( Symbols_CoreImm, `Coreimm.dll` );
        }
        if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (6, 0)) {
            loadLib( Symbols_User32, `User32.dll` );
        }
        if (!OS.IsWinCE && OS.WIN32_VERSION >= OS.VERSION (4, 0)) {
            loadLib( Symbols_Imm32, `Imm32.dll` );
        }

        /* Make the process DPI aware for Windows Vista */
        if (OS.WIN32_VERSION >= OS.VERSION (6, 0)) OS.SetProcessDPIAware ();

        /* Get the DBCS flag */
        BOOL dbcsEnabled = OS.GetSystemMetrics (SM_DBCSENABLED) !is 0;
        BOOL immEnabled = OS.GetSystemMetrics (SM_IMMENABLED) !is 0;
        IsDBLocale = dbcsEnabled || immEnabled;

        /*
        * Bug in Windows.  On Korean Windows XP when the Text
        * Services Framework support for legacy applications
        * is enabled, certain legacy calls segment fault.
        * For example, when ImmSetCompositionWindow() is used
        * to move the composition window outside of the client
        * area, Windows crashes.  The fix is to disable legacy
        * support.
        *
        * Note: The bug is fixed in Service Pack 2.
        */
        if (!OS.IsWinCE && OS.WIN32_VERSION is OS.VERSION (5, 1)) {
            short langID = OS.GetSystemDefaultUILanguage ();
            short primaryLang = OS.PRIMARYLANGID (langID);
            if (primaryLang is LANG_KOREAN) {
                OSVERSIONINFOEX infoex;
                infoex.dwOSVersionInfoSize = OSVERSIONINFOEX.sizeof;
                GetVersionEx (cast(OSVERSIONINFO*) &infoex );
                if (infoex.wServicePackMajor < 2) {
                    OS.ImmDisableTextFrameService (0);
                }
            }
        }

        /* Get the COMCTL32.DLL version */
        DLLVERSIONINFO dvi;
        dvi.cbSize = DLLVERSIONINFO.sizeof;
        dvi.dwMajorVersion = 4;
        dvi.dwMinorVersion = 0;
        //PORTING_CHANGE: comctl is loaded automatically
        //TCHAR lpLibFileName = new TCHAR (0, "comctl32.dll", true); //$NON-NLS-1$
        //int /*long*/ hModule = OS.LoadLibrary (lpLibFileName);
        if (auto lib = SharedLib.load( `comctl32.dll`) ) {
            char[] name = "DllGetVersion\0"; //$NON-NLS-1$
            void* DllGetVersion = lib.getSymbol(name.ptr);
            if (DllGetVersion !is null){
                alias extern(Windows) void function(DLLVERSIONINFO*) TDllVersion;
                TDllVersion f = cast( TDllVersion )DllGetVersion;
                f(&dvi);
            }
            lib.unload();
        }
        COMCTL32_MAJOR = dvi.dwMajorVersion;
        COMCTL32_MINOR = dvi.dwMinorVersion;
        COMCTL32_VERSION = VERSION (COMCTL32_MAJOR, COMCTL32_MINOR);

        /* Get the Shell32.DLL version */
        dvi = DLLVERSIONINFO.init;
        dvi.cbSize = DLLVERSIONINFO.sizeof;
        dvi.dwMajorVersion = 4;
        //TCHAR lpLibFileName = new TCHAR (0, "Shell32.dll", true); //$NON-NLS-1$
        //int /*long*/ hModule = OS.LoadLibrary (lpLibFileName);
        if ( auto lib = SharedLib.load( `Shell32.dll`)) {
            char[] name = "DllGetVersion\0"; //$NON-NLS-1$
            void* DllGetVersion = lib.getSymbol(name.ptr);
            if (DllGetVersion !is null){
                alias extern(Windows) void function(DLLVERSIONINFO*) TDllVersion;
                TDllVersion f = cast( TDllVersion )DllGetVersion;
                f(&dvi);
            }
            lib.unload();
        }
        SHELL32_MAJOR = dvi.dwMajorVersion;
        SHELL32_MINOR = dvi.dwMinorVersion;
        SHELL32_VERSION = VERSION (SHELL32_MAJOR, SHELL32_MINOR);
    }

    /**************************************************************************

    **************************************************************************/

    public static void enableVisualStyles() {
        void printError( char[] msg ){
            char[] winMsg = SysError.lastMsg();
            char[2000] buf;
            Trace.formatln("{}: {}", msg, CodePage.from( winMsg, buf ) );
        }
        TCHAR[] buffer = new TCHAR[ MAX_PATH ];
        buffer[] = 0;
        HANDLE hModule = OS.GetLibraryHandle ();
        while (OS.GetModuleFileName (hModule, buffer.ptr, buffer.length ) is buffer.length ) {
            buffer.length = buffer.length + MAX_PATH;
            buffer[] = 0;
        }
        auto hHeap = OS.GetProcessHeap ();
        int byteCount = buffer.length * TCHAR.sizeof;
        TCHAR* pszText = cast(TCHAR*) OS.HeapAlloc (hHeap, HEAP_ZERO_MEMORY, byteCount);
        OS.MoveMemory (pszText, buffer.ptr, byteCount);

        ACTCTX pActCtx;
        pActCtx.cbSize = ACTCTX.sizeof;
        pActCtx.dwFlags = 0
            | ACTCTX_FLAG_RESOURCE_NAME_VALID
            | ACTCTX_FLAG_SET_PROCESS_DEFAULT
            ;
        pActCtx.lpSource = pszText;
        pActCtx.lpApplicationName = pszText;
        pActCtx.lpResourceName = MANIFEST_RESOURCE_ID;
        HANDLE hActCtx = OS.CreateActCtx (&pActCtx);
        if (hActCtx is INVALID_HANDLE_VALUE){
            printError("CreateActCtx failed" );
        }
        else{
            ULONG_PTR ulpActivationCookie;
            if (!OS.ActivateActCtx(hActCtx, &ulpActivationCookie)){
                printError("ActivateActCtx failed" );
            }
        }

        if (pszText !is null){
            OS.HeapFree (hHeap, 0, pszText);
        }

        /*
        * NOTE:  A single activation context is created and activated
        * for the entire lifetime of the program.  It is deactivated
        * and released by Windows when the program exits.
        */
    }

    /**************************************************************************

    **************************************************************************/

    /* Flag used on WinCE */

    static const int SYS_COLOR_INDEX_FLAG = OS.IsWinCE ? 0x40000000 : 0x0;

    /*
    * NOTE:  There is a bug in JVM 1.2 where loading
    * a class with a large number of constants causes
    * a segment fault to occur sometime later after
    * the class is loaded.  The fix is to break the
    * class up into a hierarchy of classes that each
    * contain a smaller number of constants.  This
    * fix is not necessary at this time but is required
    * when all constants are uncommented.  We have not
    * done the research to determine the limit.
    */

    /* Constants */
    public static const int ABS_DOWNDISABLED = 8;
    public static const int ABS_DOWNHOT = 6;
    public static const int ABS_DOWNNORMAL = 5;
    public static const int ABS_DOWNPRESSED = 7;
    public static const int ABS_LEFTDISABLED = 12;
    public static const int ABS_LEFTHOT = 10;
    public static const int ABS_LEFTNORMAL = 9;
    public static const int ABS_LEFTPRESSED = 11;
    public static const int ABS_RIGHTDISABLED = 16;
    public static const int ABS_RIGHTHOT = 14;
    public static const int ABS_RIGHTNORMAL = 13;
    public static const int ABS_RIGHTPRESSED = 15;
    public static const int ABS_UPDISABLED = 4;
    public static const int ABS_UPHOT = 2;
    public static const int ABS_UPNORMAL = 1;
    public static const int ABS_UPPRESSED = 3;
    public static const int AC_SRC_OVER = 0;
    public static const int AC_SRC_ALPHA = 1;
//  public static const int ACTCTX_FLAG_RESOURCE_NAME_VALID = 0x00000008;
//  public static const int ACTCTX_FLAG_SET_PROCESS_DEFAULT = 0x00000010;
    public static const int ALTERNATE = 1;
    public static const int ASSOCF_NOTRUNCATE = 0x00000020;
    public static const int ASSOCSTR_COMMAND = 1;
    public static const int ASSOCSTR_DEFAULTICON = 15;
    public static const int ASSOCSTR_FRIENDLYAPPNAME = 4;
    public static const int ASSOCSTR_FRIENDLYDOCNAME = 3;
    public static const int AW_SLIDE = 0x00040000;
    public static const int AW_ACTIVATE = 0x00020000;
    public static const int AW_BLEND = 0x00080000;
    public static const int AW_HIDE = 0x00010000;
    public static const int AW_CENTER = 0x00000010;
    public static const int AW_HOR_POSITIVE = 0x00000001;
    public static const int AW_HOR_NEGATIVE = 0x00000002;
    public static const int AW_VER_POSITIVE = 0x00000004;
    public static const int AW_VER_NEGATIVE = 0x00000008;
    public static const int BCM_FIRST = 0x1600;
    public static const int BCM_GETIDEALSIZE = BCM_FIRST + 0x1;
    public static const int BCM_GETIMAGELIST = BCM_FIRST + 0x3;
    public static const int BCM_GETNOTE = BCM_FIRST + 0xa;
    public static const int BCM_GETNOTELENGTH = BCM_FIRST + 0xb;
    public static const int BCM_SETIMAGELIST = BCM_FIRST + 0x2;
    public static const int BCM_SETNOTE = BCM_FIRST + 0x9;
    public static const int BDR_RAISEDOUTER = 0x0001;
    public static const int BDR_SUNKENOUTER = 0x0002;
    public static const int BDR_RAISEDINNER = 0x0004;
    public static const int BDR_SUNKENINNER = 0x0008;
    public static const int BDR_OUTER = 0x0003;
    public static const int BDR_INNER = 0x000c;
    public static const int BDR_RAISED = 0x0005;
    public static const int BDR_SUNKEN = 0x000a;
    public static const int BFFM_INITIALIZED = 0x1;
    public static const int BFFM_SETSELECTION = IsUnicode ? 0x467 : 0x466;
    public static const int BFFM_VALIDATEFAILED = IsUnicode ? 0x4 : 0x3;
    public static const int BFFM_VALIDATEFAILEDW = 0x4;
    public static const int BFFM_VALIDATEFAILEDA = 0x3;
    public static const int BF_ADJUST = 0x2000;
    public static const int BF_LEFT = 0x0001;
    public static const int BF_TOP = 0x0002;
    public static const int BF_RIGHT = 0x0004;
    public static const int BF_BOTTOM = 0x0008;
    public static const int BF_RECT = (BF_LEFT | BF_TOP | BF_RIGHT | BF_BOTTOM);
    public static const int BIF_EDITBOX = 0x10;
    public static const int BIF_NEWDIALOGSTYLE = 0x40;
    public static const int BIF_RETURNONLYFSDIRS = 0x1;
    public static const int BIF_VALIDATE = 0x20;
    public static const int BITSPIXEL = 0xc;
    public static const int BI_BITFIELDS = 3;
    public static const int BI_RGB = 0;
    public static const int BLACKNESS = 0x42;
    public static const int BLACK_BRUSH = 4;
    public static const int BUTTON_IMAGELIST_ALIGN_LEFT = 0;
    public static const int BUTTON_IMAGELIST_ALIGN_RIGHT = 1;
    public static const int BUTTON_IMAGELIST_ALIGN_CENTER = 4;
    public static const int BM_CLICK = 0xf5;
    public static const int BM_GETCHECK = 0xf0;
    public static const int BM_SETCHECK = 0xf1;
    public static const int BM_SETIMAGE = 0xf7;
    public static const int BM_SETSTYLE = 0xf4;
    public static const int BN_CLICKED = 0x0;
    public static const int BN_DOUBLECLICKED = 0x5;
    public static const int BPBF_COMPATIBLEBITMAP = 0;
    public static const int BPBF_DIB = 1;
    public static const int BPBF_TOPDOWNDIB = 2;
    public static const int BPBF_TOPDOWNMONODIB = 3;
    public static const int BPPF_ERASE = 0x0001;
    public static const int BPPF_NOCLIP = 0x0002;
    public static const int BPPF_NONCLIENT = 0x0004;
    public static const int BP_PUSHBUTTON = 1;
    public static const int BP_RADIOBUTTON = 2;
    public static const int BP_CHECKBOX = 3;
    public static const int BP_GROUPBOX = 4;
    public static const int BST_CHECKED = 0x1;
    public static const int BST_UNCHECKED = 0x0;
    public static const int BS_BITMAP = 0x80;
    public static const int BS_CENTER = 0x300;
    public static const int BS_CHECKBOX = 0x2;
    public static const int BS_COMMANDLINK =  0xe;
    public static const int BS_DEFPUSHBUTTON = 0x1;
    public static const int BS_FLAT = 0x8000;
    public static const int BS_GROUPBOX = 0x7;
    public static const int BS_ICON = 0x40;
    public static const int BS_LEFT = 0x100;
    public static const int BS_NOTIFY = 0x4000;
    public static const int BS_OWNERDRAW = 0xb;
    public static const int BS_PATTERN = 0x3;
    public static const int BS_PUSHBUTTON = 0x0;
    public static const int BS_PUSHLIKE = 0x1000;
    public static const int BS_RADIOBUTTON = 0x4;
    public static const int BS_RIGHT = 0x200;
    public static const int BS_SOLID = 0x0;
    public static const int BTNS_AUTOSIZE = 0x10;
    public static const int BTNS_BUTTON = 0x0;
    public static const int BTNS_CHECK = 0x2;
    public static const int BTNS_CHECKGROUP = 0x6;
    public static const int BTNS_DROPDOWN = 0x8;
    public static const int BTNS_GROUP = 0x4;
    public static const int BTNS_SEP = 0x1;
    public static const int BTNS_SHOWTEXT = 0x40;
    public static const int CBN_EDITCHANGE = 0x5;
    public static const int CBN_KILLFOCUS = 0x4;
    public static const int CBN_SELCHANGE = 0x1;
    public static const int CBN_SETFOCUS = 0x3;
    public static const int CBS_AUTOHSCROLL = 0x40;
    public static const int CBS_DROPDOWN = 0x2;
    public static const int CBS_DROPDOWNLIST = 0x3;
    public static const int CBS_CHECKEDNORMAL = 5;
    public static const int CBS_MIXEDNORMAL = 9;
    public static const int CBS_NOINTEGRALHEIGHT = 0x400;
    public static const int CBS_SIMPLE = 0x1;
    public static const int CBS_UNCHECKEDNORMAL = 1;
    public static const int CBS_CHECKEDDISABLED = 8;
    public static const int CBS_CHECKEDHOT = 6;
    public static const int CBS_CHECKEDPRESSED = 7;
    public static const int CBS_MIXEDDISABLED = 0;
    public static const int CBS_MIXEDHOT = 0;
    public static const int CBS_MIXEDPRESSED = 0;
    public static const int CBS_UNCHECKEDDISABLED = 4;
    public static const int CBS_UNCHECKEDHOT = 2;
    public static const int CBS_UNCHECKEDPRESSED = 3;
    public static const int CB_ADDSTRING = 0x143;
    public static const int CB_DELETESTRING = 0x144;
    public static const int CB_ERR = 0xffffffff;
    public static const int CB_ERRSPACE = 0xfffffffe;
    public static const int CB_FINDSTRINGEXACT = 0x158;
    public static const int CB_GETCOUNT = 0x146;
    public static const int CB_GETCURSEL = 0x147;
    public static const int CB_GETDROPPEDCONTROLRECT = 0x152;
    public static const int CB_GETDROPPEDSTATE = 0x157;
    public static const int CB_GETDROPPEDWIDTH = 0x015f;
    public static const int CB_GETEDITSEL = 0x140;
    public static const int CB_GETHORIZONTALEXTENT = 0x015d;
    public static const int CB_GETITEMHEIGHT = 0x154;
    public static const int CB_GETLBTEXT = 0x148;
    public static const int CB_GETLBTEXTLEN = 0x149;
    public static const int CB_INSERTSTRING = 0x14a;
    public static const int CB_LIMITTEXT = 0x141;
    public static const int CB_RESETCONTENT = 0x14b;
    public static const int CB_SELECTSTRING = 0x14d;
    public static const int CB_SETCURSEL = 0x14e;
    public static const int CB_SETDROPPEDWIDTH= 0x0160;
    public static const int CB_SETEDITSEL = 0x142;
    public static const int CB_SETHORIZONTALEXTENT = 0x015e;
    public static const int CB_SETITEMHEIGHT = 0x0153;
    public static const int CB_SHOWDROPDOWN = 0x14f;
    public static const int CBXS_NORMAL = 1;
    public static const int CBXS_HOT = 2;
    public static const int CBXS_PRESSED = 3;
    public static const int CBXS_DISABLED = 4;
    public static const int CCM_FIRST = 0x2000;
    public static const int CCM_SETBKCOLOR = 0x2001;
    public static const int CCM_SETVERSION = 0x2007;
    public static const int CCS_NODIVIDER = 0x40;
    public static const int CCS_NORESIZE = 0x4;
    public static const int CCS_VERT = 0x80;
    public static const int CC_ANYCOLOR = 0x100;
    public static const int CC_ENABLEHOOK = 0x10;
    public static const int CC_FULLOPEN = 0x2;
    public static const int CC_RGBINIT = 0x1;
    public static const int CDDS_POSTERASE = 0x00000004;
    public static const int CDDS_POSTPAINT = 0x00000002;
    public static const int CDDS_PREERASE = 0x00000003;
    public static const int CDDS_PREPAINT = 0x00000001;
    public static const int CDDS_ITEM = 0x00010000;
    public static const int CDDS_ITEMPOSTPAINT = CDDS_ITEM | CDDS_POSTPAINT;
    public static const int CDDS_ITEMPREPAINT = CDDS_ITEM | CDDS_PREPAINT;
    public static const int CDDS_SUBITEM = 0x00020000;
    public static const int CDDS_SUBITEMPOSTPAINT = CDDS_ITEMPOSTPAINT | CDDS_SUBITEM;
    public static const int CDDS_SUBITEMPREPAINT = CDDS_ITEMPREPAINT | CDDS_SUBITEM;
    public static const int CDIS_SELECTED = 0x0001;
    public static const int CDIS_GRAYED = 0x0002;
    public static const int CDIS_DISABLED = 0x0004;
    public static const int CDIS_CHECKED = 0x0008;
    public static const int CDIS_FOCUS = 0x0010;
    public static const int CDIS_DEFAULT = 0x0020;
    public static const int CDIS_HOT = 0x0040;
    public static const int CDIS_MARKED = 0x0080;
    public static const int CDIS_INDETERMINATE = 0x0100;
    public static const int CDM_FIRST = 0x0400 + 100;
    public static const int CDM_GETSPEC = CDM_FIRST;
    public static const int CDN_FIRST = -601;
    public static const int CDN_SELCHANGE = CDN_FIRST - 1;
    public static const int CDRF_DODEFAULT = 0x00000000;
    public static const int CDRF_DOERASE = 0x00000008;
    public static const int CDRF_NEWFONT = 0x00000002;
    public static const int CDRF_NOTIFYITEMDRAW = 0x00000020;
    public static const int CDRF_NOTIFYPOSTERASE = 0x00000040;
    public static const int CDRF_NOTIFYPOSTPAINT = 0x00000010;
    public static const int CDRF_NOTIFYSUBITEMDRAW = 0x00000020;
    public static const int CDRF_SKIPDEFAULT = 0x04;
    public static const int CDRF_SKIPPOSTPAINT = 0x00000100;
    public static const int CFE_AUTOCOLOR = 0x40000000;
    public static const int CFE_ITALIC = 0x2;
    public static const int CFE_STRIKEOUT = 0x8;
    public static const int CFE_UNDERLINE = 0x4;
    public static const int CFM_BOLD = 0x1;
    public static const int CFM_CHARSET = 0x8000000;
    public static const int CFM_COLOR = 0x40000000;
    public static const int CFM_FACE = 0x20000000;
    public static const int CFM_ITALIC = 0x2;
    public static const int CFM_SIZE = 0x80000000;
    public static const int CFM_STRIKEOUT = 0x8;
    public static const int CFM_UNDERLINE = 0x4;
    public static const int CFM_WEIGHT = 0x400000;
    public static const int CFS_POINT = 0x2;
    public static const int CFS_RECT = 0x1;
    public static const int CF_EFFECTS = 0x100;
    public static const int CF_INITTOLOGFONTSTRUCT = 0x40;
    public static const int CF_SCREENFONTS = 0x1;
    public static const int CF_TEXT = 0x1;
    public static const int CF_UNICODETEXT = 13;
    public static const int CF_USESTYLE = 0x80;
    public static const int CLR_DEFAULT = 0xff000000;
    public static const int CLR_INVALID = 0xffffffff;
    public static const int CLR_NONE = 0xffffffff;
    public static const int CLSCTX_INPROC_SERVER = 1;
    public static const int COLORONCOLOR = 0x3;
    public static const int COLOR_3DDKSHADOW = 0x15 | SYS_COLOR_INDEX_FLAG;
    public static const int COLOR_3DFACE = 0xf | SYS_COLOR_INDEX_FLAG;
    public static const int COLOR_3DHIGHLIGHT = 0x14 | SYS_COLOR_INDEX_FLAG;
    public static const int COLOR_3DHILIGHT = 0x14 | SYS_COLOR_INDEX_FLAG;
    public static const int COLOR_3DLIGHT = 0x16 | SYS_COLOR_INDEX_FLAG;
    public static const int COLOR_3DSHADOW = 0x10 | SYS_COLOR_INDEX_FLAG;
    public static const int COLOR_ACTIVECAPTION = 0x2 | SYS_COLOR_INDEX_FLAG;
    public static const int COLOR_BTNFACE = 0xf | SYS_COLOR_INDEX_FLAG;
    public static const int COLOR_BTNHIGHLIGHT = 0x14 | SYS_COLOR_INDEX_FLAG;
    public static const int COLOR_BTNSHADOW = 0x10 | SYS_COLOR_INDEX_FLAG;
    public static const int COLOR_BTNTEXT = 0x12 | SYS_COLOR_INDEX_FLAG;
    public static const int COLOR_CAPTIONTEXT = 0x9 | SYS_COLOR_INDEX_FLAG;
    public static const int COLOR_GRADIENTACTIVECAPTION = 0x1b | SYS_COLOR_INDEX_FLAG;
    public static const int COLOR_GRADIENTINACTIVECAPTION = 0x1c | SYS_COLOR_INDEX_FLAG;
    public static const int COLOR_GRAYTEXT = 0x11 | SYS_COLOR_INDEX_FLAG;
    public static const int COLOR_HIGHLIGHT = 0xd | SYS_COLOR_INDEX_FLAG;
    public static const int COLOR_HIGHLIGHTTEXT = 0xe | SYS_COLOR_INDEX_FLAG;
    public static const int COLOR_HOTLIGHT = 26 | SYS_COLOR_INDEX_FLAG;
    public static const int COLOR_INACTIVECAPTION = 0x3 | SYS_COLOR_INDEX_FLAG;
    public static const int COLOR_INACTIVECAPTIONTEXT = 0x13 | SYS_COLOR_INDEX_FLAG;
    public static const int COLOR_INFOBK = 0x18 | SYS_COLOR_INDEX_FLAG;
    public static const int COLOR_INFOTEXT = 0x17 | SYS_COLOR_INDEX_FLAG;
    public static const int COLOR_MENU = 0x4 | SYS_COLOR_INDEX_FLAG;
    public static const int COLOR_MENUTEXT = 0x7 | SYS_COLOR_INDEX_FLAG;
    public static const int COLOR_SCROLLBAR = 0x0 | SYS_COLOR_INDEX_FLAG;
    public static const int COLOR_WINDOW = 0x5 | SYS_COLOR_INDEX_FLAG;
    public static const int COLOR_WINDOWFRAME = 0x6 | SYS_COLOR_INDEX_FLAG;
    public static const int COLOR_WINDOWTEXT = 0x8 | SYS_COLOR_INDEX_FLAG;
    public static const int COMPLEXREGION = 0x3;
    public static const int CP_ACP = 0x0;
    public static const int CP_UTF8 = 65001;
    public static const int CP_DROPDOWNBUTTON = 1;
    public static const int CP_INSTALLED = 0x1;
    public static const int CS_BYTEALIGNWINDOW = 0x2000;
    public static const int CS_DBLCLKS = 0x8;
    public static const int CS_DROPSHADOW = 0x20000;
    public static const int CS_GLOBALCLASS = 0x4000;
    public static const int CS_HREDRAW = 0x2;
    public static const int CS_VREDRAW = 0x1;
    public static const int CW_USEDEFAULT = 0x80000000;
    public static const TCHAR[] DATETIMEPICK_CLASS = "SysDateTimePick32"; //$NON-NLS-1$
    public static const int DATE_LONGDATE = 0x00000002;
    public static const int DATE_SHORTDATE = 0x00000001;
    public static const int DATE_YEARMONTH = 0x00000008; //#if(WINVER >= 0x0500)
    public static const int DCX_CACHE = 0x2;
    public static const int DCX_CLIPCHILDREN = 0x8;
    public static const int DCX_CLIPSIBLINGS = 0x10;
    public static const int DEFAULT_CHARSET = 0x1;
    public static const int DEFAULT_GUI_FONT = 0x11;
    public static const int DFCS_BUTTONCHECK = 0x0;
    public static const int DFCS_CHECKED = 0x400;
    public static const int DFCS_FLAT = 0x4000;
    public static const int DFCS_INACTIVE = 0x100;
    public static const int DFCS_PUSHED = 0x200;
    public static const int DFCS_SCROLLDOWN = 0x1;
    public static const int DFCS_SCROLLLEFT = 0x2;
    public static const int DFCS_SCROLLRIGHT = 0x3;
    public static const int DFCS_SCROLLUP = 0x0;
    public static const int DFC_BUTTON = 0x4;
    public static const int DFC_SCROLL = 0x3;
    public static const int DIB_RGB_COLORS = 0x0;
    public static const int DISP_E_EXCEPTION = 0x80020009;
    public static const int DI_NORMAL = 0x3;
    public static const int DI_NOMIRROR = 0x10;
    public static const int DLGC_BUTTON = 0x2000;
    public static const int DLGC_HASSETSEL = 0x8;
    public static const int DLGC_STATIC = 0x100;
    public static const int DLGC_WANTALLKEYS = 0x4;
    public static const int DLGC_WANTARROWS = 0x1;
    public static const int DLGC_WANTCHARS = 0x80;
    public static const int DLGC_WANTTAB = 0x2;
    public static const int DM_SETDEFID = 0x401;
    public static const int DSS_DISABLED = 0x20;
    public static const int DSTINVERT = 0x550009;
    public static const int DST_BITMAP = 0x4;
    public static const int DST_ICON = 0x3;
    public static const int DT_BOTTOM = 0x8;
    public static const int DT_CALCRECT = 0x400;
    public static const int DT_CENTER = 0x1;
    public static const int DT_EDITCONTROL = 0x2000;
    public static const int DT_EXPANDTABS = 0x40;
    public static const int DT_ENDELLIPSIS = 32768;
    public static const int DT_HIDEPREFIX = 0x100000;
    public static const int DT_LEFT = 0x0;
    public static const int DT_NOPREFIX = 0x800;
    public static const int DT_RASPRINTER = 0x2;
    public static const int DT_RIGHT = 0x2;
    public static const int DT_SINGLELINE = 0x20;
    public static const int DT_TOP = 0;
    public static const int DT_VCENTER = 4;
    public static const int DT_WORDBREAK = 0x10;
    public static const int DTM_FIRST = 0x1000;
    public static const int DTM_GETSYSTEMTIME = DTM_FIRST + 1;
    public static const int DTM_SETFORMAT = IsUnicode ? DTM_FIRST + 50 : DTM_FIRST + 5;
    public static const int DTM_SETSYSTEMTIME = DTM_FIRST + 2;
    public static const int DTN_FIRST = 0xFFFFFD08;
    public static const int DTN_DATETIMECHANGE = DTN_FIRST + 1;
    public static const int DTS_LONGDATEFORMAT = 0x0004;
    public static const int DTS_SHORTDATECENTURYFORMAT = 0x000C;
    public static const int DTS_SHORTDATEFORMAT = 0x0000;
    public static const int DTS_TIMEFORMAT = 0x0009;
    public static const int DTS_UPDOWN = 0x0001;
    public static const int E_POINTER = 0x80004003;
    public static const int EBP_NORMALGROUPBACKGROUND = 5;
    public static const int EBP_NORMALGROUPCOLLAPSE = 6;
    public static const int EBP_NORMALGROUPEXPAND = 7;
    public static const int EBP_NORMALGROUPHEAD = 8;
    public static const int EBNGC_NORMAL = 1;
    public static const int EBNGC_HOT = 2;
    public static const int EBNGC_PRESSED = 3;
    public static const int EBP_HEADERBACKGROUND = 1;
    public static const int EC_LEFTMARGIN = 0x1;
    public static const int EC_RIGHTMARGIN = 0x2;
    public static const int ECOOP_AND = 0x3;
    public static const int ECOOP_OR = 0x2;
    public static const int ECO_AUTOHSCROLL = 0x80;
    public static const int EDGE_RAISED = (BDR_RAISEDOUTER | BDR_RAISEDINNER);
    public static const int EDGE_SUNKEN = (BDR_SUNKENOUTER | BDR_SUNKENINNER);
    public static const int EDGE_ETCHED = (BDR_SUNKENOUTER | BDR_RAISEDINNER);
    public static const int EDGE_BUMP = (BDR_RAISEDOUTER | BDR_SUNKENINNER);
    public static const int EM_CANUNDO = 0xc6;
    public static const int EM_CHARFROMPOS = 0xd7;
    public static const int EM_DISPLAYBAND = 0x433;
    public static const int EM_GETFIRSTVISIBLELINE = 0xce;
    public static const int EM_GETLIMITTEXT = 0xd5;
    public static const int EM_GETLINE = 0xc4;
    public static const int EM_GETLINECOUNT = 0xba;
    public static const int EM_GETMARGINS = 0xd4;
    public static const int EM_GETPASSWORDCHAR = 0xd2;
    public static const int EM_GETSCROLLPOS = 0x4dd;
    public static const int EM_GETSEL = 0xb0;
    public static const int EM_LIMITTEXT = 0xc5;
    public static const int EM_LINEFROMCHAR = 0xc9;
    public static const int EM_LINEINDEX = 0xbb;
    public static const int EM_LINELENGTH = 0xc1;
    public static const int EM_LINESCROLL = 0xb6;
    public static const int EM_POSFROMCHAR = 0xd6;
    public static const int EM_REPLACESEL = 0xc2;
    public static const int EM_SCROLLCARET = 0xb7;
    public static const int EM_SETBKGNDCOLOR = 0x443;
    public static const int EM_SETLIMITTEXT = 0xc5;
    public static const int EM_SETMARGINS = 211;
    public static const int EM_SETOPTIONS = 0x44d;
    public static const int EM_SETPARAFORMAT = 0x447;
    public static const int EM_SETPASSWORDCHAR = 0xcc;
    public static const int EM_SETCUEBANNER = 0x1500 + 1;
    public static const int EM_SETREADONLY = 0xcf;
    public static const int EM_SETSEL = 0xb1;
    public static const int EM_SETTABSTOPS = 0xcb;
    public static const int EM_UNDO = 199;
    public static const int EN_ALIGN_LTR_EC = 0x0700;
    public static const int EN_ALIGN_RTL_EC = 0x0701;
    public static const int EN_CHANGE = 0x300;
    public static const int EP_EDITTEXT = 1;
    public static const int ERROR_NO_MORE_ITEMS = 0x103;
    public static const int ESB_DISABLE_BOTH = 0x3;
    public static const int ESB_ENABLE_BOTH = 0x0;
    public static const int ES_AUTOHSCROLL = 0x80;
    public static const int ES_AUTOVSCROLL = 0x40;
    public static const int ES_CENTER = 0x1;
    public static const int ES_MULTILINE = 0x4;
    public static const int ES_NOHIDESEL = 0x100;
    public static const int ES_PASSWORD = 0x20;
    public static const int ES_READONLY = 0x800;
    public static const int ES_RIGHT = 0x2;
    public static const int ETO_CLIPPED = 0x4;
    public static const int ETS_NORMAL = 1;
    public static const int ETS_HOT = 2;
    public static const int ETS_SELECTED = 3;
    public static const int ETS_DISABLED = 4;
    public static const int ETS_FOCUSED = 5;
    public static const int ETS_READONLY = 6;
    public static const int EVENT_OBJECT_FOCUS = 0x8005;
    public static const int EVENT_OBJECT_LOCATIONCHANGE = 0x800B;
//  public static const int EVENT_OBJECT_SELECTION = 0x8006;
    public static const int EVENT_OBJECT_SELECTIONWITHIN = 0x8009;
    public static const int EVENT_OBJECT_VALUECHANGE = 0x800E;
    public static const int FALT = 0x10;
    public static const int FCONTROL = 0x8;
    public static const int FE_FONTSMOOTHINGCLEARTYPE = 0x0002;
    public static const int FEATURE_DISABLE_NAVIGATION_SOUNDS = 21;
    public static const int FILE_ATTRIBUTE_NORMAL = 0x00000080;
    public static const int FNERR_INVALIDFILENAME = 0x3002;
    public static const int FNERR_BUFFERTOOSMALL = 0x3003;
    public static const int FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x00000100;
    public static const int FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000;
    public static const int FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200;
    public static const int FR_PRIVATE = 0x10;
    public static const int FSHIFT = 0x4;
    public static const int FVIRTKEY = 0x1;
    public static const int GBS_NORMAL = 1;
    public static const int GBS_DISABLED = 2;
    public static const int GCS_COMPSTR = 0x8;
    public static const int GCS_RESULTSTR = 0x800;
    public static const int GDT_VALID = 0;
    public static const int GET_FEATURE_FROM_PROCESS = 0x2;
    public static const int GLPS_CLOSED = 1;
    public static const int GLPS_OPENED = 2;
    public static const int GM_ADVANCED = 2;
    public static const int GMDI_USEDISABLED = 0x1;
    public static const int GMEM_FIXED = 0x0;
    public static const int GMEM_ZEROINIT = 0x40;
    public static const int GN_CONTEXTMENU = 1000;
    public static const int GPTR = 0x40;
    public static const int GRADIENT_FILL_RECT_H = 0x0;
    public static const int GRADIENT_FILL_RECT_V = 0x1;
    public static const int GTL_NUMBYTES = 0x10;
    public static const int GTL_NUMCHARS = 0x8;
    public static const int GTL_PRECISE = 0x2;
    public static const int GT_DEFAULT = 0x0;
    public static const int GUI_16BITTASK = 0x20;
    public static const int GUI_CARETBLINKING = 0x1;
    public static const int GUI_INMENUMODE = 0x4;
    public static const int GUI_INMOVESIZE = 0x2;
    public static const int GUI_POPUPMENUMODE = 0x10;
    public static const int GUI_SYSTEMMENUMODE = 0x8;
    public static const int GWL_EXSTYLE = 0xffffffec;
    public static const int GWL_ID = -12;
    public static const int GWL_HWNDPARENT = -8;
    public static const int GWL_STYLE = 0xfffffff0;
    public static const int GWL_USERDATA = 0xffffffeb;
    public static const int GWL_WNDPROC = 0xfffffffc;
    public static const int GWLP_ID = -12;
    public static const int GWLP_HWNDPARENT = -8;
    public static const int GWLP_USERDATA = 0xffffffeb;
    public static const int GWLP_WNDPROC = 0xfffffffc;
    public static const int GW_CHILD = 0x5;
    public static const int GW_HWNDFIRST = 0x0;
    public static const int GW_HWNDLAST = 0x1;
    public static const int GW_HWNDNEXT = 0x2;
    public static const int GW_HWNDPREV = 0x3;
    public static const int GW_OWNER = 0x4;
    public static const HBITMAP HBMMENU_CALLBACK = cast(HBITMAP) 0xffffffff;
    public static const int HCBT_CREATEWND = 3;
    public static const int HCF_HIGHCONTRASTON = 0x1;
    public static const int HDF_BITMAP = 0x2000;
    public static const int HDF_BITMAP_ON_RIGHT = 0x1000;
    public static const int HDF_CENTER = 2;
    public static const int HDF_JUSTIFYMASK = 0x3;
    public static const int HDF_IMAGE = 0x0800;
    public static const int HDF_LEFT = 0;
    public static const int HDF_RIGHT = 1;
    public static const int HDF_SORTUP = 0x0400;
    public static const int HDF_SORTDOWN = 0x0200;
    public static const int HDI_BITMAP = 0x0010;
    public static const int HDI_IMAGE = 32;
    public static const int HDI_ORDER = 0x80;
    public static const int HDI_TEXT = 0x2;
    public static const int HDI_WIDTH = 0x1;
    public static const int HDI_FORMAT = 0x4;
    public static const int HDM_FIRST = 0x1200;
    public static const int HDM_DELETEITEM = HDM_FIRST + 2;
    public static const int HDM_GETBITMAPMARGIN = HDM_FIRST + 21;
    public static const int HDM_GETITEMCOUNT = 0x1200;
    public static const int HDM_GETITEMA = HDM_FIRST + 3;
    public static const int HDM_GETITEMW = HDM_FIRST + 11;
    public static const int HDM_GETITEM = IsUnicode ? HDM_GETITEMW : HDM_GETITEMA;
    public static const int HDM_GETITEMRECT = HDM_FIRST + 7;
    public static const int HDM_GETORDERARRAY = HDM_FIRST + 17;
    public static const int HDM_HITTEST = HDM_FIRST + 6;
    public static const int HDM_INSERTITEMA = HDM_FIRST + 1;
    public static const int HDM_INSERTITEMW = HDM_FIRST + 10;
    public static const int HDM_INSERTITEM = IsUnicode ? HDM_INSERTITEMW : HDM_INSERTITEMA;
    public static const int HDM_LAYOUT = HDM_FIRST + 5;
    public static const int HDM_ORDERTOINDEX = HDM_FIRST + 15;
    public static const int HDM_SETIMAGELIST = HDM_FIRST + 8;
    public static const int HDM_SETITEMA = HDM_FIRST + 4;
    public static const int HDM_SETITEMW = HDM_FIRST + 12;
    public static const int HDM_SETITEM = IsUnicode ? HDM_SETITEMW : HDM_SETITEMA;
    public static const int HDM_SETORDERARRAY = HDM_FIRST + 18;
    public static const int HDN_FIRST = 0xfffffed4;
    public static const int HDN_BEGINDRAG = HDN_FIRST - 10;
    public static const int HDN_BEGINTRACK = IsUnicode ? 0xfffffeba : 0xfffffece;
    public static const int HDN_BEGINTRACKW = 0xfffffeba;
    public static const int HDN_BEGINTRACKA = 0xfffffece;
    public static const int HDN_DIVIDERDBLCLICKA = HDN_FIRST - 5;
    public static const int HDN_DIVIDERDBLCLICKW = HDN_FIRST - 25;
    public static const int HDN_DIVIDERDBLCLICK = IsUnicode ? HDN_DIVIDERDBLCLICKW : HDN_DIVIDERDBLCLICKA;
    public static const int HDN_ENDDRAG = HDN_FIRST - 11;
    public static const int HDN_ITEMCHANGED = IsUnicode ? 0xfffffebf : 0xfffffed3;
    public static const int HDN_ITEMCHANGEDW = 0xfffffebf;
    public static const int HDN_ITEMCHANGEDA = 0xfffffed3;
    public static const int HDN_ITEMCHANGINGW = HDN_FIRST - 20;
    public static const int HDN_ITEMCHANGINGA = HDN_FIRST;
    public static const int HDN_ITEMCLICKW = HDN_FIRST - 22;
    public static const int HDN_ITEMCLICKA = HDN_FIRST - 2;
    public static const int HDN_ITEMDBLCLICKW = HDN_FIRST - 23;
    public static const int HDN_ITEMDBLCLICKA = HDN_FIRST - 3;
    public static const int HDN_ITEMDBLCLICK = IsUnicode ? HDN_ITEMDBLCLICKW : HDN_ITEMDBLCLICKA;
    public static const int HDS_BUTTONS = 0x2;
    public static const int HDS_DRAGDROP = 0x0040;
    public static const int HDS_FULLDRAG = 0x80;
    public static const int HDS_HIDDEN = 0x8;
//  public static const int HEAP_ZERO_MEMORY = 0x8;
    public static const int HELPINFO_MENUITEM = 0x2;
    public static const int HHT_ONDIVIDER = 0x4;
    public static const int HHT_ONDIVOPEN = 0x8;
    public static const int HICF_ARROWKEYS = 0x2;
    public static const int HINST_COMMCTRL = 0xffffffff;
    public static const int HKEY_CLASSES_ROOT = 0x80000000;
    public static const int HKEY_CURRENT_USER = 0x80000001;
    public static const int HKEY_LOCAL_MACHINE = 0x80000002;
    public static const int HORZRES = 0x8;
    public static const int HTBORDER = 0x12;
    public static const int HTCAPTION = 0x2;
    public static const int HTCLIENT = 0x1;
    public static const int HTERROR = -2;
    public static const int HTHSCROLL = 0x6;
    public static const int HTMENU = 0x5;
    public static const int HTNOWHERE = 0x0;
    public static const int HTSYSMENU = 0x3;
    public static const int HTTRANSPARENT = 0xffffffff;
    public static const int HTVSCROLL = 0x7;
    public static const int HWND_BOTTOM = 0x1;
    public static const int HWND_TOP = 0x0;
    public static const int HWND_TOPMOST = 0xffffffff;
    public static const int HWND_NOTOPMOST = -2;
    public static const int ICC_COOL_CLASSES = 0x400;
    public static const int ICC_DATE_CLASSES = 0x100;
    public static const int ICM_NOTOPEN = 0x0;
    public static const int ICON_BIG = 0x1;
    public static const int ICON_SMALL = 0x0;
    public static const int I_IMAGECALLBACK = -1;
    public static const int I_IMAGENONE = -2;
    public static const int IDABORT = 0x3;
    public static const int IDANI_CAPTION = 3;
    public static const int IDB_STD_SMALL_COLOR = 0x0;
    public static const int IDC_APPSTARTING = 0x7f8a;
    public static const int IDC_ARROW = 0x7f00;
    public static const int IDC_CROSS = 0x7f03;
    public static const TCHAR* IDC_HAND = cast(TCHAR*) 0x7f89;
    public static const int IDC_HELP = 0x7f8b;
    public static const int IDC_IBEAM = 0x7f01;
    public static const int IDC_NO = 0x7f88;
    public static const int IDC_SIZE = 0x7f80;
    public static const int IDC_SIZEALL = 0x7f86;
    public static const int IDC_SIZENESW = 0x7f83;
    public static const int IDC_SIZENS = 0x7f85;
    public static const int IDC_SIZENWSE = 0x7f82;
    public static const int IDC_SIZEWE = 0x7f84;
    public static const int IDC_UPARROW = 0x7f04;
    public static const int IDC_WAIT = 0x7f02;
    public static const int IDI_APPLICATION = 32512;
    public static const int IDNO = 0x7;
    public static const int IDOK = 0x1;
    public static const int IDRETRY = 0x4;
    public static const int IDYES = 0x6;
    public static const int ILC_COLOR = 0x0;
    public static const int ILC_COLOR16 = 0x10;
    public static const int ILC_COLOR24 = 0x18;
    public static const int ILC_COLOR32 = 0x20;
    public static const int ILC_COLOR4 = 0x4;
    public static const int ILC_COLOR8 = 0x8;
    public static const int ILC_MASK = 0x1;
    public static const int ILC_MIRROR = 0x2000;
    public static const int ILD_NORMAL = 0x0;
    public static const int ILD_SELECTED = 0x4;
    public static const int IMAGE_BITMAP = 0x0;
    public static const int IMAGE_CURSOR = 0x2;
    public static const int IMAGE_ICON = 0x1;
    public static const int IME_CMODE_FULLSHAPE = 0x8;
    public static const int IME_CMODE_KATAKANA = 0x2;
    public static const int IME_CMODE_NATIVE = 0x1;
    public static const int IME_CMODE_ROMAN = 0x10;
    public static const int INFINITE = 0xffffffff;
    public static const int INPUT_KEYBOARD = 1;
    public static const int INPUT_MOUSE = 0;
    public static const int INTERNET_OPTION_END_BROWSER_SESSION = 42;
    public static const int KEY_ENUMERATE_SUB_KEYS = 0x8;
    public static const int KEY_NOTIFY = 0x10;
    public static const int KEY_QUERY_VALUE = 0x1;
    public static const int KEY_READ = 0x20019;
    public static const int KEYEVENTF_KEYUP = 0x0002;
    public static const int L_MAX_URL_LENGTH = 2084;
//  public static const int LANG_KOREAN = 0x12;
    public static const int LANG_NEUTRAL = 0x0;
    public static const int LANG_USER_DEFAULT = 1 << 10;
    public static const int LAYOUT_RTL = 0x1;
    public static const int LBN_DBLCLK = 0x2;
    public static const int LBN_SELCHANGE = 0x1;
    public static const int LBS_EXTENDEDSEL = 0x800;
    public static const int LBS_MULTIPLESEL = 0x8;
    public static const int LBS_NOINTEGRALHEIGHT = 0x100;
    public static const int LBS_NOTIFY = 0x1;
    public static const int LB_ADDSTRING = 0x180;
    public static const int LB_DELETESTRING = 0x182;
    public static const int LB_ERR = 0xffffffff;
    public static const int LB_ERRSPACE = 0xfffffffe;
    public static const int LB_FINDSTRINGEXACT = 0x1a2;
    public static const int LB_GETCARETINDEX = 0x19f;
    public static const int LB_GETCOUNT = 0x18b;
    public static const int LB_GETCURSEL = 0x188;
    public static const int LB_GETHORIZONTALEXTENT = 0x193;
    public static const int LB_GETITEMHEIGHT = 0x1a1;
    public static const int LB_GETITEMRECT = 0x198;
    public static const int LB_GETSEL = 0x187;
    public static const int LB_GETSELCOUNT = 0x190;
    public static const int LB_GETSELITEMS = 0x191;
    public static const int LB_GETTEXT = 0x189;
    public static const int LB_GETTEXTLEN = 0x18a;
    public static const int LB_GETTOPINDEX = 0x18e;
    public static const int LB_INITSTORAGE = 0x1a8;
    public static const int LB_INSERTSTRING = 0x181;
    public static const int LB_RESETCONTENT = 0x184;
    public static const int LB_SELITEMRANGE = 0x19b;
    public static const int LB_SELITEMRANGEEX = 0x183;
    public static const int LB_SETCARETINDEX = 0x19e;
    public static const int LB_SETCURSEL = 0x186;
    public static const int LB_SETHORIZONTALEXTENT = 0x194;
    public static const int LB_SETSEL = 0x185;
    public static const int LB_SETTOPINDEX = 0x197;
    public static const int LF_FACESIZE = 32;
    public static const int LGRPID_ARABIC = 0xd;
    public static const int LGRPID_HEBREW = 0xc;
    public static const int LGRPID_INSTALLED = 1;
    public static const int LIF_ITEMINDEX = 0x1;
    public static const int LIF_STATE = 0x2;
    public static const int LIS_FOCUSED = 0x1;
    public static const int LIS_ENABLED = 0x2;
    public static const int LISS_HOT = 0x2;
    public static const int LISS_SELECTED = 0x3;
    public static const int LISS_SELECTEDNOTFOCUS = 0x5;
    public static const int LM_GETIDEALHEIGHT = 0x701;
    public static const int LM_SETITEM = 0x702;
    public static const int LM_GETITEM = 0x703;
    public static const int LCID_SUPPORTED = 0x2;
    public static const int LOCALE_IDEFAULTANSICODEPAGE = 0x1004;
    public static const int LOCALE_IDATE = 0x00000021;
    public static const int LOCALE_ITIME = 0x00000023;
    public static const int LOCALE_RETURN_NUMBER = 0x20000000; // #if(WINVER >= 0x0400)
    public static const int LOCALE_S1159 = 0x00000028;
    public static const int LOCALE_S2359 = 0x00000029;
    public static const int LOCALE_SDECIMAL = 14;
    public static const int LOCALE_SISO3166CTRYNAME = 0x5a;
    public static const int LOCALE_SISO639LANGNAME = 0x59;
    public static const int LOCALE_SLONGDATE = 0x00000020;
    public static const int LOCALE_SSHORTDATE = 0x0000001F;
    public static const int LOCALE_STIMEFORMAT = 0x00001003;
    public static const int LOCALE_SYEARMONTH = 0x00001006;  // #if(WINVER >= 0x0500)
    public static const int LOCALE_SDAYNAME1    = 0x0000002A;   // long name for Monday
    public static const int LOCALE_SDAYNAME2    = 0x0000002B;   // long name for Tuesday
    public static const int LOCALE_SDAYNAME3    = 0x0000002C;   // long name for Wednesday
    public static const int LOCALE_SDAYNAME4    = 0x0000002D;   // long name for Thursday
    public static const int LOCALE_SDAYNAME5    = 0x0000002E;   // long name for Friday
    public static const int LOCALE_SDAYNAME6    = 0x0000002F;   // long name for Saturday
    public static const int LOCALE_SDAYNAME7    = 0x00000030;   // long name for Sunday
    public static const int LOCALE_SMONTHNAME1  = 0x00000038;   // long name for January
    public static const int LOCALE_SMONTHNAME2  = 0x00000039;   // long name for February
    public static const int LOCALE_SMONTHNAME3  = 0x0000003A;   // long name for March
    public static const int LOCALE_SMONTHNAME4  = 0x0000003B;   // long name for April
    public static const int LOCALE_SMONTHNAME5  = 0x0000003C;   // long name for May
    public static const int LOCALE_SMONTHNAME6  = 0x0000003D;   // long name for June
    public static const int LOCALE_SMONTHNAME7  = 0x0000003E;   // long name for July
    public static const int LOCALE_SMONTHNAME8  = 0x0000003F;   // long name for August
    public static const int LOCALE_SMONTHNAME9  = 0x00000040;   // long name for September
    public static const int LOCALE_SMONTHNAME10 = 0x00000041;   // long name for October
    public static const int LOCALE_SMONTHNAME11 = 0x00000042;   // long name for November
    public static const int LOCALE_SMONTHNAME12 = 0x00000043;   // long name for December
    public static const int LOCALE_USER_DEFAULT = 1024;
    public static const int LOGPIXELSX = 0x58;
    public static const int LOGPIXELSY = 0x5a;
    public static const TCHAR* LPSTR_TEXTCALLBACK = cast(TCHAR*)0xffffffff;
    public static const int LR_DEFAULTCOLOR = 0x0;
    public static const int LR_SHARED = 0x8000;
    public static const int LVCFMT_BITMAP_ON_RIGHT = 0x1000;
    public static const int LVCFMT_CENTER = 0x2;
    public static const int LVCFMT_IMAGE = 0x800;
    public static const int LVCFMT_LEFT = 0x0;
    public static const int LVCFMT_RIGHT = 0x1;
    public static const int LVCF_FMT = 0x1;
    public static const int LVCF_IMAGE = 0x10;
    public static const int LVCFMT_JUSTIFYMASK = 0x3;
    public static const int LVCF_TEXT = 0x4;
    public static const int LVCF_WIDTH = 0x2;
    public static const int LVHT_ONITEM = 0xe;
    public static const int LVHT_ONITEMICON = 0x2;
    public static const int LVHT_ONITEMLABEL = 0x4;
    public static const int LVHT_ONITEMSTATEICON = 0x8;
    public static const int LVIF_IMAGE = 0x2;
    public static const int LVIF_INDENT = 0x10;
    public static const int LVIF_STATE = 0x8;
    public static const int LVIF_TEXT = 0x1;
    public static const int LVIR_BOUNDS = 0x0;
    public static const int LVIR_ICON = 0x1;
    public static const int LVIR_LABEL = 0x2;
    public static const int LVIR_SELECTBOUNDS = 0x3;
    public static const int LVIS_DROPHILITED = 0x8;
    public static const int LVIS_FOCUSED = 0x1;
    public static const int LVIS_SELECTED = 0x2;
    public static const int LVIS_STATEIMAGEMASK = 0xf000;
    public static const int LVM_FIRST = 0x1000;
    public static const int LVM_APPROXIMATEVIEWRECT = 0x1040;
    public static const int LVM_CREATEDRAGIMAGE = LVM_FIRST + 33;
    public static const int LVM_DELETEALLITEMS = 0x1009;
    public static const int LVM_DELETECOLUMN = 0x101c;
    public static const int LVM_DELETEITEM = 0x1008;
    public static const int LVM_ENSUREVISIBLE = 0x1013;
    public static const int LVM_GETBKCOLOR = 0x1000;
    public static const int LVM_GETCOLUMN = IsUnicode ? 0x105f : 0x1019;
    public static const int LVM_GETCOLUMNORDERARRAY = LVM_FIRST + 59;
    public static const int LVM_GETCOLUMNWIDTH = 0x101d;
    public static const int LVM_GETCOUNTPERPAGE = 0x1028;
    public static const int LVM_GETEXTENDEDLISTVIEWSTYLE = 0x1037;
    public static const int LVM_GETHEADER = 0x101f;
    public static const int LVM_GETIMAGELIST = 0x1002;
    public static const int LVM_GETITEM = IsUnicode ? 0x104b : 0x1005;
    public static const int LVM_GETITEMW = 0x104b;
    public static const int LVM_GETITEMA = 0x1005;
    public static const int LVM_GETITEMCOUNT = 0x1004;
    public static const int LVM_GETITEMRECT = 0x100e;
    public static const int LVM_GETITEMSTATE = 0x102c;
    public static const int LVM_GETNEXTITEM = 0x100c;
    public static const int LVM_GETSELECTEDCOLUMN = LVM_FIRST + 174;
    public static const int LVM_GETSELECTEDCOUNT = 0x1032;
    public static const int LVM_GETSTRINGWIDTH = IsUnicode ? 0x1057 : 0x1011;
    public static const int LVM_GETSUBITEMRECT = 0x1038;
    public static const int LVM_GETTEXTCOLOR = 0x1023;
    public static const int LVM_GETTOOLTIPS = 0x104e;
    public static const int LVM_GETTOPINDEX = 0x1027;
    public static const int LVM_HITTEST = 0x1012;
    public static const int LVM_INSERTCOLUMN = IsUnicode ? 0x1061 : 0x101b;
    public static const int LVM_INSERTITEM = IsUnicode ? 0x104d : 0x1007;
    public static const int LVM_REDRAWITEMS = LVM_FIRST + 21;
    public static const int LVM_SCROLL = 0x1014;
    public static const int LVM_SETBKCOLOR = 0x1001;
    public static const int LVM_SETCALLBACKMASK = LVM_FIRST + 11;
    public static const int LVM_SETCOLUMN = IsUnicode ? 0x1060 : 0x101a;
    public static const int LVM_SETCOLUMNORDERARRAY = LVM_FIRST + 58;
    public static const int LVM_SETCOLUMNWIDTH = 0x101e;
    public static const int LVM_SETEXTENDEDLISTVIEWSTYLE = 0x1036;
    public static const int LVM_SETIMAGELIST = 0x1003;
    public static const int LVM_SETITEM = IsUnicode ? 0x104c : 0x1006;
    public static const int LVM_SETITEMCOUNT = LVM_FIRST + 47;
    public static const int LVM_SETITEMSTATE = 0x102b;
    public static const int LVM_SETSELECTIONMARK = LVM_FIRST + 67;
    public static const int LVM_SETSELECTEDCOLUMN = LVM_FIRST + 140;
    public static const int LVM_SETTEXTBKCOLOR = 0x1026;
    public static const int LVM_SETTEXTCOLOR = 0x1024;
    public static const int LVNI_FOCUSED = 0x1;
    public static const int LVNI_SELECTED = 0x2;
    public static const int LVN_BEGINDRAG = 0xffffff93;
    public static const int LVN_BEGINRDRAG = 0xffffff91;
    public static const int LVN_COLUMNCLICK = 0xffffff94;
    public static const int LVN_FIRST = 0xffffff9c;
    public static const int LVN_GETDISPINFOA = LVN_FIRST - 50;
    public static const int LVN_GETDISPINFOW = LVN_FIRST - 77;
    public static const int LVN_ITEMACTIVATE = 0xffffff8e;
    public static const int LVN_ITEMCHANGED = 0xffffff9b;
    public static const int LVN_MARQUEEBEGIN = 0xffffff64;
    public static const int LVN_ODFINDITEMA = LVN_FIRST - 52;
    public static const int LVN_ODFINDITEMW = LVN_FIRST - 79;
    public static const int LVN_ODSTATECHANGED = LVN_FIRST - 15;
    public static const int LVP_LISTITEM = 1;
    public static const int LVSCW_AUTOSIZE = 0xffffffff;
    public static const int LVSCW_AUTOSIZE_USEHEADER = 0xfffffffe;
    public static const int LVSICF_NOINVALIDATEALL = 0x1;
    public static const int LVSICF_NOSCROLL = 0x2;
    public static const int LVSIL_SMALL = 0x1;
    public static const int LVSIL_STATE = 0x2;
    public static const int LVS_EX_DOUBLEBUFFER = 0x10000;
    public static const int LVS_EX_FULLROWSELECT = 0x20;
    public static const int LVS_EX_GRIDLINES = 0x1;
    public static const int LVS_EX_HEADERDRAGDROP = 0x10;
    public static const int LVS_EX_LABELTIP = 0x4000;
    public static const int LVS_EX_ONECLICKACTIVATE = 0x40;
    public static const int LVS_EX_SUBITEMIMAGES = 0x2;
    public static const int LVS_EX_TRACKSELECT = 0x8;
    public static const int LVS_EX_TRANSPARENTBKGND = 0x800000;
    public static const int LVS_EX_TWOCLICKACTIVATE = 0x80;
    public static const int LVS_LIST = 0x3;
    public static const int LVS_NOCOLUMNHEADER = 0x4000;
    public static const int LVS_NOSCROLL = 0x2000;
    public static const int LVS_OWNERDATA = 0x1000;
    public static const int LVS_OWNERDRAWFIXED = 0x400;
    public static const int LVS_REPORT = 0x1;
    public static const int LVS_SHAREIMAGELISTS = 0x40;
    public static const int LVS_SHOWSELALWAYS = 0x8;
    public static const int LVS_SINGLESEL = 0x4;
    public static const int LWA_COLORKEY = 0x00000001;
    public static const int LWA_ALPHA = 0x00000002;
    public static const int MAX_LINKID_TEXT = 48;
//  public static const int MAX_PATH = 260;
    public static const int MA_NOACTIVATE = 0x3;
//  public static const int MANIFEST_RESOURCE_ID = 2;
    public static const int MB_ABORTRETRYIGNORE = 0x2;
    public static const int MB_APPLMODAL = 0x0;
    public static const int MB_ICONERROR = 0x10;
    public static const int MB_ICONINFORMATION = 0x40;
    public static const int MB_ICONQUESTION = 0x20;
    public static const int MB_ICONWARNING = 0x30;
    public static const int MB_OK = 0x0;
    public static const int MB_OKCANCEL = 0x1;
    public static const int MB_PRECOMPOSED = 0x1;
    public static const int MB_RETRYCANCEL = 0x5;
    public static const int MB_RTLREADING = 0x100000;
    public static const int MB_SYSTEMMODAL = 0x1000;
    public static const int MB_TASKMODAL = 0x2000;
    public static const int MB_TOPMOST = 0x00040000;
    public static const int MB_YESNO = 0x4;
    public static const int MB_YESNOCANCEL = 0x3;
    public static const int MCM_FIRST = 0x1000;
    public static const int MCM_GETCURSEL = MCM_FIRST + 1;
    public static const int MCM_SETCURSEL = MCM_FIRST + 2;
    public static const int MCN_FIRST = 0xFFFFFD12;
    public static const int MCN_SELCHANGE = MCN_FIRST + 1;
    public static const int MCM_GETMINREQRECT = MCM_FIRST + 9;
    public static const int MCS_NOTODAY = 0x0010;
    public static const int MDIS_ALLCHILDSTYLES = 0x0001;
    public static const int MFS_CHECKED = 0x8;
    public static const int MFS_DISABLED = 0x3;
    public static const int MFS_GRAYED = 0x3;
    public static const int MFT_RADIOCHECK = 0x200;
    public static const int MFT_RIGHTJUSTIFY = 0x4000;
    public static const int MFT_RIGHTORDER = 0x2000;
    public static const int MFT_SEPARATOR = 0x800;
    public static const int MFT_STRING = 0x0;
    public static const int MF_BYCOMMAND = 0x0;
    public static const int MF_BYPOSITION = 0x400;
    public static const int MF_CHECKED = 0x8;
    public static const int MF_DISABLED = 0x2;
    public static const int MF_ENABLED = 0x0;
    public static const int MF_GRAYED = 0x1;
    public static const int MF_HILITE = 0x80;
    public static const int MF_POPUP = 0x10;
    public static const int MF_SEPARATOR = 0x800;
    public static const int MF_SYSMENU = 0x2000;
    public static const int MF_UNCHECKED = 0x0;
    public static const int MIIM_BITMAP = 0x80;
    public static const int MIIM_DATA = 0x20;
    public static const int MIIM_ID = 0x2;
    public static const int MIIM_STATE = 0x1;
    public static const int MIIM_SUBMENU = 0x4;
    public static const int MIIM_TYPE = 0x10;
    public static const int MIM_BACKGROUND = 0x2;
    public static const int MIM_STYLE = 0x10;
    public static const int MK_ALT = 0x20;
    public static const int MK_CONTROL = 0x8;
    public static const int MK_LBUTTON = 0x1;
    public static const int MK_MBUTTON = 0x10;
    public static const int MK_RBUTTON = 0x2;
    public static const int MK_SHIFT = 0x4;
    public static const int MK_XBUTTON1 = 0x20;
    public static const int MK_XBUTTON2 = 0x40;
    public static const int MM_TEXT = 0x1;
    public static const int MNC_CLOSE = 0x1;
    public static const int MNS_CHECKORBMP = 0x4000000;
    public static const int MONITOR_DEFAULTTONEAREST = 0x2;
    public static const int MONITORINFOF_PRIMARY = 0x1;
    public static const TCHAR[] MONTHCAL_CLASS = "SysMonthCal32"; //$NON-NLS-1$
    public static const int MOUSEEVENTF_ABSOLUTE = 0x8000;
    public static const int MOUSEEVENTF_LEFTDOWN = 0x0002;
    public static const int MOUSEEVENTF_LEFTUP = 0x0004;
    public static const int MOUSEEVENTF_MIDDLEDOWN = 0x0020;
    public static const int MOUSEEVENTF_MIDDLEUP = 0x0040;
    public static const int MOUSEEVENTF_MOVE = 0x0001;
    public static const int MOUSEEVENTF_RIGHTDOWN = 0x0008;
    public static const int MOUSEEVENTF_RIGHTUP = 0x0010;
    public static const int MOUSEEVENTF_VIRTUALDESK = 0x4000;
    public static const int MOUSEEVENTF_WHEEL = 0x0800;
    public static const int MOUSEEVENTF_XDOWN = 0x0080;
    public static const int MOUSEEVENTF_XUP = 0x0100;
    public static const int MSGF_DIALOGBOX = 0;
    public static const int MSGF_COMMCTRL_BEGINDRAG = 0x4200;
    public static const int MSGF_COMMCTRL_SIZEHEADER = 0x4201;
    public static const int MSGF_COMMCTRL_DRAGSELECT = 0x4202;
    public static const int MSGF_COMMCTRL_TOOLBARCUST = 0x4203;
    public static const int MSGF_MAINLOOP = 8;
    public static const int MSGF_MENU = 2;
    public static const int MSGF_MOVE = 3;
    public static const int MSGF_MESSAGEBOX = 1;
    public static const int MSGF_NEXTWINDOW = 6;
    public static const int MSGF_SCROLLBAR = 5;
    public static const int MSGF_SIZE = 4;
    public static const int MSGF_USER = 4096;
    public static const int MWMO_INPUTAVAILABLE = 0x4;
    public static const int NIF_ICON = 0x00000002;
    public static const int NIF_INFO = 0x00000010;
    public static const int NIF_MESSAGE = 0x00000001;
    public static const int NIF_STATE = 0x00000008;
    public static const int NIF_TIP = 0x00000004;
    public static const int NIIF_ERROR = 0x00000003;
    public static const int NIIF_INFO = 0x00000001;
    public static const int NIIF_NONE = 0x00000000;
    public static const int NIIF_WARNING = 0x00000002;
    public static const int NIM_ADD = 0x00000000;
    public static const int NIM_DELETE = 0x00000002;
    public static const int NIM_MODIFY = 0x00000001;
    public static const int NIN_SELECT = 0x400 + 0;
    public static const int NINF_KEY = 0x1;
    public static const int NIN_KEYSELECT = NIN_SELECT | NINF_KEY;
    public static const int NIN_BALLOONSHOW = 0x400 + 2;
    public static const int NIN_BALLOONHIDE = 0x400 + 3;
    public static const int NIN_BALLOONTIMEOUT = 0x400 + 4;
    public static const int NIN_BALLOONUSERCLICK = 0x400 + 5;
    public static const int NIS_HIDDEN = 0x00000001;
    public static const int NM_FIRST = 0x0;
    public static const int NM_CLICK = 0xfffffffe;
    public static const int NM_CUSTOMDRAW = NM_FIRST - 12;
    public static const int NM_DBLCLK = 0xfffffffd;
    public static const int NM_RECOGNIZEGESTURE = NM_FIRST - 16;
    public static const int NM_RELEASEDCAPTURE = NM_FIRST - 16;
    public static const int NM_RETURN = 0xfffffffc;
    public static int NOTIFYICONDATAA_V2_SIZE;
    public static int NOTIFYICONDATAW_V2_SIZE;
    public static int NOTIFYICONDATA_V2_SIZE;
    public static const int NOTSRCCOPY = 0x330008;
    public static const int NULLREGION = 0x1;
    public static const int NULL_BRUSH = 0x5;
    public static const int NULL_PEN = 0x8;
    public static const int NUMRESERVED = 106;
    public static const int OBJID_CARET = 0xFFFFFFF8;
    public static const int OBJID_CLIENT = 0xFFFFFFFC;
    public static const int OBJID_MENU = 0xFFFFFFFD;
    public static const int OBJID_WINDOW = 0x00000000;
    public static const int OBJ_BITMAP = 0x7;
    public static const int OBJ_FONT = 0x6;
    public static const int OBJ_PEN = 0x1;
    public static const TCHAR* OBM_CHECKBOXES = cast(TCHAR*)0x7ff7;
    public static const int ODS_SELECTED = 0x1;
    public static const int ODT_MENU = 0x1;
    public static const int OFN_ALLOWMULTISELECT = 0x200;
    public static const int OFN_EXPLORER = 0x80000;
    public static const int OFN_ENABLEHOOK = 0x20;
    public static const int OFN_HIDEREADONLY = 0x4;
    public static const int OFN_NOCHANGEDIR = 0x8;
    public static const int OIC_BANG = 0x7F03;
    public static const int OIC_HAND = 0x7F01;
    public static const int OIC_INFORMATION = 0x7F04;
    public static const int OIC_QUES = 0x7F02;
    public static const int OIC_WINLOGO = 0x7F05;
    public static const int OPAQUE = 0x2;
    public static const int PATCOPY = 0xf00021;
    public static const int PATINVERT = 0x5a0049;
    public static const int PBM_GETPOS = 0x408;
    public static const int PBM_GETRANGE = 0x407;
    public static const int PBM_GETSTATE = 0x400 + 17;
    public static const int PBM_SETBARCOLOR = 0x409;
    public static const int PBM_SETBKCOLOR = 0x2001;
    public static const int PBM_SETMARQUEE = 0x400 + 10;
    public static const int PBM_SETPOS = 0x402;
    public static const int PBM_SETRANGE32 = 0x406;
    public static const int PBM_SETSTATE = 0x400 + 16;
    public static const int PBM_STEPIT = 0x405;
    public static const int PBS_MARQUEE = 0x08;
    public static const int PBS_SMOOTH = 0x1;
    public static const int PBS_VERTICAL = 0x4;
    public static const int PBS_NORMAL = 1;
    public static const int PBS_HOT = 2;
    public static const int PBS_PRESSED = 3;
    public static const int PBS_DISABLED = 4;
    public static const int PBS_DEFAULTED = 5;
    public static const int PBST_NORMAL = 0x0001;
    public static const int PBST_ERROR = 0x0002;
    public static const int PBST_PAUSED = 0x0003;
    public static const int PD_ALLPAGES = 0x0;
    public static const int PD_COLLATE = 0x10;
    public static const int PD_PAGENUMS = 0x2;
    public static const int PD_PRINTTOFILE = 0x20;
    public static const int PD_RETURNDC = 0x100;
    public static const int PD_SELECTION = 0x1;
    public static const int PD_USEDEVMODECOPIESANDCOLLATE = 0x40000;
    public static const int PT_CLOSEFIGURE = 1;
    public static const int PT_LINETO = 2;
    public static const int PT_BEZIERTO = 4;
    public static const int PT_MOVETO = 6;
    public static const int PFM_TABSTOPS = 0x10;
    public static const int PHYSICALHEIGHT = 0x6f;
    public static const int PHYSICALOFFSETX = 0x70;
    public static const int PHYSICALOFFSETY = 0x71;
    public static const int PHYSICALWIDTH = 0x6e;
    public static const int PLANES = 0xe;
    public static const int PM_NOREMOVE = 0x0;
    public static const int PM_NOYIELD = 0x2;
    public static const int QS_HOTKEY = 0x0080;
    public static const int QS_KEY = 0x0001;
    public static const int QS_MOUSEMOVE = 0x0002;
    public static const int QS_MOUSEBUTTON = 0x0004;
    public static const int QS_MOUSE = QS_MOUSEMOVE | QS_MOUSEBUTTON;
    public static const int QS_INPUT = QS_KEY | QS_MOUSE;
    public static const int QS_POSTMESSAGE = 0x0008;
    public static const int QS_TIMER = 0x0010;
    public static const int QS_PAINT = 0x0020;
    public static const int QS_SENDMESSAGE = 0x0040;
    public static const int QS_ALLINPUT = QS_MOUSEMOVE | QS_MOUSEBUTTON | QS_KEY | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_SENDMESSAGE;
    public static const int PM_QS_INPUT = QS_INPUT << 16;
    public static const int PM_QS_POSTMESSAGE = (QS_POSTMESSAGE | QS_HOTKEY | QS_TIMER) << 16;
    public static const int PM_QS_PAINT = QS_PAINT << 16;
    public static const int PM_QS_SENDMESSAGE = QS_SENDMESSAGE << 16;
    public static const int PM_REMOVE = 0x1;
    public static const TCHAR[] PROGRESS_CLASS = "msctls_progress32"; //$NON-NLS-1$
    public static const int PP_BAR = 1;
    public static const int PP_BARVERT = 2;
    public static const int PP_CHUNK = 3;
    public static const int PP_CHUNKVERT = 4;
    public static const int PRF_CHILDREN = 16;
    public static const int PRF_CLIENT = 0x4;
    public static const int PRF_ERASEBKGND = 0x8;
    public static const int PRF_NONCLIENT = 0x2;
    public static const int PROGRESSCHUNKSIZE = 2411;
    public static const int PROGRESSSPACESIZE = 2412;
    public static const int PS_DASH = 0x1;
    public static const int PS_DASHDOT = 0x3;
    public static const int PS_DASHDOTDOT = 0x4;
    public static const int PS_DOT = 0x2;
    public static const int PS_ENDCAP_FLAT = 0x200;
    public static const int PS_ENDCAP_SQUARE = 0x100;
    public static const int PS_ENDCAP_ROUND = 0x000;
    public static const int PS_ENDCAP_MASK = 0xF00;
    public static const int PS_GEOMETRIC = 0x10000;
    public static const int PS_JOIN_BEVEL = 0x1000;
    public static const int PS_JOIN_MASK = 0xF000;
    public static const int PS_JOIN_MITER = 0x2000;
    public static const int PS_JOIN_ROUND = 0x0000;
    public static const int PS_SOLID = 0x0;
    public static const int PS_STYLE_MASK = 0xf;
    public static const int PS_TYPE_MASK = 0x000f0000;
    public static const int PS_USERSTYLE = 0x7;
    public static const int R2_COPYPEN = 0xd;
    public static const int R2_XORPEN = 0x7;
    public static const int RASTERCAPS = 0x26;
    public static const int RASTER_FONTTYPE = 0x1;
    public static const int RBBIM_CHILD = 0x10;
    public static const int RBBIM_CHILDSIZE = 0x20;
    public static const int RBBIM_COLORS = 0x2;
    public static const int RBBIM_HEADERSIZE = 0x800;
    public static const int RBBIM_ID = 0x100;
    public static const int RBBIM_IDEALSIZE = 0x200;
    public static const int RBBIM_SIZE = 0x40;
    public static const int RBBIM_STYLE = 0x1;
    public static const int RBBIM_TEXT = 0x4;
    public static const int RBBS_BREAK = 0x1;
    public static const int RBBS_GRIPPERALWAYS = 0x80;
    public static const int RBBS_NOGRIPPER = 0x00000100;
    public static const int RBBS_USECHEVRON = 0x00000200;
    public static const int RBBS_VARIABLEHEIGHT = 0x40;
    public static const int RBN_FIRST = 0xfffffcc1;
    public static const int RBN_BEGINDRAG = RBN_FIRST - 4;
    public static const int RBN_CHILDSIZE = RBN_FIRST - 8;
    public static const int RBN_CHEVRONPUSHED = RBN_FIRST - 10;
    public static const int RBN_HEIGHTCHANGE = 0xfffffcc1;
    public static const int RBS_DBLCLKTOGGLE = 0x8000;
    public static const int RBS_BANDBORDERS = 0x400;
    public static const int RBS_VARHEIGHT = 0x200;
    public static const int RB_DELETEBAND = 0x402;
    public static const int RB_GETBANDBORDERS = 0x422;
    public static const int RB_GETBANDCOUNT = 0x40c;
    public static const int RB_GETBANDINFO = IsUnicode ? 0x41c : 0x41d;
    public static const int RB_GETBANDMARGINS = 0x428;
    public static const int RB_GETBARHEIGHT = 0x41b;
    public static const int RB_GETBKCOLOR = 0x414;
    public static const int RB_GETRECT = 0x409;
    public static const int RB_GETTEXTCOLOR = 0x416;
    public static const int RB_IDTOINDEX = 0x410;
    public static const int RB_INSERTBAND = IsUnicode ? 0x40a : 0x401;
    public static const int RB_MOVEBAND = 0x427;
    public static const int RB_SETBANDINFO = IsUnicode ? 0x40b : 0x406;
    public static const int RB_SETBKCOLOR = 0x413;
    public static const int RB_SETTEXTCOLOR = 0x415;
    public static const int RC_BITBLT = 0x1;
    public static const int RC_PALETTE = 0x100;
    public static const int RDW_ALLCHILDREN = 0x80;
    public static const int RDW_ERASE = 0x4;
    public static const int RDW_FRAME = 0x400;
    public static const int RDW_INVALIDATE = 0x1;
    public static const int RDW_UPDATENOW = 0x100;
    public static const int READ_CONTROL = 0x20000;
    public static const TCHAR[] REBARCLASSNAME = "ReBarWindow32"; //$NON-NLS-1$
    public static const int RGN_AND = 0x1;
    public static const int RGN_COPY = 5;
    public static const int RGN_DIFF = 0x4;
    public static const int RGN_ERROR = 0;
    public static const int RGN_OR = 0x2;
    public static const int RP_BAND = 3;
    public static const int SBP_ARROWBTN = 0x1;
    public static const int SBP_THUMBBTNHORZ = 2;
    public static const int SBP_THUMBBTNVERT = 3;
    public static const int SBP_LOWERTRACKHORZ = 4;
    public static const int SBP_UPPERTRACKHORZ = 5;
    public static const int SBP_LOWERTRACKVERT = 6;
    public static const int SBP_UPPERTRACKVERT = 7;
    public static const int SBP_GRIPPERHORZ = 8;
    public static const int SBP_GRIPPERVERT = 9;
    public static const int SBP_SIZEBOX = 10;
    public static const int SBS_HORZ = 0x0;
    public static const int SBS_VERT = 0x1;
    public static const int SB_BOTH = 0x3;
    public static const int SB_BOTTOM = 0x7;
    public static const int SB_CTL = 0x2;
    public static const int SB_ENDSCROLL = 0x8;
    public static const int SB_HORZ = 0x0;
    public static const int SB_LINEDOWN = 0x1;
    public static const int SB_LINEUP = 0x0;
    public static const int SB_PAGEDOWN = 0x3;
    public static const int SB_PAGEUP = 0x2;
    public static const int SB_THUMBPOSITION = 0x4;
    public static const int SB_THUMBTRACK = 0x5;
    public static const int SB_TOP = 0x6;
    public static const int SB_VERT = 0x1;
    public static const int SCF_ALL = 0x4;
    public static const int SCF_DEFAULT = 0x0;
    public static const int SCF_SELECTION = 0x1;
    public static const int SC_CLOSE = 0xf060;
    public static const int SC_HSCROLL = 0xf080;
    public static const int SC_KEYMENU = 0xf100;
    public static const int SC_MAXIMIZE = 0xf030;
    public static const int SC_MINIMIZE = 0xf020;
    public static const int SC_NEXTWINDOW = 0xF040;
    public static const int SC_RESTORE = 0xf120;
    public static const int SC_SIZE = 0xf000;
    public static const int SC_TASKLIST = 0xf130;
    public static const int SC_VSCROLL = 0xf070;
    public static const int SCRBS_NORMAL = 1;
    public static const int SCRBS_HOT = 2;
    public static const int SCRBS_PRESSED = 3;
    public static const int SCRBS_DISABLED = 4;
    public static const int SEM_FAILCRITICALERRORS = 0x1;
    public static const int SET_FEATURE_ON_PROCESS = 0x2;
    public static const int SF_RTF = 0x2;
    public static const int SHCMBF_HIDDEN = 0x2;
    public static const int SHCMBM_OVERRIDEKEY = 0x400 + 403;
    public static const int SHCMBM_SETSUBMENU = 0x590;
    public static const int SHCMBM_GETSUBMENU = 0x591;
    public static const int SHGFI_ICON = 0x000000100;
    public static const int SHGFI_SMALLICON= 0x1;
    public static const int SHGFI_USEFILEATTRIBUTES = 0x000000010;
    public static const int SHMBOF_NODEFAULT = 0x1;
    public static const int SHMBOF_NOTIFY = 0x2;
    public static const int SHRG_RETURNCMD = 0x1;
    public static const int SIF_ALL = 0x17;
    public static const int SIF_DISABLENOSCROLL = 0x8;
    public static const int SIF_PAGE = 0x2;
    public static const int SIF_POS = 0x4;
    public static const int SIF_RANGE = 0x1;
    public static const int SIF_TRACKPOS = 0x10;
    public static const int SIP_DOWN = 1;
    public static const int SIP_UP = 0;
    public static const int SIPF_ON = 0x1;
    public static const int SIZE_RESTORED = 0;
    public static const int SIZE_MINIMIZED = 1;
    public static const int SIZE_MAXIMIZED = 2;
    public static const int SIZEPALETTE = 104;
    public static const int SM_CMONITORS = 80;
    public static const int SM_CXBORDER = 0x5;
    public static const int SM_CXCURSOR = 0xd;
    public static const int SM_CXDOUBLECLK = 36;
    public static const int SM_CYDOUBLECLK = 37;
    public static const int SM_CXEDGE = 0x2d;
    public static const int SM_CXHSCROLL = 0x15;
    public static const int SM_CXICON = 0x0b;
    public static const int SM_CYICON = 0x0c;
    public static const int SM_CXVIRTUALSCREEN = 78;
    public static const int SM_CYVIRTUALSCREEN = 79;
    public static const int SM_CXSMICON = 49;
    public static const int SM_CYSMICON = 50;
    public static const int SM_CXSCREEN = 0x0;
    public static const int SM_XVIRTUALSCREEN = 76;
    public static const int SM_YVIRTUALSCREEN = 77;
    public static const int SM_CXVSCROLL = 0x2;
    public static const int SM_CYBORDER = 0x6;
    public static const int SM_CYCURSOR = 0xe;
    public static const int SM_CYHSCROLL = 0x3;
    public static const int SM_CYMENU = 0xf;
    public static const int SM_CXMINTRACK = 34;
    public static const int SM_CYMINTRACK = 35;
    public static const int SM_CMOUSEBUTTONS = 43;
    public static const int SM_CYSCREEN = 0x1;
    public static const int SM_CYVSCROLL = 0x14;
//  public static const int SM_DBCSENABLED = 0x2A;
//  public static const int SM_IMMENABLED = 0x52;
    public static const int SPI_GETFONTSMOOTHINGTYPE = 0x200A;
    public static const int SPI_GETHIGHCONTRAST = 66;
    public static const int SPI_GETWORKAREA = 0x30;
    public static const int SPI_GETNONCLIENTMETRICS = 41;
    public static const int SPI_GETWHEELSCROLLLINES = 104;
    public static const int SPI_SETSIPINFO = 224;
    public static const int SPI_SETHIGHCONTRAST = 67;
    public static const int SRCAND = 0x8800c6;
    public static const int SRCCOPY = 0xcc0020;
    public static const int SRCINVERT = 0x660046;
    public static const int SRCPAINT = 0xee0086;
    public static const int SS_BITMAP = 0xe;
    public static const int SS_CENTER = 0x1;
    public static const int SS_CENTERIMAGE = 0x200;
    public static const int SS_EDITCONTROL = 0x2000;
    public static const int SS_ICON = 0x3;
    public static const int SS_LEFT = 0x0;
    public static const int SS_LEFTNOWORDWRAP = 0xc;
    public static const int SS_NOTIFY = 0x100;
    public static const int SS_OWNERDRAW = 0xd;
    public static const int SS_REALSIZEIMAGE = 0x800;
    public static const int SS_RIGHT = 0x2;
    public static const int STANDARD_RIGHTS_READ = 0x20000;
    public static const int STARTF_USESHOWWINDOW = 0x1;
    public static const int STD_COPY = 0x1;
    public static const int STD_CUT = 0x0;
    public static const int STD_FILENEW = 0x6;
    public static const int STD_FILEOPEN = 0x7;
    public static const int STD_FILESAVE = 0x8;
    public static const int STD_PASTE = 0x2;
    public static const int STM_GETIMAGE = 0x173;
    public static const int STM_SETIMAGE = 0x172;
    public static const int SWP_ASYNCWINDOWPOS = 0x4000;
    public static const int SWP_DRAWFRAME = 0x20;
    public static const int SWP_NOACTIVATE = 0x10;
    public static const int SWP_NOCOPYBITS = 0x100;
    public static const int SWP_NOMOVE = 0x2;
    public static const int SWP_NOREDRAW = 0x8;
    public static const int SWP_NOSIZE = 0x1;
    public static const int SWP_NOZORDER = 0x4;
    public static const int SW_ERASE = 0x4;
    public static const int SW_HIDE = 0x0;
    public static const int SW_INVALIDATE = 0x2;
    public static const int SW_MINIMIZE = 0x6;
    public static const int SW_PARENTOPENING = 0x3;
    public static const int SW_RESTORE = IsWinCE ? 0xd : 0x9;
    public static const int SW_SCROLLCHILDREN = 0x1;
    public static const int SW_SHOW = 0x5;
    public static const int SW_SHOWMAXIMIZED = IsWinCE ? 0xb : 0x3;
    public static const int SW_SHOWMINIMIZED = 0x2;
    public static const int SW_SHOWMINNOACTIVE = 0x7;
    public static const int SW_SHOWNA = 0x8;
    public static const int SW_SHOWNOACTIVATE = 0x4;
    public static const int SYNCHRONIZE = 0x100000;
    public static const int SYSRGN = 0x4;
    public static const int SYSTEM_FONT = 0xd;
    public static const int S_OK = 0x0;
    public static const int TABP_TABITEM = 1;
    public static const int TABP_TABITEMLEFTEDGE = 2;
    public static const int TABP_TABITEMRIGHTEDGE = 3;
    public static const int TABP_TABITEMBOTHEDGE = 4;
    public static const int TABP_TOPTABITEM = 5;
    public static const int TABP_TOPTABITEMLEFTEDGE = 6;
    public static const int TABP_TOPTABITEMRIGHTEDGE = 7;
    public static const int TABP_TOPTABITEMBOTHEDGE = 8;
    public static const int TABP_PANE = 9;
    public static const int TABP_BODY = 10;
    public static const int TBIF_COMMAND = 0x20;
    public static const int TBIF_STATE = 0x4;
    public static const int TBIF_IMAGE = 0x1;
    public static const int TBIF_LPARAM = 0x10;
    public static const int TBIF_SIZE = 0x40;
    public static const int TBIF_STYLE = 0x8;
    public static const int TBIF_TEXT = 0x2;
    public static const int TB_GETEXTENDEDSTYLE = 0x400 + 85;
    public static const int TBM_GETLINESIZE = 0x418;
    public static const int TBM_GETPAGESIZE = 0x416;
    public static const int TBM_GETPOS = 0x400;
    public static const int TBM_GETRANGEMAX = 0x402;
    public static const int TBM_GETRANGEMIN = 0x401;
    public static const int TBM_GETTHUMBRECT = 0x419;
    public static const int TBM_SETLINESIZE = 0x417;
    public static const int TBM_SETPAGESIZE = 0x415;
    public static const int TBM_SETPOS = 0x405;
    public static const int TBM_SETRANGEMAX = 0x408;
    public static const int TBM_SETRANGEMIN = 0x407;
    public static const int TBM_SETTICFREQ = 0x414;
    public static const int TBN_DROPDOWN = 0xfffffd3a;
    public static const int TBN_FIRST = 0xfffffd44;
    public static const int TBN_HOTITEMCHANGE = 0xFFFFFD37;
    public static const int TBSTATE_CHECKED = 0x1;
    public static const int TBSTATE_PRESSED = 0x02;
    public static const int TBSTYLE_CUSTOMERASE = 0x2000;
    public static const int TBSTYLE_DROPDOWN = 0x8;
    public static const int TBSTATE_ENABLED = 0x4;
    public static const int TBSTYLE_AUTOSIZE = 0x10;
    public static const int TBSTYLE_EX_DOUBLEBUFFER = 0x80;
    public static const int TBSTYLE_EX_DRAWDDARROWS = 0x1;
    public static const int TBSTYLE_EX_HIDECLIPPEDBUTTONS = 0x10;
    public static const int TBSTYLE_EX_MIXEDBUTTONS = 0x8;
    public static const int TBSTYLE_FLAT = 0x800;
    public static const int TBSTYLE_LIST = 0x1000;
    public static const int TBSTYLE_TOOLTIPS = 0x100;
    public static const int TBSTYLE_TRANSPARENT = 0x8000;
    public static const int TBSTYLE_WRAPABLE = 0x200;
    public static const int TBS_AUTOTICKS = 0x1;
    public static const int TBS_BOTH = 0x8;
    public static const int TBS_DOWNISLEFT = 0x0400;
    public static const int TBS_HORZ = 0x0;
    public static const int TBS_VERT = 0x2;
    public static const int TB_ADDSTRING = IsUnicode ? 0x44d : 0x41c;
    public static const int TB_AUTOSIZE = 0x421;
    public static const int TB_BUTTONCOUNT = 0x418;
    public static const int TB_BUTTONSTRUCTSIZE = 0x41e;
    public static const int TB_COMMANDTOINDEX = 0x419;
    public static const int TB_DELETEBUTTON = 0x416;
    public static const int TB_ENDTRACK = 0x8;
    public static const int TB_GETBUTTON = 0x417;
    public static const int TB_GETBUTTONINFO = IsUnicode ? 0x43f : 0x441;
    public static const int TB_GETBUTTONSIZE = 0x43a;
    public static const int TB_GETBUTTONTEXT = IsUnicode ? 0x44b : 0x42d;
    public static const int TB_GETDISABLEDIMAGELIST = 0x437;
    public static const int TB_GETHOTIMAGELIST = 0x435;
    public static const int TB_GETHOTITEM = 0x0400 + 71;
    public static const int TB_GETIMAGELIST = 0x431;
    public static const int TB_GETITEMRECT = 0x41d;
    public static const int TB_GETPADDING = 0x0400 + 86;
    public static const int TB_GETROWS = 0x428;
    public static const int TB_GETSTATE = 0x412;
    public static const int TB_GETTOOLTIPS = 0x423;
    public static const int TB_INSERTBUTTON = IsUnicode ? 0x443 : 0x415;
    public static const int TB_LOADIMAGES = 0x432;
    public static const int TB_MAPACCELERATOR = 0x0400 + (IsUnicode ? 90 : 78);
    public static const int TB_SETBITMAPSIZE = 0x420;
    public static const int TB_SETBUTTONINFO = IsUnicode ? 0x440 : 0x442;
    public static const int TB_SETBUTTONSIZE = 0x41f;
    public static const int TB_SETDISABLEDIMAGELIST = 0x436;
    public static const int TB_SETEXTENDEDSTYLE = 0x454;
    public static const int TB_SETHOTIMAGELIST = 0x434;
    public static const int TB_SETHOTITEM =  0x0400 + 72;
    public static const int TB_SETIMAGELIST = 0x430;
    public static const int TB_SETPARENT = 0x400 + 37;
    public static const int TB_SETROWS = 0x427;
    public static const int TB_SETSTATE = 0x411;
    public static const int TB_THUMBPOSITION = 0x4;
    public static const int TCIF_IMAGE = 0x2;
    public static const int TCIF_TEXT = 0x1;
    public static const int TCI_SRCCHARSET = 0x1;
    public static const int TCI_SRCCODEPAGE = 0x2;
    public static const int TCM_ADJUSTRECT = 0x1328;
    public static const int TCM_DELETEITEM = 0x1308;
    public static const int TCM_GETCURSEL = 0x130b;
    public static const int TCM_GETITEMCOUNT = 0x1304;
    public static const int TCM_GETITEMRECT = 0x130a;
    public static const int TCM_GETTOOLTIPS = 0x132d;
    public static const int TCM_INSERTITEM = IsUnicode ? 0x133e : 0x1307;
    public static const int TCM_SETCURSEL = 0x130c;
    public static const int TCM_SETIMAGELIST = 0x1303;
    public static const int TCM_SETITEM = IsUnicode ? 0x133d : 0x1306;
    public static const int TCN_SELCHANGE = 0xfffffdd9;
    public static const int TCN_SELCHANGING = 0xfffffdd8;
    public static const int TCS_BOTTOM = 0x0002;
    public static const int TCS_FOCUSNEVER = 0x8000;
    public static const int TCS_MULTILINE = 0x200;
    public static const int TCS_TABS = 0x0;
    public static const int TCS_TOOLTIPS = 0x4000;
    public static const int TECHNOLOGY = 0x2;
    public static const int TIME_NOSECONDS = 0x2;
    public static const int TIS_NORMAL = 1;
    public static const int TIS_HOT = 2;
    public static const int TIS_SELECTED = 3;
    public static const int TIS_DISABLED = 4;
    public static const int TIS_FOCUSED = 5;
    public static const int TKP_TRACK = 1;
    public static const int TKP_TRACKVERT = 2;
    public static const int TKP_THUMB = 3;
    public static const int TKP_THUMBBOTTOM = 4;
    public static const int TKP_THUMBTOP = 5;
    public static const int TKP_THUMBVERT = 6;
    public static const int TKP_THUMBLEFT = 7;
    public static const int TKP_THUMBRIGHT = 8;
    public static const int TKP_TICS = 9;
    public static const int TKP_TICSVERT = 10;
    public static const int TME_HOVER = 0x1;
    public static const int TME_LEAVE = 0x2;
    public static const int TME_QUERY = 0x40000000;
    public static const int TMPF_VECTOR = 0x2;
    public static const int TMT_CONTENTMARGINS = 3602;
    public static const TCHAR[] TOOLBARCLASSNAME = "ToolbarWindow32"; //$NON-NLS-1$
    public static const TCHAR[] TOOLTIPS_CLASS = "tooltips_class32"; //$NON-NLS-1$
    public static const int TP_BUTTON = 1;
    public static const int TP_DROPDOWNBUTTON = 2;
    public static const int TP_SPLITBUTTON = 3;
    public static const int TP_SPLITBUTTONDROPDOWN = 4;
    public static const int TP_SEPARATOR = 5;
    public static const int TP_SEPARATORVERT = 6;
    public static const int TPM_LEFTALIGN = 0x0;
    public static const int TPM_LEFTBUTTON = 0x0;
    public static const int TPM_RIGHTBUTTON = 0x2;
    public static const int TPM_RIGHTALIGN = 0x8;
    public static const TCHAR[] TRACKBAR_CLASS = "msctls_trackbar32"; //$NON-NLS-1$
    public static const int TRANSPARENT = 0x1;
    public static const int TREIS_DISABLED = 4;
    public static const int TREIS_HOT = 2;
    public static const int TREIS_NORMAL = 1;
    public static const int TREIS_SELECTED = 3;
    public static const int TREIS_SELECTEDNOTFOCUS = 5;
    public static const int TS_MIN = 0;
    public static const int TS_TRUE = 1;
    public static const int TS_DRAW = 2;
    public static const int TS_NORMAL = 1;
    public static const int TS_HOT = 2;
    public static const int TS_PRESSED = 3;
    public static const int TS_DISABLED = 4;
    public static const int TS_CHECKED = 5;
    public static const int TS_HOTCHECKED = 6;
    public static const int TTDT_AUTOMATIC = 0;
    public static const int TTDT_RESHOW = 1;
    public static const int TTDT_AUTOPOP = 2;
    public static const int TTDT_INITIAL = 3;
    public static const int TTF_ABSOLUTE = 0x80;
    public static const int TTF_IDISHWND = 0x1;
    public static const int TTF_SUBCLASS = 0x10;
    public static const int TTF_RTLREADING = 0x4;
    public static const int TTF_TRACK = 0x20;
    public static const int TTF_TRANSPARENT = 0x100;
    public static const int TTI_NONE = 0;
    public static const int TTI_INFO = 1;
    public static const int TTI_WARNING = 2;
    public static const int TTI_ERROR= 3;
    public static const int TTM_ACTIVATE = 0x400 + 1;
    public static const int TTM_ADDTOOL = IsUnicode ? 0x432 : 0x404;
    public static const int TTM_GETCURRENTTOOLA = 0x400 + 15;
    public static const int TTM_GETCURRENTTOOLW = 0x400 + 59;
    public static const int TTM_GETCURRENTTOOL = 0x400 + (IsUnicode ? 59 : 15);
    public static const int TTM_GETDELAYTIME = 0x400 + 21;
    public static const int TTM_DELTOOL = IsUnicode ? 0x433 : 0x405;
    public static const int TTM_GETTOOLINFO = 0x400 + (IsUnicode ? 53 : 8);
    public static const int TTM_NEWTOOLRECT = 0x400 + (IsUnicode ? 52 : 6);
    public static const int TTM_POP = 0x400 + 28;
    public static const int TTM_SETDELAYTIME = 0x400 + 3;
    public static const int TTM_SETMAXTIPWIDTH = 0x418;
    public static const int TTM_SETTITLEA = 0x400 + 32;
    public static const int TTM_SETTITLEW = 0x400 + 33;
    public static const int TTM_SETTITLE = 0x400 + (IsUnicode ? 33 : 32);
    public static const int TTM_TRACKPOSITION = 1042;
    public static const int TTM_TRACKACTIVATE = 1041;
    public static const int TTM_UPDATE = 0x41D;
    public static const int TTN_FIRST = 0xfffffdf8;
    public static const int TTN_GETDISPINFO = IsUnicode ? 0xfffffdee : 0xfffffdf8;
    public static const int TTN_GETDISPINFOW = 0xfffffdee;
    public static const int TTN_GETDISPINFOA = 0xfffffdf8;
    public static const int TTN_POP = TTN_FIRST - 2;
    public static const int TTN_SHOW = TTN_FIRST - 1;
    public static const int TTS_ALWAYSTIP = 0x1;
    public static const int TTS_BALLOON = 0x40;
    public static const int TV_FIRST = 0x1100;
    public static const int TVE_COLLAPSE = 0x1;
    public static const int TVE_COLLAPSERESET = 0x8000;
    public static const int TVE_EXPAND = 0x2;
    public static const int TVGN_CARET = 0x9;
    public static const int TVGN_CHILD = 0x4;
    public static const int TVGN_DROPHILITED = 0x8;
    public static const int TVGN_FIRSTVISIBLE = 0x5;
    public static const int TVGN_LASTVISIBLE = 0xa;
    public static const int TVGN_NEXT = 0x1;
    public static const int TVGN_NEXTVISIBLE = 0x6;
    public static const int TVGN_PARENT = 0x3;
    public static const int TVGN_PREVIOUS = 0x2;
    public static const int TVGN_PREVIOUSVISIBLE = 0x7;
    public static const int TVGN_ROOT = 0x0;
    public static const int TVHT_ONITEM = 0x46;
    public static const int TVHT_ONITEMBUTTON = 16;
    public static const int TVHT_ONITEMICON = 0x2;
    public static const int TVHT_ONITEMLABEL = 0x4;
    public static const int TVHT_ONITEMSTATEICON = 0x40;
    public static const int TVIF_HANDLE = 0x10;
    public static const int TVIF_IMAGE = 0x2;
    public static const int TVIF_INTEGRAL = 0x0080;
    public static const int TVIF_PARAM = 0x4;
    public static const int TVIF_SELECTEDIMAGE = 0x20;
    public static const int TVIF_STATE = 0x8;
    public static const int TVIF_TEXT = 0x1;
    public static const int TVIS_DROPHILITED = 0x8;
    public static const int TVIS_EXPANDED = 0x20;
    public static const int TVIS_SELECTED = 0x2;
    public static const int TVIS_STATEIMAGEMASK = 0xf000;
    public static const int TVI_FIRST = 0xffff0001;
    public static const int TVI_LAST = 0xffff0002;
    public static const int TVI_ROOT = 0xffff0000;
    public static const int TVI_SORT = 0xFFFF0003;
    public static const int TVM_CREATEDRAGIMAGE = TV_FIRST + 18;
    public static const int TVM_DELETEITEM = 0x1101;
    public static const int TVM_ENSUREVISIBLE = 0x1114;
    public static const int TVM_EXPAND = 0x1102;
    public static const int TVM_GETBKCOLOR = 0x111f;
    public static const int TVM_GETCOUNT = 0x1105;
    public static const int TVM_GETEXTENDEDSTYLE = TV_FIRST + 45;
    public static const int TVM_GETIMAGELIST = 0x1108;
    public static const int TVM_GETITEM = IsUnicode ? 0x113e : 0x110c;
    public static const int TVM_GETITEMHEIGHT = 0x111c;
    public static const int TVM_GETITEMRECT = 0x1104;
    public static const int TVM_GETITEMSTATE = TV_FIRST + 39;
    public static const int TVM_GETNEXTITEM = 0x110a;
    public static const int TVM_GETTEXTCOLOR = 0x1120;
    public static const int TVM_GETTOOLTIPS = TV_FIRST + 25;
    public static const int TVM_GETVISIBLECOUNT = TV_FIRST + 16;
    public static const int TVM_HITTEST = 0x1111;
    public static const int TVM_INSERTITEM = IsUnicode ? 0x1132 : 0x1100;
    public static const int TVM_MAPACCIDTOHTREEITEM = TV_FIRST + 42;
    public static const int TVM_MAPHTREEITEMTOACCID = TV_FIRST + 43;
    public static const int TVM_SELECTITEM = 0x110b;
    public static const int TVM_SETBKCOLOR = 0x111d;
    public static const int TVM_SETEXTENDEDSTYLE = TV_FIRST + 44;
    public static const int TVM_SETIMAGELIST = 0x1109;
    public static const int TVM_SETINSERTMARK = 0x111a;
    public static const int TVM_SETITEM = IsUnicode ? 0x113f : 0x110d;
    public static const int TVM_SETITEMHEIGHT = TV_FIRST + 27;
    public static const int TVM_SETSCROLLTIME = TV_FIRST + 33;
    public static const int TVM_SETTEXTCOLOR = 0x111e;
    public static const int TVM_SORTCHILDREN = TV_FIRST + 19;
    public static const int TVM_SORTCHILDRENCB = TV_FIRST + 21;
    public static const int TVN_BEGINDRAGW = 0xfffffe38;
    public static const int TVN_BEGINDRAGA = 0xfffffe69;
    public static const int TVN_BEGINRDRAGW = 0xfffffe37;
    public static const int TVN_BEGINRDRAGA = 0xfffffe68;
    public static const int TVN_FIRST = 0xfffffe70;
    public static const int TVN_GETDISPINFOA = TVN_FIRST - 3;
    public static const int TVN_GETDISPINFOW = TVN_FIRST - 52;
    public static const int TVN_ITEMCHANGINGW = TVN_FIRST - 17;
    public static const int TVN_ITEMCHANGINGA = TVN_FIRST - 16;
    public static const int TVN_ITEMEXPANDEDA = TVN_FIRST -6;
    public static const int TVN_ITEMEXPANDEDW = TVN_FIRST - 55;
    public static const int TVN_ITEMEXPANDINGW = 0xfffffe3a;
    public static const int TVN_ITEMEXPANDINGA = 0xfffffe6b;
    public static const int TVN_SELCHANGEDW = 0xfffffe3d;
    public static const int TVN_SELCHANGEDA = 0xfffffe6e;
    public static const int TVN_SELCHANGINGW = 0xfffffe3e;
    public static const int TVN_SELCHANGINGA = 0xfffffe6f;
    public static const int TVP_GLYPH = 2;
    public static const int TVP_TREEITEM = 1;
    public static const int TVSIL_NORMAL = 0x0;
    public static const int TVSIL_STATE = 0x2;
    public static const int TVS_DISABLEDRAGDROP = 0x10;
    public static const int TVS_EX_AUTOHSCROLL = 0x0020;
    public static const int TVS_EX_DOUBLEBUFFER = 0x0004;
    public static const int TVS_EX_DIMMEDCHECKBOXES = 0x0200;
    public static const int TVS_EX_DRAWIMAGEASYNC = 0x0400;
    public static const int TVS_EX_EXCLUSIONCHECKBOXES = 0x0100;
    public static const int TVS_EX_FADEINOUTEXPANDOS = 0x0040;
    public static const int TVS_EX_MULTISELECT = 0x0002;
    public static const int TVS_EX_NOINDENTSTATE = 0x0008;
    public static const int TVS_EX_PARTIALCHECKBOXES = 0x0080;
    public static const int TVS_EX_RICHTOOLTIP = 0x0010;
    public static const int TVS_FULLROWSELECT = 0x1000;
    public static const int TVS_HASBUTTONS = 0x1;
    public static const int TVS_HASLINES = 0x2;
    public static const int TVS_LINESATROOT = 0x4;
    public static const int TVS_NOHSCROLL = 0x8000;
    public static const int TVS_NONEVENHEIGHT = 0x4000;
    public static const int TVS_NOTOOLTIPS = 0x80;
    public static const int TVS_SHOWSELALWAYS = 0x20;
    public static const int TVS_TRACKSELECT = 0x200;
    public static const int UDM_GETACCEL = 0x046C;
    public static const int UDM_GETRANGE32 = 0x0470;
    public static const int UDM_GETPOS = 0x468;
    public static const int UDM_GETPOS32 = 0x0472;
    public static const int UDM_SETACCEL = 0x046B;
    public static const int UDM_SETRANGE32 = 0x046f;
    public static const int UDM_SETPOS = 0x467;
    public static const int UDM_SETPOS32 = 0x0471;
    public static const int UDN_DELTAPOS = -722;
    public static const int UDS_ALIGNLEFT = 0x008;
    public static const int UDS_ALIGNRIGHT = 0x004;
    public static const int UDS_AUTOBUDDY = 0x0010;
    public static const int UDS_WRAP = 0x0001;
    public static const int UIS_INITIALIZE = 3;
    public static const int UISF_HIDEACCEL = 0x2;
    public static const int UISF_HIDEFOCUS = 0x1;
    public static const TCHAR[] UPDOWN_CLASS = "msctls_updown32"; //$NON-NLS-1$
    public static const int USP_E_SCRIPT_NOT_IN_FONT = 0x80040200;
    public static const int VERTRES = 0xa;
    public static const int VK_BACK = 0x8;
    public static const int VK_CANCEL = 0x3;
    public static const int VK_CAPITAL = 0x14;
    public static const int VK_CONTROL = 0x11;
    public static const int VK_DECIMAL = 0x6E;
    public static const int VK_DELETE = 0x2e;
    public static const int VK_DIVIDE = 0x6f;
    public static const int VK_DOWN = 0x28;
    public static const int VK_END = 0x23;
    public static const int VK_ESCAPE = 0x1b;
    public static const int VK_F1 = 0x70;
    public static const int VK_F10 = 0x79;
    public static const int VK_F11 = 0x7a;
    public static const int VK_F12 = 0x7b;
    public static const int VK_F13 = 0x7c;
    public static const int VK_F14 = 0x7d;
    public static const int VK_F15 = 0x7e;
    public static const int VK_F2 = 0x71;
    public static const int VK_F3 = 0x72;
    public static const int VK_F4 = 0x73;
    public static const int VK_F5 = 0x74;
    public static const int VK_F6 = 0x75;
    public static const int VK_F7 = 0x76;
    public static const int VK_F8 = 0x77;
    public static const int VK_F9 = 0x78;
    public static const int VK_HOME = 0x24;
    public static const int VK_INSERT = 0x2d;
    public static const int VK_LBUTTON = 0x1;
    public static const int VK_LEFT = 0x25;
    public static const int VK_MBUTTON = 0x4;
    public static const int VK_MENU = 0x12;
    public static const int VK_MULTIPLY = 0x6A;
    public static const int VK_N = 0x4e;
    public static const int VK_O = 0x4f;
    public static const int VK_NEXT = 0x22;
    public static const int VK_NUMLOCK = 0x90;
    public static const int VK_NUMPAD0 = 0x60;
    public static const int VK_NUMPAD1 = 0x61;
    public static const int VK_NUMPAD2 = 0x62;
    public static const int VK_NUMPAD3 = 0x63;
    public static const int VK_NUMPAD4 = 0x64;
    public static const int VK_NUMPAD5 = 0x65;
    public static const int VK_NUMPAD6 = 0x66;
    public static const int VK_NUMPAD7 = 0x67;
    public static const int VK_NUMPAD8 = 0x68;
    public static const int VK_NUMPAD9 = 0x69;
    public static const int VK_PAUSE = 0x13;
    public static const int VK_PRIOR = 0x21;
    public static const int VK_RBUTTON = 0x2;
    public static const int VK_RETURN = 0xd;
    public static const int VK_RIGHT = 0x27;
    public static const int VK_SCROLL = 0x91;
    public static const int VK_SEPARATOR = 0x6C;
    public static const int VK_SHIFT = 0x10;
    public static const int VK_SNAPSHOT = 0x2C;
    public static const int VK_SPACE = 0x20;
    public static const int VK_SUBTRACT = 0x6D;
    public static const int VK_TAB = 0x9;
    public static const int VK_UP = 0x26;
    public static const int VK_XBUTTON1 = 0x05;
    public static const int VK_XBUTTON2 = 0x06;
    public static const int VK_ADD = 0x6B;
    public static const int VK_APP1 = 0xc1;
    public static const int VK_APP2 = 0xc2;
    public static const int VK_APP3 = 0xc3;
    public static const int VK_APP4 = 0xc4;
    public static const int VK_APP5 = 0xc5;
    public static const int VK_APP6 = 0xc6;
    public static const TCHAR[] WC_HEADER = "SysHeader32"; //$NON-NLS-1$
    public static const TCHAR[] WC_LINK = "SysLink"; //$NON-NLS-1$
    public static const TCHAR[] WC_LISTVIEW = "SysListView32"; //$NON-NLS-1$
    public static const TCHAR[] WC_TABCONTROL = "SysTabControl32"; //$NON-NLS-1$
    public static const TCHAR[] WC_TREEVIEW = "SysTreeView32"; //$NON-NLS-1$
    public static const int WINDING = 2;
    public static const int WH_CBT = 5;
    public static const int WH_GETMESSAGE = 0x3;
    public static const int WH_MSGFILTER = 0xFFFFFFFF;
    public static const int WH_FOREGROUNDIDLE = 11;
    public static const int WHEEL_DELTA = 120;
    public static const int WHEEL_PAGESCROLL = 0xFFFFFFFF;
    public static const int WHITE_BRUSH = 0;
    public static const int WM_ACTIVATE = 0x6;
    public static const int WM_ACTIVATEAPP = 0x1c;
    public static const int WM_APP = 0x8000;
    public static const int WM_CANCELMODE = 0x1f;
    public static const int WM_CAPTURECHANGED = 0x0215;
    public static const int WM_CHANGEUISTATE = 0x0127;
    public static const int WM_CHAR = 0x102;
    public static const int WM_CLEAR = 0x303;
    public static const int WM_CLOSE = 0x10;
    public static const int WM_COMMAND = 0x111;
    public static const int WM_CONTEXTMENU = 0x7b;
    public static const int WM_COPY = 0x301;
    public static const int WM_CREATE = 0x0001;
    public static const int WM_CTLCOLORBTN = 0x135;
    public static const int WM_CTLCOLORDLG = 0x136;
    public static const int WM_CTLCOLOREDIT = 0x133;
    public static const int WM_CTLCOLORLISTBOX = 0x134;
    public static const int WM_CTLCOLORMSGBOX = 0x132;
    public static const int WM_CTLCOLORSCROLLBAR = 0x137;
    public static const int WM_CTLCOLORSTATIC = 0x138;
    public static const int WM_CUT = 0x300;
    public static const int WM_DEADCHAR = 0x103;
    public static const int WM_DESTROY = 0x2;
    public static const int WM_DRAWITEM = 0x2b;
    public static const int WM_ENDSESSION = 0x16;
    public static const int WM_ENTERIDLE = 0x121;
    public static const int WM_ERASEBKGND = 0x14;
    public static const int WM_GETDLGCODE = 0x87;
    public static const int WM_GETFONT = 0x31;
//  public static const int WM_GETICON = 0x7f;
    public static const int WM_GETOBJECT = 0x003D;
    public static const int WM_GETMINMAXINFO = 0x0024;
    public static const int WM_HELP = 0x53;
    public static const int WM_HOTKEY = 0x0312;
    public static const int WM_HSCROLL = 0x114;
    public static const int WM_IME_CHAR = 0x286;
    public static const int WM_IME_COMPOSITION = 0x10f;
    public static const int WM_INITDIALOG = 0x110;
    public static const int WM_INITMENUPOPUP = 0x117;
    public static const int WM_INPUTLANGCHANGE = 0x51;
    public static const int WM_KEYDOWN = 0x100;
    public static const int WM_KEYFIRST = 0x100;
    public static const int WM_KEYLAST = 0x108;
    public static const int WM_KEYUP = 0x101;
    public static const int WM_KILLFOCUS = 0x8;
    public static const int WM_LBUTTONDBLCLK = 0x203;
    public static const int WM_LBUTTONDOWN = 0x201;
    public static const int WM_LBUTTONUP = 0x202;
    public static const int WM_MBUTTONDBLCLK = 0x209;
    public static const int WM_MBUTTONDOWN = 0x207;
    public static const int WM_MBUTTONUP = 0x208;
    public static const int WM_MEASUREITEM = 0x2c;
    public static const int WM_MENUCHAR = 0x120;
    public static const int WM_MENUSELECT = 0x11f;
    public static const int WM_MOUSEACTIVATE = 0x21;
    public static const int WM_MOUSEFIRST = 0x200;
    public static const int WM_MOUSEHOVER = 0x2a1;
    public static const int WM_MOUSELEAVE = 0x2a3;
    public static const int WM_MOUSEMOVE = 0x200;
    public static const int WM_MOUSEWHEEL = 0x20a;
    public static const int WM_MOUSELAST = 0x20d;
    public static const int WM_MOVE = 0x3;
    public static const int WM_NCACTIVATE = 0x86;
    public static const int WM_NCCALCSIZE = 0x83;
    public static const int WM_NCHITTEST = 0x84;
    public static const int WM_NCLBUTTONDOWN = 0x00A1;
    public static const int WM_NCPAINT = 0x85;
    public static const int WM_NOTIFY = 0x4e;
    public static const int WM_NULL = 0x0;
    public static const int WM_PAINT = 0xf;
    public static const int WM_PALETTECHANGED = 0x311;
    public static const int WM_PARENTNOTIFY = 0x0210;
    public static const int WM_PASTE = 0x302;
    public static const int WM_PRINT = 0x0317;
    public static const int WM_PRINTCLIENT = 0x0318;
    public static const int WM_QUERYENDSESSION = 0x11;
    public static const int WM_QUERYNEWPALETTE = 0x30f;
    public static const int WM_QUERYOPEN = 0x13;
    public static const int WM_QUERYUISTATE = 0x129;
    public static const int WM_RBUTTONDBLCLK = 0x206;
    public static const int WM_RBUTTONDOWN = 0x204;
    public static const int WM_RBUTTONUP = 0x205;
    public static const int WM_SETCURSOR = 0x20;
    public static const int WM_SETFOCUS = 0x7;
    public static const int WM_SETFONT = 0x30;
    public static const int WM_SETICON = 0x80;
    public static const int WM_SETREDRAW = 0xb;
    public static const int WM_SETTEXT = 12;
    public static const int WM_SETTINGCHANGE = 0x1A;
    public static const int WM_SHOWWINDOW = 0x18;
    public static const int WM_SIZE = 0x5;
    public static const int WM_SYSCHAR = 0x106;
    public static const int WM_SYSCOLORCHANGE = 0x15;
    public static const int WM_SYSCOMMAND = 0x112;
    public static const int WM_SYSKEYDOWN = 0x104;
    public static const int WM_SYSKEYUP = 0x105;
    public static const int WM_TIMER = 0x113;
    public static const int WM_THEMECHANGED = 0x031a;
    public static const int WM_UNDO = 0x304;
    public static const int WM_UPDATEUISTATE = 0x0128;
    public static const int WM_USER = 0x400;
    public static const int WM_VSCROLL = 0x115;
    public static const int WM_WINDOWPOSCHANGED = 0x47;
    public static const int WM_WINDOWPOSCHANGING = 0x46;
    public static const int WS_BORDER = 0x800000;
    public static const int WS_CAPTION = 0xc00000;
    public static const int WS_CHILD = 0x40000000;
    public static const int WS_MINIMIZE = 0x20000000; //PORTING_TODO: from dwt, why?
    public static const int WS_CLIPCHILDREN = 0x2000000;
    public static const int WS_CLIPSIBLINGS = 0x4000000;
    public static const int WS_DISABLED = 0x4000000;
    public static const int WS_EX_CAPTIONOKBTN = 0x80000000;
    public static const int WS_EX_CLIENTEDGE = 0x200;
    public static const int WS_EX_DLGMODALFRAME = 0x1;
    public static const int WS_EX_LAYERED = 0x00080000;
    public static const int WS_EX_LAYOUTRTL = 0x00400000;
    public static const int WS_EX_LEFTSCROLLBAR = 0x00004000;
    public static const int WS_EX_MDICHILD = 0x00000040;
    public static const int WS_EX_NOINHERITLAYOUT = 0x00100000;
    public static const int WS_EX_NOACTIVATE = 0x08000000;
    public static const int WS_EX_RIGHT = 0x00001000;
    public static const int WS_EX_RTLREADING = 0x00002000;
    public static const int WS_EX_STATICEDGE = 0x20000;
    public static const int WS_EX_TOOLWINDOW = 0x80;
    public static const int WS_EX_TOPMOST = 0x8;
    public static const int WS_EX_TRANSPARENT = 0x20;
    public static const int WS_HSCROLL = 0x100000;
    public static const int WS_MAXIMIZEBOX = IsWinCE ? 0x20000 : 0x10000;
    public static const int WS_MINIMIZEBOX = IsWinCE ? 0x10000 : 0x20000;
    public static const int WS_OVERLAPPED = IsWinCE ? WS_BORDER | WS_CAPTION : 0x0;
    public static const int WS_OVERLAPPEDWINDOW = 0xcf0000;
    public static const int WS_POPUP = 0x80000000;
    public static const int WS_SYSMENU = 0x80000;
    public static const int WS_TABSTOP = 0x10000;
    public static const int WS_THICKFRAME = 0x40000;
    public static const int WS_VISIBLE = 0x10000000;
    public static const int WS_VSCROLL = 0x200000;
    public static const int WM_XBUTTONDOWN = 0x020B;
    public static const int WM_XBUTTONUP = 0x020C;
    public static const int WM_XBUTTONDBLCLK = 0x020D;
    public static const int XBUTTON1 = 0x1;
    public static const int XBUTTON2 = 0x2;


//PORTING_LEFT
/++
/** Ansi/Unicode wrappers */

public static final int /*long*/ AddFontResourceEx (TCHAR lpszFilename, int fl, int /*long*/ pdv) {
    if (IsUnicode) {
        char [] lpszFilename1 = lpszFilename is null ? null : lpszFilename.chars;
        return AddFontResourceExW (lpszFilename1, fl, pdv);
    }
    byte [] lpszFilename1 = lpszFilename is null ? null : lpszFilename.bytes;
    return AddFontResourceExA (lpszFilename1, fl, pdv);
}

public static final int /*long*/ AssocQueryString(int flags, int str, TCHAR pszAssoc, TCHAR pszExtra, TCHAR pszOut, int[] pcchOut) {
    if (IsUnicode) {
        char [] pszAssoc1 = pszAssoc is null ? null : pszAssoc.chars;
        char [] pszExtra1 = pszExtra is null ? null : pszExtra.chars;
        char [] pszOut1 = pszOut is null ? null : pszOut.chars;
        return AssocQueryStringW (flags, str, pszAssoc1, pszExtra1, pszOut1, pcchOut);
    }
    byte [] pszAssoc1 = pszAssoc is null ? null : pszAssoc.bytes;
    byte [] pszExtra1 = pszExtra is null ? null : pszExtra.bytes;
    byte [] pszOut1 = pszOut is null ? null : pszOut.bytes;
    return AssocQueryStringA (flags, str, pszAssoc1, pszExtra1, pszOut1, pcchOut);
}

public static final int /*long*/ CallWindowProc (int /*long*/ lpPrevWndFunc, int /*long*/ hWnd, int Msg, int /*long*/ wParam, int /*long*/ lParam) {
    if (IsUnicode) return CallWindowProcW (lpPrevWndFunc, hWnd, Msg, wParam, lParam);
    return CallWindowProcA (lpPrevWndFunc, hWnd, Msg, wParam, lParam);
}

public static final short CharUpper (short ch) {
    if (IsUnicode) return CharUpperW (ch);
    return CharUpperA (ch);
}

public static final short CharLower (short ch) {
    if (IsUnicode) return CharLowerW (ch);
    return CharLowerA (ch);
}

public static final BOOL ChooseColor (CHOOSECOLOR lpcc) {
    if (IsUnicode) return ChooseColorW (lpcc);
    return ChooseColorA (lpcc);
}

public static final BOOL ChooseFont (CHOOSEFONT chooseFont) {
    if (IsUnicode) return ChooseFontW (chooseFont);
    return ChooseFontA (chooseFont);
}

public static final int /*long*/ CreateActCtx (ACTCTX pActCtx) {
    if (IsUnicode) return CreateActCtxW (pActCtx);
    return CreateActCtxA (pActCtx);
}

public static final int /*long*/ CreateAcceleratorTable (byte [] lpaccl, int cEntries) {
    if (IsUnicode) return CreateAcceleratorTableW (lpaccl, cEntries);
    return CreateAcceleratorTableA (lpaccl, cEntries);
}

public static final int /*long*/ CreateDC (TCHAR lpszDriver, TCHAR lpszDevice, int /*long*/ lpszOutput, int /*long*/ lpInitData) {
    if (IsUnicode) {
        char [] lpszDriver1 = lpszDriver is null ? null : lpszDriver.chars;
        char [] lpszDevice1 = lpszDevice is null ? null : lpszDevice.chars;
        return CreateDCW (lpszDriver1, lpszDevice1, lpszOutput, lpInitData);
    }
    byte [] lpszDriver1 = lpszDriver is null ? null : lpszDriver.bytes;
    byte [] lpszDevice1 = lpszDevice is null ? null : lpszDevice.bytes;
    return CreateDCA (lpszDriver1, lpszDevice1, lpszOutput, lpInitData);
}

public static final int /*long*/ CreateFontIndirect (int /*long*/ lplf) {
    if (IsUnicode) return CreateFontIndirectW (lplf);
    return CreateFontIndirectA (lplf);
}

public static final int /*long*/ CreateFontIndirect (LOGFONT lplf) {
    if (IsUnicode) return CreateFontIndirectW ((LOGFONTW)lplf);
    return CreateFontIndirectA ((LOGFONTA)lplf);
}

public static final BOOL CreateProcess (int /*long*/ lpApplicationName, int /*long*/ lpCommandLine, int /*long*/ lpProcessAttributes, int /*long*/ lpThreadAttributes, BOOL bInheritHandles, int dwCreationFlags, int /*long*/ lpEnvironment, int /*long*/ lpCurrentDirectory, STARTUPINFO lpStartupInfo, PROCESS_INFORMATION lpProcessInformation) {
    if (IsUnicode) return CreateProcessW (lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation);
    return CreateProcessA (lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation);
}

public static final int /*long*/ CreateWindowEx (int dwExStyle, TCHAR lpClassName, TCHAR lpWindowName, int dwStyle, int X, int Y, int nWidth, int nHeight, int /*long*/ hWndParent, int /*long*/ hMenu, int /*long*/ hInstance, CREATESTRUCT lpParam) {
    if (IsUnicode) {
        char [] lpClassName1 = lpClassName is null ? null : lpClassName.chars;
        char [] lpWindowName1 = lpWindowName is null ? null : lpWindowName.chars;
        return CreateWindowExW (dwExStyle, lpClassName1, lpWindowName1, dwStyle, X, Y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam);
    }
    byte [] lpClassName1 = lpClassName is null ? null : lpClassName.bytes;
    byte [] lpWindowName1 = lpWindowName is null ? null : lpWindowName.bytes;
    return CreateWindowExA (dwExStyle, lpClassName1, lpWindowName1, dwStyle, X, Y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam);
}

public static final int /*long*/ DefMDIChildProc (int /*long*/ hWnd, int Msg, int /*long*/ wParam, int /*long*/ lParam) {
    if (IsUnicode) return DefMDIChildProcW (hWnd, Msg, wParam, lParam);
    return DefMDIChildProcA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ DefFrameProc (int /*long*/ hWnd, int /*long*/ hWndMDIClient, int Msg, int /*long*/ wParam, int /*long*/ lParam) {
    if (IsUnicode) return DefFrameProcW (hWnd, hWndMDIClient, Msg, wParam, lParam);
    return DefFrameProcA (hWnd, hWndMDIClient, Msg, wParam, lParam);
}
public static final int /*long*/ DefWindowProc (int /*long*/ hWnd, int Msg, int /*long*/ wParam, int /*long*/ lParam) {
    if (IsUnicode) return DefWindowProcW (hWnd, Msg, wParam, lParam);
    return DefWindowProcA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ DispatchMessage (MSG lpmsg) {
    if (IsUnicode) return DispatchMessageW (lpmsg);
    return DispatchMessageA (lpmsg);
}

public static final int DragQueryFile (int /*long*/ hDrop, int iFile, TCHAR lpszFile, int cch) {
    if (IsUnicode) {
        char [] lpszFile1 = lpszFile is null ? null : lpszFile.chars;
        return DragQueryFileW (hDrop, iFile, lpszFile1, cch);
    }
    byte [] lpszFile1 = lpszFile is null ? null : lpszFile.bytes;
    return DragQueryFileA (hDrop, iFile, lpszFile1, cch);
}

public static final BOOL DrawState (int /*long*/ hdc, int /*long*/ hbr, int /*long*/ lpOutputFunc, int /*long*/ lData, int /*long*/ wData, int x, int y, int cx, int cy, int fuFlags) {
    if (IsUnicode) return DrawStateW (hdc, hbr, lpOutputFunc, lData, wData, x, y, cx, cy, fuFlags);
    return DrawStateA (hdc, hbr, lpOutputFunc, lData, wData, x, y, cx, cy, fuFlags);
}

public static final int DrawText (int /*long*/ hDC, TCHAR lpString, int nCount, RECT lpRect, int uFormat) {
    if (IsUnicode) {
        char [] lpString1 = lpString is null ? null : lpString.chars;
        return DrawTextW (hDC, lpString1, nCount, lpRect, uFormat);
    }
    byte [] lpString1 = lpString is null ? null : lpString.bytes;
    return DrawTextA (hDC, lpString1, nCount, lpRect, uFormat);
}

public static final int EnumFontFamilies (int /*long*/ hdc, TCHAR lpszFamily, int /*long*/ lpEnumFontFamProc, int /*long*/ lParam) {
    if (IsUnicode) {
        char [] lpszFamily1 = lpszFamily is null ? null : lpszFamily.chars;
        return EnumFontFamiliesW (hdc, lpszFamily1, lpEnumFontFamProc, lParam);
    }
    byte [] lpszFamily1 = lpszFamily is null ? null : lpszFamily.bytes;
    return EnumFontFamiliesA (hdc, lpszFamily1, lpEnumFontFamProc, lParam);
}

public static final int EnumFontFamiliesEx (int /*long*/ hdc, LOGFONT lpLogfont, int /*long*/ lpEnumFontFamExProc, int /*long*/ lParam, int dwFlags) {
    if (IsUnicode) return EnumFontFamiliesExW (hdc, (LOGFONTW)lpLogfont, lpEnumFontFamExProc, lParam, dwFlags);
    return EnumFontFamiliesExA (hdc, (LOGFONTA)lpLogfont, lpEnumFontFamExProc, lParam, dwFlags);
}

public static final BOOL EnumSystemLocales (int /*long*/ lpLocaleEnumProc, int dwFlags) {
    if (IsUnicode) return EnumSystemLocalesW (lpLocaleEnumProc, dwFlags);
    return EnumSystemLocalesA (lpLocaleEnumProc, dwFlags);
}

public static final BOOL EnumSystemLanguageGroups (int /*long*/ pLangGroupEnumProc, int dwFlags, int /*long*/ lParam) {
    if (IsUnicode) return EnumSystemLanguageGroupsW (pLangGroupEnumProc, dwFlags, lParam);
    return EnumSystemLanguageGroupsA (pLangGroupEnumProc, dwFlags, lParam);
}

public static final int ExpandEnvironmentStrings (TCHAR lpSrc, TCHAR lpDst, int nSize) {
    if (IsUnicode) {
        char [] lpSrc1 = lpSrc is null ? null : lpSrc.chars;
        char [] lpDst1 = lpDst is null ? null : lpDst.chars;
        return ExpandEnvironmentStringsW (lpSrc1, lpDst1, nSize);
    }
    byte [] lpSrc1 = lpSrc is null ? null : lpSrc.bytes;
    byte [] lpDst1 = lpDst is null ? null : lpDst.bytes;
    return ExpandEnvironmentStringsA (lpSrc1, lpDst1, nSize);
}

public static final int ExtractIconEx (TCHAR lpszFile, int nIconIndex, int /*long*/ [] phiconLarge, int /*long*/ [] phiconSmall, int nIcons) {
    if (IsUnicode) {
        char [] lpszFile1 = lpszFile is null ? null : lpszFile.chars;
        return ExtractIconExW (lpszFile1, nIconIndex, phiconLarge, phiconSmall, nIcons);
    }
    byte [] lpszFile1 = lpszFile is null ? null : lpszFile.bytes;
    return ExtractIconExA (lpszFile1, nIconIndex, phiconLarge, phiconSmall, nIcons);
}

public static final BOOL ExtTextOut(int /*long*/ hdc, int X, int Y, int fuOptions, RECT lprc, TCHAR lpString, int cbCount, int[] lpDx) {
    if (IsUnicode) {
        char [] lpString1 = lpString is null ? null : lpString.chars;
        return ExtTextOutW (hdc, X, Y, fuOptions, lprc, lpString1, cbCount, lpDx);
    }
    byte [] lpString1 = lpString is null ? null : lpString.bytes;
    return ExtTextOutA (hdc, X, Y, fuOptions, lprc, lpString1, cbCount, lpDx);
}

public static final int /*long*/ FindWindow (TCHAR lpClassName, TCHAR lpWindowName) {
    if (IsUnicode) {
        char [] lpClassName1 = lpClassName is null ? null : lpClassName.chars;
        char [] lpWindowName1 = lpWindowName is null ? null : lpWindowName.chars;
        return FindWindowW (lpClassName1, lpWindowName1);
    }
    byte [] lpClassName1 = lpClassName is null ? null : lpClassName.bytes;
    byte [] lpWindowName1 = lpWindowName is null ? null : lpWindowName.bytes;
    return FindWindowA (lpClassName1, lpWindowName1);
}

public static final int FormatMessage (int dwFlags, int /*long*/ lpSource, int dwMessageId, int dwLanguageId, int[] lpBuffer, int nSize, int /*long*/ Arguments) {
    if (IsUnicode) {
        return FormatMessageW (dwFlags, lpSource, dwMessageId, dwLanguageId, lpBuffer, nSize, Arguments);
    }
    return FormatMessageA (dwFlags, lpSource, dwMessageId, dwLanguageId, lpBuffer, nSize, Arguments);
}

public static final BOOL GetCharABCWidths (int /*long*/ hdc, int iFirstChar, int iLastChar, int [] lpabc) {
    if (IsUnicode) return GetCharABCWidthsW (hdc,iFirstChar, iLastChar, lpabc);
    return GetCharABCWidthsA (hdc,iFirstChar, iLastChar, lpabc);
}

public static final int GetCharacterPlacement (int /*long*/ hdc, TCHAR lpString, int nCount, int nMaxExtent, GCP_RESULTS lpResults, int dwFlags) {
    if (IsUnicode) {
        char [] lpString1 = lpString is null ? null : lpString.chars;
        return GetCharacterPlacementW (hdc, lpString1, nCount, nMaxExtent, lpResults, dwFlags);
    }
    byte [] lpString1 = lpString is null ? null : lpString.bytes;
    return GetCharacterPlacementA (hdc, lpString1, nCount, nMaxExtent, lpResults, dwFlags);
}

public static final BOOL GetCharWidth (int /*long*/ hdc, int iFirstChar, int iLastChar, int [] lpabc) {
    if (IsUnicode) return GetCharWidthW (hdc,iFirstChar, iLastChar, lpabc);
    return GetCharWidthA (hdc,iFirstChar, iLastChar, lpabc);
}

public static final BOOL GetClassInfo (int /*long*/ hInstance, TCHAR lpClassName, WNDCLASS lpWndClass) {
    if (IsUnicode) {
        char [] lpClassName1 = lpClassName is null ? null : lpClassName.chars;
        return GetClassInfoW (hInstance, lpClassName1, lpWndClass);
    }
    byte [] lpClassName1 = lpClassName is null ? null : lpClassName.bytes;
    return GetClassInfoA (hInstance, lpClassName1, lpWndClass);
}

public static final int GetClassName (int /*long*/ hWnd, TCHAR lpClassName, int nMaxCount) {
    if (IsUnicode) {
        char [] lpClassName1 = lpClassName is null ? null : lpClassName.chars;
        return GetClassNameW (hWnd, lpClassName1, nMaxCount);
    }
    byte [] lpClassName1 = lpClassName is null ? null : lpClassName.bytes;
    return GetClassNameA (hWnd, lpClassName1, nMaxCount);
}

public static final int GetClipboardFormatName (int format, TCHAR lpszFormatName, int cchMaxCount) {
    if (IsUnicode) {
        char [] lpszFormatName1 = lpszFormatName is null ? null : lpszFormatName.chars;
        return GetClipboardFormatNameW (format, lpszFormatName1, cchMaxCount);
    }
    byte [] lpszFormatName1 = lpszFormatName is null ? null : lpszFormatName.bytes;
    return GetClipboardFormatNameA (format, lpszFormatName1, cchMaxCount);
}

public static final int GetDateFormat (int Locale, int dwFlags, SYSTEMTIME lpDate, TCHAR lpFormat, TCHAR lpDateStr, int cchDate) {
    if (IsUnicode) {
        char [] lpString1 = lpFormat is null ? null : lpFormat.chars;
        char [] lpString2 = lpDateStr is null ? null : lpDateStr.chars;
        return GetDateFormatW (Locale, dwFlags, lpDate, lpString1, lpString2, cchDate);
    }
    byte [] lpString1 = lpFormat is null ? null : lpFormat.bytes;
    byte [] lpString2 = lpDateStr is null ? null : lpDateStr.bytes;
    return GetDateFormatA (Locale, dwFlags, lpDate, lpString1, lpString2, cchDate);
}

public static final int GetKeyNameText (int lParam, TCHAR lpString, int nSize) {
    if (IsUnicode) {
        char [] lpString1 = lpString is null ? null : lpString.chars;
        return GetKeyNameTextW (lParam, lpString1, nSize);
    }
    byte [] lpString1 = lpString is null ? null : lpString.bytes;
    return GetKeyNameTextA (lParam, lpString1, nSize);
}

public static final int GetLocaleInfo (int Locale, int LCType, TCHAR lpLCData, int cchData) {
    if (IsUnicode) {
        char [] lpLCData1 = lpLCData is null ? null : lpLCData.chars;
        return GetLocaleInfoW (Locale, LCType, lpLCData1, cchData);
    }
    byte [] lpLCData1 = lpLCData is null ? null : lpLCData.bytes;
    return GetLocaleInfoA (Locale, LCType, lpLCData1, cchData);
}

public static final BOOL GetMenuItemInfo (int /*long*/ hMenu, int uItem, BOOL fByPosition, MENUITEMINFO lpmii) {
    if (IsUnicode) return GetMenuItemInfoW (hMenu, uItem, fByPosition, lpmii);
    return GetMenuItemInfoA (hMenu, uItem, fByPosition, lpmii);
}

public static final BOOL GetMessage (MSG lpMsg, int /*long*/ hWnd, int wMsgFilterMin, int wMsgFilterMax) {
    if (IsUnicode) return GetMessageW (lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax);
    return GetMessageA (lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax);
}

public static final int GetModuleFileName (int /*long*/ hModule, TCHAR lpFilename, int inSize) {
    if (IsUnicode) {
        char [] lpFilename1 = lpFilename is null ? null : lpFilename.chars;
        return GetModuleFileNameW (hModule, lpFilename1, inSize);
    }
    byte [] lpFilename1 = lpFilename is null ? null : lpFilename.bytes;
    return GetModuleFileNameA (hModule, lpFilename1, inSize);
}

public static final int /*long*/ GetModuleHandle (TCHAR lpModuleName) {
    if (IsUnicode) {
        char [] lpModuleName1 = lpModuleName is null ? null : lpModuleName.chars;
        return GetModuleHandleW (lpModuleName1);
    }
    byte [] lpModuleName1 = lpModuleName is null ? null : lpModuleName.bytes;
    return GetModuleHandleA (lpModuleName1);
}

public static final BOOL GetMonitorInfo (int /*long*/ hmonitor, MONITORINFO lpmi) {
    if (IsUnicode) return GetMonitorInfoW (hmonitor, lpmi);
    return GetMonitorInfoA (hmonitor, lpmi);
}

public static final int GetObject (int /*long*/ hgdiobj, int cbBuffer, BITMAP lpvObject) {
    if (IsUnicode) return GetObjectW (hgdiobj, cbBuffer, lpvObject);
    return GetObjectA (hgdiobj, cbBuffer, lpvObject);
}

public static final int GetObject (int /*long*/ hgdiobj, int cbBuffer, DIBSECTION lpvObject) {
    if (IsUnicode) return GetObjectW (hgdiobj, cbBuffer, lpvObject);
    return GetObjectA (hgdiobj, cbBuffer, lpvObject);
}

public static final int GetObject (int /*long*/ hgdiobj, int cbBuffer, EXTLOGPEN lpvObject) {
    if (IsUnicode) return GetObjectW (hgdiobj, cbBuffer, lpvObject);
    return GetObjectA (hgdiobj, cbBuffer, lpvObject);
}

public static final int GetObject (int /*long*/ hgdiobj, int cbBuffer, LOGBRUSH lpvObject) {
    if (IsUnicode) return GetObjectW (hgdiobj, cbBuffer, lpvObject);
    return GetObjectA (hgdiobj, cbBuffer, lpvObject);
}

public static final int GetObject (int /*long*/ hgdiobj, int cbBuffer, LOGFONT lpvObject) {
    if (IsUnicode) return GetObjectW (hgdiobj, cbBuffer, (LOGFONTW)lpvObject);
    return GetObjectA (hgdiobj, cbBuffer, (LOGFONTA)lpvObject);
}

public static final int GetObject (int /*long*/ hgdiobj, int cbBuffer, LOGPEN lpvObject) {
    if (IsUnicode) return GetObjectW (hgdiobj, cbBuffer, lpvObject);
    return GetObjectA (hgdiobj, cbBuffer, lpvObject);
}

public static final int GetObject (int /*long*/ hgdiobj, int cbBuffer, int /*long*/ lpvObject) {
    if (IsUnicode) return GetObjectW (hgdiobj, cbBuffer, lpvObject);
    return GetObjectA (hgdiobj, cbBuffer, lpvObject);
}

public static final BOOL GetOpenFileName (OPENFILENAME lpofn) {
    if (IsUnicode) return GetOpenFileNameW (lpofn);
    return GetOpenFileNameA (lpofn);
}

public static final int GetProfileString (TCHAR lpAppName, TCHAR lpKeyName, TCHAR lpDefault, TCHAR lpReturnedString, int nSize) {
    if (IsUnicode) {
        char [] lpAppName1 = lpAppName is null ? null : lpAppName.chars;
        char [] lpKeyName1 = lpKeyName is null ? null : lpKeyName.chars;
        char [] lpDefault1 = lpDefault is null ? null : lpDefault.chars;
        char [] lpReturnedString1 = lpReturnedString is null ? null : lpReturnedString.chars;
        return GetProfileStringW (lpAppName1, lpKeyName1, lpDefault1, lpReturnedString1, nSize);
    }
    byte [] lpAppName1 = lpAppName is null ? null : lpAppName.bytes;
    byte [] lpKeyName1 = lpKeyName is null ? null : lpKeyName.bytes;
    byte [] lpDefault1 = lpDefault is null ? null : lpDefault.bytes;
    byte [] lpReturnedString1 = lpReturnedString is null ? null : lpReturnedString.bytes;
    return GetProfileStringA (lpAppName1, lpKeyName1, lpDefault1, lpReturnedString1, nSize);
}

public static int /*long*/ GetProp (int /*long*/ hWnd, int /*long*/ lpString) {
    if (IsUnicode) return GetPropW (hWnd, lpString);
    return GetPropA (hWnd, lpString);
}

public static final BOOL GetSaveFileName (OPENFILENAME lpofn) {
    if (IsUnicode) return GetSaveFileNameW (lpofn);
    return GetSaveFileNameA (lpofn);
}

public static final void GetStartupInfo (STARTUPINFO lpStartupInfo) {
    if (IsUnicode) {
        GetStartupInfoW (lpStartupInfo);
    } else {
        GetStartupInfoA (lpStartupInfo);
    }
}

public static final BOOL GetTextExtentPoint32 (int /*long*/ hdc, TCHAR lpString, int cbString, SIZE lpSize) {
    if (IsUnicode) {
        char [] lpString1 = lpString is null ? null : lpString.chars;
        return GetTextExtentPoint32W (hdc, lpString1, cbString, lpSize);
    }
    byte [] lpString1 = lpString is null ? null : lpString.bytes;
    return GetTextExtentPoint32A (hdc, lpString1, cbString, lpSize);
}

public static final BOOL GetTextMetrics (int /*long*/ hdc, TEXTMETRIC lptm) {
    if (IsUnicode) return GetTextMetricsW (hdc, (TEXTMETRICW)lptm);
    return GetTextMetricsA (hdc, (TEXTMETRICA)lptm);
}

public static final int GetTimeFormat (int Locale, int dwFlags, SYSTEMTIME lpTime, TCHAR lpFormat, TCHAR lpTimeStr, int cchTime) {
    if (IsUnicode) {
        char [] lpString1 = lpFormat is null ? null : lpFormat.chars;
        char [] lpString2 = lpTimeStr is null ? null : lpTimeStr.chars;
        return GetTimeFormatW (Locale, dwFlags, lpTime, lpString1, lpString2, cchTime);
    }
    byte [] lpString1 = lpFormat is null ? null : lpFormat.bytes;
    byte [] lpString2 = lpTimeStr is null ? null : lpTimeStr.bytes;
    return GetTimeFormatA (Locale, dwFlags, lpTime, lpString1, lpString2, cchTime);
}

public static final BOOL GetVersionEx (OSVERSIONINFO lpVersionInfo) {
    if (IsUnicode) return GetVersionExW ((OSVERSIONINFOW)lpVersionInfo);
    return GetVersionExA ((OSVERSIONINFOA)lpVersionInfo);
}

public static final BOOL GetVersionEx (OSVERSIONINFOEX lpVersionInfo) {
    if (IsUnicode) return GetVersionExW ((OSVERSIONINFOEXW)lpVersionInfo);
    return GetVersionExA ((OSVERSIONINFOEXA)lpVersionInfo);
}

public static final int GetWindowLong (int /*long*/ hWnd, int nIndex) {
    if (IsUnicode) return GetWindowLongW (hWnd, nIndex);
    return GetWindowLongA (hWnd, nIndex);
}

public static final int /*long*/ GetWindowLongPtr (int /*long*/ hWnd, int nIndex) {
    if (IsUnicode) return GetWindowLongPtrW (hWnd, nIndex);
    return GetWindowLongPtrA (hWnd, nIndex);
}

public static final int GetWindowText (int /*long*/ hWnd, TCHAR lpString, int nMaxCount) {
    if (IsUnicode) {
        char [] lpString1 = lpString is null ? null : lpString.chars;
        return GetWindowTextW (hWnd, lpString1, nMaxCount);
    }
    byte [] lpString1 = lpString is null ? null : lpString.bytes;
    return GetWindowTextA (hWnd, lpString1, nMaxCount);
}

public static final int GetWindowTextLength (int /*long*/ hWnd) {
    if (IsUnicode) return GetWindowTextLengthW (hWnd);
    return GetWindowTextLengthA (hWnd);
}

public static final int GlobalAddAtom (TCHAR lpString) {
    if (IsUnicode) {
        char [] lpString1 = lpString is null ? null : lpString.chars;
        return GlobalAddAtomW (lpString1);
    }
    byte [] lpString1 = lpString is null ? null : lpString.bytes;
    return GlobalAddAtomA (lpString1);
}

public static final BOOL ImmGetCompositionFont (int /*long*/ hIMC, LOGFONT lplf) {
    if (IsUnicode) return ImmGetCompositionFontW (hIMC, (LOGFONTW)lplf);
    return ImmGetCompositionFontA (hIMC, (LOGFONTA)lplf);
}

public static final BOOL ImmSetCompositionFont (int /*long*/ hIMC, LOGFONT lplf) {
    if (IsUnicode) return ImmSetCompositionFontW (hIMC, (LOGFONTW)lplf);
    return ImmSetCompositionFontA (hIMC, (LOGFONTA)lplf);
}

public static final int ImmGetCompositionString (int /*long*/ hIMC, int dwIndex, TCHAR lpBuf, int dwBufLen) {
    if (IsUnicode) {
        char [] lpBuf1 = lpBuf is null ? null : lpBuf.chars;
        return ImmGetCompositionStringW (hIMC, dwIndex, lpBuf1, dwBufLen);
    }
    byte [] lpBuf1 = lpBuf is null ? null : lpBuf.bytes;
    return ImmGetCompositionStringA (hIMC, dwIndex, lpBuf1, dwBufLen);
}

public static final BOOL InsertMenu (int /*long*/ hMenu, int uPosition, int uFlags, int /*long*/ uIDNewItem, TCHAR lpNewItem) {
    if (IsUnicode) {
        char [] lpNewItem1 = lpNewItem is null ? null : lpNewItem.chars;
        return InsertMenuW (hMenu, uPosition, uFlags, uIDNewItem, lpNewItem1);
    }
    byte [] lpNewItem1 = lpNewItem is null ? null : lpNewItem.bytes;
    return InsertMenuA (hMenu, uPosition, uFlags, uIDNewItem, lpNewItem1);
}

public static final BOOL InsertMenuItem (int /*long*/ hMenu, int uItem, BOOL fByPosition, MENUITEMINFO lpmii) {
    if (IsUnicode) return InsertMenuItemW (hMenu, uItem, fByPosition, lpmii);
    return InsertMenuItemA (hMenu, uItem, fByPosition, lpmii);
}

public static final int /*long*/ LoadBitmap (int /*long*/ hInstance, int /*long*/ lpBitmapName) {
    if (IsUnicode) return LoadBitmapW (hInstance, lpBitmapName);
    return LoadBitmapA (hInstance, lpBitmapName);
}

public static final int /*long*/ LoadCursor (int /*long*/ hInstance, int /*long*/ lpCursorName) {
    if (IsUnicode) return LoadCursorW (hInstance, lpCursorName);
    return LoadCursorA (hInstance, lpCursorName);
}

public static final int /*long*/ LoadIcon (int /*long*/ hInstance, int /*long*/ lpIconName) {
    if (IsUnicode) return LoadIconW (hInstance, lpIconName);
    return LoadIconA (hInstance, lpIconName);
}

public static final int /*long*/ LoadImage (int /*long*/ hinst, TCHAR lpszName, int uType, int cxDesired, int cyDesired, int fuLoad) {
    if (IsUnicode) {
        char [] lpszName1 = lpszName is null ? null : lpszName.chars;
        return LoadImageW (hinst, lpszName1, uType, cxDesired, cyDesired, fuLoad);
    }
    byte [] lpszName1 = lpszName is null ? null : lpszName.bytes;
    return LoadImageA (hinst, lpszName1, uType, cxDesired, cyDesired, fuLoad);
}

public static final int /*long*/ LoadImage (int /*long*/ hinst, int /*long*/ lpszName, int uType, int cxDesired, int cyDesired, int fuLoad) {
    if (IsUnicode) return LoadImageW (hinst, lpszName, uType, cxDesired, cyDesired, fuLoad);
    return LoadImageA (hinst, lpszName, uType, cxDesired, cyDesired, fuLoad);
}

public static final int /*long*/ LoadLibrary (TCHAR lpLibFileName) {
    if (IsUnicode) {
        char [] lpLibFileName1 = lpLibFileName is null ? null : lpLibFileName.chars;
        return LoadLibraryW (lpLibFileName1);
    }
    byte [] lpLibFileName1 = lpLibFileName is null ? null : lpLibFileName.bytes;
    return LoadLibraryA (lpLibFileName1);
}

public static final int LoadString (int /*long*/ hinst, int uID, TCHAR lpBuffer, int nBufferMax) {
    if (IsUnicode) {
        char [] lpBuffer1 = lpBuffer is null ? null : lpBuffer.chars;
        return LoadStringW (hinst, uID, lpBuffer1, nBufferMax);
    }
    byte [] lpBuffer1 = lpBuffer is null ? null : lpBuffer.bytes;
    return LoadStringA (hinst, uID, lpBuffer1, nBufferMax);
}

public static final int MapVirtualKey (int uCode, int uMapType) {
    if (IsUnicode) return MapVirtualKeyW (uCode, uMapType);
    return MapVirtualKeyA (uCode, uMapType);
}

public static final int MessageBox (int /*long*/ hWnd, TCHAR lpText, TCHAR lpCaption, int uType) {
    if (IsUnicode) {
        char [] lpText1 = lpText is null ? null : lpText.chars;
        char [] lpCaption1 = lpCaption is null ? null : lpCaption.chars;
        return MessageBoxW (hWnd, lpText1, lpCaption1, uType);
    }
    byte [] lpText1 = lpText is null ? null : lpText.bytes;
    byte [] lpCaption1 = lpCaption is null ? null : lpCaption.bytes;
    return MessageBoxA (hWnd, lpText1, lpCaption1, uType);
}

public static final void MoveMemory (int /*long*/ Destination, TCHAR Source, int Length) {
    if (IsUnicode) {
        char [] Source1 = Source is null ? null : Source.chars;
        MoveMemory (Destination, Source1, Length);
    } else {
        byte [] Source1 = Source is null ? null : Source.bytes;
        MoveMemory (Destination, Source1, Length);
    }
}

public static final void MoveMemory (TCHAR Destination, int /*long*/ Source, int Length) {
    if (IsUnicode) {
        char [] Destination1 = Destination is null ? null : Destination.chars;
        MoveMemory (Destination1, Source, Length);
    } else {
        byte [] Destination1 = Destination is null ? null : Destination.bytes;
        MoveMemory (Destination1, Source, Length);
    }
}

public static final void MoveMemory (int /*long*/ Destination, LOGFONT Source, int Length) {
    if (IsUnicode) {
        MoveMemory (Destination, (LOGFONTW)Source, Length);
    } else {
        MoveMemory (Destination, (LOGFONTA)Source, Length);
    }
}

public static final void MoveMemory (LOGFONT Destination, int /*long*/ Source, int Length) {
    if (IsUnicode) {
        MoveMemory ((LOGFONTW)Destination, Source, Length);
    } else {
        MoveMemory ((LOGFONTA)Destination, Source, Length);
    }
}

public static final void MoveMemory (int /*long*/ Destination, NMTTDISPINFO Source, int Length) {
    if (IsUnicode) {
        MoveMemory (Destination, (NMTTDISPINFOW)Source, Length);
    } else {
        MoveMemory (Destination, (NMTTDISPINFOA)Source, Length);
    }
}

public static final void MoveMemory (NMTTDISPINFO Destination, int /*long*/ Source, int Length) {
    if (IsUnicode) {
        MoveMemory ((NMTTDISPINFOW)Destination, Source, Length);
    } else {
        MoveMemory ((NMTTDISPINFOA)Destination, Source, Length);
    }
}

public static final void MoveMemory (TEXTMETRIC Destination, int /*long*/ Source, int Length) {
    if (IsUnicode) {
        MoveMemory ((TEXTMETRICW)Destination, Source, Length);
    } else {
        MoveMemory ((TEXTMETRICA)Destination, Source, Length);
    }
}

public static final BOOL PeekMessage (MSG lpMsg, int /*long*/ hWnd, int wMsgFilterMin, int wMsgFilterMax, int wRemoveMsg) {
    if (IsUnicode) return PeekMessageW (lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg);
    return PeekMessageA (lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax, wRemoveMsg);
}

public static final BOOL PostMessage (int /*long*/ hWnd, int Msg, int /*long*/ wParam, int /*long*/ lParam) {
    if (IsUnicode) return PostMessageW (hWnd, Msg, wParam, lParam);
    return PostMessageA (hWnd, Msg, wParam, lParam);
}

public static final BOOL PostThreadMessage (int idThread, int Msg, int /*long*/ wParam, int /*long*/ lParam) {
    if (IsUnicode) return PostThreadMessageW (idThread, Msg, wParam, lParam);
    return PostThreadMessageA (idThread, Msg, wParam, lParam);
}

public static final BOOL PrintDlg (PRINTDLG lppd) {
    if (IsUnicode) return PrintDlgW (lppd);
    return PrintDlgA (lppd);
}

public static final int RegEnumKeyEx (int /*long*/ hKey, int dwIndex, TCHAR lpName, int [] lpcName, int [] lpReserved, TCHAR lpClass, int [] lpcClass, FILETIME lpftLastWriteTime) {
    if (IsUnicode) {
        char [] lpName1 = lpName is null ? null : lpName.chars;
        char [] lpClass1 = lpClass is null ? null : lpClass.chars;
        return RegEnumKeyExW (hKey, dwIndex, lpName1, lpcName, lpReserved, lpClass1, lpcClass, lpftLastWriteTime);
    }
    byte [] lpName1 = lpName is null ? null : lpName.bytes;
    byte [] lpClass1 = lpClass is null ? null : lpClass.bytes;
    return RegEnumKeyExA (hKey, dwIndex, lpName1, lpcName, lpReserved, lpClass1, lpcClass, lpftLastWriteTime);
}

public static final int RegisterClass (WNDCLASS lpWndClass) {
    if (IsUnicode) return RegisterClassW (lpWndClass);
    return RegisterClassA (lpWndClass);
}

public static final int RegisterClipboardFormat (TCHAR lpszFormat) {
    if (IsUnicode) {
        char [] lpszFormat1 = lpszFormat is null ? null : lpszFormat.chars;
        return RegisterClipboardFormatW (lpszFormat1);
    }
    byte [] lpszFormat1 = lpszFormat is null ? null : lpszFormat.bytes;
    return RegisterClipboardFormatA (lpszFormat1);
}

public static final int RegisterWindowMessage (TCHAR lpString) {
    if (IsUnicode) {
        char [] lpString1 = lpString is null ? null : lpString.chars;
        return RegisterWindowMessageW (lpString1);
    }
    byte [] lpString1 = lpString is null ? null : lpString.bytes;
    return RegisterWindowMessageA (lpString1);
}

public static final int RegOpenKeyEx (int /*long*/ hKey, TCHAR lpSubKey, int ulOptions, int samDesired, int /*long*/[] phkResult) {
    if (IsUnicode) {
        char [] lpSubKey1 = lpSubKey is null ? null : lpSubKey.chars;
        return RegOpenKeyExW (hKey, lpSubKey1, ulOptions, samDesired, phkResult);
    }
    byte [] lpSubKey1 = lpSubKey is null ? null : lpSubKey.bytes;
    return RegOpenKeyExA (hKey, lpSubKey1, ulOptions, samDesired, phkResult);
}

public static final int RegQueryInfoKey (int /*long*/ hKey, int /*long*/ lpClass, int[] lpcbClass, int /*long*/ lpReserved, int[] lpSubKeys, int[] lpcbMaxSubKeyLen, int[] lpcbMaxClassLen, int[] lpcValues, int[] lpcbMaxValueNameLen, int[] lpcbMaxValueLen, int[] lpcbSecurityDescriptor, int /*long*/ lpftLastWriteTime){
    if (IsUnicode) return RegQueryInfoKeyW (hKey, lpClass, lpcbClass, lpReserved, lpSubKeys, lpcbMaxSubKeyLen, lpcbMaxClassLen, lpcValues, lpcbMaxValueNameLen, lpcbMaxValueLen, lpcbSecurityDescriptor, lpftLastWriteTime);
    return RegQueryInfoKeyA (hKey, lpClass, lpcbClass, lpReserved, lpSubKeys, lpcbMaxSubKeyLen, lpcbMaxClassLen, lpcValues, lpcbMaxValueNameLen, lpcbMaxValueLen, lpcbSecurityDescriptor, lpftLastWriteTime);
}

public static final int RegQueryValueEx (int /*long*/ hKey, TCHAR lpValueName, int /*long*/ lpReserved, int[] lpType, TCHAR lpData, int[] lpcbData) {
    if (IsUnicode) {
        char [] lpValueName1 = lpValueName is null ? null : lpValueName.chars;
        char [] lpData1 = lpData is null ? null : lpData.chars;
        return RegQueryValueExW (hKey, lpValueName1, lpReserved, lpType, lpData1, lpcbData);
    }
    byte [] lpValueName1 = lpValueName is null ? null : lpValueName.bytes;
    byte [] lpData1 = lpData is null ? null : lpData.bytes;
    return RegQueryValueExA (hKey, lpValueName1, lpReserved, lpType, lpData1, lpcbData);
}

public static final int RegQueryValueEx (int /*long*/ hKey, TCHAR lpValueName, int /*long*/ lpReserved, int[] lpType, int [] lpData, int[] lpcbData) {
    if (IsUnicode) {
        char [] lpValueName1 = lpValueName is null ? null : lpValueName.chars;
        return RegQueryValueExW (hKey, lpValueName1, lpReserved, lpType, lpData, lpcbData);
    }
    byte [] lpValueName1 = lpValueName is null ? null : lpValueName.bytes;
    return RegQueryValueExA (hKey, lpValueName1, lpReserved, lpType, lpData, lpcbData);
}

public static final int /*long*/ RemoveProp  (int /*long*/ hWnd, int /*long*/ lpString){
    if (IsUnicode) return RemovePropW (hWnd, lpString);
    return RemovePropA (hWnd, lpString);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int /*long*/ wParam, TCHAR lParam) {
    if (IsUnicode) {
        char [] lParam1 = lParam is null ? null : lParam.chars;
        return SendMessageW (hWnd, Msg, wParam, lParam1);
    }
    byte [] lParam1 = lParam is null ? null : lParam.bytes;
    return SendMessageA (hWnd, Msg, wParam, lParam1);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int [] wParam, int [] lParam) {
    if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);
    return SendMessageA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int /*long*/ wParam, SIZE lParam) {
    if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);
    return SendMessageA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int /*long*/ [] wParam, int /*long*/ lParam) {
    if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);
    return SendMessageA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int /*long*/ wParam, int [] lParam) {
    if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);
    return SendMessageA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int /*long*/ wParam, char [] lParam) {
    if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);
    return SendMessageA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int /*long*/ wParam, short [] lParam) {
    if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);
    return SendMessageA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int /*long*/ wParam, int /*long*/ lParam) {
    if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);
    return SendMessageA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int /*long*/ wParam, LITEM lParam) {
    if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);
    return SendMessageA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int /*long*/ wParam, LVCOLUMN lParam) {
    if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);
    return SendMessageA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int /*long*/ wParam, LVHITTESTINFO lParam) {
    if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);
    return SendMessageA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int /*long*/ wParam, LVITEM lParam) {
    if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);
    return SendMessageA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int /*long*/ wParam, MARGINS lParam) {
    if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);
    return SendMessageA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int /*long*/ wParam, POINT lParam) {
    if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);
    return SendMessageA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int /*long*/ wParam, REBARBANDINFO lParam) {
    if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);
    return SendMessageA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int /*long*/ wParam, RECT lParam) {
    if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);
    return SendMessageA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int /*long*/ wParam, SYSTEMTIME lParam) {
    if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);
    return SendMessageA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int /*long*/ wParam, TBBUTTON lParam) {
    if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);
    return SendMessageA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int /*long*/ wParam, TBBUTTONINFO lParam) {
    if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);
    return SendMessageA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int /*long*/ wParam, TCITEM lParam) {
    if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);
    return SendMessageA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int /*long*/ wParam, TOOLINFO lParam) {
    if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);
    return SendMessageA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int /*long*/ wParam, TVHITTESTINFO lParam) {
    if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);
    return SendMessageA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int /*long*/ wParam, TVINSERTSTRUCT lParam) {
    if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);
    return SendMessageA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int /*long*/ wParam, TVITEM lParam) {
    if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);
    return SendMessageA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int /*long*/ wParam, TVSORTCB lParam) {
    if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);
    return SendMessageA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int /*long*/ wParam, UDACCEL lParam) {
    if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);
    return SendMessageA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int /*long*/ wParam, HDHITTESTINFO lParam) {
    if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);
    return SendMessageA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int /*long*/ wParam, HDITEM lParam) {
    if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);
    return SendMessageA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int /*long*/ wParam, HDLAYOUT lParam) {
    if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);
    return SendMessageA (hWnd, Msg, wParam, lParam);
}

public static final int /*long*/ SendMessage (int /*long*/ hWnd, int Msg, int /*long*/ wParam, BUTTON_IMAGELIST lParam) {
    if (IsUnicode) return SendMessageW (hWnd, Msg, wParam, lParam);
    return SendMessageA (hWnd, Msg, wParam, lParam);
}

public static final BOOL SetMenuItemInfo (int /*long*/ hMenu, int uItem, BOOL fByPosition, MENUITEMINFO lpmii) {
    if (IsUnicode) return SetMenuItemInfoW (hMenu, uItem, fByPosition, lpmii);
    return SetMenuItemInfoA (hMenu, uItem, fByPosition, lpmii);
}

public static BOOL SetProp (int /*long*/ hWnd, int /*long*/ lpString, int /*long*/ hData) {
    if (IsUnicode) return SetPropW (hWnd, lpString, hData);
    return SetPropA (hWnd, lpString, hData);
}

public static final int SetWindowLong (int /*long*/ hWnd, int nIndex, int dwNewLong) {
    if (IsUnicode) return SetWindowLongW (hWnd, nIndex, dwNewLong);
    return SetWindowLongA (hWnd, nIndex, dwNewLong);
}

public static final int /*long*/ SetWindowLongPtr (int /*long*/ hWnd, int nIndex, int /*long*/ dwNewLong) {
    if (IsUnicode) return SetWindowLongPtrW (hWnd, nIndex, dwNewLong);
    return SetWindowLongPtrA (hWnd, nIndex, dwNewLong);
}

public static final int /*long*/ SetWindowsHookEx (int idHook, int /*long*/ lpfn, int /*long*/ hMod, int dwThreadId) {
    if (IsUnicode) return SetWindowsHookExW (idHook, lpfn, hMod, dwThreadId);
    return SetWindowsHookExA (idHook, lpfn, hMod, dwThreadId);
}

public static final BOOL SetWindowText (int /*long*/ hWnd, TCHAR lpString) {
    if (IsUnicode) {
        char [] lpString1 = lpString is null ? null : lpString.chars;
        return SetWindowTextW (hWnd, lpString1);
    }
    byte [] lpString1 = lpString is null ? null : lpString.bytes;
    return SetWindowTextA (hWnd, lpString1);
}

public static final int /*long*/ SHBrowseForFolder (BROWSEINFO lpbi) {
    if (IsUnicode) return SHBrowseForFolderW (lpbi);
    return SHBrowseForFolderA (lpbi);
}

public static final BOOL ShellExecuteEx (SHELLEXECUTEINFO lpExecInfo) {
    if (IsUnicode) return ShellExecuteExW (lpExecInfo);
    return ShellExecuteExA (lpExecInfo);
}

public static int /*long*/ SHGetFileInfo (TCHAR pszPath, int dwFileAttributes, SHFILEINFO psfi, int cbFileInfo, int uFlags) {
    if (IsUnicode) {
        char [] pszPath1 = pszPath is null ? null : pszPath.chars;
        return SHGetFileInfoW (pszPath1, dwFileAttributes, (SHFILEINFOW) psfi, cbFileInfo, uFlags);
    }
    byte [] pszPath1 = pszPath is null ? null : pszPath.bytes;
    return SHGetFileInfoA (pszPath1, dwFileAttributes, (SHFILEINFOA) psfi, cbFileInfo, uFlags);
}

public static final BOOL Shell_NotifyIcon (int dwMessage, NOTIFYICONDATA lpData) {
    if (IsUnicode) return Shell_NotifyIconW (dwMessage, (NOTIFYICONDATAW)lpData);
    return Shell_NotifyIconA (dwMessage, (NOTIFYICONDATAA)lpData);
}

public static final BOOL SHGetPathFromIDList (int /*long*/ pidl, TCHAR pszPath) {
    if (IsUnicode) {
        char [] pszPath1 = pszPath is null ? null : pszPath.chars;
        return SHGetPathFromIDListW (pidl, pszPath1);
    }
    byte [] pszPath1 = pszPath is null ? null : pszPath.bytes;
    return SHGetPathFromIDListA (pidl, pszPath1);
}

public static final int StartDoc (int /*long*/ hdc, DOCINFO lpdi) {
    if (IsUnicode) return StartDocW (hdc, lpdi);
    return StartDocA (hdc, lpdi);
}

public static final BOOL SystemParametersInfo (int uiAction, int uiParam, RECT pvParam, int fWinIni) {
    if (IsUnicode) return SystemParametersInfoW (uiAction, uiParam, pvParam, fWinIni);
    return SystemParametersInfoA (uiAction, uiParam, pvParam, fWinIni);
}

public static final BOOL SystemParametersInfo (int uiAction, int uiParam, HIGHCONTRAST pvParam, int fWinIni) {
    if (IsUnicode) return SystemParametersInfoW (uiAction, uiParam, pvParam, fWinIni);
    return SystemParametersInfoA (uiAction, uiParam, pvParam, fWinIni);
}

public static final BOOL SystemParametersInfo (int uiAction, int uiParam, NONCLIENTMETRICS pvParam, int fWinIni) {
    if (IsUnicode) return SystemParametersInfoW (uiAction, uiParam, (NONCLIENTMETRICSW)pvParam, fWinIni);
    return SystemParametersInfoA (uiAction, uiParam, (NONCLIENTMETRICSA)pvParam, fWinIni);
}

public static final BOOL SystemParametersInfo (int uiAction, int uiParam, int [] pvParam, int fWinIni) {
    if (IsUnicode) return SystemParametersInfoW (uiAction, uiParam, pvParam, fWinIni);
    return SystemParametersInfoA (uiAction, uiParam, pvParam, fWinIni);
}

public static final int TranslateAccelerator (int /*long*/ hWnd, int /*long*/ hAccTable, MSG lpMsg) {
    if (IsUnicode) return TranslateAcceleratorW (hWnd, hAccTable, lpMsg);
    return TranslateAcceleratorA (hWnd, hAccTable, lpMsg);
}

public static final BOOL UnregisterClass (TCHAR lpClassName, int /*long*/ hInstance) {
    if (IsUnicode) {
        char [] lpClassName1 = lpClassName is null ? null : lpClassName.chars;
        return UnregisterClassW (lpClassName1, hInstance);
    }
    byte [] lpClassName1 = lpClassName is null ? null : lpClassName.bytes;
    return UnregisterClassA (lpClassName1, hInstance);
}

public static final short VkKeyScan (short ch) {
    if (IsUnicode) return VkKeyScanW (ch);
    return VkKeyScanA (ch);
}

/** Natives */
public static final native int AbortDoc (int /*long*/ hdc);
public static final native BOOL ActivateActCtx (int /*long*/ hActCtx, int /*long*/ [] lpCookie);
public static final native int /*long*/ ActivateKeyboardLayout(int /*long*/ hkl, int Flags);
public static final native int AddFontResourceExW(char[] lpszFilename, int fl, int /*long*/ pdv);
public static final native int AddFontResourceExA(byte[] lpszFilename, int fl, int /*long*/ pdv);
public static final native BOOL AdjustWindowRectEx (RECT lpRect, int dwStyle, BOOL bMenu, int dwExStyle);
public static final native BOOL AlphaBlend(int /*long*/ hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeightDest, int /*long*/ hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, BLENDFUNCTION blendFunction);
public static final native BOOL AnimateWindow(int /*long*/ hwnd, int dwTime, int dwFlags);
public static final native BOOL Arc (int /*long*/ hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int nXStartArc, int nYStartArc, int nXEndArc, int nYEndArc);
public static final native int AssocQueryStringA(int flags, int str, byte[] pszAssoc, byte[] pszExtra, byte[] pszOut, int[] pcchOut);
public static final native int AssocQueryStringW(int flags, int str, char[] pszAssoc, char[] pszExtra, char[] pszOut, int[] pcchOut);
public static final native BOOL AttachThreadInput (int idAttach, int idAttachTo, BOOL fAttach);
public static final native int /*long*/ BeginBufferedPaint (int /*long*/ hdcTarget, RECT prcTarget, int dwFormat, BP_PAINTPARAMS pPaintParams, int /*long*/ [] phdc);
public static final native int /*long*/ BeginDeferWindowPos (int nNumWindows);
public static final native int /*long*/ BeginPaint (int /*long*/ hWnd, PAINTSTRUCT lpPaint);
public static final native BOOL BeginPath(int /*long*/ hdc);
public static final native BOOL BitBlt (int /*long*/ hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, int /*long*/ hdcSrc, int nXSrc, int nYSrc, int dwRop);
public static final native BOOL BringWindowToTop (int /*long*/ hWnd);
public static final native int BufferedPaintInit ();
public static final native int BufferedPaintSetAlpha (int /*long*/ hBufferedPaint, RECT prc, byte alpha);
public static final native int BufferedPaintUnInit ();
public static final native int Call (int /*long*/ address, DLLVERSIONINFO arg0);
public static final native int /*long*/ CallNextHookEx(int /*long*/ hhk, int nCode, int /*long*/ wParam, int /*long*/ lParam);
public static final native int /*long*/ CallWindowProcW (int /*long*/ lpPrevWndFunc, int /*long*/ hWnd, int Msg, int /*long*/ wParam, int /*long*/ lParam);
public static final native int /*long*/ CallWindowProcA (int /*long*/ lpPrevWndFunc, int /*long*/ hWnd, int Msg, int /*long*/ wParam, int /*long*/ lParam);
public static final native short CharLowerW (short ch);
public static final native short CharLowerA (short ch);
public static final native short CharUpperW (short ch);
public static final native short CharUpperA (short ch);
public static final native BOOL CheckMenuItem (int /*long*/ hmenu, int uIDCheckItem, int uCheck);
public static final native BOOL ChooseColorW (CHOOSECOLOR lpcc);
public static final native BOOL ChooseColorA (CHOOSECOLOR lpcc);
public static final native BOOL ChooseFontW (CHOOSEFONT chooseFont);
public static final native BOOL ChooseFontA (CHOOSEFONT chooseFont);
public static final native BOOL ClientToScreen (int /*long*/ hWnd, POINT lpPoint);
public static final native BOOL CloseClipboard ();
public static final native BOOL CloseHandle (int /*long*/ hObject);
public static final native int CloseThemeData (int /*long*/ hTheme);
public static final native int CoCreateInstance (byte[] rclsid, int /*long*/ pUnkOuter, int dwClsContext, byte[] riid, int /*long*/[] ppv);
public static final native int CoInternetIsFeatureEnabled (int FeatureEntry, int dwFlags);
public static final native int CoInternetSetFeatureEnabled (int FeatureEntry, int dwFlags, BOOL fEnable);
public static final native int CombineRgn (int /*long*/ hrgnDest, int /*long*/ hrgnSrc1, int /*long*/ hrgnSrc2, int fnCombineMode);
public static final native BOOL CommandBar_AddAdornments (int /*long*/ hwndCB, int dwFlags, int dwReserved);
public static final native int /*long*/ CommandBar_Create (int /*long*/ hInst, int /*long*/ hwndParent, int idCmdBar);
public static final native void CommandBar_Destroy (int /*long*/ hwndCB);
public static final native BOOL CommandBar_DrawMenuBar (int /*long*/ hwndCB, int iButton);
public static final native int CommandBar_Height (int /*long*/ hdnwCB);
public static final native BOOL CommandBar_InsertMenubarEx (int /*long*/ hwndCB, int /*long*/ hInst, int /*long*/ pszMenu, int iButton);
public static final native BOOL CommandBar_Show (int /*long*/ hwndCB, BOOL fShow);
public static final native int CommDlgExtendedError ();
public static final native int /*long*/ CopyImage (int /*long*/ hImage, int uType, int cxDesired, int cyDesired, int fuFlags);
public static final native int /*long*/ CreateAcceleratorTableW (byte [] lpaccl, int cEntries);
public static final native int /*long*/ CreateAcceleratorTableA (byte [] lpaccl, int cEntries);
public static final native int /*long*/ CreateActCtxW (ACTCTX pActCtx);
public static final native int /*long*/ CreateActCtxA (ACTCTX pActCtx);
public static final native int /*long*/ CreateBitmap (int nWidth, int nHeight, int cPlanes, int cBitsPerPel, byte [] lpvBits);
public static final native BOOL CreateCaret (int /*long*/ hWnd, int /*long*/ hBitmap, int nWidth, int nHeight);
public static final native int /*long*/ CreateCompatibleBitmap (int /*long*/ hdc, int nWidth, int nHeight);
public static final native int /*long*/ CreateCompatibleDC (int /*long*/ hdc);
public static final native int /*long*/ CreateCursor (int /*long*/ hInst, int xHotSpot, int yHotSpot, int nWidth, int nHeight, byte [] pvANDPlane, byte [] pvXORPlane);
public static final native int /*long*/ CreateDCW (char [] lpszDriver, char [] lpszDevice, int /*long*/ lpszOutput, int /*long*/ lpInitData);
public static final native int /*long*/ CreateDCA (byte [] lpszDriver, byte [] lpszDevice, int /*long*/ lpszOutput, int /*long*/ lpInitData);
public static final native int /*long*/ CreateDIBSection(int /*long*/ hdc, byte[] pbmi, int iUsage, int /*long*/[] ppvBits, int /*long*/ hSection, int dwOffset);
public static final native int /*long*/ CreateFontIndirectW (int /*long*/ lplf);
public static final native int /*long*/ CreateFontIndirectA (int /*long*/ lplf);
public static final native int /*long*/ CreateFontIndirectW (LOGFONTW lplf);
public static final native int /*long*/ CreateFontIndirectA (LOGFONTA lplf);
public static final native int /*long*/ CreateIconIndirect (ICONINFO lplf);
public static final native int /*long*/ CreateMenu ();
public static final native int /*long*/ CreatePalette (byte[] logPalette);
public static final native int /*long*/ CreatePatternBrush (int /*long*/ colorRef);
public static final native int /*long*/ CreatePen (int fnPenStyle, int nWidth, int crColor);
public static final native int /*long*/ CreatePolygonRgn(int[] lppt, int cPoints, int fnPolyFillMode);
public static final native int /*long*/ CreatePopupMenu ();
public static final native BOOL CreateProcessW (int /*long*/ lpApplicationName, int /*long*/ lpCommandLine, int /*long*/ lpProcessAttributes, int /*long*/ lpThreadAttributes, BOOL bInheritHandles, int dwCreationFlags, int /*long*/ lpEnvironment, int /*long*/ lpCurrentDirectory, STARTUPINFO lpStartupInfo, PROCESS_INFORMATION lpProcessInformation);
public static final native BOOL CreateProcessA (int /*long*/ lpApplicationName, int /*long*/ lpCommandLine, int /*long*/ lpProcessAttributes, int /*long*/ lpThreadAttributes, BOOL bInheritHandles, int dwCreationFlags, int /*long*/ lpEnvironment, int /*long*/ lpCurrentDirectory, STARTUPINFO lpStartupInfo, PROCESS_INFORMATION lpProcessInformation);
public static final native int /*long*/ CreateRectRgn (int left, int top, int right, int bottom);
public static final native int /*long*/ CreateSolidBrush (int colorRef);
public static final native int CreateStreamOnHGlobal(int /*long*/ hGlobal, BOOL fDeleteOnRelease, int /*long*/[] ppstm);
public static final native int /*long*/ CreateWindowExW (int dwExStyle, char [] lpClassName, char [] lpWindowName, int dwStyle, int X, int Y, int nWidth, int nHeight, int /*long*/ hWndParent, int /*long*/ hMenu, int /*long*/ hInstance, CREATESTRUCT lpParam);
public static final native int /*long*/ CreateWindowExA (int dwExStyle, byte [] lpClassName, byte [] lpWindowName, int dwStyle, int X, int Y, int nWidth, int nHeight, int /*long*/ hWndParent, int /*long*/ hMenu, int /*long*/ hInstance, CREATESTRUCT lpParam);
public static final native int /*long*/ DeferWindowPos (int /*long*/ hWinPosInfo, int /*long*/ hWnd, int /*long*/ hWndInsertAfter, int X, int Y, int cx, int cy, int uFlags);
public static final native int /*long*/ DefMDIChildProcW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, int /*long*/ lParam);
public static final native int /*long*/ DefMDIChildProcA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, int /*long*/ lParam);
public static final native int /*long*/ DefFrameProcW (int /*long*/ hWnd, int /*long*/ hWndMDIClient, int Msg, int /*long*/ wParam, int /*long*/ lParam);
public static final native int /*long*/ DefFrameProcA (int /*long*/ hWnd, int /*long*/ hWndMDIClient, int Msg, int /*long*/ wParam, int /*long*/ lParam);
public static final native int /*long*/ DefWindowProcW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, int /*long*/ lParam);
public static final native int /*long*/ DefWindowProcA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, int /*long*/ lParam);
public static final native BOOL DeleteDC (int /*long*/ hdc);
public static final native BOOL DeleteMenu (int /*long*/ hMenu, int uPosition, int uFlags);
public static final native BOOL DeleteObject (int /*long*/ hGdiObj);
public static final native BOOL DestroyAcceleratorTable (int /*long*/ hAccel);
public static final native BOOL DestroyCaret ();
public static final native BOOL DestroyCursor (int /*long*/ hCursor);
public static final native BOOL DestroyIcon (int /*long*/ hIcon);
public static final native BOOL DestroyMenu (int /*long*/ hMenu);
public static final native BOOL DestroyWindow (int /*long*/ hWnd);
public static final native int /*long*/ DispatchMessageW (MSG lpmsg);
public static final native int /*long*/ DispatchMessageA (MSG lpmsg);
public static final native BOOL DragDetect (int /*long*/ hwnd, POINT pt);
public static final native void DragFinish (int /*long*/ hDrop);
public static final native int DragQueryFileA (int /*long*/ hDrop, int iFile, byte[] lpszFile, int cch);
public static final native int DragQueryFileW (int /*long*/ hDrop, int iFile, char[] lpszFile, int cch);
public static final native BOOL DrawAnimatedRects (int /*long*/ hwnd, int idAni, RECT lprcFrom, RECT lprcTo);
public static final native BOOL DrawEdge (int /*long*/ hdc, RECT qrc, int edge, int grfFlags);
public static final native BOOL DrawFocusRect (int /*long*/ hDC, RECT lpRect);
public static final native BOOL DrawFrameControl (int /*long*/ hdc, RECT lprc, int uType, int uState);
public static final native BOOL DrawIconEx (int /*long*/ hdc, int xLeft, int yTop, int /*long*/ hIcon, int cxWidth, int cyWidth, int istepIfAniCur, int /*long*/ hbrFlickerFreeDraw, int diFlags);
public static final native BOOL DrawMenuBar (int /*long*/ hWnd);
public static final native BOOL DrawStateW (int /*long*/ hdc, int /*long*/ hbr, int /*long*/ lpOutputFunc, int /*long*/ lData, int /*long*/ wData, int x, int y, int cx, int cy, int fuFlags);
public static final native BOOL DrawStateA (int /*long*/ hdc, int /*long*/ hbr, int /*long*/ lpOutputFunc, int /*long*/ lData, int /*long*/ wData, int x, int y, int cx, int cy, int fuFlags);
public static final native int DrawTextW (int /*long*/ hDC, char [] lpString, int nCount, RECT lpRect, int uFormat);
public static final native int DrawTextA (int /*long*/ hDC, byte [] lpString, int nCount, RECT lpRect, int uFormat);
public static final native int DrawThemeBackground (int /*long*/ hTheme, int /*long*/ hdc, int iPartId, int iStateId, RECT pRect, RECT pClipRect);
public static final native int DrawThemeEdge (int /*long*/ hTheme, int /*long*/ hdc, int iPartId, int iStateId, RECT pDestRect, int uEdge, int uFlags, RECT pContentRect);
public static final native int DrawThemeIcon (int /*long*/ hTheme, int /*long*/ hdc, int iPartId, int iStateId, RECT pRect, int /*long*/ himl, int iImageIndex);
public static final native int DrawThemeParentBackground (int /*long*/ hwnd, int /*long*/ hdc, RECT prc);
public static final native int DrawThemeText (int /*long*/ hTheme, int /*long*/ hdc, int iPartId, int iStateId, char[] pszText, int iCharCount, int dwTextFlags, int dwTextFlags2, RECT pRect);
public static final native int DwmExtendFrameIntoClientArea (int /*long*/ hWnd, MARGINS pMarInset);
public static final native BOOL Ellipse (int /*long*/ hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect);
public static final native BOOL EnableMenuItem (int /*long*/ hMenu, int uIDEnableItem, int uEnable);
public static final native BOOL EnableScrollBar (int /*long*/ hWnd, int wSBflags, int wArrows);
public static final native BOOL EnableWindow (int /*long*/ hWnd, BOOL bEnable);
public static final native BOOL EnumSystemLanguageGroupsW(int /*long*/ pLangGroupEnumProc, int dwFlags, int /*long*/ lParam);
public static final native BOOL EnumSystemLanguageGroupsA(int /*long*/ pLangGroupEnumProc, int dwFlags, int /*long*/ lParam);
public static final native BOOL EnumSystemLocalesW (int /*long*/ lpLocaleEnumProc, int dwFlags);
public static final native BOOL EnumSystemLocalesA (int /*long*/ lpLocaleEnumProc, int dwFlags);
public static final native BOOL EndDeferWindowPos (int /*long*/ hWinPosInfo);
public static final native int EndBufferedPaint (int /*long*/ hBufferedPaint, BOOL fUpdateTarget);
public static final native int EndDoc (int /*long*/ hdc);
public static final native int EndPage (int /*long*/ hdc);
public static final native int EndPaint (int /*long*/ hWnd, PAINTSTRUCT lpPaint);
public static final native BOOL EndPath(int /*long*/ hdc);
public static final native BOOL EnumDisplayMonitors (int /*long*/ hdc, RECT lprcClip, int /*long*/ lpfnEnum, int dwData);
public static final native int EnumFontFamiliesW (int /*long*/ hdc, char [] lpszFamily, int /*long*/ lpEnumFontFamProc, int /*long*/ lParam);
public static final native int EnumFontFamiliesA (int /*long*/ hdc, byte [] lpszFamily, int /*long*/ lpEnumFontFamProc, int /*long*/ lParam);
public static final native int EnumFontFamiliesExW (int /*long*/ hdc, LOGFONTW lpLogfont, int /*long*/ lpEnumFontFamExProc, int /*long*/ lParam, int dwFlags);
public static final native int EnumFontFamiliesExA (int /*long*/ hdc, LOGFONTA lpLogfont, int /*long*/ lpEnumFontFamExProc, int /*long*/ lParam, int dwFlags);
public static final native BOOL EqualRect (RECT lprc1, RECT lprc2);
public static final native BOOL EqualRgn (int /*long*/ hSrcRgn1, int /*long*/ hSrcRgn2);
public static final native int ExcludeClipRect (int /*long*/ hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect);
public static final native int ExpandEnvironmentStringsW (char [] lpSrc, char [] lsDst, int nSize);
public static final native int ExpandEnvironmentStringsA (byte [] lpSrc, byte [] lsDst, int nSize);
public static final native int /*long*/ ExtCreatePen (int dwPenStyle, int dwWidth, LOGBRUSH lplb, int dwStyleCount, int[] lpStyle);
public static final native int /*long*/ ExtCreateRegion (float[] lpXform, int nCount, int[] lpRgnData);
public static final native BOOL ExtTextOutW (int /*long*/ hdc, int X, int Y, int fuOptions, RECT lprc, char[] lpString, int cbCount, int[] lpDx);
public static final native BOOL ExtTextOutA (int /*long*/ hdc, int X, int Y, int fuOptions, RECT lprc, byte[] lpString, int cbCount, int[] lpDx);
public static final native int ExtractIconExW (char [] lpszFile, int nIconIndex, int /*long*/ [] phiconLarge, int /*long*/ [] phiconSmall, int nIcons);
public static final native int ExtractIconExA (byte [] lpszFile, int nIconIndex, int /*long*/ [] phiconLarge, int /*long*/ [] phiconSmall, int nIcons);
public static final native int FillRect (int /*long*/ hDC, RECT lprc, int /*long*/ hbr);
public static final native BOOL FillPath (int /*long*/ hdc);
public static final native int /*long*/ FindWindowA (byte [] lpClassName, byte [] lpWindowName);
public static final native int /*long*/ FindWindowW (char [] lpClassName, char [] lpWindowName);
public static final native int FormatMessageA (int dwFlags, int /*long*/ lpSource, int dwMessageId, int dwLanguageId, int[] lpBuffer, int nSize, int /*long*/ Arguments);
public static final native int FormatMessageW (int dwFlags, int /*long*/ lpSource, int dwMessageId, int dwLanguageId, int[] lpBuffer, int nSize, int /*long*/ Arguments);
public static final native BOOL FreeLibrary (int /*long*/ hLibModule);
public static final native int GdiSetBatchLimit (int dwLimit);
public static final native int GetACP ();
public static final native short GetAsyncKeyState (int nVirtKey);
public static final native int /*long*/ GetActiveWindow ();
public static final native int GetBkColor (int /*long*/ hDC);
public static final native int /*long*/ GetCapture ();
public static final native BOOL GetCaretPos (POINT lpPoint);
public static final native BOOL GetCharABCWidthsA (int /*long*/ hdc, int iFirstChar, int iLastChar, int [] lpabc);
public static final native BOOL GetCharABCWidthsW (int /*long*/ hdc, int iFirstChar, int iLastChar, int [] lpabc);
public static final native int GetCharacterPlacementW (int /*long*/ hdc, char[] lpString, int nCount, int nMaxExtent, GCP_RESULTS lpResults, int dwFlags);
public static final native int GetCharacterPlacementA (int /*long*/ hdc, byte[] lpString, int nCount, int nMaxExtent, GCP_RESULTS lpResults, int dwFlags);
public static final native BOOL GetCharWidthA (int /*long*/ hdc, int iFirstChar, int iLastChar, int [] lpBuffer);
public static final native BOOL GetCharWidthW (int /*long*/ hdc, int iFirstChar, int iLastChar, int [] lpBuffer);
public static final native BOOL GetClassInfoW (int /*long*/ hInstance, char [] lpClassName, WNDCLASS lpWndClass);
public static final native BOOL GetClassInfoA (int /*long*/ hInstance, byte [] lpClassName, WNDCLASS lpWndClass);
public static final native int GetClassNameW (int /*long*/ hWnd, char [] lpClassName, int nMaxCount);
public static final native int GetClassNameA (int /*long*/ hWnd, byte [] lpClassName, int nMaxCount);
public static final native BOOL GetClientRect (int /*long*/ hWnd, RECT lpRect);
public static final native int /*long*/ GetClipboardData (int uFormat);
public static final native int GetClipboardFormatNameA (int format, byte[] lpszFormatName, int cchMaxCount);
public static final native int GetClipboardFormatNameW (int format, char[] lpszFormatName, int cchMaxCount);
public static final native int GetClipBox (int /*long*/ hdc, RECT lprc);
public static final native int GetClipRgn (int /*long*/ hdc, int /*long*/ hrgn);
public static final native BOOL GetComboBoxInfo (int /*long*/ hwndCombo, COMBOBOXINFO pcbi);
public static final native int /*long*/ GetCurrentObject (int /*long*/ hdc, int uObjectType);
public static final native int GetCurrentProcessId ();
public static final native int GetCurrentThreadId ();
public static final native int /*long*/ GetCursor ();
public static final native BOOL GetCursorPos (POINT lpPoint);
public static final native int GetDateFormatW(int Locale, int dwFlags, SYSTEMTIME lpDate, char [] lpFormat, char [] lpDateStr, int cchDate);
public static final native int GetDateFormatA(int Locale, int dwFlags, SYSTEMTIME lpDate, byte [] lpFormat, byte [] lpDateStr, int cchDate);
public static final native int /*long*/ GetDC (int /*long*/ hwnd);
public static final native int /*long*/ GetDCEx (int /*long*/ hWnd, int /*long*/ hrgnClip, int flags);
public static final native int /*long*/ GetDesktopWindow ();
public static final native int GetDeviceCaps (int /*long*/ hdc, int nIndex);
public static final native int GetDialogBaseUnits ();
public static final native int GetDIBColorTable (int /*long*/ hdc, int uStartIndex, int cEntries, byte[] pColors);
public static final native int GetDIBits (int /*long*/ hdc, int /*long*/ hbmp, int uStartScan, int cScanLines, int /*long*/ lpvBits, byte[] lpbi, int uUsage);
public static final native int /*long*/ GetDlgItem (int /*long*/ hDlg, int nIDDlgItem);
public static final native int GetDoubleClickTime ();
public static final native int /*long*/ GetFocus ();
public static final native int GetFontLanguageInfo (int /*long*/ hdc);
public static final native int /*long*/ GetForegroundWindow ();
public static final native BOOL GetGUIThreadInfo (int idThread, GUITHREADINFO lpgui);
public static final native BOOL GetIconInfo (int /*long*/ hIcon, ICONINFO piconinfo);
public static final native int GetKeyboardLayoutList (int nBuff, int /*long*/ [] lpList);
public static final native int /*long*/ GetKeyboardLayout (int idThread);
public static final native short GetKeyState (int nVirtKey);
public static final native BOOL GetKeyboardState (byte [] lpKeyState);
public static final native int GetKeyNameTextW (int lParam, char [] lpString, int nSize);
public static final native int GetKeyNameTextA (int lParam, byte [] lpString, int nSize);
public static final native int /*long*/ GetLastActivePopup (int /*long*/ hWnd);
public static final native int GetLastError ();
public static final native int GetLayout (int /*long*/ hdc);
/* returns the instance handle to the swt library */
public static final native int /*long*/ GetLibraryHandle ();
public static final native int GetLocaleInfoW (int Locale, int LCType, char [] lpLCData, int cchData);
public static final native int GetLocaleInfoA (int Locale, int LCType, byte [] lpLCData, int cchData);
public static final native int /*long*/ GetMenu (int /*long*/ hWnd);
public static final native BOOL GetMenuBarInfo (int /*long*/ hWnd, int idObject, int idItem, MENUBARINFO pmbi);
public static final native int GetMenuDefaultItem (int /*long*/ hMenu, int fByPos, int gmdiFlags);
public static final native BOOL GetMenuInfo (int /*long*/ hmenu, MENUINFO lpcmi);
public static final native int GetMenuItemCount (int /*long*/ hMenu);
public static final native BOOL GetMenuItemInfoW (int /*long*/ hMenu, int uItem, BOOL fByPosition, MENUITEMINFO lpmii);
public static final native BOOL GetMenuItemInfoA (int /*long*/ hMenu, int uItem, BOOL fByPosition, MENUITEMINFO lpmii);
public static final native BOOL GetMenuItemRect (int /*long*/ hWnd, int /*long*/ hMenu, int uItem, RECT lprcItem);
public static final native BOOL GetMessageW (MSG lpMsg, int /*long*/ hWnd, int wMsgFilterMin, int wMsgFilterMax);
public static final native BOOL GetMessageA (MSG lpMsg, int /*long*/ hWnd, int wMsgFilterMin, int wMsgFilterMax);
public static final native int GetMessagePos ();
public static final native int GetMessageTime ();
public static final native int GetMetaRgn (int /*long*/ hdc, int /*long*/ hrgn);
public static final native int GetThemeColor (int /*long*/ hTheme, int iPartId, int iStateId, int iPropId, int[] pColor);
public static final native int GetThemeTextExtent (int /*long*/ hTheme, int /*long*/ hdc, int iPartId, int iStateId, char[] pszText, int iCharCount, int dwTextFlags, RECT pBoundingRect, RECT pExtentRect);
public static final native int GetTextCharset (int /*long*/ hdc);
public static final native int GetTickCount ();
public static final native int GetModuleFileNameW (int /*long*/ hModule, char [] lpFilename, int inSize);
public static final native int GetModuleFileNameA (int /*long*/ hModule, byte [] lpFilename, int inSize);
public static final native int /*long*/ GetModuleHandleW (char [] lpModuleName);
public static final native int /*long*/ GetModuleHandleA (byte [] lpModuleName);
public static final native BOOL GetMonitorInfoW (int /*long*/ hmonitor, MONITORINFO lpmi);
public static final native BOOL GetMonitorInfoA (int /*long*/ hmonitor, MONITORINFO lpmi);
public static final native int GetNearestPaletteIndex (int /*long*/ hPal, int crColor);
public static final native int GetObjectA (int /*long*/ hgdiobj, int cbBuffer, BITMAP lpvObject);
public static final native int GetObjectW (int /*long*/ hgdiobj, int cbBuffer, BITMAP lpvObject);
public static final native int GetObjectA (int /*long*/ hgdiobj, int cbBuffer, DIBSECTION lpvObject);
public static final native int GetObjectW (int /*long*/ hgdiobj, int cbBuffer, DIBSECTION lpvObject);
public static final native int GetObjectA (int /*long*/ hgdiobj, int cbBuffer, EXTLOGPEN lpvObject);
public static final native int GetObjectW (int /*long*/ hgdiobj, int cbBuffer, EXTLOGPEN lpvObject);
public static final native int GetObjectA (int /*long*/ hgdiobj, int cbBuffer, LOGBRUSH lpvObject);
public static final native int GetObjectW (int /*long*/ hgdiobj, int cbBuffer, LOGBRUSH lpvObject);
public static final native int GetObjectA (int /*long*/ hgdiobj, int cbBuffer, LOGFONTA lpvObject);
public static final native int GetObjectW (int /*long*/ hgdiobj, int cbBuffer, LOGFONTW lpvObject);
public static final native int GetObjectA (int /*long*/ hgdiobj, int cbBuffer, LOGPEN lpvObject);
public static final native int GetObjectW (int /*long*/ hgdiobj, int cbBuffer, LOGPEN lpvObject);
public static final native int GetObjectA (int /*long*/ hgdiobj, int cbBuffer, int /*long*/ lpvObject);
public static final native int GetObjectW (int /*long*/ hgdiobj, int cbBuffer, int /*long*/ lpvObject);
public static final native BOOL GetOpenFileNameW (OPENFILENAME lpofn);
public static final native BOOL GetOpenFileNameA (OPENFILENAME lpofn);
public static final native int GetPath (int /*long*/ hdc, int[] lpPoints, byte[] lpTypes, int nSize);
public static final native int GetPaletteEntries (int /*long*/ hPalette, int iStartIndex, int nEntries, byte[] logPalette);
public static final native int /*long*/ GetParent (int /*long*/ hWnd);
public static final native int GetPixel (int /*long*/ hdc, int x, int y);
public static final native int GetPolyFillMode (int /*long*/ hdc);
public static final native int /*long*/ GetProcAddress (int /*long*/ hModule, byte [] lpProcName);
public static final native int /*long*/ GetProcessHeap ();
public static final native int GetProcessHeaps (int NumberOfHeaps, int /*long*/[] ProcessHeaps);
public static final native int GetProfileStringW (char [] lpAppName, char [] lpKeyName, char [] lpDefault, char [] lpReturnedString, int nSize);
public static final native int GetProfileStringA (byte [] lpAppName, byte [] lpKeyName, byte [] lpDefault, byte [] lpReturnedString, int nSize);
public static final native int /*long*/ GetPropW (int /*long*/ hWnd, int /*long*/ lpString);
public static final native int /*long*/ GetPropA (int /*long*/ hWnd, int /*long*/ lpString);
public static final native int GetRandomRgn (int /*long*/ hdc, int /*long*/ hrgn, int iNum);
public static final native int GetRegionData (int /*long*/ hRgn, int dwCount, int [] lpRgnData);
public static final native int GetRgnBox (int /*long*/ hrgn, RECT lprc);
public static final native int GetROP2 (int /*long*/ hdc);
public static final native BOOL GetSaveFileNameW (OPENFILENAME lpofn);
public static final native BOOL GetSaveFileNameA (OPENFILENAME lpofn);
public static final native BOOL GetScrollInfo (int /*long*/ hwnd, int flags, SCROLLINFO info);
public static final native void GetStartupInfoW (STARTUPINFO lpStartupInfo);
public static final native void GetStartupInfoA (STARTUPINFO lpStartupInfo);
public static final native int /*long*/ GetStockObject (int fnObject);
public static final native int GetSysColor (int nIndex);
public static final native int /*long*/ GetSysColorBrush (int nIndex);
public static final native short GetSystemDefaultUILanguage ();
public static final native int /*long*/ GetSystemMenu (int /*long*/ hWnd, BOOL bRevert);
public static final native int GetSystemMetrics (int nIndex);
public static final native int GetSystemPaletteEntries (int /*long*/ hdc, int iStartIndex, int nEntries, byte[] lppe);
public static final native int GetTextColor (int /*long*/ hDC);
public static final native BOOL GetTextExtentPoint32W (int /*long*/ hdc, char [] lpString, int cbString, SIZE lpSize);
public static final native BOOL GetTextExtentPoint32A (int /*long*/ hdc, byte [] lpString, int cbString, SIZE lpSize);
public static final native BOOL GetTextMetricsW (int /*long*/ hdc, TEXTMETRICW lptm);
public static final native BOOL GetTextMetricsA (int /*long*/ hdc, TEXTMETRICA lptm);
public static final native int GetThemeInt (int /*long*/ hTheme, int iPartId, int iStateId, int iPropId, int[] piVal);
public static final native int GetThemeMargins (int /*long*/ hTheme, int /*long*/ hdc, int iPartId, int iStateId, int iPropId, RECT prc, MARGINS pMargins);
public static final native int GetThemeBackgroundContentRect (int /*long*/ hTheme, int /*long*/ hdc, int iPartId, int iStateId, RECT pBoundingRect, RECT pContentRect);
public static final native int GetThemeBackgroundExtent (int /*long*/ hTheme, int /*long*/ hdc, int iPartId, int iStateId, RECT pContentRect, RECT pExtentRect);
public static final native int GetThemePartSize (int /*long*/ hTheme, int /*long*/ hdc, int iPartId, int iStateId, RECT prc, int eSize, SIZE psz);
public static final native int GetThemeMetric (int /*long*/ hTheme, int /*long*/ hdc, int iPartId, int iStateId, int iPropId, int[] piVal);
public static final native int GetThemeRect (int /*long*/ hTheme, int iPartId, int iStateId, int iPropId, RECT pRect);
public static final native int GetThemeSysSize (int /*long*/ hTheme, int iSizeID);
public static final native int GetTimeFormatW(int Locale, int dwFlags, SYSTEMTIME lpTime, char [] lpFormat, char [] lpTimeStr, int cchTime);
public static final native int GetTimeFormatA(int Locale, int dwFlags, SYSTEMTIME lpTime, byte [] lpFormat, byte [] lpTimeStr, int cchTime);
public static final native BOOL GetUpdateRect (int /*long*/ hWnd, RECT lpRect, BOOL bErase);
public static final native int GetUpdateRgn (int /*long*/ hWnd, int /*long*/ hRgn, BOOL bErase);
public static final native BOOL GetVersionExW (OSVERSIONINFOEXW lpVersionInfo);
public static final native BOOL GetVersionExA (OSVERSIONINFOEXA lpVersionInfo);
public static final native BOOL GetVersionExW (OSVERSIONINFOW lpVersionInfo);
public static final native BOOL GetVersionExA (OSVERSIONINFOA lpVersionInfo);
public static final native int /*long*/ GetWindow (int /*long*/ hWnd, int uCmd);
public static final native int GetWindowLongW (int /*long*/ hWnd, int nIndex);
public static final native int GetWindowLongA (int /*long*/ hWnd, int nIndex);
public static final native int /*long*/ GetWindowLongPtrW (int /*long*/ hWnd, int nIndex);
public static final native int /*long*/ GetWindowLongPtrA (int /*long*/ hWnd, int nIndex);
public static final native int /*long*/ GetWindowDC (int /*long*/ hWnd);
public static final native BOOL GetWindowOrgEx (int /*long*/ hdc, POINT lpPoint);
public static final native BOOL GetWindowPlacement (int /*long*/ hWnd, WINDOWPLACEMENT lpwndpl);
public static final native BOOL GetWindowRect (int /*long*/ hWnd, RECT lpRect);
public static final native int GetWindowRgn (int /*long*/ hWnd, int /*long*/ hRgn);
public static final native int GetWindowTextW (int /*long*/ hWnd, char [] lpString, int nMaxCount);
public static final native int GetWindowTextA (int /*long*/ hWnd, byte [] lpString, int nMaxCount);
public static final native int GetWindowTextLengthW (int /*long*/ hWnd);
public static final native int GetWindowTextLengthA (int /*long*/ hWnd);
public static final native int GetWindowTheme (int /*long*/ hWnd);
public static final native int GetWindowThreadProcessId (int /*long*/ hWnd, int [] lpdwProcessId);
public static final native BOOL GetWorldTransform (int /*long*/ hdc, float[] lpXform);
public static final native int GlobalAddAtomW (char [] lpString);
public static final native int GlobalAddAtomA (byte [] lpString);
public static final native int /*long*/ GlobalAlloc (int uFlags, int dwBytes);
public static final native int /*long*/ GlobalFree (int /*long*/ hMem);
public static final native int /*long*/ GlobalLock (int /*long*/ hMem);
public static final native int GlobalSize (int /*long*/ hMem);
public static final native BOOL GlobalUnlock (int /*long*/ hMem);
public static final native BOOL GradientFill (int /*long*/ hdc, int /*long*/ pVertex, int dwNumVertex, int /*long*/ pMesh, int dwNumMesh, int dwMode);
public static final native int /*long*/ HeapAlloc (int /*long*/ hHeap, int dwFlags, int dwBytes);
public static final native BOOL HeapFree (int /*long*/ hHeap, int dwFlags, int /*long*/ lpMem);
public static final native BOOL HeapValidate (int /*long*/ hHeap, int dwFlags, int /*long*/ lpMem);
public static final native BOOL HideCaret (int /*long*/ hWnd);
public static final native int HitTestThemeBackground (int /*long*/ hTheme, int /*long*/ hdc, int iPartId, int iStateId, int dwOptions, RECT pRect, int /*long*/ hrgn, POINT ptTest, short[] pwHitTestCode);
public static final native int IIDFromString (char[] lpsz, byte[] lpiid);
public static final native int ImageList_Add (int /*long*/ himl, int /*long*/ hbmImage, int /*long*/ hbmMask);
public static final native int ImageList_AddMasked (int /*long*/ himl, int /*long*/ hbmImage, int crMask);
public static final native BOOL ImageList_BeginDrag (int /*long*/ himl, int iTrack, int dxHotspot, int dyHotspot);
public static final native int /*long*/ ImageList_Create (int cx, int cy, int flags, int cInitial, int cGrow);
public static final native BOOL ImageList_Destroy (int /*long*/ himl);
public static final native BOOL ImageList_DragEnter (int /*long*/ hwndLock, int x, int y);
public static final native BOOL ImageList_DragLeave (int /*long*/ hwndLock);
public static final native BOOL ImageList_DragMove (int x, int y);
public static final native BOOL ImageList_DragShowNolock (BOOL fShow);
public static final native BOOL ImageList_Draw (int /*long*/ himl, int i, int /*long*/ hdcDst, int x, int y, int fStyle);
public static final native void ImageList_EndDrag ();
public static final native int /*long*/ ImageList_GetDragImage (POINT ppt, POINT pptHotspot);
public static final native int /*long*/ ImageList_GetIcon (int /*long*/ himl, int i, int flags);
public static final native BOOL ImageList_GetIconSize (int /*long*/ himl, int [] cx, int [] cy);
public static final native int ImageList_GetImageCount (int /*long*/ himl);
public static final native BOOL ImageList_Remove (int /*long*/ himl, int i);
public static final native BOOL ImageList_Replace (int /*long*/ himl, int i, int /*long*/ hbmImage, int /*long*/ hbmMask);
public static final native int ImageList_ReplaceIcon (int /*long*/ himl, int i, int /*long*/ hicon);
public static final native BOOL ImageList_SetIconSize (int /*long*/ himl, int cx, int cy);
public static final native int /*long*/ ImmAssociateContext (int /*long*/ hWnd, int /*long*/ hIMC);
public static final native int /*long*/ ImmCreateContext ();
public static final native BOOL ImmDestroyContext (int /*long*/ hIMC);
public static final native BOOL ImmDisableTextFrameService (int idThread);
public static final native BOOL ImmGetCompositionFontW (int /*long*/ hIMC, LOGFONTW lplf);
public static final native BOOL ImmGetCompositionFontA (int /*long*/ hIMC, LOGFONTA lplf);
public static final native int ImmGetCompositionStringW (int /*long*/ hIMC, int dwIndex, char [] lpBuf, int dwBufLen);
public static final native int ImmGetCompositionStringA (int /*long*/ hIMC, int dwIndex, byte [] lpBuf, int dwBufLen);
public static final native int /*long*/ ImmGetContext (int /*long*/ hWnd);
public static final native BOOL ImmGetConversionStatus (int /*long*/ hIMC, int [] lpfdwConversion, int [] lpfdwSentence);
public static final native int /*long*/ ImmGetDefaultIMEWnd (int /*long*/ hWnd);
public static final native BOOL ImmGetOpenStatus (int /*long*/ hIMC);
public static final native BOOL ImmReleaseContext (int /*long*/ hWnd, int /*long*/ hIMC);
public static final native BOOL ImmSetCompositionFontW (int /*long*/ hIMC, LOGFONTW lplf);
public static final native BOOL ImmSetCompositionFontA (int /*long*/ hIMC, LOGFONTA lplf);
public static final native BOOL ImmSetCompositionWindow (int /*long*/ hIMC, COMPOSITIONFORM lpCompForm);
public static final native BOOL ImmSetConversionStatus (int /*long*/ hIMC, int fdwConversion, int dwSentence);
public static final native BOOL ImmSetOpenStatus (int /*long*/ hIMC, BOOL fOpen);
public static final native void InitCommonControls ();
public static final native BOOL InitCommonControlsEx (INITCOMMONCONTROLSEX lpInitCtrls);
public static final native BOOL InsertMenuW (int /*long*/ hMenu, int uPosition, int uFlags, int /*long*/ uIDNewItem, char [] lpNewItem);
public static final native BOOL InsertMenuA (int /*long*/ hMenu, int uPosition, int uFlags, int /*long*/ uIDNewItem, byte [] lpNewItem);
public static final native BOOL InsertMenuItemW (int /*long*/ hMenu, int uItem, BOOL fByPosition, MENUITEMINFO lpmii);
public static final native BOOL InsertMenuItemA (int /*long*/ hMenu, int uItem, BOOL fByPosition, MENUITEMINFO lpmii);
public static final native BOOL InternetSetOption (int /*long*/ hInternet, int dwOption, int /*long*/ lpBuffer, int dwBufferLength);
public static final native int IntersectClipRect (int /*long*/ hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect);
public static final native BOOL IntersectRect (RECT lprcDst, RECT lprcSrc1, RECT lprcSrc2);
public static final native BOOL InvalidateRect (int /*long*/ hWnd, RECT lpRect, BOOL bErase);
public static final native BOOL InvalidateRgn (int /*long*/ hWnd, int /*long*/ hRgn, BOOL bErase);
public static final native BOOL IsAppThemed ();
public static final native BOOL IsBadReadPtr (int /*long*/ lp, int ucb);
public static final native BOOL IsBadWritePtr (int /*long*/ lp, int ucb);
public static final native BOOL IsDBCSLeadByte (byte TestChar);
public static final native BOOL IsHungAppWindow (int /*long*/ hWnd);
public static final native BOOL IsIconic (int /*long*/ hWnd);
public static final native BOOL IsPPC ();
public static final native BOOL IsSP ();
public static final native BOOL IsWindowEnabled (int /*long*/ hWnd);
public static final native BOOL IsWindowVisible (int /*long*/ hWnd);
public static final native BOOL IsZoomed (int /*long*/ hWnd);
public static final native BOOL KillTimer (int /*long*/ hWnd, int /*long*/ uIDEvent);
public static final native BOOL LineTo (int /*long*/ hdc, int x1, int x2);
public static final native int /*long*/ LoadBitmapW (int /*long*/ hInstance, int /*long*/ lpBitmapName);
public static final native int /*long*/ LoadBitmapA (int /*long*/ hInstance, int /*long*/ lpBitmapName);
public static final native int /*long*/ LoadCursorW (int /*long*/ hInstance, int /*long*/ lpCursorName);
public static final native int /*long*/ LoadCursorA (int /*long*/ hInstance, int /*long*/ lpCursorName);
public static final native int /*long*/ LoadIconW (int /*long*/ hInstance, int /*long*/ lpIconName);
public static final native int /*long*/ LoadIconA (int /*long*/ hInstance, int /*long*/ lpIconName);
public static final native int /*long*/ LoadImageW (int /*long*/ hinst, char [] lpszName, int uType, int cxDesired, int cyDesired, int fuLoad);
public static final native int /*long*/ LoadImageA (int /*long*/ hinst, byte [] lpszName, int uType, int cxDesired, int cyDesired, int fuLoad);
public static final native int /*long*/ LoadImageW (int /*long*/ hinst, int /*long*/ lpszName, int uType, int cxDesired, int cyDesired, int fuLoad);
public static final native int /*long*/ LoadImageA (int /*long*/ hinst, int /*long*/ lpszName, int uType, int cxDesired, int cyDesired, int fuLoad);
public static final native int LoadStringW (int /*long*/ hinst, int uID, char [] lpBuffer, int nBufferMax);
public static final native int LoadStringA (int /*long*/ hinst, int uID, byte [] lpBuffer, int nBufferMax);
public static final native int /*long*/ LoadLibraryW (char [] lpLibFileName);
public static final native int /*long*/ LoadLibraryA (byte [] lpLibFileName);
public static final native int /*long*/ LocalFree (int /*long*/ hMem);
public static final native BOOL LockWindowUpdate (int /*long*/ hWndLock);
public static final native int MapVirtualKeyW (int uCode, int uMapType);
public static final native int MapVirtualKeyA (int uCode, int uMapType);
public static final native int MapWindowPoints (int /*long*/ hWndFrom, int /*long*/ hWndTo, POINT lpPoints, int cPoints);
public static final native int MapWindowPoints (int /*long*/ hWndFrom, int /*long*/ hWndTo, RECT lpPoints, int cPoints);
public static final native BOOL MCIWndRegisterClass ();
public static final native BOOL MessageBeep (int uType);
public static final native int MessageBoxW (int /*long*/ hWnd, char [] lpText, char [] lpCaption, int uType);
public static final native int MessageBoxA (int /*long*/ hWnd, byte [] lpText, byte [] lpCaption, int uType);
public static final native int /*long*/ MonitorFromWindow (int /*long*/ hwnd, int dwFlags);
public static final native void MoveMemory (char[] Destination, int /*long*/ SourcePtr, int Length);
public static final native void MoveMemory (byte [] Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (byte [] Destination, ACCEL Source, int Length);
public static final native void MoveMemory (byte [] Destination, BITMAPINFOHEADER Source, int Length);
public static final native void MoveMemory (int [] Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (long [] Destination, int /*long*/ SourcePtr, int Length);
public static final native void MoveMemory (double[] Destination, int /*long*/ SourcePtr, int Length);
public static final native void MoveMemory (float[] Destination, int /*long*/ SourcePtr, int Length);
public static final native void MoveMemory (short[] Destination, int /*long*/ SourcePtr, int Length);
public static final native void MoveMemory (int /*long*/ Destination, byte [] Source, int Length);
public static final native void MoveMemory (int /*long*/ Destination, char [] Source, int Length);
public static final native void MoveMemory (int /*long*/ Destination, int [] Source, int Length);
public static final native void MoveMemory (int /*long*/ Destination, GRADIENT_RECT Source, int Length);
public static final native void MoveMemory (int /*long*/ Destination, LOGFONTW Source, int Length);
public static final native void MoveMemory (int /*long*/ Destination, LOGFONTA Source, int Length);
public static final native void MoveMemory (int /*long*/ Destination, MEASUREITEMSTRUCT Source, int Length);
public static final native void MoveMemory (int /*long*/ Destination, MINMAXINFO Source, int Length);
public static final native void MoveMemory (int /*long*/ Destination, MSG Source, int Length);
public static final native void MoveMemory (int /*long*/ Destination, UDACCEL Source, int Length);
public static final native void MoveMemory (int /*long*/ Destination, NMTTDISPINFOW Source, int Length);
public static final native void MoveMemory (int /*long*/ Destination, NMTTDISPINFOA Source, int Length);
public static final native void MoveMemory (int /*long*/ Destination, OPENFILENAME Source, int Length);
public static final native void MoveMemory (int /*long*/ Destination, RECT Source, int Length);
public static final native void MoveMemory (int /*long*/ Destination, TRIVERTEX Source, int Length);
public static final native void MoveMemory (int /*long*/ Destination, WINDOWPOS Source, int Length);
public static final native void MoveMemory (BITMAPINFOHEADER Destination, byte [] Source, int Length);
public static final native void MoveMemory (DRAWITEMSTRUCT Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (EXTLOGPEN Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (HDITEM Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (HELPINFO Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (LOGFONTW Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (LOGFONTA Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (MEASUREITEMSTRUCT Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (MINMAXINFO Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (OFNOTIFY Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (OPENFILENAME Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (POINT Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (NMHDR Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (NMRGINFO Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (NMCUSTOMDRAW Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (NMLVCUSTOMDRAW Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (NMTBHOTITEM Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (NMTVCUSTOMDRAW Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (NMTVITEMCHANGE Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (NMUPDOWN Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (int /*long*/ Destination, NMLVCUSTOMDRAW Source, int Length);
public static final native void MoveMemory (int /*long*/ Destination, NMTVCUSTOMDRAW Source, int Length);
public static final native void MoveMemory (int /*long*/ Destination, NMLVDISPINFO Source, int Length);
public static final native void MoveMemory (int /*long*/ Destination, NMTVDISPINFO Source, int Length);
public static final native void MoveMemory (NMLVDISPINFO Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (NMTVDISPINFO Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (NMLVFINDITEM Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (NMLVODSTATECHANGE Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (NMHEADER Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (NMLINK Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (NMLISTVIEW Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (NMREBARCHILDSIZE Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (NMREBARCHEVRON Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (NMTOOLBAR Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (NMTTDISPINFOW Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (NMTTDISPINFOA Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (RECT Destination, int /*long*/[] Source, int Length);
public static final native void MoveMemory (TEXTMETRICW Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (TEXTMETRICA Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (TVITEM Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (WINDOWPOS Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (MSG Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (UDACCEL Destination, int /*long*/ Source, int Length);
public static final native void MoveMemory (int /*long*/ Destination, DROPFILES Source, int Length);
public static final native void MoveMemory (int /*long*/ DestinationPtr, double[] Source, int Length);
public static final native void MoveMemory (int /*long*/ DestinationPtr, float[] Source, int Length);
public static final native void MoveMemory (int /*long*/ DestinationPtr, long[] Source, int Length);
public static final native void MoveMemory (int /*long*/ DestinationPtr, short[] Source, int Length);
public static final native void MoveMemory (SCRIPT_ITEM Destination, int /*long*/ SourcePtr, int Length);
public static final native void MoveMemory (SCRIPT_LOGATTR Destination, int /*long*/ SourcePtr, int Length);
public static final native void MoveMemory (SCRIPT_PROPERTIES Destination, int /*long*/ SourcePtr, int Length);
public static final native void MoveMemory (int /*long*/ Destination, KEYBDINPUT Source, int Length);
public static final native void MoveMemory (int /*long*/ Destination, MOUSEINPUT Source, int Length);
public static final native BOOL MoveToEx (int /*long*/ hdc, int x1, int x2, int /*long*/ lPoint);
public static final native int MsgWaitForMultipleObjectsEx (int nCount, int /*long*/ pHandles, int dwMilliseconds, int dwWakeMask, int dwFlags);
//alias WINAPI.MultiByteToWideChar MultiByteToWideChar;
public static final native void NotifyWinEvent (int event, int /*long*/ hwnd, int idObject, int idChild);
public static final native BOOL OffsetRect (RECT lprc, int dx, int dy);
public static final native int OffsetRgn (int /*long*/ hrgn, int nXOffset, int nYOffset);
public static final native int OleInitialize (int /*long*/ pvReserved);
public static final native void OleUninitialize ();
public static final native BOOL OpenClipboard (int /*long*/ hWndNewOwner);
public static final native int /*long*/ OpenThemeData (int /*long*/ hwnd, char[] pszClassList);
public static final native BOOL PatBlt (int /*long*/ hdc, int x1, int x2, int w, int h, int rop);
public static final native BOOL PeekMessageW (MSG lpMsg, int /*long*/ hWnd, int wMsgFilterMin, int wMsgFilterMax, int wRemoveMsg);
public static final native BOOL PeekMessageA (MSG lpMsg, int /*long*/ hWnd, int wMsgFilterMin, int wMsgFilterMax, int wRemoveMsg);
public static final native BOOL Pie (int /*long*/ hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int nXStartArc, int nYStartArc, int nXEndArc, int nYEndArc);
public static final native BOOL Polygon (int /*long*/ hdc, int [] points, int nPoints);
public static final native BOOL Polyline (int /*long*/ hdc, int[] points, int nPoints);
public static final native BOOL PostMessageW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, int /*long*/ lParam);
public static final native BOOL PostMessageA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, int /*long*/ lParam);
public static final native BOOL PostThreadMessageW (int idThread, int Msg, int /*long*/ wParam, int /*long*/ lParam);
public static final native BOOL PostThreadMessageA (int idThread, int Msg, int /*long*/ wParam, int /*long*/ lParam);
public static final native short PRIMARYLANGID (short lgid);
public static final native BOOL PrintDlgW (PRINTDLG lppd);
public static final native BOOL PrintDlgA (PRINTDLG lppd);
public static final native BOOL PrintWindow (int /*long*/ hwnd, int /*long*/ hdcBlt, int nFlags);
public static final native BOOL PtInRect (RECT rect, POINT pt);
public static final native BOOL PtInRegion (int /*long*/ hrgn, int X, int Y);
public static final native int RealizePalette (int /*long*/ hDC);
public static final native BOOL Rectangle (int /*long*/ hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect);
public static final native BOOL RectInRegion (int /*long*/ hrgn, RECT lprc);
public static final native BOOL RedrawWindow (int /*long*/ hWnd, RECT lprcUpdate, int /*long*/ hrgnUpdate, int flags);
public static final native int RegCloseKey (int /*long*/ hKey);
public static final native int RegEnumKeyExW (int /*long*/ hKey, int dwIndex, char [] lpName, int [] lpcName, int [] lpReserved, char [] lpClass, int [] lpcClass, FILETIME lpftLastWriteTime);
public static final native int RegEnumKeyExA (int /*long*/ hKey, int dwIndex, byte [] lpName, int [] lpcName, int [] lpReserved, byte [] lpClass, int [] lpcClass, FILETIME lpftLastWriteTime);
public static final native int RegisterClassW (WNDCLASS lpWndClass);
public static final native int RegisterClassA (WNDCLASS lpWndClass);
public static final native int RegisterWindowMessageW (char [] lpString);
public static final native int RegisterWindowMessageA (byte [] lpString);
public static final native int RegisterClipboardFormatA (byte[] lpszFormat);
public static final native int RegisterClipboardFormatW (char[] lpszFormat);
public static final native int RegOpenKeyExW (int /*long*/ hKey, char[] lpSubKey, int ulOptions, int samDesired, int /*long*/[] phkResult);
public static final native int RegOpenKeyExA (int /*long*/ hKey, byte[] lpSubKey, int ulOptions, int samDesired, int /*long*/[] phkResult);
public static final native int RegQueryInfoKeyW (int /*long*/ hKey, int /*long*/ lpClass, int[] lpcbClass, int /*long*/ lpReserved, int[] lpSubKeys, int[] lpcbMaxSubKeyLen, int[] lpcbMaxClassLen, int[] lpcValues, int[] lpcbMaxValueNameLen, int[] lpcbMaxValueLen, int[] lpcbSecurityDescriptor, int /*long*/ lpftLastWriteTime);
public static final native int RegQueryInfoKeyA (int /*long*/ hKey, int /*long*/ lpClass, int[] lpcbClass, int /*long*/ lpReserved, int[] lpSubKeys, int[] lpcbMaxSubKeyLen, int[] lpcbMaxClassLen, int[] lpcValues, int[] lpcbMaxValueNameLen, int[] lpcbMaxValueLen, int[] lpcbSecurityDescriptor, int /*long*/ lpftLastWriteTime);
public static final native int RegQueryValueExW (int /*long*/ hKey, char[] lpValueName, int /*long*/ lpReserved, int[] lpType, char [] lpData, int[] lpcbData);
public static final native int RegQueryValueExW (int /*long*/ hKey, char[] lpValueName, int /*long*/ lpReserved, int[] lpType, int [] lpData, int[] lpcbData);
public static final native int RegQueryValueExA (int /*long*/ hKey, byte[] lpValueName, int /*long*/ lpReserved, int[] lpType, byte [] lpData, int[] lpcbData);
public static final native int RegQueryValueExA (int /*long*/ hKey, byte[] lpValueName, int /*long*/ lpReserved, int[] lpType, int [] lpData, int[] lpcbData);
public static final native BOOL ReleaseCapture ();
public static final native int ReleaseDC (int /*long*/ hWnd, int /*long*/ hDC);
public static final native BOOL RemoveMenu (int /*long*/ hMenu, int uPosition, int uFlags);
public static final native int /*long*/ RemovePropA (int /*long*/ hWnd, int /*long*/ lpString);
public static final native int /*long*/ RemovePropW (int /*long*/ hWnd, int /*long*/ lpString);
public static final native BOOL RestoreDC (int /*long*/ hdc, int nSavedDC);
public static final native BOOL RoundRect (int /*long*/ hdc, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect, int nWidth, int nHeight);
public static final native int SaveDC (int /*long*/ hdc);
public static final native BOOL ScreenToClient (int /*long*/ hWnd, POINT lpPoint);
public static final native int ScriptApplyDigitSubstitution (SCRIPT_DIGITSUBSTITUTE psds, SCRIPT_CONTROL psc, SCRIPT_STATE pss);
public static final native int ScriptBreak (char[] pwcChars, int cChars, SCRIPT_ANALYSIS psa, int /*long*/ psla);
public static final native int ScriptGetProperties (int /*long*/[] ppSp, int[] piNumScripts);
public static final native int ScriptCacheGetHeight (int /*long*/ hdc, int /*long*/ psc, int[] tmHeight);
public static final native int ScriptCPtoX (int iCP, BOOL fTrailing, int cChars, int cGlyphs, int /*long*/ pwLogClust, int /*long*/ psva, int /*long*/ piAdvance, SCRIPT_ANALYSIS psa, int[] piX);
public static final native int ScriptFreeCache (int /*long*/ psc);
public static final native int ScriptGetFontProperties (int /*long*/ hdc, int /*long*/ psc, SCRIPT_FONTPROPERTIES sfp);
public static final native int ScriptGetLogicalWidths (SCRIPT_ANALYSIS psa, int cChars, int cGlyphs, int /*long*/ piGlyphWidth, int /*long*/ pwLogClust, int /*long*/ psva, int[] piDx);
public static final native int ScriptItemize (char[] pwcInChars, int cInChars, int cMaxItems, SCRIPT_CONTROL psControl, SCRIPT_STATE psState, int /*long*/ pItems, int[] pcItems);
public static final native int ScriptJustify (int /*long*/ psva, int /*long*/ piAdvance, int cGlyphs, int iDx, int iMinKashida, int /*long*/ piJustify);
public static final native int ScriptLayout (int cRuns, byte[] pbLevel, int[] piVisualToLogical, int[] piLogicalToVisual);
public static final native int ScriptPlace (int /*long*/ hdc, int /*long*/ psc, int /*long*/ pwGlyphs, int cGlyphs, int /*long*/ psva, SCRIPT_ANALYSIS psa, int /*long*/ piAdvance, int /*long*/ pGoffset, int[] pABC);
public static final native int ScriptRecordDigitSubstitution (int Locale, SCRIPT_DIGITSUBSTITUTE psds);
public static final native int ScriptShape (int /*long*/ hdc, int /*long*/ psc, char[] pwcChars, int cChars, int cMaxGlyphs, SCRIPT_ANALYSIS psa, int /*long*/ pwOutGlyphs, int /*long*/ pwLogClust, int /*long*/ psva, int[] pcGlyphs);
public static final native int ScriptTextOut (int /*long*/ hdc, int /*long*/ psc, int x, int y, int fuOptions, RECT lprc, SCRIPT_ANALYSIS psa, int /*long*/ pwcReserved, int iReserved, int /*long*/ pwGlyphs, int cGlyphs, int /*long*/ piAdvance, int /*long*/ piJustify, int /*long*/ pGoffset);
public static final native int ScriptXtoCP (int iX, int cChars, int cGlyphs, int /*long*/ pwLogClust, int /*long*/ psva, int /*long*/ piAdvance, SCRIPT_ANALYSIS psa, int[] piCP, int[] piTrailing);
public static final native int ScrollWindowEx (int /*long*/ hWnd, int dx, int dy, RECT prcScroll, RECT prcClip, int /*long*/ hrgnUpdate, RECT prcUpdate, int flags);
public static final native int SelectClipRgn (int /*long*/ hdc, int /*long*/ hrgn);
public static final native int /*long*/ SelectObject (int /*long*/ hDC, int /*long*/ HGDIObj);
public static final native int /*long*/ SelectPalette (int /*long*/ hDC, int /*long*/ hpal, BOOL bForceBackground);
public static final native int SendInput (int nInputs, int /*long*/ pInputs, int cbSize);
public static final native int /*long*/ SendMessageW (int /*long*/ hWnd, int Msg, int  [] wParam, int [] lParam);
public static final native int /*long*/ SendMessageW (int /*long*/ hWnd, int Msg, int /*long*/ [] wParam, int /*long*/ lParam);
public static final native int /*long*/ SendMessageW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, char [] lParam);
public static final native int /*long*/ SendMessageW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, int [] lParam);
public static final native int /*long*/ SendMessageW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, short [] lParam);
public static final native int /*long*/ SendMessageW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, int /*long*/ lParam);
public static final native int /*long*/ SendMessageW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, LVCOLUMN lParam);
public static final native int /*long*/ SendMessageW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, LVHITTESTINFO lParam);
public static final native int /*long*/ SendMessageW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, LITEM lParam);
public static final native int /*long*/ SendMessageW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, LVITEM lParam);
public static final native int /*long*/ SendMessageW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, MARGINS lParam);
public static final native int /*long*/ SendMessageW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, POINT lParam);
public static final native int /*long*/ SendMessageW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, REBARBANDINFO lParam);
public static final native int /*long*/ SendMessageW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, RECT lParam);
public static final native int /*long*/ SendMessageW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, SYSTEMTIME lParam);
public static final native int /*long*/ SendMessageW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, TBBUTTON lParam);
public static final native int /*long*/ SendMessageW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, TBBUTTONINFO lParam);
public static final native int /*long*/ SendMessageW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, TCITEM lParam);
public static final native int /*long*/ SendMessageW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, TOOLINFO lParam);
public static final native int /*long*/ SendMessageW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, TVHITTESTINFO lParam);
public static final native int /*long*/ SendMessageW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, TVINSERTSTRUCT lParam);
public static final native int /*long*/ SendMessageW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, TVITEM lParam);
public static final native int /*long*/ SendMessageW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, TVSORTCB lParam);
public static final native int /*long*/ SendMessageW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, UDACCEL lParam);
public static final native int /*long*/ SendMessageW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, HDHITTESTINFO lParam);
public static final native int /*long*/ SendMessageW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, HDITEM lParam);
public static final native int /*long*/ SendMessageW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, HDLAYOUT lParam);
public static final native int /*long*/ SendMessageW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, BUTTON_IMAGELIST lParam);
public static final native int /*long*/ SendMessageW (int /*long*/ hWnd, int Msg, int /*long*/ wParam, SIZE lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int [] wParam, int [] lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int /*long*/ [] wParam, int /*long*/ lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, byte [] lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, int [] lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, short [] lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, char [] lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, int /*long*/ lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, LVCOLUMN lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, LVHITTESTINFO lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, LITEM lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, LVITEM lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, MARGINS lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, POINT lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, REBARBANDINFO lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, RECT lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, SYSTEMTIME lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, TBBUTTON lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, TBBUTTONINFO lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, TCITEM lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, TOOLINFO lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, TVHITTESTINFO lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, TVINSERTSTRUCT lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, TVITEM lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, TVSORTCB lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, UDACCEL lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, HDHITTESTINFO lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, HDITEM lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, HDLAYOUT lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, BUTTON_IMAGELIST lParam);
public static final native int /*long*/ SendMessageA (int /*long*/ hWnd, int Msg, int /*long*/ wParam, SIZE lParam);
public static final native int /*long*/ SetActiveWindow (int /*long*/ hWnd);
public static final native int SetBkColor (int /*long*/ hdc, int colorRef);
public static final native int SetBkMode (int /*long*/ hdc, int mode);
public static final native BOOL SetBrushOrgEx (int /*long*/ hdc, int nXOrg, int nYOrg, POINT lppt);
public static final native int /*long*/ SetCapture (int /*long*/ hWnd);
public static final native BOOL SetCaretPos (int X, int Y);
public static final native int /*long*/ SetClipboardData (int uFormat, int /*long*/ hMem);
public static final native int /*long*/ SetCursor (int /*long*/ hCursor);
public static final native BOOL SetCursorPos (int X, int Y);
public static final native int SetDIBColorTable (int /*long*/ hdc, int uStartIndex, int cEntries, byte[] pColors);
public static final native int SetErrorMode (int uMode);
public static final native int /*long*/ SetFocus (int /*long*/ hWnd);
public static final native BOOL SetForegroundWindow (int /*long*/ hWnd);
public static final native int SetGraphicsMode (int /*long*/ hdc, int iMode);
public static final native BOOL SetLayeredWindowAttributes(int /*long*/ hwnd, int crKey, byte bAlpha, int dwFlags);
public static final native int SetLayout (int /*long*/ hdc, int dwLayout);
public static final native BOOL SetMenu (int /*long*/ hWnd, int /*long*/ hMenu);
public static final native BOOL SetMenuDefaultItem (int /*long*/ hMenu, int uItem, int fByPos);
public static final native BOOL SetMenuInfo (int /*long*/ hmenu, MENUINFO lpcmi);
public static final native BOOL SetMenuItemInfoW (int /*long*/ hMenu, int uItem, BOOL fByPosition, MENUITEMINFO lpmii);
public static final native BOOL SetMenuItemInfoA (int /*long*/ hMenu, int uItem, BOOL fByPosition, MENUITEMINFO lpmii);
public static final native int SetMetaRgn (int /*long*/ hdc);
public static final native int SetPaletteEntries (int /*long*/ hPal, int iStart, int cEntries, byte[] lppe);
public static final native int /*long*/ SetParent (int /*long*/ hWndChild, int /*long*/ hWndNewParent);
public static final native int SetPixel (int /*long*/ hdc, int X, int Y, int crColor);
public static final native int SetPolyFillMode (int /*long*/ hdc, int iPolyFillMode);
public static final native BOOL SetProcessDPIAware ();
public static final native BOOL SetRect (RECT lprc, int xLeft, int yTop, int xRight, int yBottom);
public static final native BOOL SetRectRgn (int /*long*/ hrgn, int nLeftRect, int nTopRect, int nRightRect, int nBottomRect);
public static final native int SetROP2 (int /*long*/ hdc, int fnDrawMode);
public static final native BOOL SetScrollInfo (int /*long*/ hwnd, int flags, SCROLLINFO info, BOOL fRedraw);
public static final native int SetStretchBltMode (int /*long*/ hdc, int iStretchMode);
public static final native BOOL SetPropW (int /*long*/ hWnd, int /*long*/ lpString, int /*long*/ hData);
public static final native BOOL SetPropA (int /*long*/ hWnd, int /*long*/ lpString, int /*long*/ hData);
public static final native int SetTextAlign (int /*long*/ hdc, int fMode);
public static final native int SetTextColor (int /*long*/ hdc, int colorRef);
public static final native int /*long*/ SetTimer (int /*long*/ hWnd, int /*long*/ nIDEvent, int Elapse, int /*long*/ lpTimerFunc);
public static final native int SetWindowLongW (int /*long*/ hWnd, int nIndex, int dwNewLong);
public static final native int SetWindowLongA (int /*long*/ hWnd, int nIndex, int dwNewLong);
public static final native int /*long*/ SetWindowLongPtrW (int /*long*/ hWnd, int nIndex, int /*long*/ dwNewLong);
public static final native int /*long*/ SetWindowLongPtrA (int /*long*/ hWnd, int nIndex, int /*long*/ dwNewLong);
public static final native BOOL SetWindowOrgEx (int /*long*/ hdc, int X, int Y, POINT lpPoint);
public static final native BOOL SetWindowPlacement (int /*long*/ hWnd, WINDOWPLACEMENT lpwndpl);
public static final native BOOL SetWindowPos(int /*long*/ hWnd, int /*long*/ hWndInsertAfter, int X, int Y, int cx, int cy, int uFlags);
public static final native int SetWindowRgn (int /*long*/ hWnd, int /*long*/ hRgn, BOOL bRedraw);
public static final native BOOL SetWindowTextW (int /*long*/ hWnd, char [] lpString);
public static final native BOOL SetWindowTextA (int /*long*/ hWnd, byte [] lpString);
public static final native int SetWindowTheme (int /*long*/ hwnd, char [] pszSubAppName, char [] pszSubIdList);
public static final native int /*long*/ SetWindowsHookExW (int idHook, int /*long*/ lpfn,  int /*long*/ hMod,  int dwThreadId);
public static final native int /*long*/ SetWindowsHookExA (int idHook, int /*long*/ lpfn,  int /*long*/ hMod,  int dwThreadId);
public static final native BOOL SetWorldTransform(int /*long*/ hdc, float[] lpXform);
public static final native int /*long*/ SHBrowseForFolderW (BROWSEINFO lpbi);
public static final native int /*long*/ SHBrowseForFolderA (BROWSEINFO lpbi);
public static final native BOOL SHCreateMenuBar (SHMENUBARINFO pmb);
public static final native int /*long*/ SHGetFileInfoW (char [] pszPath, int dwFileAttributes, SHFILEINFOW psfi, int cbFileInfo, int uFlags);
public static final native int /*long*/ SHGetFileInfoA (byte [] pszPath, int dwFileAttributes, SHFILEINFOA psfi, int cbFileInfo, int uFlags);
public static final native BOOL SHHandleWMSettingChange (int /*long*/ hwnd, int /*long*/ wParam, int /*long*/ lParam, SHACTIVATEINFO psai);
public static final native int SHRecognizeGesture (SHRGINFO shrg);
public static final native void SHSendBackToFocusWindow (int uMsg, int /*long*/ wp, int /*long*/ lp);
public static final native BOOL SHSipPreference (int /*long*/ hwnd, int st);
public static final native BOOL ShellExecuteExW (SHELLEXECUTEINFO lpExecInfo);
public static final native BOOL ShellExecuteExA (SHELLEXECUTEINFO lpExecInfo);
public static final native BOOL Shell_NotifyIconA (int dwMessage, NOTIFYICONDATAA lpData);
public static final native BOOL Shell_NotifyIconW (int dwMessage, NOTIFYICONDATAW lpData);
public static final native int SHGetMalloc (int /*long*/ [] ppMalloc);
public static final native BOOL SHGetPathFromIDListW (int /*long*/ pidl, char [] pszPath);
public static final native BOOL SHGetPathFromIDListA (int /*long*/ pidl, byte [] pszPath);
public static final native BOOL SHSetAppKeyWndAssoc (byte bVk, int /*long*/ hwnd);
public static final native BOOL ShowCaret (int /*long*/ hWnd);
public static final native BOOL ShowOwnedPopups (int /*long*/ hWnd, BOOL fShow);
public static final native BOOL ShowScrollBar (int /*long*/ hWnd, int wBar, BOOL bShow);
public static final native BOOL ShowWindow (int /*long*/ hWnd, int nCmdShow);
public static final native BOOL SipGetInfo (SIPINFO pSipInfo);
public static final native int StartDocW (int /*long*/ hdc, DOCINFO lpdi);
public static final native int StartDocA (int /*long*/ hdc, DOCINFO lpdi);
public static final native int StartPage (int /*long*/ hdc);
public static final native BOOL StretchBlt (int /*long*/ hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int nHeightDest, int /*long*/ hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, int dwRop);
public static final native BOOL StrokePath (int /*long*/ hdc);
public static final native BOOL SystemParametersInfoW (int uiAction, int uiParam, HIGHCONTRAST pvParam, int fWinIni);
public static final native BOOL SystemParametersInfoA (int uiAction, int uiParam, HIGHCONTRAST pvParam, int fWinIni);
public static final native BOOL SystemParametersInfoW (int uiAction, int uiParam, RECT pvParam, int fWinIni);
public static final native BOOL SystemParametersInfoA (int uiAction, int uiParam, RECT pvParam, int fWinIni);
public static final native BOOL SystemParametersInfoW (int uiAction, int uiParam, NONCLIENTMETRICSW pvParam, int fWinIni);
public static final native BOOL SystemParametersInfoA (int uiAction, int uiParam, NONCLIENTMETRICSA pvParam, int fWinIni);
public static final native BOOL SystemParametersInfoW (int uiAction, int uiParam, int [] pvParam, int fWinIni);
public static final native BOOL SystemParametersInfoA (int uiAction, int uiParam, int [] pvParam, int fWinIni);
public static final native int ToAscii (int uVirtKey, int uScanCode, byte [] lpKeyState, short [] lpChar, int uFlags);
public static final native int ToUnicode (int wVirtKey, int wScanCode, byte [] lpKeyState, char [] pwszBuff, int cchBuff, int wFlags);
public static final native BOOL TrackMouseEvent (TRACKMOUSEEVENT lpEventTrack);
public static final native BOOL TrackPopupMenu (int /*long*/ hMenu, int uFlags, int x, int y, int nReserved, int /*long*/ hWnd, RECT prcRect);
public static final native int TranslateAcceleratorW (int /*long*/ hWnd, int /*long*/ hAccTable, MSG lpMsg);
public static final native int TranslateAcceleratorA (int /*long*/ hWnd, int /*long*/ hAccTable, MSG lpMsg);
public static final native BOOL TranslateCharsetInfo (int /*long*/ lpSrc, int [] lpCs, int dwFlags);
public static final native BOOL TranslateMDISysAccel (int /*long*/ hWndClient, MSG lpMsg);
public static final native BOOL TranslateMessage (MSG lpmsg);
public static final native BOOL TransparentBlt (int /*long*/ hdcDest, int nXOriginDest, int nYOriginDest, int nWidthDest, int hHeightDest, int /*long*/ hdcSrc, int nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, int crTransparent);
public static final native BOOL TransparentImage (int /*long*/ hdcDest, int DstX, int DstY, int DstCx, int DstCy,int /*long*/ hSrc, int SrcX, int SrcY, int SrcCx, int SrcCy, int TransparentColor);
public static final native BOOL UnhookWindowsHookEx (int /*long*/ hhk);
public static final native BOOL UnregisterClassW (char [] lpClassName, int /*long*/ hInstance);
public static final native BOOL UnregisterClassA (byte [] lpClassName, int /*long*/ hInstance);
public static final native BOOL UpdateWindow (int /*long*/ hWnd);
public static final native BOOL ValidateRect (int /*long*/ hWnd, RECT lpRect);
public static final native short VkKeyScanW (short ch);
public static final native short VkKeyScanA (short ch);

public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl);

public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, int arg0);
public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, long arg0);

public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, int arg0, int arg1, int arg2, int[] arg3);
public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, long arg0, long arg1, int arg2, long[] arg3);
public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, int arg0, long arg1, int arg2, long[] arg3);
public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, long arg0, int arg1, int arg2, long[] arg3);

public static final native int VtblCall (int fnNumber, int /*long*/ ppVtbl, char[] arg0, int arg1, int arg2, int[] arg3, int[] arg4);

++/

/** Ansi/Unicode wrappers */
// Unicode/Ansi alias
version(ANSI) {
    alias WINAPI.AddFontResourceExA AddFontResourceEx;
    alias WINAPI.AssocQueryStringA AssocQueryString;
    alias WINAPI.CallWindowProcA CallWindowProc;
    alias WINAPI.CharLowerA CharLower;
    alias WINAPI.CharUpperA CharUpper;
    alias WINAPI.ChooseColorA ChooseColor;
    alias WINAPI.ChooseFontA ChooseFont;
    alias WINAPI.CreateAcceleratorTableA CreateAcceleratorTable;
    alias WINAPI.CreateDCA CreateDC;
    alias WINAPI.CreateEventA CreateEvent;
    alias WINAPI.CreateFileA CreateFile;
    alias WINAPI.CreateFontIndirectA CreateFontIndirect;
    alias WINAPI.CreateWindowExA CreateWindowEx;
    alias WINAPI.DefFrameProcA DefFrameProc;
    alias WINAPI.DefMDIChildProcA DefMDIChildProc;
    alias WINAPI.DefWindowProcA DefWindowProc;
    alias WINAPI.DeleteFileA DeleteFile;
    alias WINAPI.DispatchMessageA DispatchMessage;
    alias WINAPI.DragQueryFileA DragQueryFile;
    alias WINAPI.DrawStateA DrawState;
    alias WINAPI.DrawTextA DrawText;
    alias WINAPI.EnumFontFamiliesExA EnumFontFamiliesEx;
    alias WINAPI.EnumFontFamiliesA EnumFontFamilies;
    alias WINAPI.EnumSystemLanguageGroupsA EnumSystemLanguageGroups;
    alias WINAPI.EnumSystemLocalesA EnumSystemLocales;
    alias WINAPI.ExpandEnvironmentStringsA ExpandEnvironmentStrings;
    alias WINAPI.ExtTextOutA ExtTextOut;
    alias WINAPI.ExtractIconExA ExtractIconEx;
    alias WINAPI.FindResourceA FindResource;
    alias WINAPI.FindWindowA FindWindow;
    alias WINAPI.FormatMessageA FormatMessage;
    alias WINAPI.GetCharABCWidthsA GetCharABCWidths;
    alias WINAPI.GetCharWidthA GetCharWidth;
    alias WINAPI.GetCharacterPlacementA GetCharacterPlacement;
    alias WINAPI.GetClassInfoA GetClassInfo;
    alias WINAPI.GetClassNameA GetClassName;
    alias WINAPI.GetClipboardFormatNameA GetClipboardFormatName;
    alias WINAPI.GetDateFormatA GetDateFormat;
    alias WINAPI.GetTimeFormatA GetTimeFormat;
    alias WINAPI.GetKeyNameTextA GetKeyNameText;
    alias WINAPI.GetLocaleInfoA GetLocaleInfo;
    alias WINAPI.GetMenuItemInfoA GetMenuItemInfo;
    alias WINAPI.GetMessageA GetMessage;
    alias WINAPI.GetModuleFileNameA GetModuleFileName;
    alias WINAPI.GetModuleHandleA GetModuleHandle;
    alias WINAPI.GetMonitorInfoA GetMonitorInfo;
    alias WINAPI.GetObjectA GetObject;
    alias WINAPI.GetOpenFileNameA GetOpenFileName;
    alias WINAPI.GetProfileStringA _GetProfileString;
    alias WINAPI.GetPropA GetProp;
    alias WINAPI.GetSaveFileNameA GetSaveFileName;
    alias WINAPI.GetStartupInfoA GetStartupInfo;
    alias WINAPI.GetTextExtentPoint32A GetTextExtentPoint32;
    alias WINAPI.GetTextMetricsA GetTextMetrics;
    alias WINAPI.GetVersionExA GetVersionEx;
    alias WINAPI.GetWindowLongA GetWindowLong;
    alias WINAPI.GetWindowTextA _GetWindowText;
    alias WINAPI.GetWindowTextLengthA GetWindowTextLength;
    alias WINAPI.GlobalAddAtomA GlobalAddAtom;
//     alias WINAPI.ImmGetCompositionFontA ImmGetCompositionFont;
//     alias WINAPI.ImmGetCompositionStringA ImmGetCompositionString;
//     alias WINAPI.ImmSetCompositionFontA ImmSetCompositionFont;
    alias WINAPI.InsertMenuA InsertMenu;
    alias WINAPI.InsertMenuItemA InsertMenuItem;
    alias WINAPI.LoadBitmapA LoadBitmap;
    alias WINAPI.LoadCursorA LoadCursor;
    alias WINAPI.LoadIconA LoadIcon;
    alias WINAPI.LoadImageA LoadImage;
    alias WINAPI.LoadLibraryA LoadLibrary;
    alias WINAPI.LoadStringA LoadString;
    alias WINAPI.MapVirtualKeyA MapVirtualKey;
    alias WINAPI.MessageBoxA MessageBox;
    alias WINAPI.OutputDebugStringA OutputDebugString;
    alias WINAPI.PeekMessageA PeekMessage;
    alias WINAPI.PostMessageA PostMessage;
    alias WINAPI.PostThreadMessageA PostThreadMessage;
    alias WINAPI.PrintDlgA PrintDlg;
    alias WINAPI.RegEnumKeyExA RegEnumKeyEx;
    alias WINAPI.RegOpenKeyExA RegOpenKeyEx;
    alias WINAPI.RegQueryInfoKeyA RegQueryInfoKey;
    alias WINAPI.RegQueryValueExA RegQueryValueEx;
    alias WINAPI.RegisterClassA RegisterClass;
    alias WINAPI.RegisterClipboardFormatA RegisterClipboardFormat;
    alias WINAPI.RegOpenKeyExA RegOpenKeyEx;
    alias WINAPI.RegisterWindowMessageA RegisterWindowMessage;
    alias WINAPI.RemovePropA RemoveProp;
    alias WINAPI.SHBrowseForFolderA SHBrowseForFolder;
    alias WINAPI.SHGetPathFromIDListA SHGetPathFromIDList;
    alias WINAPI.SendMessageA SendMessage;
    alias WINAPI.SetMenuItemInfoA SetMenuItemInfo;
    alias WINAPI.SetPropA SetProp;
    alias WINAPI.SetWindowLongA SetWindowLong;
    alias WINAPI.SetWindowTextA SetWindowText;
    alias WINAPI.SetWindowsHookExA SetWindowsHookEx;
    alias WINAPI.ShellExecuteExA ShellExecuteEx;
    alias WINAPI.Shell_NotifyIconA Shell_NotifyIcon;
    alias WINAPI.StartDocA StartDoc;
    alias WINAPI.SystemParametersInfoA SystemParametersInfo;
    alias WINAPI.TranslateAcceleratorA TranslateAccelerator;
    alias WINAPI.UnregisterClassA UnregisterClass;
    alias WINAPI.VkKeyScanA VkKeyScan;
}else{
    alias WINAPI.AddFontResourceExW AddFontResourceEx;
    alias WINAPI.AssocQueryStringW AssocQueryString;
    alias WINAPI.CallWindowProcW CallWindowProc;
    alias WINAPI.CharLowerW CharLower;
    alias WINAPI.CharUpperW CharUpper;
    alias WINAPI.ChooseColorW ChooseColor;
    alias WINAPI.ChooseFontW ChooseFont;
    alias WINAPI.CreateAcceleratorTableW CreateAcceleratorTable;
    alias WINAPI.CreateDCW CreateDC;
    alias WINAPI.CreateEventW CreateEvent;
    alias WINAPI.CreateFileW CreateFile;
    alias WINAPI.CreateFontIndirectW CreateFontIndirect;
    alias WINAPI.CreateWindowExW CreateWindowEx;
    alias WINAPI.DefFrameProcW DefFrameProc;
    alias WINAPI.DefMDIChildProcW DefMDIChildProc;
    alias WINAPI.DefWindowProcW DefWindowProc;
    alias WINAPI.DeleteFileW DeleteFile;
    alias WINAPI.DispatchMessageW DispatchMessage;
    alias WINAPI.DragQueryFileW DragQueryFile;
    alias WINAPI.DrawStateW DrawState;
    alias WINAPI.DrawTextW DrawText;
    alias WINAPI.EnumFontFamiliesExW EnumFontFamiliesEx;
    alias WINAPI.EnumFontFamiliesW EnumFontFamilies;
    alias WINAPI.EnumSystemLanguageGroupsW EnumSystemLanguageGroups;
    alias WINAPI.EnumSystemLocalesW EnumSystemLocales;
    alias WINAPI.ExpandEnvironmentStringsW ExpandEnvironmentStrings;
    alias WINAPI.ExtTextOutW ExtTextOut;
    alias WINAPI.ExtractIconExW ExtractIconEx;
    alias WINAPI.FindResourceW FindResource;
    alias WINAPI.FindWindowW FindWindow;
    alias WINAPI.FormatMessageW FormatMessage;
    alias WINAPI.GetCharABCWidthsW GetCharABCWidths;
    alias WINAPI.GetCharWidthW GetCharWidth;
    alias WINAPI.GetCharacterPlacementW GetCharacterPlacement;
    alias WINAPI.GetClassInfoW GetClassInfo;
    alias WINAPI.GetClassNameW GetClassName;
    alias WINAPI.GetClipboardFormatNameW GetClipboardFormatName;
    alias WINAPI.GetDateFormatW GetDateFormat;
    alias WINAPI.GetTimeFormatW GetTimeFormat;
    alias WINAPI.GetKeyNameTextW GetKeyNameText;
    alias WINAPI.GetLocaleInfoW GetLocaleInfo;
    alias WINAPI.GetMenuItemInfoW GetMenuItemInfo;
    alias WINAPI.GetMessageW GetMessage;
    alias WINAPI.GetModuleFileNameW GetModuleFileName;
    alias WINAPI.GetModuleHandleW GetModuleHandle;
    alias WINAPI.GetMonitorInfoW GetMonitorInfo;
    alias WINAPI.GetObjectW GetObject;
    alias WINAPI.GetOpenFileNameW GetOpenFileName;
    alias WINAPI.GetProfileStringW _GetProfileString;
    alias WINAPI.GetPropW GetProp;
    alias WINAPI.GetSaveFileNameW GetSaveFileName;
    alias WINAPI.GetStartupInfoW GetStartupInfo;
    alias WINAPI.GetTextExtentPoint32W GetTextExtentPoint32;
    alias WINAPI.GetTextMetricsW GetTextMetrics;
    alias WINAPI.GetVersionExW GetVersionEx;
    alias WINAPI.GetWindowLongW GetWindowLong;
    alias WINAPI.GetWindowTextW _GetWindowText;
    alias WINAPI.GetWindowTextLengthW GetWindowTextLength;
    alias WINAPI.GlobalAddAtomW GlobalAddAtom;
//     alias WINAPI.ImmGetCompositionFontW ImmGetCompositionFont;
//     alias WINAPI.ImmGetCompositionStringW ImmGetCompositionString;
//     alias WINAPI.ImmSetCompositionFontW ImmSetCompositionFont;
    alias WINAPI.InsertMenuW InsertMenu;
    alias WINAPI.InsertMenuItemW InsertMenuItem;
    alias WINAPI.LoadBitmapW LoadBitmap;
    alias WINAPI.LoadCursorW LoadCursor;
    alias WINAPI.LoadIconW LoadIcon;
    alias WINAPI.LoadImageW LoadImage;
    alias WINAPI.LoadLibraryW LoadLibrary;
    alias WINAPI.LoadStringW LoadString;
    alias WINAPI.MapVirtualKeyW MapVirtualKey;
    alias WINAPI.MessageBoxW MessageBox;
    alias WINAPI.OutputDebugStringW OutputDebugString;
    alias WINAPI.PeekMessageW PeekMessage;
    alias WINAPI.PostMessageW PostMessage;
    alias WINAPI.PostThreadMessageW PostThreadMessage;
    alias WINAPI.PrintDlgW PrintDlg;
    alias WINAPI.RegEnumKeyExW RegEnumKeyEx;
    alias WINAPI.RegOpenKeyExW RegOpenKeyEx;
    alias WINAPI.RegQueryInfoKeyW RegQueryInfoKey;
    alias WINAPI.RegQueryValueExW RegQueryValueEx;
    alias WINAPI.RegisterClassW RegisterClass;
    alias WINAPI.RegisterClipboardFormatW RegisterClipboardFormat;
    alias WINAPI.RegOpenKeyExW RegOpenKeyEx;
    alias WINAPI.RegisterWindowMessageW RegisterWindowMessage;
    alias WINAPI.RemovePropW RemoveProp;
    alias WINAPI.SHBrowseForFolderW SHBrowseForFolder;
    alias WINAPI.SHGetPathFromIDListW SHGetPathFromIDList;
    alias WINAPI.SendMessageW SendMessage;
    alias WINAPI.SetMenuItemInfoW SetMenuItemInfo;
    alias WINAPI.SetWindowLongW SetWindowLong;
    alias WINAPI.SetWindowTextW SetWindowText;
    alias WINAPI.SetWindowsHookExW SetWindowsHookEx;
    alias WINAPI.SetPropW SetProp;
    alias WINAPI.ShellExecuteExW ShellExecuteEx;
    alias WINAPI.Shell_NotifyIconW Shell_NotifyIcon;
    alias WINAPI.StartDocW StartDoc;
    alias WINAPI.SystemParametersInfoW SystemParametersInfo;
    alias WINAPI.TranslateAcceleratorW TranslateAccelerator;
    alias WINAPI.UnregisterClassW UnregisterClass;
    alias WINAPI.VkKeyScanW VkKeyScan;
}




// ----------------------------------------------------------------------------
// UxTheme dummies until dynamic loading is in place.
// ----------------------------------------------------------------------------
public static extern(Windows) {
    BOOL function (
    ) IsAppThemed;

    HRESULT function(
        HTHEME hTheme,
        HDC hdc,
        int iPartId,
        int iStateId,
        RECT *pRect,
        RECT *pClipRect
    ) DrawThemeBackground;

    HRESULT function(
        HTHEME hTheme,
        HDC hdc,
        int iPartId,
        int iStateId,
        LPCRECT pDestRect,
        UINT uEdge,
        UINT uFlags,
        LPRECT pContentRect
    ) DrawThemeEdge;

    HRESULT function(
        HTHEME hTheme,
        HDC hdc,
        int iPartId,
        int iStateId,
        LPCRECT pRect,
        HIMAGELIST himl,
        int iImageIndex
    ) DrawThemeIcon;

    HRESULT function(
        HWND hwnd,
        HDC hdc,
        RECT *prc
    ) DrawThemeParentBackground;

    HRESULT function(
        HTHEME hTheme,
        HDC hdc,
        int iPartId,
        int iStateId,
        LPCWSTR pszText,
        int iCharCount,
        DWORD dwTextFlags,
        DWORD dwTextFlags2,
        LPCRECT pRect
    ) DrawThemeText;

    HTHEME function(
        HWND hwnd,
        LPCWSTR pszClassList
    ) OpenThemeData;

    HRESULT function(
    )BufferedPaintInit;

    HRESULT function(
        HTHEME hTheme
    ) CloseThemeData;

    HRESULT function(
    ) BufferedPaintUnInit;

    HPAINTBUFFER function(
        HDC hdcTarget,
        RECT *prcTarget,
        uint/+BP_BUFFERFORMAT+/ dwFormat,
        void*/+BP_PAINTPARAMS+/ pPaintParams,
        HDC *phdc
    ) BeginBufferedPaint;

    HRESULT function(
        HPAINTBUFFER hBufferedPaint,
        BOOL fUpdateTarget
    ) EndBufferedPaint;

    HRESULT function(
        HTHEME hTheme,
        HDC hdc,
        int iPartId,
        int iStateId,
        LPCWSTR pszText,
        int iCharCount,
        DWORD dwTextFlags,
        LPCRECT pBoundingRect,
        LPRECT pExtentRect
    ) GetThemeTextExtent;

    HRESULT function(
        HWND hwnd,
        LPCWSTR pszSubAppName,
        LPCWSTR pszSubIdList
    ) SetWindowTheme;

} // public static

static Symbol[] Symbols_UxTheme = [
    { "IsAppThemed", cast(void**)& IsAppThemed, 5, 1 },
    { "DrawThemeBackground", cast(void**)& DrawThemeBackground, 5, 1 },
    { "DrawThemeEdge", cast(void**)& DrawThemeEdge, 5, 1 },
    { "DrawThemeIcon", cast(void**)& DrawThemeIcon, 5, 1 },
    { "DrawThemeParentBackground", cast(void**)& DrawThemeParentBackground, 5, 1 },
    { "DrawThemeText", cast(void**)& DrawThemeText, 5, 1 },
    { "OpenThemeData", cast(void**)& OpenThemeData, 5, 1 },
    { "CloseThemeData", cast(void**)& CloseThemeData, 5, 1 },
    { "GetThemeTextExtent", cast(void**)& GetThemeTextExtent, 5, 1 },
    { "SetWindowTheme", cast(void**)& SetWindowTheme, 5, 1 },
    { "BufferedPaintUnInit", cast(void**)& BufferedPaintUnInit, 6, 0 },
    { "BufferedPaintInit", cast(void**)& BufferedPaintInit, 6, 0 },
    { "BeginBufferedPaint", cast(void**)& BeginBufferedPaint, 6, 0 },
    { "EndBufferedPaint", cast(void**)& EndBufferedPaint, 6, 0 },
];

static void loadLib_UxTheme(){
    if (auto lib = SharedLib.load(`uxtheme.dll`)) {
        foreach( inout s; Symbols_UxTheme ){
            if( OS.WIN32_VERSION >= OS.VERSION( s.major, s.minor )){
                *s.symbol = lib.getSymbol( s.name.ptr );
                if( *s.symbol is null ){
                    Trace.formatln("UxTheme.dll: Symbol '{}' not found", s.name );
                }
            }
        }
    } else {
        Trace.formatln("Could not load the library UxTheme.dll");
    }
}
//----------------------------------------------------------------------
// Coreimm.lib (WinCE)
// this function vars exist primarily for link error elimination
//----------------------------------------------------------------------
public static extern(Windows) {
} // public static extern(Windows)

static Symbol[] Symbols_CoreImm = [
];

// user32.dll vista
public static extern(Windows) BOOL function() SetProcessDPIAware;
static Symbol[] Symbols_User32 = [
    { "SetProcessDPIAware", cast(void**)& SetProcessDPIAware, 6, 0 },
];

// Imm32.lib
public static extern(Windows) {
HIMC function( HWND hWnd ) ImmGetContext;
BOOL function( DWORD idThread ) ImmDisableTextFrameService;
HIMC function( HWND hWnd, HIMC hIMC ) ImmAssociateContext;

HIMC function() ImmCreateContext;
int function( HIMC hIMC ) ImmDestroyContext;
BOOL function( HIMC hIMC, LPDWORD lpfdwConversion, LPDWORD lpfdwSentence ) ImmGetConversionStatus;
HWND function( HWND hWnd ) ImmGetDefaultIMEWnd;
BOOL function( HIMC hIMC ) ImmGetOpenStatus;
BOOL function( HWND hWnd, HIMC hIMC ) ImmReleaseContext;
version(ANSI) {
    BOOL function( HIMC hIMC, LOGFONTA* lplf ) ImmSetCompositionFont;
    LONG function( HIMC hIMC, DWORD dwIndex, LPVOID lpBuf, DWORD dwBufLen ) ImmGetCompositionString;
    BOOL function( HIMC hIMC, LPLOGFONTA lplf ) ImmGetCompositionFont;

} else {
    BOOL function( HIMC hIMC, LOGFONTW* lplf ) ImmSetCompositionFont;
    LONG function( HIMC hIMC, DWORD dwIndex, LPVOID lpBuf, DWORD dwBufLen ) ImmGetCompositionString;
    BOOL function( HIMC hIMC, LOGFONTW* lplf ) ImmGetCompositionFont;
}
BOOL function( HIMC hIMC, LPCOMPOSITIONFORM lpCompForm ) ImmSetCompositionWindow;
BOOL function( HIMC hIMC, DWORD fdwConversion, DWORD fdwSentence ) ImmSetConversionStatus;
BOOL function( HIMC hIMC, BOOL fOpen ) ImmSetOpenStatus;

}

static Symbol[] Symbols_Imm32 = [
    { "ImmAssociateContext", cast(void**)& ImmAssociateContext, 5, 1 },
    { "ImmCreateContext", cast(void**)& ImmCreateContext, 5, 1 },
    { "ImmDestroyContext", cast(void**)& ImmDestroyContext, 5, 1 },
    { "ImmGetContext", cast(void**)& ImmGetContext, 5, 1 },
    { "ImmGetConversionStatus", cast(void**)& ImmGetConversionStatus, 5, 1 },
    { "ImmGetDefaultIMEWnd", cast(void**)& ImmGetDefaultIMEWnd, 5, 1 },
    { "ImmGetOpenStatus", cast(void**)& ImmGetOpenStatus, 5, 1 },
    { "ImmReleaseContext", cast(void**)& ImmReleaseContext, 5, 1 },
    { "ImmSetCompositionFontW", cast(void**)& ImmSetCompositionFont, 5, 1 },
    { "ImmGetCompositionStringW", cast(void**)& ImmGetCompositionString, 5, 1 },
    { "ImmGetCompositionFontW", cast(void**)& ImmGetCompositionFont, 5, 1 },
    { "ImmSetCompositionWindow", cast(void**)& ImmSetCompositionWindow, 5, 1 },
    { "ImmSetConversionStatus", cast(void**)& ImmSetConversionStatus, 5, 1 },
    { "ImmSetOpenStatus", cast(void**)& ImmSetOpenStatus, 5, 1 },
    { "ImmDisableTextFrameService", cast(void**)& ImmDisableTextFrameService, 5, 1 },
];

// kernel32 winxp/vista
public static extern(Windows) {
HANDLE function( ACTCTX* pActCtx ) CreateActCtx;
BOOL function( HACTCTX hActCtx, uint* lpCookie ) ActivateActCtx;
}
version(ANSI){
}else{
static Symbol[] Symbols_Kernel32 = [
    { "CreateActCtxW", cast(void**)& CreateActCtx, 5, 1 },
    { "ActivateActCtx", cast(void**)& ActivateActCtx, 5, 1 },
];
}


//------------------------------------------------------------------------
/** All Natives */
alias WINAPI.AbortDoc AbortDoc;
alias WINAPI.ActivateKeyboardLayout ActivateKeyboardLayout;
alias WINAPI.AdjustWindowRectEx AdjustWindowRectEx;
alias WINAPI.AlphaBlend AlphaBlend;
alias WINAPI.Arc Arc;
alias WINAPI.BeginDeferWindowPos BeginDeferWindowPos;
alias WINAPI.BeginPaint BeginPaint;
alias WINAPI.BeginPath BeginPath;
alias WINAPI.BitBlt BitBlt;
alias WINAPI.BringWindowToTop BringWindowToTop;
alias WINAPI.CallNextHookEx CallNextHookEx;
alias WINAPI.CallWindowProcA CallWindowProcA;
alias WINAPI.CallWindowProcW CallWindowProcW;
alias WINAPI.CharLowerA CharLowerA;
alias WINAPI.CharLowerW CharLowerW;
alias WINAPI.CharUpperA CharUpperA;
alias WINAPI.CharUpperW CharUpperW;
alias WINAPI.CheckMenuItem CheckMenuItem;
alias WINAPI.ChooseColorA ChooseColorA;
alias WINAPI.ChooseColorW ChooseColorW;
alias WINAPI.ChooseFontA ChooseFontA;
alias WINAPI.ChooseFontW ChooseFontW;
alias WINAPI.ClientToScreen ClientToScreen;
alias WINAPI.CloseHandle CloseHandle;
alias WINAPI.CloseClipboard CloseClipboard;
alias WINAPI.CombineRgn CombineRgn;
alias WINAPI.CommDlgExtendedError CommDlgExtendedError;

version(WinCE){
alias WINAPI.CommandBar_AddAdornments CommandBar_AddAdornments;
alias WINAPI.CommandBar_Create CommandBar_Create;
alias WINAPI.CommandBar_Destroy CommandBar_Destroy;
alias WINAPI.CommandBar_DrawMenuBar CommandBar_DrawMenuBar;
alias WINAPI.CommandBar_Height CommandBar_Height;
alias WINAPI.CommandBar_InsertMenubarEx CommandBar_InsertMenubarEx;
alias WINAPI.CommandBar_Show CommandBar_Show;
}

alias WINAPI.CopyImage CopyImage;
alias WINAPI.CreateAcceleratorTableA CreateAcceleratorTableA;
alias WINAPI.CreateAcceleratorTableW CreateAcceleratorTableW;
alias WINAPI.CreateBitmap CreateBitmap;
alias WINAPI.CreateCaret CreateCaret;
alias WINAPI.CreateCompatibleBitmap CreateCompatibleBitmap;
alias WINAPI.CreateCompatibleDC CreateCompatibleDC;
alias WINAPI.CreateCursor CreateCursor;
alias WINAPI.CreateDCA CreateDCA;
alias WINAPI.CreateDCW CreateDCW;
alias WINAPI.CreateDIBSection CreateDIBSection;
alias WINAPI.CreateEventA CreateEventA;
alias WINAPI.CreateEventW CreateEventW;
alias WINAPI.CreateFileA CreateFileA;
alias WINAPI.CreateFileW CreateFileW;
alias WINAPI.CreateFontIndirectA CreateFontIndirectA;
alias WINAPI.CreateFontIndirectW CreateFontIndirectW;
alias WINAPI.CreateIconIndirect CreateIconIndirect;
alias WINAPI.CreateMenu CreateMenu;
alias WINAPI.CreatePalette CreatePalette;
alias WINAPI.CreatePatternBrush CreatePatternBrush;
alias WINAPI.CreatePen CreatePen;
alias WINAPI.CreatePolygonRgn CreatePolygonRgn;
alias WINAPI.CreatePopupMenu CreatePopupMenu;
alias WINAPI.CreateRectRgn CreateRectRgn;
alias WINAPI.CreateSolidBrush CreateSolidBrush;
alias WINAPI.CreateWindowExA CreateWindowExA;
alias WINAPI.CreateWindowExW CreateWindowExW;
alias WINAPI.DefFrameProcA DefFrameProcA;
alias WINAPI.DefFrameProcW DefFrameProcW;
alias WINAPI.DefMDIChildProcA DefMDIChildProcA;
alias WINAPI.DefMDIChildProcW DefMDIChildProcW;
alias WINAPI.DefWindowProcA DefWindowProcA;
alias WINAPI.DefWindowProcW DefWindowProcW;
alias WINAPI.DeferWindowPos DeferWindowPos;
alias WINAPI.DeleteDC DeleteDC;
alias WINAPI.DeleteMenu DeleteMenu;
alias WINAPI.DeleteObject DeleteObject;
alias WINAPI.DestroyAcceleratorTable DestroyAcceleratorTable;
alias WINAPI.DestroyCaret DestroyCaret;
alias WINAPI.DestroyCursor DestroyCursor;
alias WINAPI.DestroyIcon DestroyIcon;
alias WINAPI.DestroyMenu DestroyMenu;
alias WINAPI.DestroyWindow DestroyWindow;
alias WINAPI.DispatchMessageA DispatchMessageA;
alias WINAPI.DispatchMessageW DispatchMessageW;
alias WINAPI.DragDetect DragDetect;
alias WINAPI.DragFinish DragFinish;
alias WINAPI.DragQueryFileA DragQueryFileA;
alias WINAPI.DragQueryFileW DragQueryFileW;
alias WINAPI.DrawEdge DrawEdge;
alias WINAPI.DrawFocusRect DrawFocusRect;
alias WINAPI.DrawFrameControl DrawFrameControl;
alias WINAPI.DrawIconEx DrawIconEx;
alias WINAPI.DrawMenuBar DrawMenuBar;
alias WINAPI.DrawStateA DrawStateA;
alias WINAPI.DrawStateW DrawStateW;
alias WINAPI.DrawTextA DrawTextA;
alias WINAPI.DrawTextW DrawTextW;
alias WINAPI.Ellipse Ellipse;
alias WINAPI.EnableMenuItem EnableMenuItem;
alias WINAPI.EnableScrollBar EnableScrollBar;
alias WINAPI.EnableWindow EnableWindow;
alias WINAPI.EndDeferWindowPos EndDeferWindowPos;
alias WINAPI.EndDoc EndDoc;
alias WINAPI.EndPage EndPage;
alias WINAPI.EndPaint EndPaint;
alias WINAPI.EndPath EndPath;
alias WINAPI.EnumDisplayMonitors EnumDisplayMonitors;
alias WINAPI.EnumFontFamiliesA EnumFontFamiliesA;
alias WINAPI.EnumFontFamiliesExA EnumFontFamiliesExA;
alias WINAPI.EnumFontFamiliesExW EnumFontFamiliesExW;
alias WINAPI.EnumFontFamiliesW EnumFontFamiliesW;
alias WINAPI.EnumSystemLanguageGroupsA EnumSystemLanguageGroupsA;
alias WINAPI.EnumSystemLanguageGroupsW EnumSystemLanguageGroupsW;
alias WINAPI.EnumSystemLocalesA EnumSystemLocalesA;
alias WINAPI.EnumSystemLocalesW EnumSystemLocalesW;
alias WINAPI.EqualRect EqualRect;
alias WINAPI.EqualRgn EqualRgn;
alias WINAPI.ExcludeClipRect ExcludeClipRect;
alias WINAPI.ExpandEnvironmentStringsA ExpandEnvironmentStringsA;
alias WINAPI.ExpandEnvironmentStringsW ExpandEnvironmentStringsW;
alias WINAPI.ExtTextOutA ExtTextOutA;
alias WINAPI.ExtTextOutW ExtTextOutW;
alias WINAPI.ExtractIconExA ExtractIconExA;
alias WINAPI.ExtractIconExW ExtractIconExW;
alias WINAPI.ExtCreatePen ExtCreatePen;
alias WINAPI.ExtCreateRegion ExtCreateRegion;
alias WINAPI.FillRect FillRect;
alias WINAPI.FindResourceA FindResourceA;
alias WINAPI.FindResourceW FindResourceW;
alias WINAPI.FindWindowA FindWindowA;
alias WINAPI.FindWindowW FindWindowW;
alias WINAPI.FormatMessageA FormatMessageA;
alias WINAPI.FormatMessageW FormatMessageW;
alias WINAPI.FreeLibrary FreeLibrary;
alias WINAPI.GdiSetBatchLimit GdiSetBatchLimit;
alias WINAPI.GetACP GetACP;
alias WINAPI.GetAsyncKeyState GetAsyncKeyState;
alias WINAPI.GetActiveWindow GetActiveWindow;
alias WINAPI.GetBkColor GetBkColor;
alias WINAPI.GetCapture GetCapture;
alias WINAPI.GetCaretPos GetCaretPos;
alias WINAPI.GetCharABCWidthsA GetCharABCWidthsA;
alias WINAPI.GetCharABCWidthsW GetCharABCWidthsW;
alias WINAPI.GetCharWidthA GetCharWidthA;
alias WINAPI.GetCharWidthW GetCharWidthW;
alias WINAPI.GetCharacterPlacementA GetCharacterPlacementA;
alias WINAPI.GetCharacterPlacementW GetCharacterPlacementW;
alias WINAPI.GetClassInfoA GetClassInfoA;
alias WINAPI.GetClassInfoW GetClassInfoW;
alias WINAPI.GetClientRect GetClientRect;
alias WINAPI.GetClipBox GetClipBox;
alias WINAPI.GetClipRgn GetClipRgn;
alias WINAPI.GetClipboardData GetClipboardData;
alias WINAPI.GetClipboardFormatNameA GetClipboardFormatNameA;
alias WINAPI.GetClipboardFormatNameW GetClipboardFormatNameW;
alias WINAPI.GetComboBoxInfo GetComboBoxInfo;
alias WINAPI.GetCurrentObject GetCurrentObject;
alias WINAPI.GetCurrentProcessId GetCurrentProcessId;
alias WINAPI.GetCurrentThreadId GetCurrentThreadId;
alias WINAPI.GetCursor GetCursor;
alias WINAPI.GetCursorPos GetCursorPos;
alias WINAPI.GetDC GetDC;
alias WINAPI.GetDCEx GetDCEx;
alias WINAPI.GetDIBColorTable GetDIBColorTable;
alias WINAPI.GetDIBits GetDIBits;
alias WINAPI.GetDesktopWindow GetDesktopWindow;
alias WINAPI.GetDeviceCaps GetDeviceCaps;
alias WINAPI.GetDialogBaseUnits GetDialogBaseUnits;
alias WINAPI.GetDlgItem GetDlgItem;
alias WINAPI.GetDoubleClickTime GetDoubleClickTime;
alias WINAPI.GetFocus GetFocus;
alias WINAPI.GetFontLanguageInfo GetFontLanguageInfo;
alias WINAPI.GetGUIThreadInfo GetGUIThreadInfo;
alias WINAPI.GetIconInfo GetIconInfo;
alias WINAPI.GetKeyNameTextA GetKeyNameTextA;
alias WINAPI.GetKeyNameTextW GetKeyNameTextW;
alias WINAPI.GetKeyState GetKeyState;
alias WINAPI.GetKeyboardLayout GetKeyboardLayout;
alias WINAPI.GetKeyboardLayoutList GetKeyboardLayoutList;
alias WINAPI.GetKeyboardState GetKeyboardState;
alias WINAPI.GetLastActivePopup GetLastActivePopup;
alias WINAPI.GetLastError GetLastError;
alias WINAPI.GetLayout GetLayout;
alias WINAPI.GetLocaleInfoA GetLocaleInfoA;
alias WINAPI.GetLocaleInfoW GetLocaleInfoW;
alias WINAPI.GetMenu GetMenu;
alias WINAPI.GetMenuBarInfo GetMenuBarInfo;
alias WINAPI.GetMenuDefaultItem GetMenuDefaultItem;
alias WINAPI.GetMenuInfo GetMenuInfo;
alias WINAPI.GetMenuItemCount GetMenuItemCount;
alias WINAPI.GetMenuItemInfoA GetMenuItemInfoA;
alias WINAPI.GetMenuItemInfoW GetMenuItemInfoW;
alias WINAPI.GetMenuItemRect GetMenuItemRect;
alias WINAPI.GetMessageA GetMessageA;
alias WINAPI.GetMessagePos GetMessagePos;
alias WINAPI.GetMessageTime GetMessageTime;
alias WINAPI.GetMetaRgn GetMetaRgn;
alias WINAPI.GetMessageW GetMessageW;
alias WINAPI.GetModuleFileNameA GetModuleFileNameA;
alias WINAPI.GetModuleFileNameW GetModuleFileNameW;
alias WINAPI.GetModuleHandleA GetModuleHandleA;
alias WINAPI.GetModuleHandleW GetModuleHandleW;
alias WINAPI.GetMonitorInfoA GetMonitorInfoA;
alias WINAPI.GetMonitorInfoW GetMonitorInfoW;
alias WINAPI.GetNearestPaletteIndex GetNearestPaletteIndex;
alias WINAPI.GetPath GetPath;
alias WINAPI.GetObjectA GetObjectA;
alias WINAPI.GetObjectW GetObjectW;
alias WINAPI.GetOpenFileNameA GetOpenFileNameA;
alias WINAPI.GetOpenFileNameW GetOpenFileNameW;
alias WINAPI.GetPaletteEntries GetPaletteEntries;
alias WINAPI.GetParent GetParent;
alias WINAPI.GetPixel GetPixel;
alias WINAPI.GetPolyFillMode GetPolyFillMode;
alias WINAPI.GetProcAddress GetProcAddress;
alias WINAPI.GetProcessHeap GetProcessHeap;
alias WINAPI.GetProfileStringA GetProfileStringA;
alias WINAPI.GetProfileStringW GetProfileStringW;
alias WINAPI.GetROP2 GetROP2;
alias WINAPI.GetRandomRgn GetRandomRgn;
alias WINAPI.GetRegionData GetRegionData;
alias WINAPI.GetRgnBox GetRgnBox;
alias WINAPI.GetSaveFileNameA GetSaveFileNameA;
alias WINAPI.GetSaveFileNameW GetSaveFileNameW;
alias WINAPI.GetScrollInfo GetScrollInfo;
alias WINAPI.GetStockObject GetStockObject;
alias WINAPI.GetSysColor GetSysColor;
alias WINAPI.GetSysColorBrush GetSysColorBrush;
alias WINAPI.GetSystemDefaultUILanguage GetSystemDefaultUILanguage;
alias WINAPI.GetSystemMenu GetSystemMenu;
alias WINAPI.GetSystemMetrics GetSystemMetrics;
alias WINAPI.GetSystemPaletteEntries GetSystemPaletteEntries;
alias WINAPI.GetTextCharset GetTextCharset;
alias WINAPI.GetTextColor GetTextColor;
alias WINAPI.GetTextExtentPoint32A GetTextExtentPoint32A;
alias WINAPI.GetTextExtentPoint32W GetTextExtentPoint32W;
alias WINAPI.GetTextMetricsA GetTextMetricsA;
alias WINAPI.GetTextMetricsW GetTextMetricsW;
alias WINAPI.GetTickCount GetTickCount;
alias WINAPI.GetUpdateRect GetUpdateRect;
alias WINAPI.GetUpdateRgn GetUpdateRgn;
alias WINAPI.GetVersion GetVersion;
alias WINAPI.GetVersionExA GetVersionExA;
alias WINAPI.GetVersionExW GetVersionExW;
alias WINAPI.GetWindow GetWindow;
alias WINAPI.GetWindowDC GetWindowDC;
alias WINAPI.GetWindowOrgEx GetWindowOrgEx;
alias WINAPI.GetWindowLongA GetWindowLongA;
alias WINAPI.GetWindowLongW GetWindowLongW;
alias WINAPI.GetWindowPlacement GetWindowPlacement;
alias WINAPI.GetWindowRect GetWindowRect;
alias WINAPI.GetWindowRgn GetWindowRgn;
alias WINAPI.GetWindowTextA GetWindowTextA;
alias WINAPI.GetWindowTextLengthA GetWindowTextLengthA;
alias WINAPI.GetWindowTextLengthW GetWindowTextLengthW;
alias WINAPI.GetWindowTextW GetWindowTextW;
alias WINAPI.GetWindowThreadProcessId GetWindowThreadProcessId;
alias WINAPI.GlobalAlloc GlobalAlloc;
alias WINAPI.GlobalFree GlobalFree;
alias WINAPI.GlobalLock GlobalLock;
alias WINAPI.GlobalSize GlobalSize;
alias WINAPI.GlobalUnlock GlobalUnlock;
alias WINAPI.GradientFill GradientFill;
alias WINAPI.HeapAlloc HeapAlloc;
alias WINAPI.HeapFree HeapFree;
alias WINAPI.HideCaret HideCaret;
alias WINAPI.IIDFromString IIDFromString;
alias WINAPI.ImageList_Add ImageList_Add;
alias WINAPI.ImageList_AddMasked ImageList_AddMasked;
alias WINAPI.ImageList_BeginDrag ImageList_BeginDrag;
alias WINAPI.ImageList_Create ImageList_Create;
alias WINAPI.ImageList_Destroy ImageList_Destroy;
alias WINAPI.ImageList_DragEnter ImageList_DragEnter;
alias WINAPI.ImageList_DragLeave ImageList_DragLeave;
alias WINAPI.ImageList_DragMove ImageList_DragMove;
alias WINAPI.ImageList_DragShowNolock ImageList_DragShowNolock;
alias WINAPI.ImageList_Draw ImageList_Draw;
alias WINAPI.ImageList_EndDrag ImageList_EndDrag;
alias WINAPI.ImageList_GetIcon ImageList_GetIcon;
alias WINAPI.ImageList_GetIconSize ImageList_GetIconSize;
alias WINAPI.ImageList_GetImageCount ImageList_GetImageCount;
alias WINAPI.ImageList_Remove ImageList_Remove;
alias WINAPI.ImageList_Replace ImageList_Replace;
alias WINAPI.ImageList_ReplaceIcon ImageList_ReplaceIcon;
alias WINAPI.ImageList_SetIconSize ImageList_SetIconSize;
// alias WINAPI.ImmAssociateContext ImmAssociateContext;
// alias WINAPI.ImmCreateContext ImmCreateContext;
// alias WINAPI.ImmDestroyContext ImmDestroyContext;
// alias WINAPI.ImmGetCompositionFontA ImmGetCompositionFontA;
// alias WINAPI.ImmGetCompositionFontW ImmGetCompositionFontW;
// alias WINAPI.ImmGetCompositionStringA ImmGetCompositionStringA;
// alias WINAPI.ImmGetCompositionStringW ImmGetCompositionStringW;
// alias WINAPI.ImmGetContext ImmGetContext;
// alias WINAPI.ImmGetConversionStatus ImmGetConversionStatus;
// alias WINAPI.ImmGetDefaultIMEWnd ImmGetDefaultIMEWnd;
// alias WINAPI.ImmGetOpenStatus ImmGetOpenStatus;
// alias WINAPI.ImmReleaseContext ImmReleaseContext;
// alias WINAPI.ImmSetCompositionFontA ImmSetCompositionFontA;
// alias WINAPI.ImmSetCompositionFontW ImmSetCompositionFontW;
// alias WINAPI.ImmSetOpenStatus ImmSetOpenStatus;
alias WINAPI.InitCommonControls InitCommonControls;
alias WINAPI.InitCommonControlsEx InitCommonControlsEx;
alias WINAPI.InsertMenuA InsertMenuA;
alias WINAPI.InsertMenuItemA InsertMenuItemA;
alias WINAPI.InsertMenuItemW InsertMenuItemW;
alias WINAPI.InsertMenuW InsertMenuW;
alias WINAPI.InterlockedDecrement InterlockedDecrement;
alias WINAPI.InterlockedIncrement InterlockedIncrement;
alias WINAPI.IntersectClipRect IntersectClipRect;
alias WINAPI.IntersectRect IntersectRect;
alias WINAPI.InvalidateRect InvalidateRect;
alias WINAPI.InvalidateRgn InvalidateRgn;
alias WINAPI.IsDBCSLeadByte IsDBCSLeadByte;
alias WINAPI.IsHungAppWindow IsHungAppWindow;
alias WINAPI.IsIconic IsIconic;
alias WINAPI.IsWindow IsWindow;
alias WINAPI.IsWindowEnabled IsWindowEnabled;
alias WINAPI.IsWindowVisible IsWindowVisible;
alias WINAPI.IsZoomed IsZoomed;
alias WINAPI.KillTimer KillTimer;
alias WINAPI.LineTo LineTo;
alias WINAPI.LoadBitmapA LoadBitmapA;
alias WINAPI.LoadBitmapW LoadBitmapW;
alias WINAPI.LoadCursorA LoadCursorA;
alias WINAPI.LoadCursorW LoadCursorW;
alias WINAPI.LoadIconA LoadIconA;
alias WINAPI.LoadIconW LoadIconW;
alias WINAPI.LoadImageA LoadImageA;
alias WINAPI.LoadImageW LoadImageW;
alias WINAPI.LoadLibraryA LoadLibraryA;
alias WINAPI.LoadLibraryW LoadLibraryW;
alias WINAPI.LoadResource LoadResource;
alias WINAPI.LoadStringA LoadStringA;
alias WINAPI.LoadStringW LoadStringW;
alias WINAPI.LocalFree LocalFree;
alias WINAPI.LockResource LockResource;
alias WINAPI.MapVirtualKeyA MapVirtualKeyA;
alias WINAPI.MapVirtualKeyW MapVirtualKeyW;
alias WINAPI.MapWindowPoints MapWindowPoints;
alias WINAPI.MessageBeep MessageBeep;
alias WINAPI.MessageBoxA MessageBoxA;
alias WINAPI.MessageBoxW MessageBoxW;
alias WINAPI.MonitorFromWindow MonitorFromWindow;
alias WINAPI.MoveToEx MoveToEx;
alias WINAPI.MsgWaitForMultipleObjectsEx MsgWaitForMultipleObjectsEx;
alias WINAPI.MultiByteToWideChar MultiByteToWideChar;
alias WINAPI.NotifyWinEvent NotifyWinEvent;
alias WINAPI.OffsetRect OffsetRect;
alias WINAPI.OffsetRgn OffsetRgn;
//alias WINAPI.OleInitialize OleInitialize;
//alias WINAPI.OleUninitialize OleUninitialize;
alias WINAPI.OpenClipboard OpenClipboard;
alias WINAPI.OutputDebugStringA OutputDebugStringA;
alias WINAPI.OutputDebugStringW OutputDebugStringW;
alias WINAPI.PatBlt PatBlt;
alias WINAPI.PeekMessageA PeekMessageA;
alias WINAPI.PeekMessageW PeekMessageW;
alias WINAPI.Pie Pie;
alias WINAPI.Polygon Polygon;
alias WINAPI.Polyline Polyline;
alias WINAPI.PostMessageA PostMessageA;
alias WINAPI.PostMessageW PostMessageW;
alias WINAPI.PostThreadMessageA PostThreadMessageA;
alias WINAPI.PostThreadMessageW PostThreadMessageW;
alias WINAPI.PrintDlgA PrintDlgA;
alias WINAPI.PrintDlgW PrintDlgW;
alias WINAPI.PtInRect PtInRect;
alias WINAPI.PtInRegion PtInRegion;
alias WINAPI.RealizePalette RealizePalette;
alias WINAPI.Rectangle Rectangle;
alias WINAPI.RectInRegion RectInRegion;
// <Shawn> Renamed : may conflict with dwt.graphics.rectangle.Rectangle
alias WINAPI.Rectangle _Rectangle;
alias WINAPI.RedrawWindow RedrawWindow;
alias WINAPI.RegCloseKey RegCloseKey;
alias WINAPI.RegEnumKeyExA RegEnumKeyExA;
alias WINAPI.RegEnumKeyExW RegEnumKeyExW;
alias WINAPI.RegOpenKeyExA RegOpenKeyExA;
alias WINAPI.RegOpenKeyExW RegOpenKeyExW;
alias WINAPI.RegQueryInfoKeyA RegQueryInfoKeyA;
alias WINAPI.RegQueryInfoKeyW RegQueryInfoKeyW;
alias WINAPI.RegQueryValueExA RegQueryValueExA;
alias WINAPI.RegQueryValueExW RegQueryValueExW;
alias WINAPI.RegisterClassA RegisterClassA;
alias WINAPI.RegisterClassW RegisterClassW;
alias WINAPI.RegisterClipboardFormatA RegisterClipboardFormatA;
alias WINAPI.RegisterClipboardFormatW RegisterClipboardFormatW;
alias WINAPI.RegisterWindowMessageA RegisterWindowMessageA;
alias WINAPI.RegisterWindowMessageW RegisterWindowMessageW;
alias WINAPI.ReleaseCapture ReleaseCapture;
alias WINAPI.ReleaseDC ReleaseDC;
alias WINAPI.RemoveMenu RemoveMenu;
alias WINAPI.RestoreDC RestoreDC;
alias WINAPI.RoundRect RoundRect;
alias WINAPI.RtlMoveMemory MoveMemory;
alias WINAPI.SHBrowseForFolderA SHBrowseForFolderA;
alias WINAPI.SHBrowseForFolderW SHBrowseForFolderW;
version(WinCE){
    alias WINAPI.SHCreateMenuBar SHCreateMenuBar;
}
alias WINAPI.SHGetMalloc SHGetMalloc;
alias WINAPI.SHGetPathFromIDListA SHGetPathFromIDListA;
alias WINAPI.SHGetPathFromIDListW SHGetPathFromIDListW;
version(WinCE)
{
    alias WINAPI.SHHandleWMSettingChange SHHandleWMSettingChange;
    alias WINAPI.SHRecognizeGesture SHRecognizeGesture;
    alias WINAPI.SHSendBackToFocusWindow SHSendBackToFocusWindow;
    alias WINAPI.SHSetAppKeyWndAssoc SHSetAppKeyWndAssoc;
    alias WINAPI.SHSipPreference SHSipPreference;
}
alias WINAPI.SaveDC SaveDC;
alias WINAPI.ScreenToClient ScreenToClient;
alias WINAPI.ScriptApplyDigitSubstitution ScriptApplyDigitSubstitution;
alias WINAPI.ScriptBreak ScriptBreak;
alias WINAPI.ScriptCPtoX ScriptCPtoX;
alias WINAPI.ScriptCacheGetHeight ScriptCacheGetHeight;
alias WINAPI.ScriptFreeCache ScriptFreeCache;
alias WINAPI.ScriptGetFontProperties ScriptGetFontProperties;
alias WINAPI.ScriptGetLogicalWidths ScriptGetLogicalWidths;
alias WINAPI.ScriptGetProperties ScriptGetProperties;
alias WINAPI.ScriptItemize ScriptItemize;
alias WINAPI.ScriptJustify ScriptJustify;
alias WINAPI.ScriptLayout ScriptLayout;
alias WINAPI.ScriptPlace ScriptPlace;
alias WINAPI.ScriptRecordDigitSubstitution ScriptRecordDigitSubstitution;
alias WINAPI.ScriptShape ScriptShape;
alias WINAPI.ScriptTextOut ScriptTextOut;
alias WINAPI.ScriptXtoCP ScriptXtoCP;
alias WINAPI.ScrollWindowEx ScrollWindowEx;
alias WINAPI.SelectClipRgn SelectClipRgn;
alias WINAPI.SelectObject SelectObject;
alias WINAPI.SelectPalette SelectPalette;
alias WINAPI.SendInput SendInput;
alias WINAPI.SendMessageA SendMessageA;
alias WINAPI.SendMessageW SendMessageW;
alias WINAPI.SetActiveWindow SetActiveWindow;
alias WINAPI.SetBkColor SetBkColor;
alias WINAPI.SetBkMode SetBkMode;
alias WINAPI.SetBrushOrgEx SetBrushOrgEx;
alias WINAPI.SetCapture SetCapture;
alias WINAPI.SetCaretPos SetCaretPos;
alias WINAPI.SetClipboardData SetClipboardData;
alias WINAPI.SetCursor SetCursor;
alias WINAPI.SetCursorPos SetCursorPos;
alias WINAPI.SetDIBColorTable SetDIBColorTable;
alias WINAPI.SetErrorMode SetErrorMode;
alias WINAPI.SetEvent SetEvent;
alias WINAPI.SetFocus SetFocus;
alias WINAPI.SetForegroundWindow SetForegroundWindow;
alias WINAPI.SetGraphicsMode SetGraphicsMode;
alias WINAPI.SetLastError SetLastError;
alias WINAPI.SetLayout SetLayout;
alias WINAPI.SetMenu SetMenu;
alias WINAPI.SetMenuDefaultItem SetMenuDefaultItem;
alias WINAPI.SetMenuInfo SetMenuInfo;
alias WINAPI.SetMenuItemInfoA SetMenuItemInfoA;
alias WINAPI.SetMenuItemInfoW SetMenuItemInfoW;
alias WINAPI.SetMetaRgn SetMetaRgn;
alias WINAPI.SetPaletteEntries SetPaletteEntries;
alias WINAPI.SetParent SetParent;
alias WINAPI.SetPixel SetPixel;
alias WINAPI.SetPolyFillMode SetPolyFillMode;
alias WINAPI.SetROP2 SetROP2;
alias WINAPI.SetRect SetRect;
alias WINAPI.SetRectRgn SetRectRgn;
alias WINAPI.SetScrollInfo SetScrollInfo;
alias WINAPI.SetStretchBltMode SetStretchBltMode;
alias WINAPI.SetTextAlign SetTextAlign;
alias WINAPI.SetTextColor SetTextColor;
alias WINAPI.SetTimer SetTimer;
alias WINAPI.SetWindowLongA SetWindowLongA;
alias WINAPI.SetWindowLongW SetWindowLongW;
alias WINAPI.SetWindowOrgEx SetWindowOrgEx;
alias WINAPI.SetWindowPlacement SetWindowPlacement;
alias WINAPI.SetWindowPos SetWindowPos;
alias WINAPI.SetWindowRgn SetWindowRgn;
alias WINAPI.SetWorldTransform SetWorldTransform;
alias WINAPI.SetWindowTextA SetWindowTextA;
alias WINAPI.SetWindowTextW SetWindowTextW;
alias WINAPI.SetWindowsHookExA SetWindowsHookExA;
alias WINAPI.SetWindowsHookExW SetWindowsHookExW;
alias WINAPI.ShellExecuteExA ShellExecuteExA;
alias WINAPI.ShellExecuteExW ShellExecuteExW;
alias WINAPI.Shell_NotifyIconA Shell_NotifyIconA;
alias WINAPI.Shell_NotifyIconW Shell_NotifyIconW;
alias WINAPI.ShowCaret ShowCaret;
alias WINAPI.ShowOwnedPopups ShowOwnedPopups;
alias WINAPI.ShowScrollBar ShowScrollBar;
alias WINAPI.ShowWindow ShowWindow;
version(WinCE){
alias WINAPI.SipGetInfo SipGetInfo;
}
alias WINAPI.SizeofResource SizeofResource;
alias WINAPI.Sleep Sleep;
alias WINAPI.StartDocA StartDocA;
alias WINAPI.StartDocW StartDocW;
alias WINAPI.StartPage StartPage;
alias WINAPI.StretchBlt StretchBlt;
alias WINAPI.SystemParametersInfoA SystemParametersInfoA;
alias WINAPI.SystemParametersInfoW SystemParametersInfoW;
alias WINAPI.ToAscii ToAscii;
alias WINAPI.ToUnicode ToUnicode;
alias WINAPI.TrackMouseEvent TrackMouseEvent;
alias WINAPI.TrackPopupMenu TrackPopupMenu;
alias WINAPI.TranslateAcceleratorA TranslateAcceleratorA;
alias WINAPI.TranslateAcceleratorW TranslateAcceleratorW;
alias WINAPI.TranslateCharsetInfo TranslateCharsetInfo;
alias WINAPI.TranslateMDISysAccel TranslateMDISysAccel;
alias WINAPI.TranslateMessage TranslateMessage;
alias WINAPI.TransparentBlt TransparentBlt;
version(WinCE){
    alias WINAPI.TransparentImage TransparentImage;
}
alias WINAPI.UnhookWindowsHookEx UnhookWindowsHookEx;
alias WINAPI.UnregisterClassA UnregisterClassA;
alias WINAPI.UnregisterClassW UnregisterClassW;
alias WINAPI.UpdateWindow UpdateWindow;
alias WINAPI.ValidateRect ValidateRect;
alias WINAPI.VkKeyScanA VkKeyScanA;
alias WINAPI.VkKeyScanW VkKeyScanW;
alias WINAPI.WaitForMultipleObjects WaitForMultipleObjects;
alias WINAPI.WaitForSingleObject WaitForSingleObject;
alias WINAPI.WaitMessage WaitMessage;
alias WINAPI.WideCharToMultiByte WideCharToMultiByte;
alias WINAPI.WindowFromDC WindowFromDC;
alias WINAPI.WindowFromPoint WindowFromPoint;
alias WINAPI.wcslen wcslen;

public static int VERSION (int major, int minor) {  return major << 16 | minor;}

//static int DrawText(int hDC, String lpString, RECT* lpRect, int uFormat){
//  return WINAPI.DrawText(hDC, Convert.StringToTCHARz(lpString), lpString.length, lpRect, uFormat);
//}
//
//static int DrawText(int hDC, TCHAR* lpString, int length, RECT* lpRect, int uFormat){
//  return WINAPI.DrawText(hDC, lpString, length, lpRect, uFormat);
//}

static int GetProfileString(char[] lpAppName, char[] lpKeyName, char[] lpDefault, out char[] lpReturnedString, int nSize ){
    TCHAR[] buffer = new TCHAR[nSize];
    int result = _GetProfileString(.StrToTCHARz(lpAppName), .StrToTCHARz(lpKeyName), .StrToTCHARz(lpDefault), buffer.ptr, nSize);
    lpReturnedString = .TCHARzToStr(buffer.ptr);
    return result;
}

static char[] GetWindowText(HWND hwnd){
    assert(hwnd);
    int len = GetWindowTextLength(hwnd);
    if(len > 0){
        TCHAR[] buffer = new TCHAR[len + 1];
        len = _GetWindowText(hwnd, buffer.ptr, buffer.length);
        return .TCHARzToStr(buffer.ptr, len);
    }
    return "";
}

// Note: nMaxCount including the NULL character
static int GetWindowText(HWND hWnd, TCHAR* lpString, int nMaxCount)
{
    return _GetWindowText(hWnd, lpString, nMaxCount);
}

// <Shawn Liu> added this method, copied from ATL : atlwin.h
static int CenterWindow(HWND m_hWnd, HWND hWndCenter = null)
{
    assert(m_hWnd);

    // determine owner window to center against
    uint dwStyle = OS.GetWindowLong(m_hWnd, OS.GWL_STYLE);
    if(hWndCenter is null)
    {
        if(dwStyle & OS.WS_CHILD)
            hWndCenter = OS.GetParent(m_hWnd);
        else
            hWndCenter = OS.GetWindow(m_hWnd, OS.GW_OWNER);
    }

    // get coordinates of the window relative to its parent
    RECT rcDlg;
    OS.GetWindowRect(m_hWnd, &rcDlg);
    RECT rcArea;
    RECT rcCenter;
    HWND hWndParent;
    if(!(dwStyle & OS.WS_CHILD))
    {
        // don't center against invisible or minimized WINAPI
        if(hWndCenter !is null)
        {
            uint dwStyleCenter = OS.GetWindowLong(hWndCenter, OS.GWL_STYLE);
            if(!(dwStyleCenter & OS.WS_VISIBLE) || (dwStyleCenter & OS.WS_MINIMIZE))
                hWndCenter = null;
        }

        // center within screen coordinates
        OS.SystemParametersInfo(OS.SPI_GETWORKAREA, 0, &rcArea, 0);
        if(hWndCenter is null)
            rcCenter = rcArea;
        else
            OS.GetWindowRect(hWndCenter, &rcCenter);
    }
    else
    {
        // center within parent client coordinates
        hWndParent = OS.GetParent(m_hWnd);
        assert(OS.IsWindow(hWndParent));

        OS.GetClientRect(hWndParent, &rcArea);
        assert(OS.IsWindow(hWndCenter));
        OS.GetClientRect(hWndCenter, &rcCenter);
        OS.MapWindowPoints(hWndCenter, hWndParent, cast(POINT*)&rcCenter, 2);
    }

    int DlgWidth = rcDlg.right - rcDlg.left;
    int DlgHeight = rcDlg.bottom - rcDlg.top;

    // find dialog's upper left based on rcCenter
    int xLeft = (rcCenter.left + rcCenter.right) / 2 - DlgWidth / 2;
    int yTop = (rcCenter.top + rcCenter.bottom) / 2 - DlgHeight / 2;

    // if the dialog is outside the screen, move it inside
    if(xLeft < rcArea.left)
        xLeft = rcArea.left;
    else if(xLeft + DlgWidth > rcArea.right)
        xLeft = rcArea.right - DlgWidth;

    if(yTop < rcArea.top)
        yTop = rcArea.top;
    else if(yTop + DlgHeight > rcArea.bottom)
        yTop = rcArea.bottom - DlgHeight;

    // map screen coordinates to child coordinates
    return OS.SetWindowPos(m_hWnd, null, xLeft, yTop, -1, -1,
        OS.SWP_NOSIZE | OS.SWP_NOZORDER | OS.SWP_NOACTIVATE);
}


alias WINAPI.OleInitialize OleInitialize;
alias WINAPI.OleUninitialize OleUninitialize;
alias WINAPI.CoCreateInstance CoCreateInstance;

/**
 * <Shawn Liu>
 * VtbCall partially kept, use VtbCall instead of automation can promote performace
 * and VtbCall doesn't need prototype of interface declaration
 */

public static int VtblCall(int fnNumber, void* ppVtbl) {
    Function1 fn = cast(Function1)(*cast(int **)ppVtbl)[fnNumber];
    return fn(ppVtbl);
}

public static int VtblCall(int fnNumber, void* ppVtbl, int arg0){
    Function2 fn = cast(Function2)(*cast(int **)ppVtbl)[fnNumber];
    return fn(ppVtbl, arg0);
}

public static int VtblCall(int fnNumber, void* ppVtbl, int arg0, int arg1){
    Function3 fn = cast(Function3)(*cast(int **)ppVtbl)[fnNumber];
    return fn(ppVtbl, arg0, arg1);
}

public static int VtblCall(int fnNumber, void* ppVtbl, int arg0, int arg1, int arg2){
    Function4 fn = cast(Function4)(*cast(int **)ppVtbl)[fnNumber];
    return fn(ppVtbl, arg0, arg1, arg2);
}
public static int VtblCall(int fnNumber, void* ppVtbl, int arg0, int arg1, int arg2, int arg3){
    Function5 fn = cast(Function5)(*cast(int **)ppVtbl)[fnNumber];
    return fn(ppVtbl, arg0, arg1, arg2, arg3);
}

public static int VtblCall(int fnNumber, void* ppVtbl, int arg0, int arg1, int arg2, int arg3, int arg4){
    Function6 fn = cast(Function6)(*cast(int **)ppVtbl)[fnNumber];
    return fn(ppVtbl, arg0, arg1, arg2, arg3, arg4);
}

public static int VtblCall(int fnNumber, void* ppVtbl, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5){
    Function7 fn = cast(Function7)(*cast(int **)ppVtbl)[fnNumber];
    return fn(ppVtbl, arg0, arg1, arg2, arg3, arg4, arg5);
}

public static int VtblCall(int fnNumber, void* ppVtbl, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6){
    Function8 fn = cast(Function8)(*cast(int **)ppVtbl)[fnNumber];
    return fn(ppVtbl, arg0, arg1, arg2, arg3, arg4, arg5, arg6);
}

public static int VtblCall(int fnNumber, void* ppVtbl, int arg0, int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7){
    Function9 fn = cast(Function9)(*cast(int **)ppVtbl)[fnNumber];
    return fn(ppVtbl, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7);
}


} // END of OS

import tango.sys.win32.CodePage : CodePage;
private import tango.text.convert.Utf;
private import tango.stdc.stringz;

// convert UTF-8 to MBCS
alias StrToMBCS StrToMBCSs;
public char[] StrToMBCS(char[] sc, uint codepage = 0) {
    char[] ret = sc;
    try{
        foreach (char c; sc){
            if (c >= 0x80)
            {
                char[] result;
                int i;
                wchar[] ws = .toString16(sc);
                result.length = OS.WideCharToMultiByte(codepage, 0, ws.ptr, ws.length, null, 0, null, null);
                i = OS.WideCharToMultiByte(codepage, 0, ws.ptr, ws.length, result.ptr, result.length, null, null);
                assert(i == result.length);
                return result;
            }
        }
    }catch(Exception e){
        // do nothing
        ret = "";
    }
    return ret;
}

// convert UTF-8 to MBCSz
public char* StrToMBCSz(char[] sc) {
    char* ret = null;
    try{
        if( CodePage.isAscii( sc )){
            return .toStringz( sc );
        }
        char[] dst;
        dst.length = sc.length;
        return toStringz( tango.sys.win32.CodePage.CodePage.into( sc, dst ));
    }catch(Exception e){
        // do nothing
        ret = "";
    }

    return ret;
}

public wchar[] StrToWCHARs(uint codepage , char[] sc, bool terminated = false ) {
    return StrToWCHARs( sc, terminated );
}
public wchar[] StrToWCHARs(char[] sc, bool terminated = false ) {
    wchar[] ret;
    try{
        ret = toString16(sc);
    }catch(Exception e){
        // do nothing
        ret = "";
    }
    if( terminated ){
        ret ~= \0;
    }
    return ret;
}

public wchar* StrToWCHARz( uint codepage, char[] sc, uint* length = null ) {
    return StrToWCHARz( sc, length );
}

public wchar* StrToWCHARz(char[] sc, uint* length = null ) {
    return StrToWCHARs(sc, true ).ptr;
}

public char[] MBCSsToStr(char[] string, uint codepage = 0){
    return MBCSzToStr( string.ptr, string.length, codepage);
}

public char[] MBCSzToStr(char* pString, int _length = -1, uint codepage = 0) {
    // null terminated string pointer
    if(_length == -1){
        _length = 0;
        while(*(pString + _length))
            ++_length;
    }
    // convert MBCS to UTF-8
    if(_length == 0)
        return null;

    wchar[] wcs = _mbcszToWs(pString, _length, codepage);
    char[] result;
    try{
        result = .toString(wcs);
    }catch(Exception e){
    }
    return result;
}

public char[] WCHARsToStr(wchar[] string){
    return WCHARzToStr(cast(wchar*)string, string.length);
}

public char[] WCHARzToStr(wchar* pString, int _length = -1)
{
    // null terminated string pointer
    if(_length == -1){
        _length = 0;
        while(*(pString + _length))
            ++_length;
    }
    if(_length == 0)
        return null;
    // convert wchar* to UTF-8
    wchar[] wcs = pString[0.._length];

    char[] result;
    try{
        result = .toString(wcs);
    }catch(Exception e){
        // do nothing
    }
    return result;
}

/**
 * <Shawn> difference between WCHARzToStr(pwstr, -1) :
 * BSTRToStr() internally call WCHARzToStr(pwstr, length) with length set,
 * instead to determine the null ended, this mean BSTRToStr() can get string
 * which has embedded null characters.
 */

version(OLE_COM)
{
// BSTR is aliased to wchar*
// Note : Free the "bstr" memory if freeTheString is true, default false
static char[] BSTRToStr(/*BSTR*/ inout wchar* bstr, bool freeTheString = false){
    if(bstr is null) return null;
    int size = (SysStringByteLen(bstr) + 1)/wchar.sizeof;
    char[] result = WCHARzToStr(bstr, size);
    if(freeTheString) {
        // free the string and set ptr to null
        SysFreeString(bstr);
        bstr = null;
    }
    return result;
}
} // end of OLE_COM


public static wchar[] _mbcszToWs(char* pMBCS, int len, uint codepage = 0)
{
    wchar[] wbuf;
    // Convert MBCS to unicode
    wbuf.length = OS.MultiByteToWideChar(codepage, 0, pMBCS, len, null, 0);
    int n = OS.MultiByteToWideChar(codepage, 0, pMBCS, len, wbuf.ptr, wbuf.length);
    assert(n == wbuf.length);
    return wbuf;
}

// static methods
public int _tcslen(TCHAR* pString){
    int _length = 0;
    while(*(pString + _length))
        ++_length;

    return _length;
}

/**
 * There is a bug in Phobos std.string.toupper() to lower() with
 std.string.toupper() and std.string.tolower() give a wrong result when deal with a mixture of upper/lower English and Chinese characters. e.g.
char[] a = "AbCd中文eFgH";
char[] b = std.string.toupper(a);
char[] c = std.string.tolower(a);
The length of a is 11, but the length of b,c is 18 now.
 *
 */
public char[] tolower(char[] string) {
    TCHAR* ps = StrToTCHARz(string);
    TCHAR* ps2 = OS.CharLower(ps);
    return TCHARzToStr(ps2);
}
public char[] toupper(char[] string) {
    TCHAR* ps = StrToTCHARz(string);
    TCHAR* ps2 = OS.CharUpper(ps);
    return TCHARzToStr(ps2);
}

version(ANSI){
    alias StrToMBCS         StrToTCHARs;
    alias StrToMBCSz        StrToTCHARz;
    alias MBCSzToStr        TCHARzToStr;
    alias MBCSsToStr        TCHARsToStr;
}else{
    // Unicode
    alias StrToWCHARs       StrToTCHARs;
    alias StrToWCHARz       StrToTCHARz;
    alias WCHARzToStr       TCHARzToStr;
    alias WCHARsToStr       TCHARsToStr;
    alias _tcslen           TCHARzLen;
}


//alias Converter.StrToTCHARs     StrToTCHARs;
//alias Converter.StrToTCHARz     StrToTCHARz;
//alias Converter.TCHARzToStr     TCHARzToStr;
//alias Converter.TCHARsToStr     TCHARsToStr;


TCHAR[] NewTCHARs( uint codepage, uint len ){
    return new TCHAR[ len ];
}