Module: WinFFI::User32

Extended by:
LibBase
Defined in:
lib/win-ffi/enums/user32.rb,
lib/win-ffi/enums/kernel32.rb,
lib/win-ffi/enums/user32/ocr.rb,
lib/win-ffi/enums/user32/oic.rb,
lib/win-ffi/enums/user32/rim.rb,
lib/win-ffi/functions/user32.rb,
lib/win-ffi/enums/user32/icon.rb,
lib/win-ffi/enums/user32/mwmo.rb,
lib/win-ffi/enums/user32/image.rb,
lib/win-ffi/structs/user32/msg.rb,
lib/win-ffi/functions/user32/dde.rb,
lib/win-ffi/enums/user32/pen_mask.rb,
lib/win-ffi/functions/user32/hook.rb,
lib/win-ffi/functions/user32/icon.rb,
lib/win-ffi/functions/user32/rect.rb,
lib/win-ffi/functions/user32/text.rb,
lib/win-ffi/enums/user32/pen_flags.rb,
lib/win-ffi/functions/user32/brush.rb,
lib/win-ffi/functions/user32/caret.rb,
lib/win-ffi/functions/user32/input.rb,
lib/win-ffi/functions/user32/mouse.rb,
lib/win-ffi/functions/user32/power.rb,
lib/win-ffi/functions/user32/print.rb,
lib/win-ffi/functions/user32/shell.rb,
lib/win-ffi/functions/user32/touch.rb,
lib/win-ffi/enums/user32/edge_flags.rb,
lib/win-ffi/enums/user32/touch_mask.rb,
lib/win-ffi/functions/user32/bitmap.rb,
lib/win-ffi/functions/user32/cursor.rb,
lib/win-ffi/functions/user32/device.rb,
lib/win-ffi/functions/user32/string.rb,
lib/win-ffi/enums/user32/window/smto.rb,
lib/win-ffi/enums/user32/window_hook.rb,
lib/win-ffi/functions/user32/desktop.rb,
lib/win-ffi/functions/user32/display.rb,
lib/win-ffi/functions/user32/gesture.rb,
lib/win-ffi/functions/user32/pointer.rb,
lib/win-ffi/functions/user32/process.rb,
lib/win-ffi/structs/user32/icon_info.rb,
lib/win-ffi/enums/user32/border_flags.rb,
lib/win-ffi/functions/user32/keyboard.rb,
lib/win-ffi/functions/user32/resource.rb,
lib/win-ffi/enums/user32/feedback_type.rb,
lib/win-ffi/enums/user32/pointer_flags.rb,
lib/win-ffi/functions/user32/clipboard.rb,
lib/win-ffi/functions/user32/raw_input.rb,
lib/win-ffi/functions/user32/transform.rb,
lib/win-ffi/structs/user32/cursor_info.rb,
lib/win-ffi/structs/user32/window/luid.rb,
lib/win-ffi/enums/user32/message_filter.rb,
lib/win-ffi/structs/user32/icon_info_ex.rb,
lib/win-ffi/structs/user32/pointer_info.rb,
lib/win-ffi/enums/user32/key_event_flags.rb,
lib/win-ffi/enums/user32/map_virtual_key.rb,
lib/win-ffi/functions/user32/window/menu.rb,
lib/win-ffi/enums/user32/mouse_keys_flags.rb,
lib/win-ffi/functions/user32/filled_shape.rb,
lib/win-ffi/functions/user32/window/timer.rb,
lib/win-ffi/structs/user32/display_device.rb,
lib/win-ffi/structs/user32/window/bs_info.rb,
lib/win-ffi/enums/user32/append_menu_flags.rb,
lib/win-ffi/enums/user32/clipboard_formats.rb,
lib/win-ffi/enums/user32/mouse_event_flags.rb,
lib/win-ffi/enums/user32/virtual_key_flags.rb,
lib/win-ffi/enums/user32/window/menu_flags.rb,
lib/win-ffi/functions/user32/accessibility.rb,
lib/win-ffi/functions/user32/authorization.rb,
lib/win-ffi/functions/user32/window/dialog.rb,
lib/win-ffi/functions/user32/window/window.rb,
lib/win-ffi/structs/user32/last_input_info.rb,
lib/win-ffi/structs/user32/window/wndclass.rb,
lib/win-ffi/enums/user32/draw_caption_flags.rb,
lib/win-ffi/enums/user32/get_ancestor_flags.rb,
lib/win-ffi/enums/user32/keyboard_modifiers.rb,
lib/win-ffi/enums/user32/pointer_input_type.rb,
lib/win-ffi/enums/user32/queue_status_flags.rb,
lib/win-ffi/enums/user32/window/window_long.rb,
lib/win-ffi/functions/user32/device_context.rb,
lib/win-ffi/functions/user32/window/message.rb,
lib/win-ffi/functions/user32/window_station.rb,
lib/win-ffi/structs/user32/draw_text_params.rb,
lib/win-ffi/structs/user32/mouse_move_point.rb,
lib/win-ffi/structs/user32/pointer_pen_info.rb,
lib/win-ffi/structs/user32/raw_input_header.rb,
lib/win-ffi/structs/user32/window/menu_info.rb,
lib/win-ffi/enums/user32/device_notify_flags.rb,
lib/win-ffi/functions/user32/controls/button.rb,
lib/win-ffi/structs/user32/track_mouse_event.rb,
lib/win-ffi/structs/user32/window/tpm_params.rb,
lib/win-ffi/structs/user32/window/window_pos.rb,
lib/win-ffi/structs/user32/window/wndclassex.rb,
lib/win-ffi/functions/user32/controls/listbox.rb,
lib/win-ffi/functions/user32/painting_drawing.rb,
lib/win-ffi/structs/user32/pointer_touch_info.rb,
lib/win-ffi/structs/user32/window/flashw_info.rb,
lib/win-ffi/enums/user32/keyboard_layout_flags.rb,
lib/win-ffi/enums/user32/process_dpi_awareness.rb,
lib/win-ffi/enums/user32/touch_injection_flags.rb,
lib/win-ffi/functions/user32/controls/combobox.rb,
lib/win-ffi/functions/user32/window/properties.rb,
lib/win-ffi/structs/user32/window/alt_tab_info.rb,
lib/win-ffi/structs/user32/window/dlg_template.rb,
lib/win-ffi/structs/user32/window/menubar_info.rb,
lib/win-ffi/enums/user32/window/window_messages.rb,
lib/win-ffi/functions/user32/controls/scrollbar.rb,
lib/win-ffi/functions/user32/window/window_proc.rb,
lib/win-ffi/structs/user32/controls/scroll_info.rb,
lib/win-ffi/structs/user32/window/create_struct.rb,
lib/win-ffi/structs/user32/window/msgbox_params.rb,
lib/win-ffi/enums/user32/window/get_window_flags.rb,
lib/win-ffi/enums/user32/window/style/edit_style.rb,
lib/win-ffi/functions/user32/window/window_class.rb,
lib/win-ffi/structs/user32/raw_input_device_list.rb,
lib/win-ffi/structs/user32/window/menu_item_info.rb,
lib/win-ffi/structs/user32/window/title_bar_info.rb,
lib/win-ffi/enums/user32/draw_frame_control_flags.rb,
lib/win-ffi/enums/user32/window/combo_box_message.rb,
lib/win-ffi/enums/user32/window/message_box_flags.rb,
lib/win-ffi/enums/user32/window/show_window_flags.rb,
lib/win-ffi/functions/user32/window/configuration.rb,
lib/win-ffi/structs/user32/controls/combobox_info.rb,
lib/win-ffi/structs/user32/window/gui_thread_info.rb,
lib/win-ffi/enums/user32/window/message_box_return.rb,
lib/win-ffi/enums/user32/window/peek_message_flags.rb,
lib/win-ffi/enums/user32/window/style/static_style.rb,
lib/win-ffi/enums/user32/window/style/window_style.rb,
lib/win-ffi/functions/user32/keyboard_accelerators.rb,
lib/win-ffi/structs/user32/controls/scrollbar_info.rb,
lib/win-ffi/structs/user32/touch_hit_testing_input.rb,
lib/win-ffi/structs/user32/window/window_placement.rb,
lib/win-ffi/enums/user32/window/system_menu_command.rb,
lib/win-ffi/enums/user32/window/animate_window_flags.rb,
lib/win-ffi/enums/user32/window/get_class_long_flags.rb,
lib/win-ffi/enums/user32/window/set_window_pos_flags.rb,
lib/win-ffi/enums/user32/window/system_metrics_flags.rb,
lib/win-ffi/structs/user32/window/menu_item_template.rb,
lib/win-ffi/structs/user32/window/non_client_metrics.rb,
lib/win-ffi/enums/user32/window/get_window_long_flags.rb,
lib/win-ffi/enums/user32/window/style/combo_box_style.rb,
lib/win-ffi/enums/user32/window/style/window_style_ex.rb,
lib/win-ffi/enums/user32/user_object_information_flags.rb,
lib/win-ffi/enums/user32/window/broadcast_system_flags.rb,
lib/win-ffi/enums/user32/window/track_popup_menu_flags.rb,
lib/win-ffi/functions/user32/multiple_display_monitors.rb,
lib/win-ffi/enums/user32/draw_frame_control_state_flags.rb,
lib/win-ffi/enums/user32/layered_window_attributes_flags.rb,
lib/win-ffi/enums/user32/window/style/window_class_style.rb,
lib/win-ffi/functions/user32/multiple_document_interface.rb,
lib/win-ffi/enums/user32/window/style/button_control_style.rb,
lib/win-ffi/enums/user32/window/system_parameters_info_flags.rb,
lib/win-ffi/structs/user32/window/update_layered_window_info.rb,
lib/win-ffi/enums/user32/window/system_parameters_info_action.rb,
lib/win-ffi/enums/user32/window/broadcast_system_message_flags.rb,
lib/win-ffi/enums/user32/window/notification/edit_notification.rb,
lib/win-ffi/enums/user32/window/notification/button_notification.rb,
lib/win-ffi/enums/user32/window/notification/static_notification.rb,
lib/win-ffi/structs/user32/touch_hit_testing_proximity_evaluation.rb

Defined Under Namespace

Classes: AltTabInfo, BSINFO, COMBOBOXINFO, CREATESTRUCT, CURSORINFO, DISPLAY_DEVICE, DLGTEMPLATE, DRAWTEXTPARAMS, FlashwInfo, GuiThreadInfo, ICONINFO, ICONINFOEX, LASTINPUTINFO, LUID, MENUBARINFO, MENUINFO, MENUITEMINFO, MENUITEMTEMPLATE, MOUSEMOVEPOINT, MSG, MSGBOXPARAMS, NONCLIENTMETRICS, POINTER_INFO, POINTER_PEN_INFO, POINTER_TOUCH_INFO, RAWINPUTDEVICELIST, RAWINPUTHEADER, SCROLLBARINFO, SCROLLINFO, TOUCH_HIT_TESTING_INPUT, TOUCH_HIT_TESTING_PROXIMITY_EVALUATION, TPMPARAMS, TRACKMOUSEEVENT, TitleBarInfo, UpdateLayeredWindowInfo, WNDCLASS, WNDCLASSEX, WindowPlacement, WindowPos

Constant Summary collapse

OCR =
enum :ocr,
[
    :NORMAL,     32512,
    :IBEAM,      32513,
    :WAIT,       32514,
    :CROSS,      32515,
    :UP,         32516,
    :SIZE,       32640,   # OBSOLETE: use OCR_SIZEALL
    :ICON,       32641,   # OBSOLETE: use OCR_NORMAL
    :SIZENWSE,   32642,
    :SIZENESW,   32643,
    :SIZEWE,     32644,
    :SIZENS,     32645,
    :SIZEALL,    32646,
    :ICOCUR,     32647,   # OBSOLETE: use OIC_WINLOGO
    :NO,         32648,
    :APPSTARTING,32650
]
OIC =
enum :oic,
[
    :SAMPLE,          32512,
    :HAND,            32513,
    :QUES,            32514,
    :BANG,            32515,
    :NOTE,            32516,
    :WINLOGO,         32517,
    :WARNING,         32515,
    :ERROR,           32513,
    :INFORMATION,     32516
]
RIM =
enum :rim,
[
  :TYPEMOUSE, 0, # The device is a mouse.
  :TYPEKEYBOARD, 1, # The device is a keyboard.
  :TYPEHID, 2, # The device is an HID that is not a keyboard and not a mouse.
]
CW_USEDEFAULT =

if WinFFI::WindowsVersion >= :xp

require_relative 'user32/raw_input'

#VOID WINAPI DisableProcessWindowsGhosting(void)
attach_function 'DisableProcessWindowsGhosting', [], :void

if WinFFI::WindowsVersion >= :vista
  require_relative 'user32/display'
  if WinFFI::WindowsVersion >= 7
    %i'gesture touch'.each { |f| require_relative "user32/#{f}" }
    if WinFFI::WindowsVersion >= 8
      %i'
        accessibility
        input
        pointer
      '.each { |f| require_relative "user32/#{f}" }

      #BOOL GetCurrentInputMessageSource( _Out_  INPUT_MESSAGE_SOURCE *inputMessageSource )
      attach_function 'GetCurrentInputMessageSource', [:pointer], :bool

    end
  end
end

if WindowsVersion >= 8

  #BOOL GetCurrentInputMessageSource( _Out_  INPUT_MESSAGE_SOURCE *inputMessageSource )
  attach_function 'GetCurrentInputMessageSource', [:pointer], :bool

end

end

-0x80000000
IDC =
enum :idc,
[
    :ARROW,        32512,
    :IBEAM,        32513,
    :WAIT,         32514,
    :CROSS,        32515,
    :UPARROW,      32516,
    :SIZE,         32640,
    :ICON,         32641,
    :SIZENWSE,     32642,
    :SIZENESW,     32643,
    :SIZEWE,       32644,
    :SIZENS,       32645,
    :SIZEALL,      32646,
    :NO,           32648,
    :HAND,         32649,
    :APPSTARTING,  32650,
    :HELP,         32651,
]
IDI =
enum :idi,
[
  :APPLICATION, 32512,
  :ERROR,       32513,
  :HAND,        32513,
  :QUESTION,    32514,
  :EXCLAMATION, 32515,
  :WARNING,     32515,
  :ASTERISK,    32516,
  :INFORMATION, 32516,
  :WINLOGO,     32517,
  :SHIELD,      32518
]
Icon =
enum :icon,
[
    :SMALL, 0,
    :BIG,   1
]
MWMO =
enum :mwmo, [
    :ALERTABLE, 0x0002, # The function also returns if an APC has been queued to the thread with QueueUserAPC while
    # the thread is in the waiting state.

    :INPUTAVAILABLE, 0x0004, # The function returns if input exists for the queue, even if the input has been seen
    # (but not removed) using a call to another function, such as PeekMessage.

    :WAITALL, 0x0001, # The function returns when all objects in the pHandles array are signaled and an input event
                      # has been received, all at the same time.
]
Image =
enum :image,
[
  :BITMAP, 0, # Loads a bitmap.
  :ICON,   1, # Loads an icon.
  :CURSOR, 2 # Loads a cursor.
]
PenMask =
enum :pen_mask,
[
  :PEN_MASK_NONE,     0x00000000, # Default. None of the optional fields are valid.
  :PEN_MASK_PRESSURE, 0x00000001, # pressure of the POINTER_PEN_INFO structure is valid.
  :PEN_MASK_ROTATION, 0x00000002, # rotation of the POINTER_PEN_INFO structure is valid.
  :PEN_MASK_TILT_X,   0x00000004, # tiltX of the POINTER_PEN_INFO structure is valid.
  :PEN_MASK_TILT_Y,   0x00000008, # tiltY of the POINTER_PEN_INFO structure is valid.
]
CallWndProc =

LRESULT CALLBACK CallWndProc(

_In_  int nCode,
_In_  WPARAM wParam,
_In_  LPARAM lParam )
callback :CallWndProc, [:int, :wparma, :lparam], :lresult
CallWndRetProc =

LRESULT CALLBACK CallWndRetProc(

_In_  int nCode,
_In_  WPARAM wParam,
_In_  LPARAM lParam )
callback :CallWndRetProc, [:int, :wparma, :lparam], :lresult
CBTProc =

LRESULT CALLBACK CBTProc(

_In_  int nCode,
_In_  WPARAM wParam,
_In_  LPARAM lParam )
callback :CBTProc, [:int, :wparma, :lparam], :lresult
DebugProc =

LRESULT CALLBACK DebugProc(

_In_  int nCode,
_In_  WPARAM wParam,
_In_  LPARAM lParam )
callback :DebugProc, [:int, :wparma, :lparam], :lresult
ForegroundIdleProc =

DWORD CALLBACK ForegroundIdleProc(

_In_  int code,
DWORD wParam,
LONG lParam )
callback :ForegroundIdleProc, [:int, :wparma, :lparam], :lresult
GetMsgProc =

LRESULT CALLBACK GetMsgProc(

_In_  int code,
_In_  WPARAM wParam,
_In_  LPARAM lParam )
callback :GetMsgProc, [:int, :wparma, :lparam], :lresult
JournalPlaybackProc =

LRESULT CALLBACK JournalPlaybackProc(

_In_  int code,
WPARAM wParam,
_In_  LPARAM lParam )
callback :JournalPlaybackProc, [:int, :wparma, :lparam], :lresult
JournalRecordProc =

LRESULT CALLBACK JournalRecordProc(

_In_  int code,
WPARAM wParam,
_In_  LPARAM lParam )
callback :JournalRecordProc, [:int, :wparma, :lparam], :lresult
KeyboardProc =

LRESULT CALLBACK KeyboardProc(

_In_  int code,
_In_  WPARAM wParam,
_In_  LPARAM lParam )
callback :KeyboardProc, [:int, :wparma, :lparam], :lresult
LowLevelKeyboardProc =

LRESULT CALLBACK LowLevelKeyboardProc(

_In_  int nCode,
_In_  WPARAM wParam,
_In_  LPARAM lParam )
callback :LowLevelKeyboardProc, [:int, :wparma, :lparam], :lresult
LowLevelMouseProc =

LRESULT CALLBACK LowLevelMouseProc(

_In_  int nCode,
_In_  WPARAM wParam,
_In_  LPARAM lParam )
callback :LowLevelMouseProc, [:int, :wparma, :lparam], :lresult
MessageProc =

LRESULT CALLBACK MessageProc(

_In_  int code,
WPARAM wParam,
_In_  LPARAM lParam )
callback :MessageProc, [:int, :wparma, :lparam], :lresult
MouseProc =

LRESULT CALLBACK MouseProc(

_In_  int nCode,
_In_  WPARAM wParam,
_In_  LPARAM lParam )
callback :MouseProc, [:int, :wparma, :lparam], :lresult
ShellProc =

LRESULT CALLBACK ShellProc(

_In_  int nCode,
_In_  WPARAM wParam,
_In_  LPARAM lParam )
callback :ShellProc, [:int, :wparma, :lparam], :lresult
SysMsgProc =

LRESULT CALLBACK SysMsgProc(

_In_  int nCode,
WPARAM wParam,
_In_  LPARAM lParam )
callback :SysMsgProc, [:int, :wparma, :lparam], :lresult
PenFlags =
enum :pen_flags,
[
  :PEN_FLAG_BARREL,   0x00000001, # The barrel button is pressed.
  :PEN_FLAG_INVERTED, 0x00000002, # The pen is inverted.
  :PEN_FLAG_ERASER,   0x00000004, # The eraser button is pressed.
]
EdgeFlags =

3D border styles

enum :border_flags,
[
  :RAISEDOUTER, 0x0001,
  :SUNKENOUTER, 0x0002,
  :OUTER,       0x0003,
  :RAISEDINNER, 0x0004,
  :RAISED,      0x0005,
  :ETCHED,      0x0006,
  :SUNKENINNER, 0x0008,
  :BUMP,        0x0009,
  :SUNKEN,      0x0010,
  :INNER,       0x0012,
]
TouchMask =
enum :touch_mask,
[
  :TOUCH_MASK_NONE,        0x00000000, #Default. None of the optional fields are valid.
  :TOUCH_MASK_CONTACTAREA, 0x00000001, #rcContact of the POINTER_TOUCH_INFO structure is valid.
  :TOUCH_MASK_ORIENTATION, 0x00000002, #orientation of the POINTER_TOUCH_INFO structure is valid.
  :TOUCH_MASK_PRESSURE,    0x00000004, #pressure of the POINTER_TOUCH_INFO structure is valid.
]
SMTO =
enum :smto,
[
  :ABORTIFHUNG, 0x0002, # The function returns without waiting for the time-out period to elapse if the receiving
  # thread appears to not respond or "hangs."

  :BLOCK, 0x0001, # Prevents the calling thread from processing any other requests until the function returns.

  :NORMAL, 0x0000, # The calling thread is not prevented from processing other requests while waiting for the
  # function to return.

  :NOTIMEOUTIFNOTHUNG, 0x0008, # The function does not enforce the time-out period as long as the receiving thread
  # is processing messages.

  :ERRORONEXIT, 0x0020, # The function should return 0 if the receiving window is destroyed or its owning thread
  # dies while the message is being processed.
]
WindowHook =
enum :window_hook,
[
  :MSGFILTER, -1, # Installs a hook procedure that monitors messages generated as a result of an input event in a
  # dialog box, message box, menu, or scroll bar. For more information, see the MessageProc hook procedure.

  :JOURNALRECORD, 0, # Installs a hook procedure that records input messages posted to the system message queue.
  # This hook is useful for recording macros. For more information, see the JournalRecordProc hook procedure.

  :JOURNALPLAYBACK, 1, # Installs a hook procedure that posts messages previously recorded by a :JOURNALRECORD
  # hook procedure. For more information, see the JournalPlaybackProc hook procedure.

  :KEYBOARD, 2, # Installs a hook procedure that monitors keystroke messages. For more information, see the
  # KeyboardProc hook procedure.

  :GETMESSAGE, 3, # Installs a hook procedure that monitors messages posted to a message queue. For more
  # information, see the GetMsgProc hook procedure.

  :CALLWNDPROC, 4, # Installs a hook procedure that monitors messages before the system sends them to the
  # destination window procedure. For more information, see the CallWndProc hook procedure.

  :CBT, 5, # Installs a hook procedure that receives notifications useful to a CBT application. For more
  # information, see the CBTProc hook procedure.

  :SYSMSGFILTER, 6, # Installs a hook procedure that monitors messages generated as a result of an input event in
  # a dialog box, message box, menu, or scroll bar. The hook procedure monitors these messages for all
  # applications in the same desktop as the calling thread. For more information, see the SysMsgProc hook
  # procedure.

  :MOUSE, 7, # Installs a hook procedure that monitors mouse messages. For more information, see the MouseProc
  # hook procedure.

  :DEBUG, 9, # Installs a hook procedure useful for debugging other hook procedures. For more information, see the
  # DebugProc hook procedure.

  :SHELL, 10, # Installs a hook procedure that receives notifications useful to shell applications. For more
  # information, see the ShellProc hook procedure.

  :FOREGROUNDIDLE, 11, # Installs a hook procedure that will be called when the application's foreground thread is
  # about to become idle. This hook is useful for performing low priority tasks during idle time. For more
  # information, see the ForegroundIdleProc hook procedure.

  :CALLWNDPROCRET, 12, # Installs a hook procedure that monitors messages after they have been processed by the
  # destination window procedure. For more information, see the CallWndRetProc hook procedure.

  :KEYBOARD_LL, 13, # Installs a hook procedure that monitors low-level keyboard input events. For more
  # information, see the LowLevelKeyboardProc hook procedure.

  :MOUSE_LL, 14, # Installs a hook procedure that monitors low-level mouse input events. For more information, see
  # the LowLevelMouseProc hook procedure.
]
BorderFlags =

Border flags

enum :border_flags,
[
  :LEFT,                    0x0001,
  :TOP,                     0x0002,
  :TOPLEFT,                 0x0003,
  :RIGHT,                   0x0004,
  :TOPRIGHT,                0x0006,
  :BOTTOM,                  0x0008,
  :BOTTOMLEFT,              0x0009,
  :DIAGONAL,                0x0010,
  :BOTTOMRIGHT,             0x0012,
  :RECT,                    0x0015,
  :DIAGONAL_ENDTOPLEFT,     0x0019,
  :DIAGONAL_ENDTOPRIGHT,    0x0022,
  :DIAGONAL_ENDBOTTOMLEFT,  0x0025,
  :DIAGONAL_ENDBOTTOMRIGHT, 0x0028,
  :MIDDLE,                  0x0800, # Fill in the middle
  :SOFT,                    0x1000, # For softer buttons
  :ADJUST,                  0x2000, # Calculate the space left over
  :FLAT,                    0x4000, # For flat rather than 3D borders
  :MONO,                    0x8000 # For monochrome borders
]
FEEDBACK_TYPE =
enum :feedback_type,
[
  :TOUCH_CONTACTVISUALIZATION, 1,
  :PEN_BARRELVISUALIZATION,    2,
  :PEN_TAP,                    3,
  :PEN_DOUBLETAP,              4,
  :PEN_PRESSANDHOLD,           5,
  :PEN_RIGHTTAP,               6,
  :TOUCH_TAP,                  7,
  :TOUCH_DOUBLETAP,            8,
  :TOUCH_PRESSANDHOLD,         9,
  :TOUCH_RIGHTTAP,             10,
  :GESTURE_PRESSANDTAP,        11,
  :MAX,                        0xFFFFFFFF
]
PointerFlags =
enum :pointer_flags,
[
  :NONE,    0x00000000, # Default

  :NEW,     0x00000001, # Indicates the arrival of a new pointer.

  :INRANGE, 0x00000002, # Indicates that this pointer continues to exist. When this flag is not set,
  # it indicates the pointer has left detection range. This flag is typically not set only when a hovering pointer
  # leaves detection range (POINTER_FLAG_UPDATE is set) or when a pointer in contact with a window surface leaves
  # detection range (POINTER_FLAG_UP is set).

  :INCONTACT, 0x00000004, #Indicates that this pointer is in contact with the digitizer surface.
  # When this flag is not set, it indicates a hovering pointer.

  :FIRSTBUTTON, 0x00000010, # Indicates a primary action, analogous to a left mouse button down.
  #A touch pointer has this flag set when it is in contact with the digitizer surface.
  #A pen pointer has this flag set when it is in contact with the digitizer surface with no buttons pressed.
  #A mouse pointer has this flag set when the left mouse button is down.

  :SECONDBUTTON, 0x00000020, # Indicates a secondary action, analogous to a right mouse button down.
  #A touch pointer does not use this flag. A pen pointer has this flag set when it is in contact with the
  # digitizer surface with the pen barrel button pressed.A mouse pointer has this flag set when the right mouse
  # button is down.

  :THIRDBUTTON, 0x00000040, # Analogous to a mouse wheel button down. A touch pointer does not use
  # this flag. A pen pointer does not use this flag. A mouse pointer has this flag set when the mouse wheel button
  # is down.

  :FOURTHBUTTON, 0x00000080, # Analogous to a first extended mouse (XButton1) button down.
  # A touch pointer does not use this flag.
  # A pen pointer does not use this flag.
  # A mouse pointer has this flag set when the first extended mouse (XBUTTON1) button is down.

  :FIFTHBUTTON, 0x00000100, # Analogous to a second extended mouse (XButton2) button down.
  # A touch pointer does not use this flag.
  # A pen pointer does not use this flag.
  # A mouse pointer has this flag set when the second extended mouse (XBUTTON2) button is down.

  :PRIMARY, 0x00002000, # Indicates that this pointer has been designated as the primary pointer.
  # A primary pointer is a single pointer that can perform actions beyond those available to non-primary pointers.
  # For example, when a primary pointer makes contact with a window’s surface, it may provide the window an
  # opportunity to activate by sending it a WM_POINTERACTIVATE message. The primary pointer is identified from all
  # current user interactions on the system (mouse, touch, pen, and so on). As such, the primary pointer might not
  # be associated with your app. The first contact in a multi-touch interaction is set as the primary pointer.
  # Once a primary pointer is identified, all contacts must be lifted before a new contact can be identified as a
  # primary pointer. For apps that don't process pointer input, only the primary pointer's events are promoted to
  # mouse events.

  :CONFIDENCE, 0x000004000, # Confidence is a suggestion from the source device about whether the
  # pointer represents an intended or accidental interaction, which is especially relevant for PT_TOUCH pointers
  # where an accidental interaction (such as with the palm of the hand) can trigger input. The presence of this
  # flag indicates that the source device has high confidence that this input is part of an intended interaction.

  :POINTER_FLAG_CANCELED, 0x000008000, #Indicates that the pointer is departing in an abnormal manner, such as
  # when the system receives invalid input for the pointer or when a device with active pointers departs abruptly.
  # If the application receiving the input is in a position to do so, it should treat the interaction as not
  # completed and reverse any effects of the concerned pointer.

  :POINTER_FLAG_DOWN, 0x00010000, # Indicates that this pointer transitioned to a down state; that is, it made
  # contact with the digitizer surface.

  :POINTER_FLAG_UPDATE, 0x00020000, # Indicates that this is a simple update that does not include pointer state
  # changes.

  :POINTER_FLAG_UP, 0x00040000, # Indicates that this pointer transitioned to an up state; that is, it broke
  # contact with the digitizer surface.

  :POINTER_FLAG_WHEEL, 0x00080000, # Indicates input associated with a pointer wheel. For mouse pointers, this is
  # equivalent to the action of the mouse scroll wheel (WM_MOUSEWHEEL).

  :POINTER_FLAG_HWHEEL, 0x00100000, # Indicates input associated with a pointer h-wheel. For mouse pointers, this
  # is equivalent to the action of the mouse horizontal scroll wheel (WM_MOUSEHWHEEL).

  :POINTER_FLAG_CAPTURECHANGED, 0x00200000, # Indicates that this pointer was captured by (associated with)
  # another element and the original element has lost capture (see WM_POINTERCAPTURECHANGED)
]
MessageFilter =
enum :message_filter,
[
  :ADD,    1,
  :REMOVE, 2
]
KeyEventFlags =
enum :key_event_flags,
[
  :EXTENDEDKEY, 0x0001, # If specified, the scan code was preceded by a prefix byte having the value 0xE0 (224).
  :KEYUP, 0x0002, # If specified, the key is being released. If not specified, the key is being depressed.
]
MapVirtualKey =
enum :map_virtual_key,
[
  :VK_TO_VSC, 0, # uCode is a virtual-key code and is translated into a scan code. If it is a virtual-key code t
  # hat does not distinguish between left- and right-hand keys, the left-hand scan code is returned. If there is
  # no translation, the function returns 0.

  :VSC_TO_VK, 1, #uCode is a scan code and is translated into a virtual-key code that does not distinguish between
  # left-hand right-hand keys. If there is no translation, the function returns 0.

  :VK_TO_CHAR, 2, # uCode is a virtual-key code and is translated into an unshifted character value in the
  # low-order word of the return value. Dead keys (diacritics) are indicated by setting the top bit of the return
  # value. If there is no translation, the function returns 0.

  :VSC_TO_VK_EX, 3, # uCode is a scan code and is translated into a virtual-key code that distinguishes between
  # left- and right-hand keys. If there is no translation, the function returns 0.
]
MouseKeysFlags =
enum :mouse_keys_flags,
[
  :ctrl,     0x0008, #The CTRL key is down.
  :lbutton,  0x0001, #The left mouse button is down.
  :mbutton,  0x0010, #The middle mouse button is down.
  :rbutton,  0x0002, #The right mouse button is down.
  :shift,    0x0004, #The SHIFT key is down.
  :xbutton1, 0x0020, #The first X button is down.
  :xbutton2, 0x0040  #The second X button is down.
]
AppendMenuFlags =
enum :append_menu_flags,
[
  :UNCHECKED,    0x00000000,
  :STRING,       0x00000000,
  :ENABLED,      0x00000000,
  :GRAYED,       0x00000001,
  :DISABLED,     0x00000002,
  :BITMAP,       0x00000004,
  :CHECKED,      0x00000008,
  :POPUP,        0x00000010,
  :MENUBARBREAK, 0x00000020,
  :MENUBREAK,    0x00000040,
  :OWNERDRAW,    0x00000100,
  :SEPARATOR,    0x00000800
]
ClipboardFormats =
enum :clipboard_formats,
[
  :TEXT,            1,
  :BITMAP,          2,
  :METAFILEPICT,    3,
  :SYLK,            4,
  :DIF,             5,
  :TIFF,            6,
  :OEMTEXT,         7,
  :DIB,             8,
  :PALETTE,         9,
  :PENDATA,         10,
  :RIFF,            11,
  :WAVE,            12,
  :UNICODETEXT,     13,
  :ENHMETAFILE,     14,
  :HDROP,           15,
  :LOCALE,          16,
  :MAX,             18, # Assume Windows 2000 or later
  :OWNERDISPLAY,    0x0080,
  :DSPTEXT,         0x0081,
  :DSPBITMAP,       0x0082,
  :DSPMETAFILEPICT, 0x0083,
  :DSPENHMETAFILE,  0x008E
]
MouseEventFlags =
enum :mouse_event_flags,
[
  :MOVE, 0x0001, # Movement occurred.
  :LEFTDOWN, 0x0002, # The left button is down.
  :LEFTUP, 0x0004, # The left button is up.
  :RIGHTDOWN, 0x0008, # The right button is down.
  :RIGHTUP, 0x0010, # The right button is up.
  :MIDDLEDOWN, 0x0020, # The middle button is down.
  :MIDDLEUP, 0x0040, # The middle button is up.
  :XDOWN, 0x0080, # An X button was pressed.
  :XUP, 0x0100, # An X button was released.
  :WHEEL, 0x0800, # The wheel has been moved, if the mouse has a wheel. The amount of movement is specified in
  # dwData, # The wheel button is rotated.
  :HWHEEL, 0x01000, # The wheel button is tilted.
  :ABSOLUTE, 0x8000, # The dx and dy parameters contain normalized absolute coordinates. If not set, those
  # parameters contain relative data: the change in position since the last reported position. This flag can be
  # set, or not set, regardless of what kind of mouse or mouse-like device, if any, is connected to the system.
  # For further information about relative mouse motion, see the following Remarks section.
]
VirtualKeyFlags =
enum :virtual_key_flags,
[
  :lbutton,            0x01, #Left mouse button
  :rbutton,            0x02, #Right mouse button
  :cancel,             0x03, #Control-break processing
  :mbutton,            0x04, #Middle mouse button (three-button mouse)
  :xbutton1,           0x05, #X1 mouse button
  :xbutton2,           0x06, #X2 mouse button
  #-,                  0x07, #Undefined
  :backspace,          0x08, #BACKSPACE key
  :tab,                0x09, #TAB key
  #-,               0x0A-0B, #Reserved
  :clear,              0x0C, #CLEAR key
  :enter,              0x0D, #ENTER key
  #:return,             0x0D, #ENTER key
  #-,               0x0E-0F, #Undefined
  :shift,              0x10, #SHIFT key
  :control,            0x11, #CTRL key
  :menu,               0x12, #ALT key
  :pause,              0x13, #PAUSE key
  :capital,            0x14, #CAPS LOCK key
  :kana,               0x15, #IME Kana mode
  :hanguel,            0x15, #IME Hanguel mode (maintained for compatibility; use :HANGUL)
  :hangul,             0x15, #IME Hangul mode
  #-,                  0x16, #Undefined
  :junja,              0x17, #IME Junja mode
  :final,              0x18, #IME final mode
  :hanja,              0x19, #IME Hanja mode
  :kanji,              0x19, #IME Kanji mode
  #-,                  0x1A, #Undefined
  :esc,                0x1B, #ESC key
  #:escape,             0x1B, #ESC key
  :convert,            0x1C, #IME convert
  :nonconvert,         0x1D, #IME nonconvert
  :accept,             0x1E, #IME accept
  :modechange,         0x1F, #IME mode change request
  :space,              0x20, #SPACEBAR
  :prior,              0x21, #PAGE UP key
  :next,               0x22, #PAGE DOWN key
  :end,                0x23, #END key
  :home,               0x24, #HOME key
  :left,               0x25, #LEFT ARROW key
  :up,                 0x26, #UP ARROW key
  :right,              0x27, #RIGHT ARROW key
  :down,               0x28, #DOWN ARROW key
  :select,             0x29, #SELECT key
  :print,              0x2A, #PRINT key
  :execute,            0x2B, #EXECUTE key
  :snapshot,           0x2C, #PRINT SCREEN key
  :ins,                0x2D, #INS key
  :insert,             0x2D, #INS key
  :del,                0x2E, #DEL key
  :delete,             0x2E, #DEL key
  :help,               0x2F, #HELP
  :n0,                 0x30,
  :n1,                 0x31,
  :n2,                 0x32,
  :n3,                 0x33,
  :n4,                 0x34,
  :n5,                 0x35,
  :n6,                 0x36,
  :n7,                 0x37,
  :n8,                 0x38,
  :n9,                 0x39,
  :'0',                0x30,
  :'1',                0x31,
  :'2',                0x32,
  :'3',                0x33,
  :'4',                0x34,
  :'5',                0x35,
  :'6',                0x36,
  :'7',                0x37,
  :'8',                0x38,
  :'9',                0x39,
  #-,                  0x3A-40, #Undefined,
  :a,                  0x41,
  :b,                  0x42,
  :c,                  0x43,
  :d,                  0x44,
  :e,                  0x45,
  :f,                  0x46,
  :g,                  0x47,
  :h,                  0x48,
  :i,                  0x49,
  :j,                  0x4A,
  :k,                  0x4B,
  :l,                  0x4C,
  :m,                  0x4D,
  :n,                  0x4E,
  :o,                  0x4F,
  :p,                  0x50,
  :q,                  0x51,
  :r,                  0x52,
  :s,                  0x53,
  :t,                  0x54,
  :u,                  0x55,
  :v,                  0x56,
  :w,                  0x57,
  :x,                  0x58,
  :y,                  0x59,
  :z,                  0x5A,
  :lwin,               0x5B, #Left Windows key (Natural keyboard)
  :rwin,               0x5C, #Right Windows_key (Natural keyboard)
  :apps,               0x5D, #Applications_key (Natural keyboard)
  #-,                  0x5E, #Reserved
  :sleep,              0x5F, #Computer Sleep key
  :numpad0,            0x60, #Numeric keypad 0 key
  :numpad1,            0x61, #Numeric keypad 1 key
  :numpad2,            0x62, #Numeric keypad 2 key
  :numpad3,            0x63, #Numeric keypad 3 key
  :numpad4,            0x64, #Numeric keypad 4 key
  :numpad6,            0x66, #Numeric keypad 6 key
  :numpad7,            0x67, #Numeric keypad 7 key
  :numpad8,            0x68, #Numeric keypad 8 key
  :numpad5,            0x65, #Numeric keypad 5 key
  :numpad9,            0x69, #Numeric keypad 9 key
  :multiply,           0x6A, #Multiply key
  :add,                0x6B, #Add key
  :separator,          0x6C, #Separator key
  :subtract,           0x6D, #Subtract key
  :decimal,            0x6E, #Decimal key
  :divide,             0x6F, #Divide key
  :f1,                 0x70, #F1_key
  :f2,                 0x71, #F2_key
  :f3,                 0x72, #F3_key
  :f4,                 0x73, #F4_key
  :f5,                 0x74, #F5_key
  :f6,                 0x75, #F6_key
  :f7,                 0x76, #F7_key
  :f8,                 0x77, #F8_key
  :f9,                 0x78, #F9_key
  :f10,                0x79, #F10_key
  :f11,                0x7A, #F11_key
  :f12,                0x7B, #F12_key
  :f13,                0x7C, #F13_key
  :f14,                0x7D, #F14_key
  :f15,                0x7E, #F15_key
  :f16,                0x7F, #F16_key
  :f17,                0x80, #F17_key
  :f18,                0x81, #F18_key
  :f19,                0x82, #F19_key
  :f20,                0x83, #F20_key
  :f21,                0x84, #F21_key
  :f22,                0x85, #F22_key
  :f23,                0x86, #F23_key
  :f24,                0x87, #F24_key
  #-,               0x88-8F, #Unassigned
  :numlock,            0x90, #NUM LOCK_key
  :scroll,             0x91, #SCROLL LOCK_key,
  #                 0x92-96, #OEM specific
  #-,               0x97-9F, #Unassigned
  :lshift,              0xA0, #Left SHIFT_key
  :rshift,              0xA1, #Right SHIFT_key
  :lcontrol,            0xA2, #Left CONTROL_key
  :rcontrol,            0xA3, #Right CONTROL_key
  :lmenu,               0xA4, #Left MENU_key
  :rmenu,               0xA5, #Right MENU_key
  :browser_back,        0xA6, #Browser Back_key
  :browser_forward,     0xA7, #Browser Forward_key
  :browser_refresh,     0xA8, #Browser Refresh_key
  :browser_stop,        0xA9, #Browser Stop_key
  :browser_search,      0xAA, #Browser Search_key
  :browser_favorites,   0xAB, #Browser Favorites_key
  :browser_home,        0xAC, #Browser Start and Home_key
  :volume_mute,         0xAD, #Volume Mute_key
  :volume_down,         0xAE, #Volume Down_key
  :volume_up,           0xAF, #Volume Up_key
  :media_next_track,    0xB0, #Next Track_key
  :media_prev_track,    0xB1, #Previous Track_key
  :media_stop,          0xB2, #Stop Media_key
  :media_play_pause,    0xB3, #Play/Pause Media_key
  :launch_mail,         0xB4, #Start Mail_key
  :launch_media_select, 0xB5, #Select Media_key
  :launch_app1,         0xB6, #Start Application 1_key
  :launch_app2,         0xB7, #Start Application 2_key
  #-,                0xB8-B9, Reserved
  :oem_1,               0xBA, #Used for miscellaneous characters; it can vary by_keyboard. For the US standard_keyboard, the ';:'_key
  :oem_plus,            0xBB, #For any country/region, the '+'_key
  :oem_comma,           0xBC, #For any country/region, the ','_key
  :oem_minus,           0xBD, #For any country/region, the '-'_key
  :oem_period,          0xBE, #For any country/region, the '.'_key
  :oem_2,               0xBF, #Used for miscellaneous characters; it can vary by_keyboard. For the US standard_keyboard, the '/?'_key
  :oem_3,               0xC0, #Used for miscellaneous characters; it can vary by_keyboard. For the US standard_keyboard, the '`~'_key
  #-,                0xC1-D7, Reserved
  #-,                0xD8-DA, Assigned
  :oem_4,               0xDB, #Used for miscellaneous characters; it can vary by_keyboard. For the US standard_keyboard, the '[{'_key
  :oem_5,               0xDC, #Used for miscellaneous characters; it can vary by_keyboard. For the US standard_keyboard, the '\|'_key
  :oem_6,               0xDD, #Used for miscellaneous characters; it can vary by_keyboard. For the US standard_keyboard, the ']}'_key
  :oem_7,               0xDE, #Used for miscellaneous characters; it can vary by_keyboard. For the US standard_keyboard, the 'single-quote/double-quote'_key
  :oem_8,               0xDF, #Used for miscellaneous characters; it can vary by_keyboard.
  #-,                   0xE0, Reserved
  #                     0xE1, OEM Specific
  :oem_102,             0xE2, #Either the angle bracket_key or the backslash_key on the RT 102-key_keyboard,
  #                  0xE3-E4, #OEM specific
  :process,             0xE5, #IME PROCESS_key,
  #                     0xE6, #OEM specific
  :packet,              0xE7, #Used to pass Unicode characters as if they were_keystrokes. The :PACKET_key is the low word of a 32-bit Virtual_key value used for non-keyboard input methods. For more information, see Remark in_keyBDINPUT, SendInput, WM_KEYDOWN, and WM_KEYUP
  #-,                   0xE8, #Unassigned,
  #                  0xE9-F5, #OEM specific
  :attn,                0xF6, #Attn_key
  :crsel,               0xF7, #CrSel_key
  :exsel,               0xF8, #ExSel_key
  :ereof,               0xF9, #Erase EOF_key
  :play,                0xFA, #Play_key
  :zoom,                0xFB, #Zoom_key
  :noname,              0xFC, #Reserved
  :pa1,                 0xFD, #PA1_key
]
enum :menu_flags,
[
  :BYCOMMAND,       0x00000000,
  :ENABLED,         0x00000000,
  :STRING,          0x00000000,
  :UNCHECKED,       0x00000000,
  :INSERT,          0x00000000,
  :UNHILITE,        0x00000000,
  :GRAYED,          0x00000001,
  :DISABLED,        0x00000002,
  :BITMAP,          0x00000004,
  :CHECKED,         0x00000008,
  :POPUP,           0x00000010,
  :MENUBARBREAK,    0x00000020,
  :MENUBREAK,       0x00000040,
  :CHANGE,          0x00000080,
  :HILITE,          0x00000080,
  :END,             0x00000080,
  :OWNERDRAW,       0x00000100,
  :APPEND,          0x00000100,
  :DELETE,          0x00000200,
  :USECHECKBITMAPS, 0x00000200,
  :BYPOSITION,      0x00000400,
  :SEPARATOR,       0x00000800,
  :REMOVE,          0x00001000,
  :DEFAULT,         0x00001000,
  :SYSMENU,         0x00002000,
  :HELP,            0x00004000,
  :RIGHTJUSTIFY,    0x00004000,
  :MOUSESELECT,     0x00008000
]
OBJID_WINDOW =

System Objec

0x00000000
OBJID_SYSMENU =
0xFFFFFFFF
OBJID_TITLEBAR =
0xFFFFFFFE
OBJID_MENU =
0xFFFFFFFD
OBJID_CLIENT =
0xFFFFFFFC
OBJID_VSCROLL =
0xFFFFFFFB
OBJID_HSCROLL =
0xFFFFFFFA
OBJID_SIZEGRIP =
0xFFFFFFF9
OBJID_CARET =
0xFFFFFFF8
OBJID_CURSOR =
0xFFFFFFF7
OBJID_ALERT =
0xFFFFFFF6
OBJID_SOUND =
0xFFFFFFF5
OBJID_QUERYCLASSNAMEIDX =
0xFFFFFFF4
OBJID_NATIVEOM =
0xFFFFFFF0
DrawCaptionFlags =
enum :draw_caption_flags,
[
  :ACTIVE,   0x0001,
  :SMALLCAP, 0x0002,
  :ICON,     0x0004,
  :TEXT,     0x0008,
  :INBUTTON, 0x0010,
  :GRADIENT, 0x0020,
  :BUTTONS,  0x1000
]
GetAncestorFlags =
enum :get_ancestor_flags,
[
  :PARENT,    1,
  :ROOT,      2,
  :ROOTOWNER, 3
]
KeyboardModifiers =
enum :keyboard_modifiers,
[
  :alt,      0x0001, #Either ALT key must be held down.
  :control,  0x0002, #Either CTRL key must be held down.
  :ctrl,     0x0002,
  :norepeat, 0x4000, #Changes the hotkey behavior so that the keyboard auto-repeat does not yield multiple hotkey notifications.
  #Windows Vista and Windows XP/2000:  This flag is not supported.
  :shift,    0x0004, #Either SHIFT key must be held down.
  :windows,  0x0008, #Either WINDOWS key was held down. These keys are labeled with the Windows logo. Keyboard shortcuts that involve the WINDOWS key are reserved for use by the operating system.
]
PointerInputType =
enum :pointer_input_type,
[
  :PT_POINTER, 0x00000001,
  :PT_TOUCH,   0x00000002,
  :PT_PEN,     0x00000003,
  :PT_MOUSE,   0x00000004
]
QueueStatusFlags =
enum :queue_status_flags, [
    :KEY, 0x0001, # A WM_KEYUP, WM_KEYDOWN, WM_SYSKEYUP, or WM_SYSKEYDOWN message is in the queue.

    :MOUSEMOVE, 0x0002, # A WM_MOUSEMOVE message is in the queue.

    :MOUSEBUTTON, 0x0004, # A mouse-button message (WM_LBUTTONUP, WM_RBUTTONDOWN, and so on).

    :POSTMESSAGE, 0x0008, # A posted message (other than those listed here) is in the queue.

    :TIMER, 0x0010, # A WM_TIMER message is in the queue.

    :PAINT, 0x0020, # A WM_PAINT message is in the queue.

    :SENDMESSAGE, 0x0040, # A message sent by another thread or application is in the queue.

    :HOTKEY, 0x0080, # A WM_HOTKEY message is in the queue.

    :ALLPOSTMESSAGE, 0x0100, # A posted message (other than those listed here) is in the queue.

    :RAWINPUT, 0x0400, #A raw input message is in the queue. For more information, see Raw Input.
    #Windows 2000:  This flag is not supported.

    :MOUSE, 0x0006, #(:MOUSEMOVE | :MOUSEBUTTON), # A WM_MOUSEMOVE message or mouse-button message
    # (WM_LBUTTONUP, WM_RBUTTONDOWN, and so on).
    :INPUT, 0x0407, #(:MOUSE | :KEY | :RAWINPUT), # An input message is in the queue.
    :ALLEVENTS, 0x04B7, # (:INPUT | :POSTMESSAGE | :TIMER | :PAINT | :HOTKEY), # An input, WM_TIMER, WM_PAINT,
    # WM_HOTKEY, or posted message is in the queue.
    :ALLINPUT, 0x04FF, # (:INPUT | :POSTMESSAGE | :TIMER | :PAINT | :HOTKEY | :SENDMESSAGE), # Any message is in the
     # queue.
]
WindowLong =
enum :window_long,
[
  :WNDPROC,    -4,  #Sets a new address for the window procedure. You cannot change this attribute if the
  # window does not belong to the same process as the calling thread.

  :HINSTANCE,  -6, #Sets a new application instance handle.

  :ID,        -12, #Sets a new identifier of the child window. The window cannot be a top-level window.

  :STYLE,     -16, #Sets a new window style.

  :EXSTYLE,   -20, #Sets a new extended window style.

  :USERDATA,  -21, #Sets the user data associated with the window. This data is intended for use by the
  # application that created the window. Its value is initially zero.
]
DeviceNotifyFlags =
enum :device_notify_flags,
[
  :WINDOW_HANDLE, 0x00000000, # The hRecipient parameter is a window handle.

  :SERVICE_HANDLE, 0x00000001, # The hRecipient parameter is a service status handle.

  # In addition, you can specify the following value.
  :ALL_INTERFACE_CLASSES, 0x00000004, # Notifies the recipient of device interface events for all device interface
  # classes. (The dbcc_classguid member is ignored.) This value can be used only if the dbch_devicetype member is
  # DBT_DEVTYP_DEVICEINTERFACE.
]
KeyboardLayoutFlags =
enum :keyboard_layout_flags,
[
  :ACTIVATE, 0x00000001, # If the specified input locale identifier is not already loaded, the function loads
  # and activates the input locale identifier for the current thread.

  :SUBSTITUTE_OK, 0x00000002, # Substitutes the specified input locale identifier with another locale preferred
  # by the user. The system starts with this flag set, and it is recommended that your application always use
  # this flag. The substitution occurs only if the registry key HKEY_CURRENT_USER\Keyboard\Layout\Substitutes
  # explicitly defines a substitution locale. For example, if the key includes the value name "00000409" with
  # value "00010409", loading the U.S. English layout ("00000409") causes the Dvorak U.S. English layout
  # ("00010409") to be loaded instead. The system uses :SUBSTITUTE_OK when booting, and it is recommended that
  # all applications use this value when loading input locale identifiers to ensure that the user's preference
  # is selected.

  :REORDER, 0x00000008, # If this bit is set, the system's circular list of loaded locale identifiers is
  # reordered by moving the locale identifier to the head of the list. If this bit is not set, the list is rotated
  # without a change of order. For example, if a user had an English locale identifier active, as well as having
  # French, German, and Spanish locale identifiers loaded (in that order), then activating the German locale
  # identifier with the KLF_REORDER bit set would produce the following order: German, English, French, Spanish.
  # Activating the German locale identifier without the KLF_REORDER bit set would produce the following order:
  # German, Spanish, English, French. If less than three locale identifiers are loaded, the value of this flag is
  # irrelevant.

  :REPLACELANG, 0x00000010, # If the new input locale identifier has the same language identifier as a current
  # input locale identifier, the new input locale identifier replaces the current one as the input locale
  # identifier for that language. If this value is not provided and the input locale identifiers have the same
  # language identifiers, the current input locale identifier is not replaced and the function returns NULL.

  :NOTELLSHELL, 0x00000080, # Prevents a ShellProc hook procedure from receiving an HSHELL_LANGUAGE hook code when
  # the new input locale identifier is loaded. This value is typically used when an application loads multiple
  # input locale identifiers one after another. Applying this value to all but the last input locale identifier
  # delays the shell's processing until all input locale identifiers have been added.


  :SETFORPROCESS, 0x00000100, #This flag is valid only with :ACTIVATE. Activates the specified input locale
  # identifier for the entire process and sends the WM_INPUTLANGCHANGE message to the current thread's Focus or
  # Active window. Typically, LoadKeyboardLayout activates an input locale identifier only for the current thread.

  :SHIFTLOCK, 0x00010000, # This is used with KLF_RESET. See KLF_RESET for an explanation.
  #KLF_UNLOADPREVIOUS #This flag is unsupported. Use the UnloadKeyboardLayout function instead.

  :RESET, 0x40000000, # If set but KLF_SHIFTLOCK is not set, the Caps Lock state is turned off by pressing the
  # Caps Lock key again. If set and KLF_SHIFTLOCK is also set, the Caps Lock state is turned off by pressing
  # either SHIFT key. These two methods are mutually exclusive, and the setting persists as part of the User's
  # profile in the registry.
]
ProcessDpiAwareness =
enum :process_dpi_awareness,
[
  :Process_DPI_Unaware,           0, # DPI unaware
  :Process_System_DPI_Aware,      1, # System DPI aware
  :Process_Per_Monitor_DPI_Aware, 2, # Per monitor DPI aware
]
TouchInjectionFlags =
enum :touch_injection_flags,
[
  :TOUCH_FEEDBACK_DEFAULT, 0x1, # Specifies default touch visualizations.
  :TOUCH_FEEDBACK_INDIRECT, 0x2, # Specifies indirect touch visualizations.
  :TOUCH_FEEDBACK_NONE, 0x3, # Specifies no touch visualizations.
  :MAX_TOUCH_COUNT, 256, # Specifies the maximum number of simultaneous contacts.
]
WindowMessages =
enum :window_messages, messages
WindowProc =

LRESULT CALLBACK WindowProc(

_In_  HWND hwnd,
_In_  UINT uMsg,
_In_  WPARAM wParam,
_In_  LPARAM lParam )
callback :WindowProc, [:hwnd, :uint, :wparam, :lparam], :lresult
GetWindowFlags =
enum :get_window_flags, [
    :HWNDFIRST, 0, # The retrieved handle identifies the window of the same type that is highest in the Z order.
    # If the specified window is a topmost window, the handle identifies a topmost window. If the specified window
    # is a top-level window, the handle identifies a top-level window. If the specified window is a child window,
    # the handle identifies a sibling window.

    :HWNDLAST, 1, # The retrieved handle identifies the window of the same type that is lowest in the Z order.
    # If the specified window is a topmost window, the handle identifies a topmost window. If the specified window
    # is a top-level window, the handle identifies a top-level window. If the specified window is a child window,
    # the handle identifies a sibling window.

    :HWNDNEXT, 2, # The retrieved handle identifies the window below the specified window in the Z order.
    # If the specified window is a topmost window, the handle identifies a topmost window. If the specified window
    # is a top-level window, the handle identifies a top-level window. If the specified window is a child window,
    # the handle identifies a sibling window.

    :HWNDPREV, 3, # The retrieved handle identifies the window above the specified window in the Z order.
    # If the specified window is a topmost window, the handle identifies a topmost window. If the specified window
    # is a top-level window, the handle identifies a top-level window. If the specified window is a child window,
    # the handle identifies a sibling window.

    :OWNER, 4, # The retrieved handle identifies the specified window's owner window, if any. For more information,
    # see Owned Windows.

    :CHILD, 5, # The retrieved handle identifies the child window at the top of the Z order, if the specified window
    # is a parent window; otherwise, the retrieved handle is NULL. The function examines only child windows of the
    # specified window. It does not examine descendant windows.

    :ENABLEDPOPUP, 6, # The retrieved handle identifies the enabled popup window owned by the specified window
                      # (the search uses the first such window found using :HWNDNEXT); otherwise, if there are no enabled popup
                      # windows, the retrieved handle is that of the specified window.
]
EditStyle =
enum :edit_style,
[
  :AUTOHSCROLL,
  :AUTOVSCROLL,
  :CENTER,
  :LEFT,
  :LOWERCASE,
  :MULTILINE,
  :NOHIDESEL,
  :NUMBER,
  :OEMCONVERT,
  :PASSWORD,
  :READONLY,
  :RIGHT,
  :UPPERCASE,
  :WANTRETURN
]
DrawFrameControlFlags =

Flags for DrawFrameControl

enum :draw_frame_control_flags,
[
  :CAPTION,    1,
  :MENU,       2,
  :SCROLL,     3,
  :BUTTON,     4,
  :POPUPMENU,  5
]
ComboBoxMessage =
enum :combo_box_message,
[
    :GETEDITSEL,            0x0140,
    :LIMITTEXT,             0x0141,
    :SETEDITSEL,            0x0142,
    :ADDSTRING,             0x0143,
    :DELETESTRING,          0x0144,
    :DIR,                   0x0145,
    :GETCOUNT,              0x0146,
    :GETCURSEL,             0x0147,
    :GETLBTEXT,             0x0148,
    :GETLBTEXTLEN,          0x0149,
    :INSERTSTRING,          0x014A,
    :RESETCONTENT,          0x014B,
    :FINDSTRING,            0x014C,
    :SELECTSTRING,          0x014D,
    :SETCURSEL,             0x014E,
    :SHOWDROPDOWN,          0x014F,
    :GETITEMDATA,           0x0150,
    :SETITEMDATA,           0x0151,
    :GETDROPPEDCONTROLRECT, 0x0152,
    :SETITEMHEIGHT,         0x0153,
    :GETITEMHEIGHT,         0x0154,
    :SETEXTENDEDUI,         0x0155,
    :GETEXTENDEDUI,         0x0156,
    :GETDROPPEDSTATE,       0x0157,
    :FINDSTRINGEXACT,       0x0158,
    :SETLOCALE,             0x0159,
    :GETLOCALE,             0x015A,
    :GETTOPINDEX,           0x015b,
    :MSGMAX,                0x015B,
    :SETTOPINDEX,           0x015c,
    :GETHORIZONTALEXTENT,   0x015d,
    :SETHORIZONTALEXTENT,   0x015e,
    :GETDROPPEDWIDTH,       0x015f,
    :SETDROPPEDWIDTH,       0x0160,
    :INITSTORAGE,           0x0161,
    :MSGMAX,                0x0162,
    :MULTIPLEADDSTRING,     0x0163,
    :MSGMAX,                0x0163,
]
MessageBoxFlags =
enum :message_box_flags,
[
   # Buttons ---------------------

   :ABORTRETRYIGNORE,  0x00000002, # Push buttons: Abort, Retry, and Ignore.
   # The message box contains three push buttons: Cancel, Try Again, Continue. Use this message box type instead of MB_ABORTRETRYIGNORE.
   :CANCELTRYCONTINUE, 0x00000006,
   # Adds a Help button to the message box. When the user clicks the Help button or presses F1, the system sends a
   # WM_HELP message to the owner.
   :HELP,              0x00004000,
   :OK,                0x00000000, # Push button: OK. This is the default.
   :OKCANCEL,          0x00000001, # Push buttons: OK and Cancel.
   :RETRYCANCEL,       0x00000005, # Push buttons: Retry and Cancel.
   :YESNO,             0x00000004, # Push buttons: Yes and No.
   :YESNOCANCEL,       0x00000003, # Push buttons: Yes, No, and Cancel.

   # Icons -----------------------

   :ICONEXCLAMATION, 0x00000030, # An exclamation-point icon
   :ICONWARNING,     0x00000030, # Same as above
   :ICONINFORMATION, 0x00000040, # Lowercase letter i in a circle
   :ICONASTERISK,    0x00000040, # Same as above
   :ICONQUESTION,    0x00000020, # A question-mark icon. Not Recomended
   :ICONSTOP,        0x00000010, # A stop-sign icon
   :ICONERROR,       0x00000010, # Same as above
   :ICONHAND,        0x00000010, # Same as above

   # Modality --------------------

   # The user must respond to the message box before continuing work in the
   # window identified by the hWnd parameter. However, the user can move to the
   # windows of other threads and work in those windows.
   # Depending on the hierarchy of windows in the application, the user may be
   # able to move to other windows within the thread. All child windows of the
   # parent of the message box are automatically disabled, but pop-up windows are
   # not.
   # MB_APPLMODAL is the default if neither MB_SYSTEMMODAL nor MB_TASKMODAL
   # is specified.
   :APPLMODAL,   0x00000000,
   # Same as MB_APPLMODAL except that the message box has the WS_EX_TOPMOST style
   # Use system-modal message boxes to notify the user of serious, potentially
   # damaging errors that require immediate attention (for example, running out
   # of memory). This flag has no effect on the user's ability to interact with
   # windows other than those associated with hWnd.
   :SYSTEMMODAL, 0x00001000,
   # Same as MB_APPLMODAL except that all the top-level windows belonging to the
   # current thread are disabled if the hWnd parameter is NULL. Use this flag
   # when the calling application or library does not have a window handle
   # available but still needs to prevent input to other windows in the calling
   # thread without suspending other threads.
   :TASKMODAL,   0x00002000,

   # Other -----------------------

   # Same as desktop of the interactive window station. For more information,
   # see Window Stations.
   # If the current input desktop is not the default desktop, MessageBox does not
   # return until the user switches to the default desktop.
   :DEFAULT_DESKTOP_ONLY, 0x00020000,
   :RIGHT,                0x00080000, # The text is right-justified.
   # Displays message and caption text using right-to-left reading order on
   # Hebrew and Arabic systems.
   :RTLREADING,           0x00100000,
   # The message box becomes the foreground window. Internally, the system calls
   # the SetForegroundWindow function for the message box.
   :SETFOREGROUND,        0x00010000, # The message box is created with the WS_EX_TOPMOST window style.

   :TOPMOST,              0x00040000,
   # The caller is a service notifying the user of an event. The function
   # displays a message box on the current active desktop, even if there is no
   # user logged on to the computer.
   # Terminal Services: If the calling thread has an impersonation token, the
   # function directs the message box to the session specified in the
   # impersonation token.
   # If this flag is set, the hWnd parameter must be NULL. This is so that the
   # message box can appear on a desktop other than the desktop corresponding to
   # the hWnd.
   # For information on security considerations in regard to using this flag, see
   # Interactive Services. In particular, be aware that this flag can produce
   # interactive content on a locked desktop and should therefore be used for
   # only a very limited set of scenarios, such as resource exhaustion.

   :SERVICE_NOTIFICATION, 0x00200000,
]
ShowWindowFlags =
enum :show_window, [
    :HIDE,             #Hides the window and activates another window.

    :SHOWNORMAL,       #Activates and displays a window. If the window is minimized or maximized, the system restores
    # it to its original size and position. An application should specify this flag when displaying the window for the first time.

    :SHOWMINIMIZED,    #Activates the window and displays it as a minimized window.

    :MAXIMIZE,         #Maximizes the specified window.

    :SHOWMAXIMIZED, 3, #Activates the window and displays it as a maximized window.

    :SHOWNOACTIVATE,   #Displays the window as a minimized window. This value is similar to SW_SHOWMINIMIZED, except
    # the window is not activated.

    :SHOW,             #Activates the window and displays it in its current size and position.

    :MINIMIZE,         #Minimizes the specified window and activates the next top-level window in the Z order.

    :SHOWMINNOACTIVE,  #Displays the window as a minimized window. This value is similar to SW_SHOWMINIMIZED, except
    # the window is not activated.

    :SHOWNA,           #Displays the window in its current size and position. This value is similar to SW_SHOW, except
    # that the window is not activated.

    :RESTORE,          #Activates and displays the window. If the window is minimized or maximized, the system
    # restores it to its original size and position. An application should specify this flag when restoring a
    # minimized window.

    :SHOWDEFAULT,      #Sets the show state based on the SW_ value specified in the STARTUPINFO structure passed to
    # the CreateProcess function by the program that started the application.

    :FORCEMINIMIZE     #Minimizes a window, even if the thread that owns the window is not responding. This flag
# should only be used when minimizing windows from a different thread.
]
MessageBoxReturn =
enum :message_box_return,
[
  :OK,        1, # The OK button was selected.
  :CANCEL,    2, # The Cancel button was selected.
  :ABORT,     3, # The Abort button was selected.
  :RETRY,     4, # The Retry button was selected.
  :IGNORE,    5, # The Ignore button was selected.
  :YES,       6, # The Yes button was selected.
  :NO,        7, # The No button was selected.
  :TRYAGAIN, 10, # The Try Again button was selected.
  :CONTINUE, 11 # The Continue button was selected.
]
PeekMessageFlags =
enum :peek_message_flags,
[
  :NOREMOVE, 0x0000, # Messages are not removed from the queue after processing by PeekMessage.
  :REMOVE, 0x0001, # Messages are removed from the queue after processing by PeekMessage.
  :NOYIELD, 0x0002, # Prevents the system from releasing any thread that is waiting for the caller to go idle
  # (see WaitForInputIdle). Combine this value with either PM_NOREMOVE or PM_REMOVE.
]
StaticStyle =
enum :static_style,
[
    :LEFT,           0x00000000,
    :CENTER,         0x00000001,
    :RIGHT,          0x00000002,
    :ICON,           0x00000003,
    :BLACKRECT,      0x00000004,
    :GRAYRECT,       0x00000005,
    :WHITERECT,      0x00000006,
    :BLACKFRAME,     0x00000007,
    :GRAYFRAME,      0x00000008,
    :WHITEFRAME,     0x00000009,
    :USERITEM,       0x0000000A,
    :SIMPLE,         0x0000000B,
    :LEFTNOWORDWRAP, 0x0000000C,
    :OWNERDRAW,      0x0000000D,
    :BITMAP,         0x0000000E,
    :ENHMETAFILE,    0x0000000F,
    :ETCHEDHORZ,     0x00000010,
    :ETCHEDVERT,     0x00000011,
    :ETCHEDFRAME,    0x00000012,
    :TYPEMASK,       0x0000001F,
    :NOPREFIX,       0x00000080, # Don't do "&" character translation
    :NOTIFY,         0x00000100,
    :CENTERIMAGE,    0x00000200,
    :RIGHTJUST,      0x00000400,
    :REALSIZEIMAGE,  0x00000800,
    :SUNKEN,         0x00001000,
    :EDITCONTROL,    0x00002000,
    :ENDELLIPSIS,    0x00004000,
    :PATHELLIPSIS,   0x00008000,
    :WORDELLIPSIS,   0x0000C000,
    :ELLIPSISMASK,   0x0000C000
]
WindowStyle =
enum :window_style,
[
  :BORDER,           0x00800000, # has a thin-line border.

  :CAPTION,          0x00C00000, # has a title bar (includes the WS_BORDER style). :BORDER | :DLGFRAME

  :CHILD,            0x40000000, # is a child window. A window with this style cannot have a menu bar. This style
  # cannot be used with the WS_POPUP style.

  :CHILDWINDOW,      0x40000000, # Same as the WS_CHILD style.

  :CLIPCHILDREN,     0x02000000, # Excludes the area occupied by child windows when drawing occurs within the parent
  # window. This style is used when creating the parent window.

  :CLIPSIBLINGS,     0x04000000, # Clips child windows relative to each other; that is, when a particular child
  # window receives a WM_PAINT message, the WS_CLIPSIBLINGS style clips all other overlapping child windows out of
  # the region of the child window to be updated. If WS_CLIPSIBLINGS is not specified and child windows overlap, it
  # is possible, when drawing within the client area of a child window, to draw within the client area of a
  # neighboring child window.

  :DISABLED,         0x08000000, # is initially disabled. A disabled window cannot receive input from the user. To
  # change this after a window has been created, use the EnableWindow function.

  :DLGFRAME,         0x00400000, #has a border of a style typically used with dialog boxes. A window with this style
  # cannot have a title bar. [Doesn't work]

  :GROUP,            0x00020000, # is the first control of a group of controls. The group consists of this first
  # control and all controls defined after it, up to the next control with the WS_GROUP style. The first control
  # in each group usually has the WS_TABSTOP style so that the user can move from group to group. The user can
  # subsequently change the keyboard focus from one control in the group to the next control in the group by using
  # the direction keys. You can turn this style on and off to change dialog box navigation. To change this style
  # after a window has been created, use the SetWindowLong function.

  :HSCROLL,          0x00100000, # has a horizontal scroll bar.

  :ICONIC,           0x20000000, # is initially minimized. Same as the WS_MINIMIZE style.

  :MAXIMIZE,         0x01000000, # is initially maximized.

  :MAXIMIZEBOX,      0x00010000, # has a maximize button. Cannot be combined with the WS_EX_CONTEXTHELP style. The
  # WS_SYSMENU style must also be specified.

  :MINIMIZE,         0x20000000, # is initially minimized. Same as the :ICONIC style.

  :MINIMIZEBOX,      0x00020000, # has a minimize button. Cannot be combined with the WS_EX_CONTEXTHELP style. The
  # WS_SYSMENU style must also be specified.

  :OVERLAPPED,       0x00000000, # is an overlapped window. An overlapped window has a title bar and a border.
  # Same as the WS_TILED style.

  :OVERLAPPEDWINDOW, 0x00CF0000, # is an overlapped window. Same as the :TILEDWINDOW style.

  :POPUP,            0x80000000, #s is a pop-up window. This style cannot be used with the :CHILD style.

  :POPUPWINDOW,      0x80880000, # is a pop-up window. The WS_CAPTION and WS_POPUPWINDOW styles must be combined to
  # make  menu visible.

  :SIZEBOX,          0x00040000, # has a sizing border. Same as the :THICKFRAME style.

  :SYSMENU,          0x00080000, # has a window menu on its title bar. [ The :CAPTION style must also be specified. ]->should

  :TABSTOP,          0x00010000, # is a control that can receive the keyboard focus when the user presses the TAB
  # key. Pressing the TAB key changes the keyboard focus to the next control with the WS_TABSTOP style. You can turn
  # this style on and off to change dialog box navigation. To change this style after a window has been created, use
  # the SetWindowLong function. For user-created windows and modeless dialogs to work with tab stops, alter the
  # message loop to call the IsDialogMessage function.

  :THICKFRAME,       0x00040000, # has a sizing border. Same as the :SIZEBOX style.

  :TILED,            0x00000000, # is an overlapped window. An overlapped window has a title bar and a border. Same
  # as the :OVERLAPPED style.

  :TILEDWINDOW,      0x00CF0000, # is an overlapped window. Same as the :OVERLAPPEDWINDOW style.

  :VISIBLE,          0x10000000, # is initially visible. This style can be turned on and off by using the ShowWindow
  # or SetWindowPos function.

  :VSCROLL,          0x00200000  # has a vertical scroll bar.
]
SystemMenuComand =
enum :system_menu_command,
[
    :SIZE,         0xF000,
    :MOVE,         0xF010,
    :MINIMIZE,     0xF020,
    :MAXIMIZE,     0xF030,
    :NEXTWINDOW,   0xF040,
    :PREVWINDOW,   0xF050,
    :CLOSE,        0xF060,
    :VSCROLL,      0xF070,
    :HSCROLL,      0xF080,
    :MOUSEMENU,    0xF090,
    :KEYMENU,      0xF100,
    :ARRANGE,      0xF110,
    :RESTORE,      0xF120,
    :TASKLIST,     0xF130,
    :SCREENSAVE,   0xF140,
    :HOTKEY,       0xF150,
    :DEFAULT,      0xF160,
    :MONITORPOWER, 0xF170,
    :CONTEXTHELP,  0xF180,
    :SEPARATOR,    0xF00F,
]
AnimateWindowFlags =
enum :animate_window, [
    :HOR_POSITIVE, 0x00000001, # Animates the window from left to right. This flag can be used with roll or slide
    # animation. It is ignored when used with AW_CENTER or AW_BLEND.

    :HOR_NEGATIVE, 0x00000002, # Animates the window from right to left. This flag can be used with roll or slide
    # animation. It is ignored when used with AW_CENTER or AW_BLEND.

    :SLIDE, 0x00040000, # Uses slide animation. By default, roll animation is used. This flag is ignored when used
    # with AW_CENTER.

    :VER_POSITIVE, 0x00000004, # Animates the window from top to bottom. This flag can be used with roll or slide
    # animation. It is ignored when used with AW_CENTER or AW_BLEND.

    :VER_NEGATIVE, 0x00000008, # Animates the window from bottom to top. This flag can be used with roll or slide
    # animation. It is ignored when used with AW_CENTER or AW_BLEND.

    :CENTER, 0x00000010, # Makes the window appear to collapse inward if AW_HIDE is used or expand outward if the
    # AW_HIDE is not used. The various direction flags have no effect.

    :HIDE,     0x00010000, # Hides the window. By default, the window is shown.

    :ACTIVATE, 0x00020000, # Activates the window. Do not use this value with AW_HIDE.

    :BLEND,    0x00080000, # Uses a fade effect. This flag can be used only if hwnd is a top-level window.
]
GetClassLongFlags =

User32::ClassLong Class Field Offsets

enum :get_class_long_flags,
[
  :MENUNAME,       -8, #Replaces the address of the menu name string. The string identifies the menu resource
  # associated with the class.

  :HBRBACKGROUND, -10, #Replaces a handle to the background brush associated with the class.

  :HCURSOR,       -12, #Replaces a handle to the cursor associated with the class.

  :HICON,         -14, #Replaces a handle to the icon associated with the class.

  :HMODULE,       -16, #Replaces a handle to the module that registered the class.

  :CBWNDEXTRA,    -18, #Sets the size, in bytes, of the extra window memory associated with each window in the
  # class. Setting this value does not change the number of extra bytes already allocated. For information on
  # how to access this memory, see SetWindowLong.

  :CBCLSEXTRA,    -20, #Sets the size, in bytes, of the extra memory associated with the class. Setting this
  # value does not change  the number of extra bytes already allocated.

  :WNDPROC,       -24, #Replaces the address of the window procedure associated with the class.

  :STYLE,         -26, #Replaces the window-class style bits.

  :HICONSM,       -34, #Replace a handle to the small icon associated with the class.
]
SetWindowPosFlags =
enum :set_windows_pos_flags, [
    :NOSIZE, 0x0001, # Retains the current size (ignores the cx and cy parameters).

    :NOMOVE, 0x0002, # Retains the current position (ignores X and Y parameters).

    :NOZORDER, 0x0004, # Retains the current Z order (ignores the hWndInsertAfter parameter).

    :NOREDRAW, 0x0008, # Does not redraw changes. If this flag is set, no repainting of any kind occurs. This
    # applies to the client area, the nonclient area (including the title bar and scroll bars), and any part of the
    # parent window uncovered as a result of the window being moved. When this flag is set, the application must
    # explicitly invalidate or redraw any parts of the window and parent window that need redrawing.

    :NOACTIVATE, 0x0010, # Does not activate the window. If this flag is not set, the window is activated and moved
    # to the top of either the topmost or non-topmost group (depending on the setting of the hWndInsertAfter
    # parameter).

    :DRAWFRAME, 0x0020, # Draws a frame (defined in the window's class description) around the window.

    :FRAMECHANGED, 0x0020, # Applies new frame styles set using the SetWindowLong function. Sends a WM_NCCALCSIZE
    # message to the window, even if the window's size is not being changed. If this flag is not specified,
    # WM_NCCALCSIZE is sent only when the window's size is being changed.

    :SHOWWINDOW, 0x0040, # Displays the window.

    :HIDEWINDOW, 0x0080, # Hides the window.

    :NOCOPYBITS, 0x0100, # Discards the entire contents of the client area. If this flag is not specified, the valid
    # contents of the client area are saved and copied back into the client area after the window is sized or
    # repositioned.

    :NOOWNERZORDER, 0x0200, # Does not change the owner window's position in the Z order.

    :NOREPOSITION, 0x0200, # Same as the :NOOWNERZORDER flag.

    :NOSENDCHANGING, 0x0400, # Prevents the window from receiving the WM_WINDOWPOSCHANGING message.

    :DEFERERASE, 0x2000, # Prevents generation of the WM_SYNCPAINT message.

    :ASYNCWINDOWPOS, 0x4000, # If the calling thread and the thread that owns the window are attached to different
                             # input queues, the system posts the request to the thread that owns the window. This prevents the calling
                             # thread from blocking its execution while other threads process the request.
]
SystemMetricsFlags =
enum :system_metrics,
[
  :ARRANGE, 56, # The flags that specify how the system arranged
  # minimized windows For more information, see the Remarks section in this topic.
  :CLEANBOOT, 67,
  # The value that specifies how the system is started:
  # 0 Normal boot
  # 1 Fail-safe boot
  # 2 Fail-safe with network boot
  # A fail-safe boot (also called SafeBoot, Safe Mode, or Clean Boot)
  # bypasses the user startup files.
  :CMONITORS, 80, # The number of display monitors on a desktop. For
  # more information, see the Remarks section in this topic.
  :CMOUSEBUTTONS, 43, # The number of buttons on a mouse, or zero if no
  # mouse is installed.
  :CONVERTIBLESLATEMODE, 0x2003, # Reflects the state of the laptop or
  # slate mode, 0 for Slate Mode and non-zero otherwise. When this
  # system metric changes, the system sends a broadcast message via
  # WM_SETTINGCHANGE with "ConvertibleSlateMode" in the LPARAM.
  :CXBORDER, 5, # The width of a window border, in pixels. This is
  # equivalent to  the :CXEDGE value for windows with the 3-D look.
  :CXCURSOR, 13, # The width of a cursor, in pixels. The system cannot
  # create cursors of other sizes.
  :CXDLGFRAME, 7, # This value is the same as :CXFIXEDFRAME.
  :CXDOUBLECLK, 36, # The width of the rectangle around the location of
  # a first  click in a double-click sequence, in pixels. The second
  # click must occur within the rectangle that is defined by
  # :CXDOUBLECLK and :CYDOUBLECLK for the system to consider the two
  # clicks a double-click. The two clicks must also occur within a
  # specified time. To set the width of the double-click rectangle, call
  # SystemParametersInfo with SPI_SETDOUBLECLKWIDTH.
  :CXDRAG, 68, # The number of pixels on either side of a mouse-down
  # point that the mouse pointer can move before a drag operation begins
  # This allows the user to click and release the mouse button easily
  # without unintentionally starting a drag operation. If this value is
  # negative, it is subtracted from the left of the mouse-down point and
  # added to the right of it.
  :CXEDGE, 45, # The width of a 3-D border, in pixels. This metric is
  # the 3-D counterpart of :CXBORDER.
  :CXFIXEDFRAME, 7, # The thickness of the frame around the perimeter of
  # a window that has a caption but is not sizable, in pixels.
  # :CXFIXEDFRAME is the height of the horizontal border, and
  # :CYFIXEDFRAME is the width of the vertical border. This value is the
  # same as :CXDLGFRAME.
  :CXFOCUSBORDER, 83, # The width of the left and right edges of the
  # focus rectangle that the DrawFocusRect draws. This value is in pixels.
  # Windows 2000:  This value is not supported.
  :CXFRAME, 32, # This value is the same as :CXSIZEFRAME.
  :CXFULLSCREEN, 16, # The width of the client area for a full-screen
  # window on the primary display monitor, in pixels. To get the
  # coordinates of the portion of the screen that is not obscured by the
  # system taskbar or by application desktop toolbars, call the
  # SystemParametersInfo function with the SPI_GETWORKAREA value.
  :CXHSCROLL, 21, # The width of the arrow bitmap on a horizontal scroll
  # bar, in pixels.
  :CXHTHUMB, 10, # The width of the thumb box in a horizontal scroll bar,
  # in pixels.
  :CXICON, 11, # The default width of an icon, in pixels. The LoadIcon
  # function can load only icons with the dimensions that :CXICON and
  # :CYICON specifies.
  :CXICONSPACING, 38, # The width of a grid cell for items in large icon
  # view, in pixels. Each item fits into a rectangle of size
  # :CXICONSPACING by :CYICONSPACING when arranged. This value is always
  # greater than or equal to :CXICON.
  :CXMAXIMIZED, 61, # The default width, in pixels, of a maximized
  # top-level window, on the primary display monitor.
  :CXMAXTRACK, 59, # The default maximum width of a window that has a
  # caption and  sizing borders, in pixels. This metric refers to the
  # entire desktop. The user cannot drag the window frame to a size
  # larger than these dimensions. A window can override this value by
  # processing the WM_GETMINMAXINFO message.
  :CXMENUCHECK, 71, # The width of the default menu check-mark bitmap,
  # in pixels.
  :CXMENUSIZE, 54, # The width of menu bar buttons, such as the child
  # window close button that is used in the multiple document interface,
  # in pixels.
  :CXMIN, 28, # The minimum width of a window, in pixels.
  :CXMINIMIZED, 57, # The width of a minimized window, in pixels.
  :CXMINSPACING, 47, # The width of a grid cell for a minimized window,
  # in pixels. Each minimized window fits into a rectangle this size
  # when arranged. This # value is always greater than or equal to
  # :CXMINIMIZED.
  :CXMINTRACK, 34, # The minimum tracking width of a window, in pixels.
  # The user cannot drag the window frame to a size smaller than these
  # dimensions. A window  can override this value by processing the
  # WM_GETMINMAXINFO message.
  :CXPADDEDBORDER, 92, # The amount of border padding for captioned
  # windows, in pixels.
  # Windows XP/2000:  This value is not supported.
  :CXSCREEN, 0, # The width of the screen of the primary display monitor,
  # in pixels. This is the same value obtained by calling GetDeviceCaps
  # as follows: GetDeviceCaps( hdcPrimaryMonitor, HORZRES).
  :CXSIZE, 30, # The width of a button in a window caption or title bar,
  # in pixels
  :CXSIZEFRAME, 32, # The thickness of the sizing border around the
  # perimeter of a  window that can be resized, in pixels. :CXSIZEFRAME
  # is the width of the horizontal border, and :CYSIZEFRAME is the
  # height of the vertical border. This value is the same as :CXFRAME.
  :CXSMICON, 49, # The recommended width of a small icon, in pixels.
  # Small icons typically appear in window captions and in small icon view.
  :CXSMSIZE, 52, # The width of small caption buttons, in pixels.
  :CXVIRTUALSCREEN, 78, # The width of the virtual screen, in pixels.
  # The virtual screen is the bounding rectangle of all display monitors
  # The :XVIRTUALSCREEN metric is the coordinates for the left side of
  # the virtual screen.
  :CXVSCROLL, 2, # The width of a vertical scroll bar, in pixels.
  :CYBORDER, 6, #The height of a window border, in pixels. This is
  # equivalent to the :CYEDGE value for windows with the 3-D look.
  :CYCAPTION, 4, # The height of a caption area, in pixels.
  :CYCURSOR, 14, # The height of a cursor, in pixels. The system cannot
  # create cursors of other sizes.
  :CYDLGFRAME, 8, # This value is the same as :CYFIXEDFRAME.
  :CYDOUBLECLK, 37, # The height of the rectangle around the location of
  # a first click in a double-click sequence, in pixels. The second click
  # must occur within the rectangle defined by :CXDOUBLECLK and
  # :CYDOUBLECLK for the system to consider the two clicks a
  # double-click. The two clicks must also occur  within a specified
  # time. To set the height of the double-click rectangle,
  # call SystemParametersInfo with SPI_SETDOUBLECLKHEIGHT.
  :CYDRAG, 69, # The number of pixels above and below a mouse-down point
  # that the mouse pointer can move before a drag operation begins. This
  # allows the user to click and release the mouse button easily without
  # unintentionally starting a drag operation. If this value is negative,
  # it is subtracted from above the mouse-down point and added below it.
  :CYEDGE, 46, # The height of a 3-D border, in pixels. This is the 3-D
  # counterpart of :CYBORDER.
  :CYFIXEDFRAME, 8, # The thickness of the frame around the perimeter of
  # a window that has a caption but is not sizable, in pixels.
  # :CXFIXEDFRAME is the height of the horizontal border, and
  # :CYFIXEDFRAME is the width of the vertical border. This value is the
  # same as :CYDLGFRAME.
  :CYFOCUSBORDER, 84, # The height of the top and bottom edges of the
  # focus rectangle drawn by DrawFocusRect. This value is in pixels.
  # Windows 2000:  This value is not supported.
  :CYFRAME, 33, # This value is the same as :CYSIZEFRAME.
  :CYFULLSCREEN, 17, # The height of the client area for a full-screen
  # window on the primary display monitor, in pixels. To get the
  # coordinates of the portion of the screen not obscured by the system
  # taskbar or by application desktop toolbars, call the
  # SystemParametersInfo function with the SPI_GETWORKAREA value.
  :CYHSCROLL, 3, # The height of a horizontal scroll bar, in pixels.
  :CYICON, 12, # The default height of an icon, in pixels. The LoadIcon
  # function can load only icons with the dimensions :CXICON and :CYICON
  :CYICONSPACING, 39, # The height of a grid cell for items in large
  # icon view, in pixels. Each item fits into a rectangle of size
  # :CXICONSPACING by :CYICONSPACING when arranged. This value is always
  # greater than or equal to :CYICON.
  :CYKANJIWINDOW, 18, # For double byte character set versions of the
  # system, this is the height of the Kanji window at the bottom of the
  # screen, in pixels.
  :CYMAXIMIZED, 62, # The default height, in pixels, of a maximized
  # top-level window on the primary display monitor.
  :CYMAXTRACK, 60, # The default maximum height of a window that has a
  # caption and sizing borders, in pixels. This metric refers to the
  # entire desktop. The user cannot drag the window frame to a size
  # larger than these dimensions. A window can override this value by
  # processing the WM_GETMINMAXINFO message.
  :CYMENU, 15, # The height of a single-line menu bar, in pixels.
  :CYMENUCHECK, 72, # The height of the default menu check-mark bitmap,
  # in pixels.
  :CYMENUSIZE, 55, # The height of menu bar buttons, such as the child
  # window close button that is used in the multiple document interface,
  # in pixels.
  :CYMIN, 29, # The minimum height of a window, in pixels.
  :CYMINIMIZED, 58, # The height of a minimized window, in pixels.
  :CYMINSPACING, 48, # The height of a grid cell for a minimized window,
  # in pixels.Each minimized window fits into a rectangle this size
  # when arranged. This value is always greater than or equal to
  # :CYMINIMIZED.
  :CYMINTRACK, 35, # The minimum tracking height of a window, in pixels.
  # The user cannot drag the window frame to a size smaller than these
  # dimensions. A window can override this value by processing the
  # WM_GETMINMAXINFO message.
  :CYSCREEN, 1, # The height of the screen of the primary display
  # monitor, in pixels. This is the same value obtained by calling
  # GetDeviceCaps as follows: GetDeviceCaps( hdcPrimaryMonitor, VERTRES)
  :CYSIZE, 31, # The height of a button in a window caption or title
  # bar, in pixels.
  :CYSIZEFRAME, 33, # The thickness of the sizing border around the
  # perimeter of a window that can be resized, in pixels. :CXSIZEFRAME
  # is the width of the horizontal border, and :CYSIZEFRAME is the
  # height of the vertical border. This value is the same as :CYFRAME.
  :CYSMCAPTION, 51, # The height of a small caption, in pixels.
  :CYSMICON, 50, # The recommended height of a small icon, in pixels.
  # Small icons typically appear in window captions and in small icon view.
  :CYSMSIZE, 53, # The height of small caption buttons, in pixels.
  :CYVIRTUALSCREEN, 79, # The height of the virtual screen, in pixels.
  # The virtual screen is the bounding rectangle of all display monitors.
  # The :YVIRTUALSCREEN metric is the coordinates for the top of the virtual screen.
  :CYVSCROLL, 20, # The height of the arrow bitmap on a vertical scroll
  # bar, in pixels.
  :CYVTHUMB, 9, # The height of the thumb box in a vertical scroll bar,
  # in pixels.
  :DBCSENABLED, 42, # Nonzero if User32.dll supports DBCS; otherwise, 0.
  :DEBUG, 22, # Nonzero if the debug version of User.exe is installed;
  # otherwise, 0.
  :DIGITIZER, 94, # Nonzero if the current operating system is Windows 7
  # or Windows Server 2008 R2 and the Tablet PC Input service is started;
  # otherwise, 0. The return value is a bitmask that specifies the type
  # of digitizer input supported by the device. For more information,
  # see Remarks.
  # Windows Server 2008, Windows Vista, and Windows XP/2000:  This value
  # is not supported.
  :IMMENABLED, 82, # Nonzero if Input Method Manager/Input Method Editor
  # features are enabled; otherwise, 0. :IMMENABLED indicates whether
  # the system is ready to use a Unicode-based IME on a Unicode
  # application. To ensure that a language-dependent IME works, check
  # :DBCSENABLED and the system ANSI code page. Otherwise the
  # ANSI-to-Unicode conversion may not be performed correctly, or some
  # components like fonts or registry settings may not be present.
  :MAXIMUMTOUCHES, 95, # Nonzero if there are digitizers in the system;
  # otherwise, 0. :MAXIMUMTOUCHES returns the aggregate maximum of the
  # maximum number of contacts supported by every digitizer in the
  # system. If the system has only single-touch digitizers, the return
  # value is 1. If the system has multi-touch digitizers, the return
  # value is the number of simultaneous contacts the hardware can provide.
  # Windows Server 2008, Windows Vista, and Windows XP/2000:  This value
  # is not supported.
  :MEDIACENTER, 87, # Nonzero if the current operating system is the
  # Windows XP, Media Center Edition, 0 if not.
  :MENUDROPALIGNMENT, 40, # Nonzero if drop-down menus are right-aligned
  # with the corresponding menu-bar item; 0 if the menus are left-aligned.
  :MIDEASTENABLED, 74, # Nonzero if the system is enabled for Hebrew and
  # Arabic languages, 0 if not.
  :MOUSEPRESENT, 19, # Nonzero if a mouse is installed; otherwise, 0.
  # This value is rarely zero, because of support for virtual mice and
  # because some systems detect the presence of the port instead of the
  # presence of a mouse.
  :MOUSEHORIZONTALWHEELPRESENT, 91, # Nonzero if a mouse with a
  # horizontal scroll wheel is installed; otherwise 0.
  :MOUSEWHEELPRESENT, 75, # Nonzero if a mouse with a vertical scroll
  # wheel is installed; otherwise 0.
  :NETWORK, 63, # The least significant bit is set if a network is
  # present; otherwise, it is cleared. The other bits are reserved for
  # future use.
  :PENWINDOWS, 41, # Nonzero if the Microsoft Windows for Pen computing
  # extensions are installed; zero otherwise.
  :REMOTECONTROL, 0x2001, # This system metric is used in a Terminal
  # Services environment to determine if the current Terminal Server
  # session is being remotely controlled. Its value is nonzero if the
  # current session is remotely controlled; otherwise, 0.
  # You can use terminal services management tools such as Terminal
  # Services Manager (tsadmin.msc) and shadow.exe to control a remote
  # session. When a session is being remotely controlled, another user
  # can view the contents of that session and potentially interact with
  # it.
  :REMOTESESSION, 0x1000, # This system metric is used in a Terminal
  # Services environment. If the calling process is associated with a
  # Terminal Services client session, the return value is nonzero. If
  # the calling process is associated with the Terminal Services console
  # session, the return value is 0.
  # Windows Server 2003 and Windows XP:  The console session is not
  # necessarily the physical console. For more information, see
  # WTSGetActiveConsoleSessionId.
  :SAMEDISPLAYFORMAT, 81, # Nonzero if all the display monitors have the
  # same color format, otherwise, 0. Two displays can have the same bit
  # depth, but different color formats. For example, the red, green, and
  # blue pixels can be encoded with different numbers of bits, or those
  # bits can be located in different places in a pixel color value.
  :SECURE, 44, # This system metric should be ignored; it always returns
  # 0.
  :SERVERR2, 89, # The build number if the system is Windows Server 2003
  # R2; otherwise, 0.
  :SHOWSOUNDS, 70, # Nonzero if the user requires an application to
  # present information visually in situations where it would otherwise
  # present the information only in audible form; otherwise, 0.
  :SHUTTINGDOWN, 0x2000, # Nonzero if the current session is shutting
  # down; otherwise, 0. Windows 2000:  This value is not supported.
  :SLOWMACHINE, 73, # Nonzero if the computer has a low-end (slow)
  # processor; otherwise, 0.
  :STARTER, 88, # Nonzero if the current operating system is Windows 7
  # Starter Edition, Windows Vista Starter, or Windows XP Starter
  # Edition; otherwise, 0.
  :SWAPBUTTON, 23, # Nonzero if the meanings of the left and right mouse
  # buttons are swapped; otherwise, 0.
  :SYSTEMDOCKED, 0x2004, # Reflects the state of the docking mode, 0 for
  # Undocked Mode and non-zero otherwise. When this system metric
  # changes, the system sends a broadcast message via WM_SETTINGCHANGE
  # with "SystemDockMode" in the LPARAM.
  :TABLETPC, 86, # Nonzero if the current operating system is the
  # Windows XP Tablet PC edition or if the current operating system is
  # Windows Vista or Windows 7 and the Tablet PC Input service is
  # started; otherwise, 0. The :DIGITIZER setting indicates the type of
  # digitizer input supported by a device running Windows 7 or Windows
  # Server 2008 R2. For more information, see Remarks.
  :XVIRTUALSCREEN, 76, # The coordinates for the left side of the
  # virtual screen. The virtual screen is the bounding rectangle of all
  # display monitors. The :CXVIRTUALSCREEN metric is the width of the
  # virtual screen.
  :YVIRTUALSCREEN, 77, # The coordinates for the top of the virtual
  # screen. The virtual screen is the bounding rectangle of all display
  # monitors. The :CYVIRTUALSCREEN metric is the height of the virtual
  # screen.
]
GetWindowLongFlags =
enum :get_window_long_flags,
[
    :WNDPROC,    -4, # Retrieves the address of the window procedure, or a handle representing the address of the window procedure. You must use the CallWindowProc function to call the window procedure.
    :HINSTANCE,  -6, # Retrieves a handle to the application instance.
    :HWNDPARENT, -8, # Retrieves a handle to the parent window, if any.
    :ID,        -12, # Retrieves the identifier of the window.
    :STYLE,     -16, # Retrieves the window styles.
    :EXSTYLE,   -20, # Retrieves the extended window styles.
    :USERDATA,  -21, # Retrieves the user data associated with the window. This data is intended for use by the application that created the window. Its value is initially zero.
]
ComboBoxStyle =
enum :combo_box_style,
[
    :SIMPLE,            0x0001,
    :DROPDOWN,          0x0002,
    :DROPDOWNLIST,      0x0003,
    :OWNERDRAWFIXED,    0x0010,
    :OWNERDRAWVARIABLE, 0x0020,
    :AUTOHSCROLL,       0x0040,
    :OEMCONVERT,        0x0080,
    :SORT,              0x0100,
    :HASSTRINGS,        0x0200,
    :NOINTEGRALHEIGHT,  0x0400,
    :DISABLENOSCROLL,   0x0800,
    :UPPERCASE,         0x2000,
    :LOWERCASE,         0x4000,
]
WindowStyleEx =
enum :window_style_ex,
[
    :ACCEPTFILES,      0x00000010, # accepts drag-drop files.

    :APPWINDOW,        0x00040000, # Forces a top-level window onto the taskbar when the window is visible.

    :CLIENTEDGE,       0x00000200, # has a border with a sunken edge.

    :COMPOSITED,       0x02000000, # Paints all descendants of a window in bottom-to-top painting order using
    # double-buffering. For more information, see Remarks. This cannot be used if the window has a class style of
    # either :OWNDC or :CLASSDC.

    :CONTEXTHELP,      0x00000400, # The title bar of the window includes a question mark. When the user clicks the
    # question mark, the cursor changes to a question mark with a pointer. If the user then clicks a child window, the
    # child receives a WM_HELP message. The child window should pass the message to the parent window procedure, which
    # should call the WinHelp function using the HELP_WM_HELP command. The Help application displays a pop-up window
    # that typically contains help for the child window.
    #WS_EX_CONTEXTHELP cannot be used with the :MAXIMIZEBOX or :MINIMIZEBOX styles.

    :CONTROLPARENT,    0x00010000, # contains child windows that should take part in dialog box navigation. If this
    # style is specified, the dialog manager recurses into children of this window when performing navigation
    # operations such as handling the TAB key, an arrow key, or a keyboard mnemonic.

    :DLGMODALFRAME,    0x00000001, # has a double border; the window can, optionally, be created with a title bar by
    # specifying the WS_CAPTION style in the dwStyle parameter.

    :LAYERED,          0x00080000, # is a layered window. This style cannot be used if the window has a class style of
    # either CS_OWNDC or CS_CLASSDC.

    :LAYOUTRTL,        0x00400000, # If the shell language is Hebrew, Arabic, or another language that supports
    # reading order alignment, the horizontal origin of the window is on the right edge. Increasing horizontal values
    # advance to the left.

    :LEFT,             0x00000000, #has generic left-aligned properties. This is the default.

    :LEFTSCROLLBAR,    0x00004000, #If the shell language is Hebrew, Arabic, or another language that supports reading
    # order alignment, the vertical scroll bar (if present) is to the left of the client area. For other languages,
    # the style is ignored.

    :LTRREADING,       0x00000000, #text is displayed using left-to-right reading-order properties. This is the
    # default.

    :MDICHILD,         0x00000040, #is a MDI child window.

    :NOACTIVATE,       0x08000000, #A top-level window created with this style does not become the foreground window
    # when the user clicks it. The system does not bring this window to the foreground when the user minimizes or
    # closes the foreground window. To activate the window, use the SetActiveWindow or SetForegroundWindow function.
    # The window does not appear on the taskbar by default. To force the window to appear on the taskbar, use the
    # WS_EX_APPWINDOW style.

    :NOINHERITLAYOUT,  0x00100000, # does not pass its window layout to its child windows.

    :NOPARENTNOTIFY,   0x00000004, # The child window created with this style does not send the WM_PARENTNOTIFY message
    # to its parent window when it is created or destroyed.

    :OVERLAPPEDWINDOW, 0x00000300, # is an overlapped window.

    :PALETTEWINDOW,    0x00000188, # is palette window, which is a modeless dialog box that presents an array of
    # commands.

    :RIGHT,            0x00001000, # has generic "right-aligned" properties. This depends on the window class.
    # This style has an effect only if the shell language is Hebrew, Arabic, or another language that supports
    # reading-order alignment; otherwise, the style is ignored. Using the WS_EX_RIGHT style for static or edit
    # controls has the same effect as using the SS_RIGHT or ES_RIGHT style, respectively. Using this style with
    # button controls has the same effect as using BS_RIGHT and BS_RIGHTBUTTON styles.

    :RIGHTSCROLLBAR,   0x00000000, # The vertical scroll bar (if present) is to the right of the client area. This is
    # the default.

    :RTLREADING,       0x00002000, # If the shell language is Hebrew, Arabic, or another language that supports
    # reading-order alignment, the window text is displayed using right-to-left reading-order properties. For other
    # languages, the style is ignored.

    :STATICEDGE,       0x00020000, # has a three-dimensional border style intended to be used for items that do not
    # accept user input.

    :TOOLWINDOW,       0x00000080, # is intended to be used as a floating toolbar. A tool window has a title bar that
    # is shorter than a normal title bar, and the window title is drawn using a smaller font. A tool window does not
    # appear in the taskbar or in the dialog that appears when the user presses ALT+TAB. If a tool window has a system
    # menu, its icon is not displayed on the title bar. However, you can display the system menu by right-clicking or
    # by typing ALT+SPACE.

    :TOPMOST,          0x00000008, # should be placed above all non-topmost windows and should stay above them, even
    # when the window is deactivated. To add or remove this style, use the SetWindowPos function.

    :TRANSPARENT,      0x00000020, # should not be painted until siblings beneath the window (that were created by the
    # same thread) have been painted. The window appears transparent because the bits of underlying sibling windows
    # have already been painted.
    #To achieve transparency without these restrictions, use the SetWindowRgn function.

    :WINDOWEDGE,       0x00000100  #has a border with a raised edge.
]
UserObjectInformationFlags =
enum :user_object_information_flags, [
    :FLAGS, 1, # The handle flags. The pvInfo parameter must point to a USEROBJECTFLAGS structure.
    :NAME, 2, # The name of the object, as a string.
    :TYPE, 3, # The type name of the object, as a string.
    :USER_SID, 4, # The SID structure that identifies the user that is currently associated with the specified
    # object. If no user is associated with the object, the value returned in the buffer pointed to by
    # lpnLengthNeeded is zero. Note that SID is a variable length structure. You will usually make a call to
    # GetUserObjectInformation to determine the length of the SID before retrieving its value.

    :HEAPSIZE, 5, # The size of the desktop heap, in KB, as a ULONG value. The hObj parameter must be a handle to a
    # desktop object, otherwise, the function fails.
    # Windows Server 2003 and Windows XP/2000:  This value is not supported.

    :IO, 6, # TRUE if the hObj parameter is a handle to the desktop object that is receiving input from the user.
    # FALSE otherwise. Windows Server 2003 and Windows XP/2000:  This value is not supported.
]
BroadcastSystemFlags =
enum :broadcast_system_flags,
[
  :QUERY,              0x00000001,
  :IGNORECURRENTTASK,  0x00000002,
  :FLUSHDISK,          0x00000004,
  :NOHANG,             0x00000008,
  :POSTMESSAGE,        0x00000010,
  :NOTIMEOUTIFNOTHUNG, 0x00000040,
  :FORCEIFHUNG,        0x00000020,
  :ALLOWSFW,           0x00000080,
  :SENDNOTIFYMESSAGE,  0x00000100,
  :RETURNHDESK,        0x00000200,
  :LUID,               0x00000400
]
TrackPopupMenuFlags =
enum :track_popup_menu_flags,
[
    # Use one of the following flags to specify how the function positions the pop-up window horizontally.
    :CENTERALIGN, 0x0004, # Centers pop-up window horizontally relative to the coordinate specified by the
    # anchorPoint->x parameter.
    :LEFTALIGN, 0x0000, # Positions the pop-up window so that its left edge is aligned with the coordinate specified
    # by the anchorPoint->x parameter.
    :RIGHTALIGN, 0x0008, # Positions the pop-up window so that its right edge is aligned with the coordinate
    # specified by the anchorPoint->x parameter.


    # Use one of the following flags to specify how the function positions the pop-up window vertically.
    :BOTTOMALIGN, 0x0020, # Positions the pop-up window so that its bottom edge is aligned with the coordinate specified
    # by the anchorPoint->y parameter.

    :TOPALIGN, 0x0000, #Positions the pop-up window so that its left edge is aligned with the coordinate specified by the
    # anchorPoint->y parameter.

    :VCENTERALIGN, 0x0010, #Centers the pop-up window vertically relative to the coordinate specified by the
    # anchorPoint->y parameter.


    # Use the following flags to control discovery of the user selection without having to set up a parent window for the menu.
    :NONOTIFY, 0x0080, # The function does not send notification messages when the user clicks a menu item.

    :RETURNCMD, 0x0100, # The function returns the menu item identifier of the user's selection in the return value.


    # Use one of the following flags to specify which mouse button the shortcut menu tracks.
    :LEFTBUTTON, 0x0000, # The user can select menu items with only the left mouse button.

    :RIGHTBUTTON, 0x0002, # The user can select menu items with both the left and right mouse buttons.


    # Use any reasonable combination of the following flags to modify the animation of a menu. For example, by
    # selecting a horizontal and a vertical flag, you can achieve diagonal animation.
    :HORPOSANIMATION, 0x0400, # Animates the menu from left to right.
    :HORNEGANIMATION, 0x0800, # Animates the menu from right to left.
    :VERPOSANIMATION, 0x1000, # Animates the menu from top to bottom.
    :VERNEGANIMATION, 0x2000, # Animates the menu from bottom to top.
    :NOANIMATION,     0x4000, # Displays menu without animation.

    # For any animation to occur, the SystemParametersInfo function must set SPI_SETMENUANIMATION. Also, all
    # the :*ANIMATION flags, except :NOANIMATION, are ignored if menu fade animation is on. For more information,
    # see the SPI_GETMENUFADE flag in SystemParametersInfo.
    # Use the :RECURSE flag to display a menu when another menu is already displayed. This is intended to support
    # context menus within a menu.


    #Use one of the following flags to specify whether to accommodate horizontal or vertical alignment.
    :HORIZONTAL, 0x0000, # If the menu cannot be shown at the specified location without overlapping the excluded
    # rectangle, the system tries to accommodate the requested horizontal alignment before the requested vertical
    # alignment.

    :VERTICAL, 0x0040, # If the menu cannot be shown at the specified location without overlapping the excluded
    # rectangle, the system tries to accommodate the requested vertical alignment before the requested horizontal
    # alignment.


    # The following flag is available starting with Windows 7.
    :WORKAREA, 0x10000, # Restricts the pop-up window to within the work area. If this flag is not set, the pop-up
    # window is restricted to the work area only if the input point is within the work area. For more information,
    # see the rcWork and rcMonitor members of the MONITORINFO structure.
]
DrawFrameControlStateFlags =
enum :draw_frame_control_state_flags,
[
  :CAPTIONCLOSE,   0x0000,
  :CAPTIONMIN,     0x0001,
  :CAPTIONMAX,     0x0002,
  :CAPTIONRESTORE, 0x0003,
  :CAPTIONHELP,    0x0004,

  :MENUARROW,           0x0000,
  :MENUCHECK,           0x0001,
  :MENUBULLET,          0x0002,
  :MENUARROWRIGHT,      0x0004,
  :SCROLLUP,            0x0000,
  :SCROLLDOWN,          0x0001,
  :SCROLLLEFT,          0x0002,
  :SCROLLRIGHT,         0x0003,
  :SCROLLCOMBOBOX,      0x0005,
  :SCROLLSIZEGRIP,      0x0008,
  :SCROLLSIZEGRIPRIGHT, 0x0010,

  :BUTTONCHECK,      0x0000,
  :BUTTONRADIOIMAGE, 0x0001,
  :BUTTONRADIOMASK,  0x0002,
  :BUTTONRADIO,      0x0004,
  :BUTTON3STATE,     0x0008,
  :BUTTONPUSH,       0x0010,

  :INACTIVE, 0x0100,
  :PUSHED,   0x0200,
  :CHECKED,  0x0400,

  :TRANSPARENT, 0x0800,
  :HOT,         0x1000,

  :ADJUSTRECT, 0x2000,
  :FLAT,       0x4000,
  :MONO,       0x8000,
]
LayeredWindowAttributesFlags =
enum :layered_window_attributes_flags,
[
  :COLORKEY, 0x00000001, #Use crKey as the transparency color.
  :ALPHA, 0x00000002, # Use bAlpha to determine the opacity of the layered window.
  :OPAQUE, 0x00000004, # Draw an opaque layered window.
]
WindowClassStyle =
enum :window_class_style,
[
    :VREDRAW,  0x0001, #Redraws the entire window if a movement or size adjustment changes the height of the client area.

    :HREDRAW,  0x0002, # Redraws the entire window if a movement or size adjustment changes the width of the client area.

    :DBLCLKS,  0x0008, # Sends a double-click message to the window procedure when the user double-clicks the mouse
    # while the cursor is within a window belonging to the class.

    :OWNDC,    0x0020, # Allocates a unique device context for each window in the class.

    :CLASSDC,  0x0040, # Allocates one device context to be shared by all windows in the class. Because window
    # classes are process specific, it is possible for multiple threads of an application to create a window of the
    # same class. It is also possible for the threads to attempt to use the device context simultaneously. When this
    # happens, the system allows only one thread to successfully finish its drawing operation.

    :PARENTDC, 0x0080, # Sets the clipping rectangle of the child window to that of the parent window so that the
    # child can draw on the parent. A window with the :PARENTDC style bit receives a regular device context from
    # the system's cache of device contexts. It does not give the child the parent's device context or device
    # context settings. Specifying CS_PARENTDC enhances an application's performance.

    :NOCLOSE,  0x0200, # Disables Close on the window menu.

    :SAVEBITS, 0x0800, # Saves, as a bitmap, the portion of the screen image obscured by a window of this class.
    # When the window is removed, the system uses the saved bitmap to restore the screen image, including other
    # windows that were obscured. Therefore, the system does not send WM_PAINT messages to windows that were
    # obscured if the memory used by the bitmap has not been discarded and if other screen actions have not
    # invalidated the stored image. This style is useful for small windows (for example, menus or dialog boxes) that
    # are displayed briefly and then removed before other screen activity takes place. This style increases the time
    # required to display the window, because the system must first allocate memory to store the bitmap.

    :BYTEALIGNCLIENT, 0x1000, # Aligns the window's client area on a byte boundary (in the x direction). This style
    # affects the width of the window and its horizontal placement on the display.

    :BYTEALIGNWINDOW, 0x2000, # Aligns the window on a byte boundary (in the x direction). This style affects the
    # width of the window and its horizontal placement on the display.

    :GLOBALCLASS, 0x4000, # Indicates that the window class is an application global class. For more information,
    # see the "Application Global Classes" section of About Window Classes.

    :DROPSHADOW, 0x00020000, #Enables the drop shadow effect on a window. The effect is turned on and off through
                             # SPI_SETDROPSHADOW. Typically, this is enabled for small, short-lived windows such as menus to emphasize their
                             # Z order relationship to other windows.
]
ButtonControlStyle =
enum :button_control_style,
[
  :PUSHBUTTON,       0x00000000,
  :DEFPUSHBUTTON,    0x00000001,
  :CHECKBOX,         0x00000002,
  :AUTOCHECKBOX,     0x00000003,
  :RADIOBUTTON,      0x00000004,
  :N3STATE,          0x00000005,
  :AUTO3STATE,       0x00000006,
  :GROUPBOX,         0x00000007,
  :USERBUTTON,       0x00000008,
  :AUTORADIOBUTTON,  0x00000009,
  :PUSHBOX,          0x0000000A,
  :OWNERDRAW,        0x0000000B,
  :TYPEMASK,         0x0000000F,
  :LEFTTEXT,         0x00000020,
  :TEXT,             0x00000000,
  :ICON,             0x00000040,
  :BITMAP,           0x00000080,
  :LEFT,             0x00000100,
  :RIGHT,            0x00000200,
  :CENTER,           0x00000300,
  :TOP,              0x00000400,
  :BOTTOM,           0x00000800,
  :VCENTER,          0x00000C00,
  :PUSHLIKE,         0x00001000,
  :MULTILINE,        0x00002000,
  :NOTIFY,           0x00004000,
  :FLAT,             0x00008000,
  :RIGHTBUTTON,      0x00000020
]
SystemParametersInfoFlags =
enum :system_parameters_info_flags,
[
  :GETACCESSTIMEOUT,            0x003C,
  :GETAUDIODESCRIPTION,         0x0074,
  :GETCLIENTAREAANIMATION,      0x1042,
  :GETDISABLEOVERLAPPEDCONTENT, 0x1040,
  :GETFILTERKEYS,               0x0032,
  :GETFOCUSBORDERHEIGHT,        0x2010,
  :GETFOCUSBORDERWIDTH,         0x200E,
  :GETHIGHCONTRAST,             0x0042,
  :GETLOGICALDPIOVERRIDE,       0x009E,
  :GETMESSAGEDURATION,          0x2016,
  :GETMOUSECLICKLOCK,           0x101E,
  :GETMOUSECLICKLOCKTIME,       0x2008,
  :GETMOUSEKEYS,                0x0036,
  :GETMOUSESONAR,               0x101C,
  :GETMOUSEVANISH,              0x1020,
  :GETSCREENREADER,             0x0046,
  :GETSERIALKEYS,               0x003E,
  :GETSHOWSOUNDS,               0x0038,
  :GETSOUNDSENTRY,              0x0040,
  :GETSTICKYKEYS,               0x003A,
  :GETTOGGLEKEYS,               0x0034,
  :SETACCESSTIMEOUT,            0x003D,
  :SETAUDIODESCRIPTION,         0x0075,
  :SETCLIENTAREAANIMATION,      0x1043,
  :SETDISABLEOVERLAPPEDCONTENT, 0x1041,
  :SETFILTERKEYS,               0x0033,
  :SETFOCUSBORDERHEIGHT,        0x2011,
  :SETFOCUSBORDERWIDTH,         0x200F,
  :SETHIGHCONTRAST,             0x0043,
  :SETLOGICALDPIOVERRIDE,       0x009F, # Do not use.
  :SETMESSAGEDURATION,          0x2017,
  :SETMOUSECLICKLOCK,           0x101F,
  :SETMOUSECLICKLOCKTIME,       0x2009,
  :SETMOUSEKEYS,                0x0037,
  :SETMOUSESONAR,               0x101D,
  :SETMOUSEVANISH,              0x1021,
  :SETSCREENREADER,             0x0047,
  :SETSERIALKEYS,               0x003F,
  :SETSHOWSOUNDS,               0x0039,
  :SETSOUNDSENTRY,              0x0041,
  :SETSTICKYKEYS,               0x003B,
  :SETTOGGLEKEYS,               0x0035,

  # The following are the desktop parameters.
  :GETCLEARTYPE,                0x1048,
  :GETDESKWALLPAPER,            0x0073,
  :GETDROPSHADOW,               0x1024,
  :GETFLATMENU,                 0x1022,
  :GETFONTSMOOTHING,            0x004A,
  :GETFONTSMOOTHINGCONTRAST,    0x200C,
  :GETFONTSMOOTHINGORIENTATION, 0x2012,
  :GETFONTSMOOTHINGTYPE,        0x200A,
  :GETWORKAREA,                 0x0030,
  :SETCLEARTYPE,                0x1049,
  :SETCURSORS,                  0x0057,
  :SETDESKPATTERN,              0x0015,
  :SETDESKWALLPAPER,            0x0014,
  :SETDROPSHADOW,               0x1025,
  :SETFLATMENU,                 0x1023,
  :SETFONTSMOOTHING,            0x004B,
  :SETFONTSMOOTHINGCONTRAST,    0x200D,
  :SETFONTSMOOTHINGORIENTATION, 0x2013,
  :SETFONTSMOOTHINGTYPE,        0x200B,
  :SETWORKAREA,                 0x002F,

  # The following are the icon parameters.
  :GETICONMETRICS,              0x002D,
  :GETICONTITLELOGFONT,         0x001F,
  :GETICONTITLEWRAP,            0x0019,
  :ICONHORIZONTALSPACING,       0x000D,
  :ICONVERTICALSPACING,         0x0018,
  :SETICONMETRICS,              0x002E,
  :SETICONS,                    0x0058,
  :SETICONTITLELOGFONT,         0x0022,
  :SETICONTITLEWRAP,            0x001A,
  :GETBEEP,                     0x0001,
  :GETBLOCKSENDINPUTRESETS,     0x1026,
  :GETCONTACTVISUALIZATION,     0x2018,
  :GETDEFAULTINPUTLANG,         0x0059,
  :GETGESTUREVISUALIZATION,     0x201A,
  :GETKEYBOARDCUES,             0x100A,
  :GETKEYBOARDDELAY,            0x0016,
  :GETKEYBOARDPREF,             0x0044,
  :GETKEYBOARDSPEED,            0x000A,
  :GETMOUSE,                    0x0003,
  :GETMOUSEHOVERHEIGHT,         0x0064,
  :GETMOUSEHOVERTIME,           0x0066,
  :GETMOUSEHOVERWIDTH,          0x0062,
  :GETMOUSESPEED,               0x0070,
  :GETMOUSETRAILS,              0x005E,
  :GETSNAPTODEFBUTTON,          0x005F,
  :GETSYSTEMLANGUAGEBAR,        0x1050,
  :GETTHREADLOCALINPUTSETTINGS, 0x104E,
  :GETWHEELSCROLLCHARS,         0x006C,
  :GETWHEELSCROLLLINES,         0x0068,
  :SETBEEP,                     0x0002,
  :SETBLOCKSENDINPUTRESETS,     0x1027,
  :SETCONTACTVISUALIZATION,     0x2019,
  :SETDEFAULTINPUTLANG,         0x005A,
  :SETDOUBLECLICKTIME,          0x0020,
  :SETDOUBLECLKHEIGHT,          0x001E,
  :SETDOUBLECLKWIDTH,           0x001D,
  :SETGESTUREVISUALIZATION,     0x201B,
  :SETKEYBOARDCUES,             0x100B,
  :SETKEYBOARDDELAY,            0x0017,
  :SETKEYBOARDPREF,             0x0045,
  :SETKEYBOARDSPEED,            0x000B,
  :SETLANGTOGGLE,               0x005B,
  :SETMOUSE,                    0x0004,
  :SETMOUSEBUTTONSWAP,          0x0021,
  :SETMOUSEHOVERHEIGHT,         0x0065,
  :SETMOUSEHOVERTIME,           0x0067,
  :SETMOUSEHOVERWIDTH,          0x0063,
  :SETMOUSESPEED,               0x0071,
  :SETMOUSETRAILS,              0x005D,
  :SETSNAPTODEFBUTTON,          0x0060,
  :SETSYSTEMLANGUAGEBAR,        0x1051,
  :SETTHREADLOCALINPUTSETTINGS, 0x104F,
  :SETWHEELSCROLLCHARS,         0x006D,
  :SETWHEELSCROLLLINES,         0x0069,

  # The following are the menu parameters.
  :GETMENUDROPALIGNMENT, 0x001B,
  :GETMENUFADE,          0x1012,
  :GETMENUSHOWDELAY,     0x006A,
  :SETMENUDROPALIGNMENT, 0x001C,
  :SETMENUFADE,          0x1013,
  :SETMENUSHOWDELAY,     0x006B,

  # The following are the power parameters.
  # Beginning with Windows Server 2008 and Windows Vista, these power parameters are not supported. Instead, to
  # determine the current display power state, an application should register for GUID_MONITOR_POWER_STATE
  # notifications. To determine the current display power down time-out, an application should register for
  # notification of changes to the GUID_VIDEO_POWERDOWN_TIMEOUT power setting. For more information, see
  # Registering for Power Events.
  # Windows Server 2003 and Windows XP/2000:  To determine the current display power state, use the following
  # power parameters.

  :GETLOWPOWERACTIVE,  0x0053,
  :GETLOWPOWERTIMEOUT, 0x004F,
  :GETPOWEROFFACTIVE,  0x0054,
  :GETPOWEROFFTIMEOUT, 0x0050,
  :SETLOWPOWERACTIVE,  0x0055,
  :SETLOWPOWERTIMEOUT, 0x0051,
  :SETPOWEROFFACTIVE,  0x0056,
  :SETPOWEROFFTIMEOUT, 0x0052,

  # The following are the screen saver parameters.
  :GETSCREENSAVEACTIVE,   0x0010,
  :GETSCREENSAVERRUNNING, 0x0072,
  :GETSCREENSAVESECURE,   0x0076,
  :GETSCREENSAVETIMEOUT,  0x000E,
  :SETSCREENSAVEACTIVE,   0x0011,
  :SETSCREENSAVESECURE,   0x0077,
  :SETSCREENSAVETIMEOUT,  0x000F,

  # The following are the time-out parameters for applications and services.
  :GETHUNGAPPTIMEOUT,           0x0078,
  :GETWAITTOKILLTIMEOUT,        0x007A,
  :GETWAITTOKILLSERVICETIMEOUT, 0x007C,
  :SETHUNGAPPTIMEOUT,           0x0079,
  :SETWAITTOKILLTIMEOUT,        0x007B,
  :SETWAITTOKILLSERVICETIMEOUT, 0x007D,

  # The following are the UI effects. The :SETUIEFFECTS value is used to enable or disable all UI effects at once.
  # This table contains the complete list of UI effect values.
  :GETCOMBOBOXANIMATION,      0x1004,
  :GETCURSORSHADOW,           0x101A,
  :GETGRADIENTCAPTIONS,       0x1008,
  :GETHOTTRACKING,            0x100E,
  :GETLISTBOXSMOOTHSCROLLING, 0x1006,
  :GETMENUANIMATION,          0x1002,
  :GETMENUUNDERLINES,         0x100A,
  :GETSELECTIONFADE,          0x1014,
  :GETTOOLTIPANIMATION,       0x1016,
  :GETTOOLTIPFADE,            0x1018,
  :GETUIEFFECTS,              0x103E,
  :SETCOMBOBOXANIMATION,      0x1005,
  :SETCURSORSHADOW,           0x101B,
  :SETGRADIENTCAPTIONS,       0x1009,
  :SETHOTTRACKING,            0x100F,
  :SETLISTBOXSMOOTHSCROLLING, 0x1007,
  :SETMENUANIMATION,          0x1003,
  :SETMENUUNDERLINES,         0x100B,
  :SETSELECTIONFADE,          0x1015,
  :SETTOOLTIPANIMATION,       0x1017,
  :SETTOOLTIPFADE,            0x1019,
  :SETUIEFFECTS,              0x103F,

  # The following are the window parameters.
  :GETACTIVEWINDOWTRACKING,   0x1000,
  :GETACTIVEWNDTRKZORDER,     0x100C,
  :GETACTIVEWNDTRKTIMEOUT,    0x2002,
  :GETANIMATION,              0x0048,
  :GETBORDER,                 0x0005,
  :GETCARETWIDTH,             0x2006,
  :GETDOCKMOVING,             0x0090,
  :GETDRAGFROMMAXIMIZE,       0x008C,
  :GETDRAGFULLWINDOWS,        0x0026,
  :GETFOREGROUNDFLASHCOUNT,   0x2004,
  :GETFOREGROUNDLOCKTIMEOUT,  0x2000,
  :GETMINIMIZEDMETRICS,       0x002B,
  :GETMOUSEDOCKTHRESHOLD,     0x007E,
  :GETMOUSEDRAGOUTTHRESHOLD,  0x0084,
  :GETMOUSESIDEMOVETHRESHOLD, 0x0088,
  :GETNONCLIENTMETRICS,       0x0029,
  :GETPENDOCKTHRESHOLD,       0x0080,
  :GETPENDRAGOUTTHRESHOLD,    0x0086,
  :GETPENSIDEMOVETHRESHOLD,   0x008A,
  :GETSHOWIMEUI,              0x006E,
  :GETSNAPSIZING,             0x008E,
  :GETWINARRANGING,           0x0082,
  :SETACTIVEWINDOWTRACKING,   0x1001,
  :SETACTIVEWNDTRKZORDER,     0x100D,
  :SETACTIVEWNDTRKTIMEOUT,    0x2003,
  :SETANIMATION,              0x0049,
  :SETBORDER,                 0x0006,
  :SETCARETWIDTH,             0x2007,
  :SETDOCKMOVING,             0x0091,
  :SETDRAGFROMMAXIMIZE,       0x008D,
  :SETDRAGFULLWINDOWS,        0x0025,
  :SETDRAGHEIGHT,             0x004D,
  :SETDRAGWIDTH,              0x004C,
  :SETFOREGROUNDFLASHCOUNT,   0x2005,
  :SETFOREGROUNDLOCKTIMEOUT,  0x2001,
  :SETMINIMIZEDMETRICS,       0x002C,
  :SETMOUSEDOCKTHRESHOLD,     0x007F,
  :SETMOUSEDRAGOUTTHRESHOLD,  0x0085,
  :SETMOUSESIDEMOVETHRESHOLD, 0x0089,
  :SETNONCLIENTMETRICS,       0x002A,
  :SETPENDOCKTHRESHOLD,       0x0081,
  :SETPENDRAGOUTTHRESHOLD,    0x0087,
  :SETPENSIDEMOVETHRESHOLD,   0x008B,
  :SETSHOWIMEUI,              0x006F,
  :SETSNAPSIZING,             0x008F,
  :SETWINARRANGING,           0x0083
]
SystemParametersInfoAction =
enum :system_parameters_info_action,
[
    :GETBEEP,                     0x0001,
    :SETBEEP,                     0x0002,
    :GETMOUSE,                    0x0003,
    :SETMOUSE,                    0x0004,
    :GETBORDER,                   0x0005,
    :SETBORDER,                   0x0006,
    :GETKEYBOARDSPEED,            0x000A,
    :SETKEYBOARDSPEED,            0x000B,
    :LANGDRIVER,                  0x000C,
    :ICONHORIZONTALSPACING,       0x000D,
    :GETSCREENSAVETIMEOUT,        0x000E,
    :SETSCREENSAVETIMEOUT,        0x000F,
    :GETSCREENSAVEACTIVE,         0x0010,
    :SETSCREENSAVEACTIVE,         0x0011,
    :GETGRIDGRANULARITY,          0x0012,
    :SETGRIDGRANULARITY,          0x0013,
    :SETDESKWALLPAPER,            0x0014,
    :SETDESKPATTERN,              0x0015,
    :GETKEYBOARDDELAY,            0x0016,
    :SETKEYBOARDDELAY,            0x0017,
    :ICONVERTICALSPACING,         0x0018,
    :GETICONTITLEWRAP,            0x0019,
    :SETICONTITLEWRAP,            0x001A,
    :GETMENUDROPALIGNMENT,        0x001B,
    :SETMENUDROPALIGNMENT,        0x001C,
    :SETDOUBLECLKWIDTH,           0x001D,
    :SETDOUBLECLKHEIGHT,          0x001E,
    :GETICONTITLELOGFONT,         0x001F,
    :SETDOUBLECLICKTIME,          0x0020,
    :SETMOUSEBUTTONSWAP,          0x0021,
    :SETICONTITLELOGFONT,         0x0022,
    :GETFASTTASKSWITCH,           0x0023,
    :SETFASTTASKSWITCH,           0x0024,
    :SETDRAGFULLWINDOWS,          0x0025,
    :GETDRAGFULLWINDOWS,          0x0026,
    :GETNONCLIENTMETRICS,         0x0029,
    :SETNONCLIENTMETRICS,         0x002A,
    :GETMINIMIZEDMETRICS,         0x002B,
    :SETMINIMIZEDMETRICS,         0x002C,
    :GETICONMETRICS,              0x002D,
    :SETICONMETRICS,              0x002E,
    :SETWORKAREA,                 0x002F,
    :GETWORKAREA,                 0x0030,
    :SETPENWINDOWS,               0x0031,
    :GETHIGHCONTRAST,             0x0042,
    :SETHIGHCONTRAST,             0x0043,
    :GETKEYBOARDPREF,             0x0044,
    :SETKEYBOARDPREF,             0x0045,
    :GETSCREENREADER,             0x0046,
    :SETSCREENREADER,             0x0047,
    :GETANIMATION,                0x0048,
    :SETANIMATION,                0x0049,
    :GETFONTSMOOTHING,            0x004A,
    :SETFONTSMOOTHING,            0x004B,
    :SETDRAGWIDTH,                0x004C,
    :SETDRAGHEIGHT,               0x004D,
    :SETHANDHELD,                 0x004E,
    :GETLOWPOWERTIMEOUT,          0x004F,
    :GETPOWEROFFTIMEOUT,          0x0050,
    :SETLOWPOWERTIMEOUT,          0x0051,
    :SETPOWEROFFTIMEOUT,          0x0052,
    :GETLOWPOWERACTIVE,           0x0053,
    :GETPOWEROFFACTIVE,           0x0054,
    :SETLOWPOWERACTIVE,           0x0055,
    :SETPOWEROFFACTIVE,           0x0056,
    :SETCURSORS,                  0x0057,
    :SETICONS,                    0x0058,
    :GETDEFAULTINPUTLANG,         0x0059,
    :SETDEFAULTINPUTLANG,         0x005A,
    :SETLANGTOGGLE,               0x005B,
    :GETWINDOWSEXTENSION,         0x005C,
    :SETMOUSETRAILS,              0x005D,
    :GETMOUSETRAILS,              0x005E,
    :SETSCREENSAVERRUNNING,       0x0061,
    :SCREENSAVERRUNNING,          0x0061,
    :GETFILTERKEYS,               0x0032,
    :SETFILTERKEYS,               0x0033,
    :GETTOGGLEKEYS,               0x0034,
    :SETTOGGLEKEYS,               0x0035,
    :GETMOUSEKEYS,                0x0036,
    :SETMOUSEKEYS,                0x0037,
    :GETSHOWSOUNDS,               0x0038,
    :SETSHOWSOUNDS,               0x0039,
    :GETSTICKYKEYS,               0x003A,
    :SETSTICKYKEYS,               0x003B,
    :GETACCESSTIMEOUT,            0x003C,
    :SETACCESSTIMEOUT,            0x003D,
    :GETSERIALKEYS,               0x003E,
    :SETSERIALKEYS,               0x003F,
    :GETSOUNDSENTRY,              0x0040,
    :SETSOUNDSENTRY,              0x0041,
    :GETSNAPTODEFBUTTON,          0x005F,
    :SETSNAPTODEFBUTTON,          0x0060,
    :GETMOUSEHOVERWIDTH,          0x0062,
    :SETMOUSEHOVERWIDTH,          0x0063,
    :GETMOUSEHOVERHEIGHT,         0x0064,
    :SETMOUSEHOVERHEIGHT,         0x0065,
    :GETMOUSEHOVERTIME,           0x0066,
    :SETMOUSEHOVERTIME,           0x0067,
    :GETWHEELSCROLLLINES,         0x0068,
    :SETWHEELSCROLLLINES,         0x0069,
    :GETMENUSHOWDELAY,            0x006A,
    :SETMENUSHOWDELAY,            0x006B,
    :GETWHEELSCROLLCHARS,         0x006C,
    :SETWHEELSCROLLCHARS,         0x006D,
    :GETSHOWIMEUI,                0x006E,
    :SETSHOWIMEUI,                0x006F,
    :GETMOUSESPEED,               0x0070,
    :SETMOUSESPEED,               0x0071,
    :GETSCREENSAVERRUNNING,       0x0072,
    :GETDESKWALLPAPER,            0x0073,
    :GETAUDIODESCRIPTION,         0x0074,
    :SETAUDIODESCRIPTION,         0x0075,
    :GETSCREENSAVESECURE,         0x0076,
    :SETSCREENSAVESECURE,         0x0077,
    :GETHUNGAPPTIMEOUT,           0x0078,
    :SETHUNGAPPTIMEOUT,           0x0079,
    :GETWAITTOKILLTIMEOUT,        0x007A,
    :SETWAITTOKILLTIMEOUT,        0x007B,
    :GETWAITTOKILLSERVICETIMEOUT, 0x007C,
    :SETWAITTOKILLSERVICETIMEOUT, 0x007D,
    :GETMOUSEDOCKTHRESHOLD,       0x007E,
    :SETMOUSEDOCKTHRESHOLD,       0x007F,
    :GETPENDOCKTHRESHOLD,         0x0080,
    :SETPENDOCKTHRESHOLD,         0x0081,
    :GETWINARRANGING,             0x0082,
    :SETWINARRANGING,             0x0083,
    :GETMOUSEDRAGOUTTHRESHOLD,    0x0084,
    :SETMOUSEDRAGOUTTHRESHOLD,    0x0085,
    :GETPENDRAGOUTTHRESHOLD,      0x0086,
    :SETPENDRAGOUTTHRESHOLD,      0x0087,
    :GETMOUSESIDEMOVETHRESHOLD,   0x0088,
    :SETMOUSESIDEMOVETHRESHOLD,   0x0089,
    :GETPENSIDEMOVETHRESHOLD,     0x008A,
    :SETPENSIDEMOVETHRESHOLD,     0x008B,
    :GETDRAGFROMMAXIMIZE,         0x008C,
    :SETDRAGFROMMAXIMIZE,         0x008D,
    :GETSNAPSIZING,               0x008E,
    :SETSNAPSIZING,               0x008F,
    :GETDOCKMOVING,               0x0090,
    :SETDOCKMOVING,               0x0091,
    :GETACTIVEWINDOWTRACKING,     0x1000,
    :SETACTIVEWINDOWTRACKING,     0x1001,
    :GETMENUANIMATION,            0x1002,
    :SETMENUANIMATION,            0x1003,
    :GETCOMBOBOXANIMATION,        0x1004,
    :SETCOMBOBOXANIMATION,        0x1005,
    :GETLISTBOXSMOOTHSCROLLING,   0x1006,
    :SETLISTBOXSMOOTHSCROLLING,   0x1007,
    :GETGRADIENTCAPTIONS,         0x1008,
    :SETGRADIENTCAPTIONS,         0x1009,
    :GETKEYBOARDCUES,             0x100A,
    :SETKEYBOARDCUES,             0x100B,
    :GETMENUUNDERLINES,           0x100A,
    :SETMENUUNDERLINES,           0x100B,
    :GETACTIVEWNDTRKZORDER,       0x100C,
    :SETACTIVEWNDTRKZORDER,       0x100D,
    :GETHOTTRACKING,              0x100E,
    :SETHOTTRACKING,              0x100F,
    :GETMENUFADE,                 0x1012,
    :SETMENUFADE,                 0x1013,
    :GETSELECTIONFADE,            0x1014,
    :SETSELECTIONFADE,            0x1015,
    :GETTOOLTIPANIMATION,         0x1016,
    :SETTOOLTIPANIMATION,         0x1017,
    :GETTOOLTIPFADE,              0x1018,
    :SETTOOLTIPFADE,              0x1019,
    :GETCURSORSHADOW,             0x101A,
    :SETCURSORSHADOW,             0x101B,
    :GETMOUSESONAR,               0x101C,
    :SETMOUSESONAR,               0x101D,
    :GETMOUSECLICKLOCK,           0x101E,
    :SETMOUSECLICKLOCK,           0x101F,
    :GETMOUSEVANISH,              0x1020,
    :SETMOUSEVANISH,              0x1021,
    :GETFLATMENU,                 0x1022,
    :SETFLATMENU,                 0x1023,
    :GETDROPSHADOW,               0x1024,
    :SETDROPSHADOW,               0x1025,
    :GETBLOCKSENDINPUTRESETS,     0x1026,
    :SETBLOCKSENDINPUTRESETS,     0x1027,
    :GETUIEFFECTS,                0x103E,
    :SETUIEFFECTS,                0x103F,
    :GETDISABLEOVERLAPPEDCONTENT, 0x1040,
    :SETDISABLEOVERLAPPEDCONTENT, 0x1041,
    :GETCLIENTAREAANIMATION,      0x1042,
    :SETCLIENTAREAANIMATION,      0x1043,
    :GETCLEARTYPE,                0x1048,
    :SETCLEARTYPE,                0x1049,
    :GETSPEECHRECOGNITION,        0x104A,
    :SETSPEECHRECOGNITION,        0x104B,
    :GETFOREGROUNDLOCKTIMEOUT,    0x2000,
    :SETFOREGROUNDLOCKTIMEOUT,    0x2001,
    :GETACTIVEWNDTRKTIMEOUT,      0x2002,
    :SETACTIVEWNDTRKTIMEOUT,      0x2003,
    :GETFOREGROUNDFLASHCOUNT,     0x2004,
    :SETFOREGROUNDFLASHCOUNT,     0x2005,
    :GETCARETWIDTH,               0x2006,
    :SETCARETWIDTH,               0x2007,
    :GETMOUSECLICKLOCKTIME,       0x2008,
    :SETMOUSECLICKLOCKTIME,       0x2009,
    :GETFONTSMOOTHINGTYPE,        0x200A,
    :SETFONTSMOOTHINGTYPE,        0x200B,
    :GETFONTSMOOTHINGCONTRAST,    0x200C,
    :SETFONTSMOOTHINGCONTRAST,    0x200D,
    :GETFOCUSBORDERWIDTH,         0x200E,
    :SETFOCUSBORDERWIDTH,         0x200F,
    :GETFOCUSBORDERHEIGHT,        0x2010,
    :SETFOCUSBORDERHEIGHT,        0x2011,
    :GETFONTSMOOTHINGORIENTATION, 0x2012,
    :SETFONTSMOOTHINGORIENTATION, 0x2013,
    :GETMINIMUMHITRADIUS,         0x2014,
    :SETMINIMUMHITRADIUS,         0x2015,
    :GETMESSAGEDURATION,          0x2016,
    :SETMESSAGEDURATION,          0x2017
]
BroadcastSystemMessageFlags =
enum :broadcast_system_message_flags,
[
  :ALLCOMPONENTS, 0x00000000, #Broadcast to all system components.
  :APPLICATIONS,  0x00000008, # Broadcast to applications.
  :ALLDESKTOPS,   0x00000010, # Broadcast to all desktops. Requires the SE_TCB_NAME privilege.
]
EditNotification =
enum :edit_notification,
[
    :SETFOCUS,     0x0100,
    :KILLFOCUS,    0x0200,
    :CHANGE,       0x0300,
    :UPDATE,       0x0400,
    :ERRSPACE,     0x0500,
    :MAXTEXT,      0x0501,
    :HSCROLL,      0x0601,
    :VSCROLL,      0x0602,
    :ALIGN_LTR_EC, 0x0700,
    :ALIGN_RTL_EC, 0x0701
]
ButtonNotification =
enum :button_notification,
[
    :CLICKED,       0,
    :PAINT,         1,
    :HILITE,        2,
    :UNHILITE,      3,
    :DISABLE,       4,
    :DOUBLECLICKED, 5,
    :PUSHED,        2,
    :UNPUSHED,      3,
    :DBLCLK,        5,
    :SETFOCUS,      6,
    :KILLFOCUS,     7,
]
StaticNotification =
enum :static_notification,
[
    :CLICKED, 0,
    :DBLCLK,  1,
    :ENABLE,  2,
    :DISABLE, 3
]

Class Method Summary collapse

Methods included from LibBase

extended

Class Method Details

.CreateWindowA(lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam) ⇒ Object



94
95
96
# File 'lib/win-ffi/functions/user32/window/window.rb', line 94

def CreateWindowA(lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)
  CreateWindowExA(0, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)
end

.CreateWindowW(lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam) ⇒ Object



98
99
100
# File 'lib/win-ffi/functions/user32/window/window.rb', line 98

def CreateWindowW(lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)
  CreateWindowExW(0, lpClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)
end