JwaWinUser.pas
上传用户:davidchvip
上传日期:2009-07-28
资源大小:1749k
文件大小:670k
源码类别:

Windows编程

开发平台:

Delphi

  1. //
  2. // Combo Box styles
  3. //
  4.   CBS_SIMPLE            = $0001;
  5.   {$EXTERNALSYM CBS_SIMPLE}
  6.   CBS_DROPDOWN          = $0002;
  7.   {$EXTERNALSYM CBS_DROPDOWN}
  8.   CBS_DROPDOWNLIST      = $0003;
  9.   {$EXTERNALSYM CBS_DROPDOWNLIST}
  10.   CBS_OWNERDRAWFIXED    = $0010;
  11.   {$EXTERNALSYM CBS_OWNERDRAWFIXED}
  12.   CBS_OWNERDRAWVARIABLE = $0020;
  13.   {$EXTERNALSYM CBS_OWNERDRAWVARIABLE}
  14.   CBS_AUTOHSCROLL       = $0040;
  15.   {$EXTERNALSYM CBS_AUTOHSCROLL}
  16.   CBS_OEMCONVERT        = $0080;
  17.   {$EXTERNALSYM CBS_OEMCONVERT}
  18.   CBS_SORT              = $0100;
  19.   {$EXTERNALSYM CBS_SORT}
  20.   CBS_HASSTRINGS        = $0200;
  21.   {$EXTERNALSYM CBS_HASSTRINGS}
  22.   CBS_NOINTEGRALHEIGHT  = $0400;
  23.   {$EXTERNALSYM CBS_NOINTEGRALHEIGHT}
  24.   CBS_DISABLENOSCROLL   = $0800;
  25.   {$EXTERNALSYM CBS_DISABLENOSCROLL}
  26.   CBS_UPPERCASE         = $2000;
  27.   {$EXTERNALSYM CBS_UPPERCASE}
  28.   CBS_LOWERCASE         = $4000;
  29.   {$EXTERNALSYM CBS_LOWERCASE}
  30. //
  31. // Combo Box messages
  32. //
  33.   CB_GETEDITSEL            = $0140;
  34.   {$EXTERNALSYM CB_GETEDITSEL}
  35.   CB_LIMITTEXT             = $0141;
  36.   {$EXTERNALSYM CB_LIMITTEXT}
  37.   CB_SETEDITSEL            = $0142;
  38.   {$EXTERNALSYM CB_SETEDITSEL}
  39.   CB_ADDSTRING             = $0143;
  40.   {$EXTERNALSYM CB_ADDSTRING}
  41.   CB_DELETESTRING          = $0144;
  42.   {$EXTERNALSYM CB_DELETESTRING}
  43.   CB_DIR                   = $0145;
  44.   {$EXTERNALSYM CB_DIR}
  45.   CB_GETCOUNT              = $0146;
  46.   {$EXTERNALSYM CB_GETCOUNT}
  47.   CB_GETCURSEL             = $0147;
  48.   {$EXTERNALSYM CB_GETCURSEL}
  49.   CB_GETLBTEXT             = $0148;
  50.   {$EXTERNALSYM CB_GETLBTEXT}
  51.   CB_GETLBTEXTLEN          = $0149;
  52.   {$EXTERNALSYM CB_GETLBTEXTLEN}
  53.   CB_INSERTSTRING          = $014A;
  54.   {$EXTERNALSYM CB_INSERTSTRING}
  55.   CB_RESETCONTENT          = $014B;
  56.   {$EXTERNALSYM CB_RESETCONTENT}
  57.   CB_FINDSTRING            = $014C;
  58.   {$EXTERNALSYM CB_FINDSTRING}
  59.   CB_SELECTSTRING          = $014D;
  60.   {$EXTERNALSYM CB_SELECTSTRING}
  61.   CB_SETCURSEL             = $014E;
  62.   {$EXTERNALSYM CB_SETCURSEL}
  63.   CB_SHOWDROPDOWN          = $014F;
  64.   {$EXTERNALSYM CB_SHOWDROPDOWN}
  65.   CB_GETITEMDATA           = $0150;
  66.   {$EXTERNALSYM CB_GETITEMDATA}
  67.   CB_SETITEMDATA           = $0151;
  68.   {$EXTERNALSYM CB_SETITEMDATA}
  69.   CB_GETDROPPEDCONTROLRECT = $0152;
  70.   {$EXTERNALSYM CB_GETDROPPEDCONTROLRECT}
  71.   CB_SETITEMHEIGHT         = $0153;
  72.   {$EXTERNALSYM CB_SETITEMHEIGHT}
  73.   CB_GETITEMHEIGHT         = $0154;
  74.   {$EXTERNALSYM CB_GETITEMHEIGHT}
  75.   CB_SETEXTENDEDUI         = $0155;
  76.   {$EXTERNALSYM CB_SETEXTENDEDUI}
  77.   CB_GETEXTENDEDUI         = $0156;
  78.   {$EXTERNALSYM CB_GETEXTENDEDUI}
  79.   CB_GETDROPPEDSTATE       = $0157;
  80.   {$EXTERNALSYM CB_GETDROPPEDSTATE}
  81.   CB_FINDSTRINGEXACT       = $0158;
  82.   {$EXTERNALSYM CB_FINDSTRINGEXACT}
  83.   CB_SETLOCALE             = $0159;
  84.   {$EXTERNALSYM CB_SETLOCALE}
  85.   CB_GETLOCALE             = $015A;
  86.   {$EXTERNALSYM CB_GETLOCALE}
  87.   CB_GETTOPINDEX           = $015b;
  88.   {$EXTERNALSYM CB_GETTOPINDEX}
  89.   CB_SETTOPINDEX           = $015c;
  90.   {$EXTERNALSYM CB_SETTOPINDEX}
  91.   CB_GETHORIZONTALEXTENT   = $015d;
  92.   {$EXTERNALSYM CB_GETHORIZONTALEXTENT}
  93.   CB_SETHORIZONTALEXTENT   = $015e;
  94.   {$EXTERNALSYM CB_SETHORIZONTALEXTENT}
  95.   CB_GETDROPPEDWIDTH       = $015f;
  96.   {$EXTERNALSYM CB_GETDROPPEDWIDTH}
  97.   CB_SETDROPPEDWIDTH       = $0160;
  98.   {$EXTERNALSYM CB_SETDROPPEDWIDTH}
  99.   CB_INITSTORAGE           = $0161;
  100.   {$EXTERNALSYM CB_INITSTORAGE}
  101.   CB_MULTIPLEADDSTRING     = $0163;
  102.   {$EXTERNALSYM CB_MULTIPLEADDSTRING}
  103.   CB_GETCOMBOBOXINFO       = $0164;
  104.   {$EXTERNALSYM CB_GETCOMBOBOXINFO}
  105. {$IFDEF WINVER_0400_GREATER}
  106.   CB_MSGMAX = $0165;
  107.   {$EXTERNALSYM CB_MSGMAX}
  108. {$ELSE}
  109. {$IFDEF WINVER_0400_GREATER}
  110.   CB_MSGMAX = $0162;
  111.   {$EXTERNALSYM CB_MSGMAX}
  112. {$ELSE}
  113.   CB_MSGMAX = $015B;
  114.   {$EXTERNALSYM CB_MSGMAX}
  115. {$ENDIF}
  116. {$ENDIF}
  117. //
  118. // Scroll Bar Styles
  119. //
  120.   SBS_HORZ                    = $0000;
  121.   {$EXTERNALSYM SBS_HORZ}
  122.   SBS_VERT                    = $0001;
  123.   {$EXTERNALSYM SBS_VERT}
  124.   SBS_TOPALIGN                = $0002;
  125.   {$EXTERNALSYM SBS_TOPALIGN}
  126.   SBS_LEFTALIGN               = $0002;
  127.   {$EXTERNALSYM SBS_LEFTALIGN}
  128.   SBS_BOTTOMALIGN             = $0004;
  129.   {$EXTERNALSYM SBS_BOTTOMALIGN}
  130.   SBS_RIGHTALIGN              = $0004;
  131.   {$EXTERNALSYM SBS_RIGHTALIGN}
  132.   SBS_SIZEBOXTOPLEFTALIGN     = $0002;
  133.   {$EXTERNALSYM SBS_SIZEBOXTOPLEFTALIGN}
  134.   SBS_SIZEBOXBOTTOMRIGHTALIGN = $0004;
  135.   {$EXTERNALSYM SBS_SIZEBOXBOTTOMRIGHTALIGN}
  136.   SBS_SIZEBOX                 = $0008;
  137.   {$EXTERNALSYM SBS_SIZEBOX}
  138.   SBS_SIZEGRIP                = $0010;
  139.   {$EXTERNALSYM SBS_SIZEGRIP}
  140. //
  141. // Scroll bar messages
  142. //
  143.   SBM_SETPOS         = $00E0; // not in win3.1
  144.   {$EXTERNALSYM SBM_SETPOS}
  145.   SBM_GETPOS         = $00E1; // not in win3.1
  146.   {$EXTERNALSYM SBM_GETPOS}
  147.   SBM_SETRANGE       = $00E2; // not in win3.1
  148.   {$EXTERNALSYM SBM_SETRANGE}
  149.   SBM_SETRANGEREDRAW = $00E6; // not in win3.1
  150.   {$EXTERNALSYM SBM_SETRANGEREDRAW}
  151.   SBM_GETRANGE       = $00E3; // not in win3.1
  152.   {$EXTERNALSYM SBM_GETRANGE}
  153.   SBM_ENABLE_ARROWS  = $00E4; // not in win3.1
  154.   {$EXTERNALSYM SBM_ENABLE_ARROWS}
  155.   SBM_SETSCROLLINFO  = $00E9;
  156.   {$EXTERNALSYM SBM_SETSCROLLINFO}
  157.   SBM_GETSCROLLINFO  = $00EA;
  158.   {$EXTERNALSYM SBM_GETSCROLLINFO}
  159.   
  160.   SBM_GETSCROLLBARINFO = $00EB;
  161.   {$EXTERNALSYM SBM_GETSCROLLBARINFO}
  162.   SIF_RANGE           = $0001;
  163.   {$EXTERNALSYM SIF_RANGE}
  164.   SIF_PAGE            = $0002;
  165.   {$EXTERNALSYM SIF_PAGE}
  166.   SIF_POS             = $0004;
  167.   {$EXTERNALSYM SIF_POS}
  168.   SIF_DISABLENOSCROLL = $0008;
  169.   {$EXTERNALSYM SIF_DISABLENOSCROLL}
  170.   SIF_TRACKPOS        = $0010;
  171.   {$EXTERNALSYM SIF_TRACKPOS}
  172.   SIF_ALL             = (SIF_RANGE or SIF_PAGE or SIF_POS or SIF_TRACKPOS);
  173.   {$EXTERNALSYM SIF_ALL}
  174. type
  175.   LPSCROLLINFO = ^SCROLLINFO;
  176.   {$EXTERNALSYM LPSCROLLINFO}
  177.   tagSCROLLINFO = record
  178.     cbSize: UINT;
  179.     fMask: UINT;
  180.     nMin: Integer;
  181.     nMax: Integer;
  182.     nPage: UINT;
  183.     nPos: Integer;
  184.     nTrackPos: Integer;
  185.   end;
  186.   {$EXTERNALSYM tagSCROLLINFO}
  187.   SCROLLINFO = tagSCROLLINFO;
  188.   {$EXTERNALSYM SCROLLINFO}
  189.   TScrollInfo = SCROLLINFO;
  190.   PScrollInfo = LPSCROLLINFO;
  191. function SetScrollInfo(hwnd: HWND; fnBar: Integer; const lpsi: SCROLLINFO;
  192.   fRedraw: BOOL): Integer; stdcall;
  193. {$EXTERNALSYM SetScrollInfo}
  194. function GetScrollInfo(hwnd: HWND; fnBar: Integer; var lpsi: SCROLLINFO): BOOL; stdcall;
  195. {$EXTERNALSYM GetScrollInfo}
  196. //
  197. // MDI client style bits
  198. //
  199. const
  200.   MDIS_ALLCHILDSTYLES = $0001;
  201.   {$EXTERNALSYM MDIS_ALLCHILDSTYLES}
  202. //
  203. // wParam Flags for WM_MDITILE and WM_MDICASCADE messages.
  204. //
  205. const
  206.   MDITILE_VERTICAL     = $0000; // not in win3.1
  207.   {$EXTERNALSYM MDITILE_VERTICAL}
  208.   MDITILE_HORIZONTAL   = $0001; // not in win3.1
  209.   {$EXTERNALSYM MDITILE_HORIZONTAL}
  210.   MDITILE_SKIPDISABLED = $0002; // not in win3.1
  211.   {$EXTERNALSYM MDITILE_SKIPDISABLED}
  212.   MDITILE_ZORDER       = $0004;
  213.   {$EXTERNALSYM MDITILE_ZORDER}
  214. type
  215.   LPMDICREATESTRUCTA = ^MDICREATESTRUCTA;
  216.   {$EXTERNALSYM LPMDICREATESTRUCTA}
  217.   tagMDICREATESTRUCTA = record
  218.     szClass: LPCSTR;
  219.     szTitle: LPCSTR;
  220.     hOwner: HANDLE;
  221.     x: Integer;
  222.     y: Integer;
  223.     cx: Integer;
  224.     cy: Integer;
  225.     style: DWORD;
  226.     lParam: LPARAM; // app-defined stuff//
  227.   end;
  228.   {$EXTERNALSYM tagMDICREATESTRUCTA}
  229.   MDICREATESTRUCTA = tagMDICREATESTRUCTA;
  230.   {$EXTERNALSYM MDICREATESTRUCTA}
  231.   TMdiCreateStructA = MDICREATESTRUCTA;
  232.   PMdiCreateStructA = LPMDICREATESTRUCTA;
  233.   LPMDICREATESTRUCTW = ^MDICREATESTRUCTW;
  234.   {$EXTERNALSYM LPMDICREATESTRUCTW}
  235.   tagMDICREATESTRUCTW = record
  236.     szClass: LPCWSTR;
  237.     szTitle: LPCWSTR;
  238.     hOwner: HANDLE;
  239.     x: Integer;
  240.     y: Integer;
  241.     cx: Integer;
  242.     cy: Integer;
  243.     style: DWORD;
  244.     lParam: LPARAM; // app-defined stuff//
  245.   end;
  246.   {$EXTERNALSYM tagMDICREATESTRUCTW}
  247.   MDICREATESTRUCTW = tagMDICREATESTRUCTW;
  248.   {$EXTERNALSYM MDICREATESTRUCTW}
  249.   TMdiCreateStructW = MDICREATESTRUCTW;
  250.   PMdiCreateStructW = LPMDICREATESTRUCTW;
  251. {$IFDEF UNICODE}
  252.   MDICREATESTRUCT = MDICREATESTRUCTW;
  253.   {$EXTERNALSYM MDICREATESTRUCT}
  254.   LPMDICREATESTRUCT = LPMDICREATESTRUCTW;
  255.   {$EXTERNALSYM LPMDICREATESTRUCT}
  256.   TMdiCreateStruct = TMdiCreateStructW;
  257.   PMdiCreateStruct = PMdiCreateStructW;
  258. {$ELSE}
  259.   MDICREATESTRUCT = MDICREATESTRUCTA;
  260.   {$EXTERNALSYM MDICREATESTRUCT}
  261.   LPMDICREATESTRUCT = LPMDICREATESTRUCTA;
  262.   {$EXTERNALSYM LPMDICREATESTRUCT}
  263.   TMdiCreateStruct = TMdiCreateStructA;
  264.   PMdiCreateStruct = PMdiCreateStructA;
  265. {$ENDIF}
  266.   LPCLIENTCREATESTRUCT = ^CLIENTCREATESTRUCT;
  267.   {$EXTERNALSYM LPCLIENTCREATESTRUCT}
  268.   tagCLIENTCREATESTRUCT = record
  269.     hWindowMenu: HANDLE;
  270.     idFirstChild: UINT;
  271.   end;
  272.   {$EXTERNALSYM tagCLIENTCREATESTRUCT}
  273.   CLIENTCREATESTRUCT = tagCLIENTCREATESTRUCT;
  274.   {$EXTERNALSYM CLIENTCREATESTRUCT}
  275.   TClientCreateStruct = CLIENTCREATESTRUCT;
  276.   PClientCreateStruct = LPCLIENTCREATESTRUCT;
  277. function DefFrameProcA(hWnd: HWND; hWndMDIClient: HWND; uMsg: UINT;
  278.   wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
  279. {$EXTERNALSYM DefFrameProcA}
  280. function DefFrameProcW(hWnd: HWND; hWndMDIClient: HWND; uMsg: UINT;
  281.   wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
  282. {$EXTERNALSYM DefFrameProcW}
  283. {$IFDEF UNICODE}
  284. function DefFrameProc(hWnd: HWND; hWndMDIClient: HWND; uMsg: UINT;
  285.   wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
  286. {$EXTERNALSYM DefFrameProc}
  287. {$ELSE}
  288. function DefFrameProc(hWnd: HWND; hWndMDIClient: HWND; uMsg: UINT;
  289.   wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
  290. {$EXTERNALSYM DefFrameProc}
  291. {$ENDIF}
  292. function DefMDIChildProcA(hWnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
  293. {$EXTERNALSYM DefMDIChildProcA}
  294. function DefMDIChildProcW(hWnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
  295. {$EXTERNALSYM DefMDIChildProcW}
  296. {$IFDEF UNICODE}
  297. function DefMDIChildProc(hWnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
  298. {$EXTERNALSYM DefMDIChildProc}
  299. {$ELSE}
  300. function DefMDIChildProc(hWnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
  301. {$EXTERNALSYM DefMDIChildProc}
  302. {$ENDIF}
  303. function TranslateMDISysAccel(hWndClient: HWND; const lpMsg: MSG): BOOL; stdcall;
  304. {$EXTERNALSYM TranslateMDISysAccel}
  305. function ArrangeIconicWindows(hWnd: HWND): UINT; stdcall;
  306. {$EXTERNALSYM ArrangeIconicWindows}
  307. function CreateMDIWindowA(lpClassName, lpWindowName: LPCSTR; dwStyle: DWORD;
  308.   X, Y, nWidth, nHeight: Integer; hWndParent: HWND; hInstance: HINSTANCE;
  309.   lParam: LPARAM): HWND; stdcall;
  310. {$EXTERNALSYM CreateMDIWindowA}
  311. function CreateMDIWindowW(lpClassName, lpWindowName: LPCWSTR; dwStyle: DWORD;
  312.   X, Y, nWidth, nHeight: Integer; hWndParent: HWND; hInstance: HINSTANCE;
  313.   lParam: LPARAM): HWND; stdcall;
  314. {$EXTERNALSYM CreateMDIWindowW}
  315. {$IFDEF UNICODE}
  316. function CreateMDIWindow(lpClassName, lpWindowName: LPCWSTR; dwStyle: DWORD;
  317.   X, Y, nWidth, nHeight: Integer; hWndParent: HWND; hInstance: HINSTANCE;
  318.   lParam: LPARAM): HWND; stdcall;
  319. {$EXTERNALSYM CreateMDIWindow}
  320. {$ELSE}
  321. function CreateMDIWindow(lpClassName, lpWindowName: LPCSTR; dwStyle: DWORD;
  322.   X, Y, nWidth, nHeight: Integer; hWndParent: HWND; hInstance: HINSTANCE;
  323.   lParam: LPARAM): HWND; stdcall;
  324. {$EXTERNALSYM CreateMDIWindow}
  325. {$ENDIF}
  326. function TileWindows(hwndParent: HWND; wHow: UINT; lpRect: LPRECT; cKids: UINT;
  327.   hwnd: HWND; lpKids: LPHWND): WORD; stdcall;
  328. {$EXTERNALSYM TileWindows}
  329. function CascadeWindows(hwndParent: HWND; wHow: UINT; lpRect: LPRECT;
  330.   cKids: UINT; lpKids: LPHWND): WORD; stdcall;
  331. {$EXTERNALSYM CascadeWindows}
  332. //***** Help support ********************************************************/
  333. type
  334.   HELPPOLY = DWORD;
  335.   {$EXTERNALSYM HELPPOLY}
  336.   LPMULTIKEYHELPA = ^MULTIKEYHELPA;
  337.   {$EXTERNALSYM LPMULTIKEYHELPA}
  338.   tagMULTIKEYHELPA = record
  339.     mkSize: DWORD;
  340.     mkKeylist: CHAR;
  341.     szKeyphrase: array [0..0] of CHAR;
  342.   end;
  343.   {$EXTERNALSYM tagMULTIKEYHELPA}
  344.   MULTIKEYHELPA = tagMULTIKEYHELPA;
  345.   {$EXTERNALSYM MULTIKEYHELPA}
  346.   TMultiKeyHelpA = MULTIKEYHELPA;
  347.   PMultiKeyHelpA = LPMULTIKEYHELPA;
  348.   LPMULTIKEYHELPW = ^MULTIKEYHELPW;
  349.   {$EXTERNALSYM LPMULTIKEYHELPW}
  350.   tagMULTIKEYHELPW = record
  351.     mkSize: DWORD;
  352.     mkKeylist: WCHAR;
  353.     szKeyphrase: array [0..0] of WCHAR;
  354.   end;
  355.   {$EXTERNALSYM tagMULTIKEYHELPW}
  356.   MULTIKEYHELPW = tagMULTIKEYHELPW;
  357.   {$EXTERNALSYM MULTIKEYHELPW}
  358.   TMultiKeyHelpW = MULTIKEYHELPW;
  359.   PMultiKeyHelpW = LPMULTIKEYHELPW;
  360. {$IFDEF UNICODE}
  361.   MULTIKEYHELP = MULTIKEYHELPW;
  362.   {$EXTERNALSYM MULTIKEYHELP}
  363.   LPMULTIKEYHELP = LPMULTIKEYHELPW;
  364.   {$EXTERNALSYM LPMULTIKEYHELP}
  365.   TMultiKeyHelp = TMultiKeyHelpW;
  366.   PMultiKeyHelp = PMultiKeyHelpW;
  367. {$ELSE}
  368.   MULTIKEYHELP = MULTIKEYHELPA;
  369.   {$EXTERNALSYM MULTIKEYHELP}
  370.   LPMULTIKEYHELP = LPMULTIKEYHELPA;
  371.   {$EXTERNALSYM LPMULTIKEYHELP}
  372.   TMultiKeyHelp = TMultiKeyHelpA;
  373.   PMultiKeyHelp = PMultiKeyHelpA;
  374. {$ENDIF}
  375.   LPHELPWININFOA = ^HELPWININFOA;
  376.   {$EXTERNALSYM LPHELPWININFOA}
  377.   tagHELPWININFOA = record
  378.     wStructSize: Integer;
  379.     x: Integer;
  380.     y: Integer;
  381.     dx: Integer;
  382.     dy: Integer;
  383.     wMax: Integer;
  384.     rgchMember: array [0..1] of CHAR;
  385.   end;
  386.   {$EXTERNALSYM tagHELPWININFOA}
  387.   HELPWININFOA = tagHELPWININFOA;
  388.   {$EXTERNALSYM HELPWININFOA}
  389.   THelpWinInfoA = HELPWININFOA;
  390.   PHelpWinInfoA = LPHELPWININFOA;
  391.   LPHELPWININFOW = ^HELPWININFOW;
  392.   {$EXTERNALSYM LPHELPWININFOW}
  393.   tagHELPWININFOW = record
  394.     wStructSize: Integer;
  395.     x: Integer;
  396.     y: Integer;
  397.     dx: Integer;
  398.     dy: Integer;
  399.     wMax: Integer;
  400.     rgchMember: array [0..1] of WCHAR;
  401.   end;
  402.   {$EXTERNALSYM tagHELPWININFOW}
  403.   HELPWININFOW = tagHELPWININFOW;
  404.   {$EXTERNALSYM HELPWININFOW}
  405.   THelpWinInfoW = HELPWININFOW;
  406.   PHelpWinInfoW = LPHELPWININFOW;
  407. {$IFDEF UNICODE}
  408.   HELPWININFO = HELPWININFOW;
  409.   {$EXTERNALSYM HELPWININFO}
  410.   LPHELPWININFO = LPHELPWININFOW;
  411.   {$EXTERNALSYM LPHELPWININFO}
  412.   THelpWinInfo = THelpWinInfoW;
  413.   PHelpWinInfo = PHelpWinInfoW;
  414. {$ELSE}
  415.   HELPWININFO = HELPWININFOA;
  416.   {$EXTERNALSYM HELPWININFO}
  417.   LPHELPWININFO = LPHELPWININFOA;
  418.   {$EXTERNALSYM LPHELPWININFO}
  419.   THelpWinInfo = THelpWinInfoA;
  420.   PHelpWinInfo = PHelpWinInfoA;
  421. {$ENDIF}
  422. //
  423. // Commands to pass to WinHelp()
  424. //
  425. const
  426.   HELP_CONTEXT      = $0001; // Display topic in ulTopic
  427.   {$EXTERNALSYM HELP_CONTEXT}
  428.   HELP_QUIT         = $0002; // Terminate help
  429.   {$EXTERNALSYM HELP_QUIT}
  430.   HELP_INDEX        = $0003; // Display index
  431.   {$EXTERNALSYM HELP_INDEX}
  432.   HELP_CONTENTS     = $0003;
  433.   {$EXTERNALSYM HELP_CONTENTS}
  434.   HELP_HELPONHELP   = $0004; // Display help on using help
  435.   {$EXTERNALSYM HELP_HELPONHELP}
  436.   HELP_SETINDEX     = $0005; // Set current Index for multi index help
  437.   {$EXTERNALSYM HELP_SETINDEX}
  438.   HELP_SETCONTENTS  = $0005;
  439.   {$EXTERNALSYM HELP_SETCONTENTS}
  440.   HELP_CONTEXTPOPUP = $0008;
  441.   {$EXTERNALSYM HELP_CONTEXTPOPUP}
  442.   HELP_FORCEFILE    = $0009;
  443.   {$EXTERNALSYM HELP_FORCEFILE}
  444.   HELP_KEY          = $0101; // Display topic for keyword in offabData
  445.   {$EXTERNALSYM HELP_KEY}
  446.   HELP_COMMAND      = $0102;
  447.   {$EXTERNALSYM HELP_COMMAND}
  448.   HELP_PARTIALKEY   = $0105;
  449.   {$EXTERNALSYM HELP_PARTIALKEY}
  450.   HELP_MULTIKEY     = $0201;
  451.   {$EXTERNALSYM HELP_MULTIKEY}
  452.   HELP_SETWINPOS    = $0203;
  453.   {$EXTERNALSYM HELP_SETWINPOS}
  454.   HELP_CONTEXTMENU  = $000a;
  455.   {$EXTERNALSYM HELP_CONTEXTMENU}
  456.   HELP_FINDER       = $000b;
  457.   {$EXTERNALSYM HELP_FINDER}
  458.   HELP_WM_HELP      = $000c;
  459.   {$EXTERNALSYM HELP_WM_HELP}
  460.   HELP_SETPOPUP_POS = $000d;
  461.   {$EXTERNALSYM HELP_SETPOPUP_POS}
  462.   HELP_TCARD              = $8000;
  463.   {$EXTERNALSYM HELP_TCARD}
  464.   HELP_TCARD_DATA         = $0010;
  465.   {$EXTERNALSYM HELP_TCARD_DATA}
  466.   HELP_TCARD_OTHER_CALLER = $0011;
  467.   {$EXTERNALSYM HELP_TCARD_OTHER_CALLER}
  468. // These are in winhelp.h in Win95.
  469.   IDH_NO_HELP             = 28440;
  470.   {$EXTERNALSYM IDH_NO_HELP}
  471.   IDH_MISSING_CONTEXT     = 28441; // Control doesn't have matching help context
  472.   {$EXTERNALSYM IDH_MISSING_CONTEXT}
  473.   IDH_GENERIC_HELP_BUTTON = 28442; // Property sheet help button
  474.   {$EXTERNALSYM IDH_GENERIC_HELP_BUTTON}
  475.   IDH_OK                  = 28443;
  476.   {$EXTERNALSYM IDH_OK}
  477.   IDH_CANCEL              = 28444;
  478.   {$EXTERNALSYM IDH_CANCEL}
  479.   IDH_HELP                = 28445;
  480.   {$EXTERNALSYM IDH_HELP}
  481. function WinHelpA(hWndMain: HWND; lpszHelp: LPCSTR; uCommand: UINT; dwData: ULONG_PTR): BOOL; stdcall;
  482. {$EXTERNALSYM WinHelpA}
  483. function WinHelpW(hWndMain: HWND; lpszHelp: LPCWSTR; uCommand: UINT; dwData: ULONG_PTR): BOOL; stdcall;
  484. {$EXTERNALSYM WinHelpW}
  485. {$IFDEF UNICODE}
  486. function WinHelp(hWndMain: HWND; lpszHelp: LPCWSTR; uCommand: UINT; dwData: ULONG_PTR): BOOL; stdcall;
  487. {$EXTERNALSYM WinHelp}
  488. {$ELSE}
  489. function WinHelp(hWndMain: HWND; lpszHelp: LPCSTR; uCommand: UINT; dwData: ULONG_PTR): BOOL; stdcall;
  490. {$EXTERNALSYM WinHelp}
  491. {$ENDIF}
  492. const
  493.   GR_GDIOBJECTS  = 0; // Count of GDI objects
  494.   {$EXTERNALSYM GR_GDIOBJECTS}
  495.   GR_USEROBJECTS = 1; // Count of USER objects
  496.   {$EXTERNALSYM GR_USEROBJECTS}
  497. function GetGuiResources(hProcess: HANDLE; uiFlags: DWORD): DWORD; stdcall;
  498. {$EXTERNALSYM GetGuiResources}
  499. //
  500. // Parameter for SystemParametersInfo()
  501. //
  502. const
  503.   SPI_GETBEEP               = 1;
  504.   {$EXTERNALSYM SPI_GETBEEP}
  505.   SPI_SETBEEP               = 2;
  506.   {$EXTERNALSYM SPI_SETBEEP}
  507.   SPI_GETMOUSE              = 3;
  508.   {$EXTERNALSYM SPI_GETMOUSE}
  509.   SPI_SETMOUSE              = 4;
  510.   {$EXTERNALSYM SPI_SETMOUSE}
  511.   SPI_GETBORDER             = 5;
  512.   {$EXTERNALSYM SPI_GETBORDER}
  513.   SPI_SETBORDER             = 6;
  514.   {$EXTERNALSYM SPI_SETBORDER}
  515.   SPI_GETKEYBOARDSPEED      = 10;
  516.   {$EXTERNALSYM SPI_GETKEYBOARDSPEED}
  517.   SPI_SETKEYBOARDSPEED      = 11;
  518.   {$EXTERNALSYM SPI_SETKEYBOARDSPEED}
  519.   SPI_LANGDRIVER            = 12;
  520.   {$EXTERNALSYM SPI_LANGDRIVER}
  521.   SPI_ICONHORIZONTALSPACING = 13;
  522.   {$EXTERNALSYM SPI_ICONHORIZONTALSPACING}
  523.   SPI_GETSCREENSAVETIMEOUT  = 14;
  524.   {$EXTERNALSYM SPI_GETSCREENSAVETIMEOUT}
  525.   SPI_SETSCREENSAVETIMEOUT  = 15;
  526.   {$EXTERNALSYM SPI_SETSCREENSAVETIMEOUT}
  527.   SPI_GETSCREENSAVEACTIVE   = 16;
  528.   {$EXTERNALSYM SPI_GETSCREENSAVEACTIVE}
  529.   SPI_SETSCREENSAVEACTIVE   = 17;
  530.   {$EXTERNALSYM SPI_SETSCREENSAVEACTIVE}
  531.   SPI_GETGRIDGRANULARITY    = 18;
  532.   {$EXTERNALSYM SPI_GETGRIDGRANULARITY}
  533.   SPI_SETGRIDGRANULARITY    = 19;
  534.   {$EXTERNALSYM SPI_SETGRIDGRANULARITY}
  535.   SPI_SETDESKWALLPAPER      = 20;
  536.   {$EXTERNALSYM SPI_SETDESKWALLPAPER}
  537.   SPI_SETDESKPATTERN        = 21;
  538.   {$EXTERNALSYM SPI_SETDESKPATTERN}
  539.   SPI_GETKEYBOARDDELAY      = 22;
  540.   {$EXTERNALSYM SPI_GETKEYBOARDDELAY}
  541.   SPI_SETKEYBOARDDELAY      = 23;
  542.   {$EXTERNALSYM SPI_SETKEYBOARDDELAY}
  543.   SPI_ICONVERTICALSPACING   = 24;
  544.   {$EXTERNALSYM SPI_ICONVERTICALSPACING}
  545.   SPI_GETICONTITLEWRAP      = 25;
  546.   {$EXTERNALSYM SPI_GETICONTITLEWRAP}
  547.   SPI_SETICONTITLEWRAP      = 26;
  548.   {$EXTERNALSYM SPI_SETICONTITLEWRAP}
  549.   SPI_GETMENUDROPALIGNMENT  = 27;
  550.   {$EXTERNALSYM SPI_GETMENUDROPALIGNMENT}
  551.   SPI_SETMENUDROPALIGNMENT  = 28;
  552.   {$EXTERNALSYM SPI_SETMENUDROPALIGNMENT}
  553.   SPI_SETDOUBLECLKWIDTH     = 29;
  554.   {$EXTERNALSYM SPI_SETDOUBLECLKWIDTH}
  555.   SPI_SETDOUBLECLKHEIGHT    = 30;
  556.   {$EXTERNALSYM SPI_SETDOUBLECLKHEIGHT}
  557.   SPI_GETICONTITLELOGFONT   = 31;
  558.   {$EXTERNALSYM SPI_GETICONTITLELOGFONT}
  559.   SPI_SETDOUBLECLICKTIME    = 32;
  560.   {$EXTERNALSYM SPI_SETDOUBLECLICKTIME}
  561.   SPI_SETMOUSEBUTTONSWAP    = 33;
  562.   {$EXTERNALSYM SPI_SETMOUSEBUTTONSWAP}
  563.   SPI_SETICONTITLELOGFONT   = 34;
  564.   {$EXTERNALSYM SPI_SETICONTITLELOGFONT}
  565.   SPI_GETFASTTASKSWITCH     = 35;
  566.   {$EXTERNALSYM SPI_GETFASTTASKSWITCH}
  567.   SPI_SETFASTTASKSWITCH     = 36;
  568.   {$EXTERNALSYM SPI_SETFASTTASKSWITCH}
  569.   SPI_SETDRAGFULLWINDOWS    = 37;
  570.   {$EXTERNALSYM SPI_SETDRAGFULLWINDOWS}
  571.   SPI_GETDRAGFULLWINDOWS    = 38;
  572.   {$EXTERNALSYM SPI_GETDRAGFULLWINDOWS}
  573.   SPI_GETNONCLIENTMETRICS   = 41;
  574.   {$EXTERNALSYM SPI_GETNONCLIENTMETRICS}
  575.   SPI_SETNONCLIENTMETRICS   = 42;
  576.   {$EXTERNALSYM SPI_SETNONCLIENTMETRICS}
  577.   SPI_GETMINIMIZEDMETRICS   = 43;
  578.   {$EXTERNALSYM SPI_GETMINIMIZEDMETRICS}
  579.   SPI_SETMINIMIZEDMETRICS   = 44;
  580.   {$EXTERNALSYM SPI_SETMINIMIZEDMETRICS}
  581.   SPI_GETICONMETRICS        = 45;
  582.   {$EXTERNALSYM SPI_GETICONMETRICS}
  583.   SPI_SETICONMETRICS        = 46;
  584.   {$EXTERNALSYM SPI_SETICONMETRICS}
  585.   SPI_SETWORKAREA           = 47;
  586.   {$EXTERNALSYM SPI_SETWORKAREA}
  587.   SPI_GETWORKAREA           = 48;
  588.   {$EXTERNALSYM SPI_GETWORKAREA}
  589.   SPI_SETPENWINDOWS         = 49;
  590.   {$EXTERNALSYM SPI_SETPENWINDOWS}
  591.   SPI_GETHIGHCONTRAST       = 66;
  592.   {$EXTERNALSYM SPI_GETHIGHCONTRAST}
  593.   SPI_SETHIGHCONTRAST       = 67;
  594.   {$EXTERNALSYM SPI_SETHIGHCONTRAST}
  595.   SPI_GETKEYBOARDPREF       = 68;
  596.   {$EXTERNALSYM SPI_GETKEYBOARDPREF}
  597.   SPI_SETKEYBOARDPREF       = 69;
  598.   {$EXTERNALSYM SPI_SETKEYBOARDPREF}
  599.   SPI_GETSCREENREADER       = 70;
  600.   {$EXTERNALSYM SPI_GETSCREENREADER}
  601.   SPI_SETSCREENREADER       = 71;
  602.   {$EXTERNALSYM SPI_SETSCREENREADER}
  603.   SPI_GETANIMATION          = 72;
  604.   {$EXTERNALSYM SPI_GETANIMATION}
  605.   SPI_SETANIMATION          = 73;
  606.   {$EXTERNALSYM SPI_SETANIMATION}
  607.   SPI_GETFONTSMOOTHING      = 74;
  608.   {$EXTERNALSYM SPI_GETFONTSMOOTHING}
  609.   SPI_SETFONTSMOOTHING      = 75;
  610.   {$EXTERNALSYM SPI_SETFONTSMOOTHING}
  611.   SPI_SETDRAGWIDTH          = 76;
  612.   {$EXTERNALSYM SPI_SETDRAGWIDTH}
  613.   SPI_SETDRAGHEIGHT         = 77;
  614.   {$EXTERNALSYM SPI_SETDRAGHEIGHT}
  615.   SPI_SETHANDHELD           = 78;
  616.   {$EXTERNALSYM SPI_SETHANDHELD}
  617.   SPI_GETLOWPOWERTIMEOUT    = 79;
  618.   {$EXTERNALSYM SPI_GETLOWPOWERTIMEOUT}
  619.   SPI_GETPOWEROFFTIMEOUT    = 80;
  620.   {$EXTERNALSYM SPI_GETPOWEROFFTIMEOUT}
  621.   SPI_SETLOWPOWERTIMEOUT    = 81;
  622.   {$EXTERNALSYM SPI_SETLOWPOWERTIMEOUT}
  623.   SPI_SETPOWEROFFTIMEOUT    = 82;
  624.   {$EXTERNALSYM SPI_SETPOWEROFFTIMEOUT}
  625.   SPI_GETLOWPOWERACTIVE     = 83;
  626.   {$EXTERNALSYM SPI_GETLOWPOWERACTIVE}
  627.   SPI_GETPOWEROFFACTIVE     = 84;
  628.   {$EXTERNALSYM SPI_GETPOWEROFFACTIVE}
  629.   SPI_SETLOWPOWERACTIVE     = 85;
  630.   {$EXTERNALSYM SPI_SETLOWPOWERACTIVE}
  631.   SPI_SETPOWEROFFACTIVE     = 86;
  632.   {$EXTERNALSYM SPI_SETPOWEROFFACTIVE}
  633.   SPI_SETCURSORS            = 87;
  634.   {$EXTERNALSYM SPI_SETCURSORS}
  635.   SPI_SETICONS              = 88;
  636.   {$EXTERNALSYM SPI_SETICONS}
  637.   SPI_GETDEFAULTINPUTLANG   = 89;
  638.   {$EXTERNALSYM SPI_GETDEFAULTINPUTLANG}
  639.   SPI_SETDEFAULTINPUTLANG   = 90;
  640.   {$EXTERNALSYM SPI_SETDEFAULTINPUTLANG}
  641.   SPI_SETLANGTOGGLE         = 91;
  642.   {$EXTERNALSYM SPI_SETLANGTOGGLE}
  643.   SPI_GETWINDOWSEXTENSION   = 92;
  644.   {$EXTERNALSYM SPI_GETWINDOWSEXTENSION}
  645.   SPI_SETMOUSETRAILS        = 93;
  646.   {$EXTERNALSYM SPI_SETMOUSETRAILS}
  647.   SPI_GETMOUSETRAILS        = 94;
  648.   {$EXTERNALSYM SPI_GETMOUSETRAILS}
  649.   SPI_SETSCREENSAVERRUNNING = 97;
  650.   {$EXTERNALSYM SPI_SETSCREENSAVERRUNNING}
  651.   SPI_SCREENSAVERRUNNING    = SPI_SETSCREENSAVERRUNNING;
  652.   {$EXTERNALSYM SPI_SCREENSAVERRUNNING}
  653.   SPI_GETFILTERKEYS         = 50;
  654.   {$EXTERNALSYM SPI_GETFILTERKEYS}
  655.   SPI_SETFILTERKEYS         = 51;
  656.   {$EXTERNALSYM SPI_SETFILTERKEYS}
  657.   SPI_GETTOGGLEKEYS         = 52;
  658.   {$EXTERNALSYM SPI_GETTOGGLEKEYS}
  659.   SPI_SETTOGGLEKEYS         = 53;
  660.   {$EXTERNALSYM SPI_SETTOGGLEKEYS}
  661.   SPI_GETMOUSEKEYS          = 54;
  662.   {$EXTERNALSYM SPI_GETMOUSEKEYS}
  663.   SPI_SETMOUSEKEYS          = 55;
  664.   {$EXTERNALSYM SPI_SETMOUSEKEYS}
  665.   SPI_GETSHOWSOUNDS         = 56;
  666.   {$EXTERNALSYM SPI_GETSHOWSOUNDS}
  667.   SPI_SETSHOWSOUNDS         = 57;
  668.   {$EXTERNALSYM SPI_SETSHOWSOUNDS}
  669.   SPI_GETSTICKYKEYS         = 58;
  670.   {$EXTERNALSYM SPI_GETSTICKYKEYS}
  671.   SPI_SETSTICKYKEYS         = 59;
  672.   {$EXTERNALSYM SPI_SETSTICKYKEYS}
  673.   SPI_GETACCESSTIMEOUT      = 60;
  674.   {$EXTERNALSYM SPI_GETACCESSTIMEOUT}
  675.   SPI_SETACCESSTIMEOUT      = 61;
  676.   {$EXTERNALSYM SPI_SETACCESSTIMEOUT}
  677.   SPI_GETSERIALKEYS         = 62;
  678.   {$EXTERNALSYM SPI_GETSERIALKEYS}
  679.   SPI_SETSERIALKEYS         = 63;
  680.   {$EXTERNALSYM SPI_SETSERIALKEYS}
  681.   SPI_GETSOUNDSENTRY        = 64;
  682.   {$EXTERNALSYM SPI_GETSOUNDSENTRY}
  683.   SPI_SETSOUNDSENTRY        = 65;
  684.   {$EXTERNALSYM SPI_SETSOUNDSENTRY}
  685.   SPI_GETSNAPTODEFBUTTON    = 95;
  686.   {$EXTERNALSYM SPI_GETSNAPTODEFBUTTON}
  687.   SPI_SETSNAPTODEFBUTTON    = 96;
  688.   {$EXTERNALSYM SPI_SETSNAPTODEFBUTTON}
  689.   SPI_GETMOUSEHOVERWIDTH    = 98;
  690.   {$EXTERNALSYM SPI_GETMOUSEHOVERWIDTH}
  691.   SPI_SETMOUSEHOVERWIDTH    = 99;
  692.   {$EXTERNALSYM SPI_SETMOUSEHOVERWIDTH}
  693.   SPI_GETMOUSEHOVERHEIGHT   = 100;
  694.   {$EXTERNALSYM SPI_GETMOUSEHOVERHEIGHT}
  695.   SPI_SETMOUSEHOVERHEIGHT   = 101;
  696.   {$EXTERNALSYM SPI_SETMOUSEHOVERHEIGHT}
  697.   SPI_GETMOUSEHOVERTIME     = 102;
  698.   {$EXTERNALSYM SPI_GETMOUSEHOVERTIME}
  699.   SPI_SETMOUSEHOVERTIME     = 103;
  700.   {$EXTERNALSYM SPI_SETMOUSEHOVERTIME}
  701.   SPI_GETWHEELSCROLLLINES   = 104;
  702.   {$EXTERNALSYM SPI_GETWHEELSCROLLLINES}
  703.   SPI_SETWHEELSCROLLLINES   = 105;
  704.   {$EXTERNALSYM SPI_SETWHEELSCROLLLINES}
  705.   SPI_GETMENUSHOWDELAY      = 106;
  706.   {$EXTERNALSYM SPI_GETMENUSHOWDELAY}
  707.   SPI_SETMENUSHOWDELAY      = 107;
  708.   {$EXTERNALSYM SPI_SETMENUSHOWDELAY}
  709.   SPI_GETSHOWIMEUI = 110;
  710.   {$EXTERNALSYM SPI_GETSHOWIMEUI}
  711.   SPI_SETSHOWIMEUI = 111;
  712.   {$EXTERNALSYM SPI_SETSHOWIMEUI}
  713.   SPI_GETMOUSESPEED         = 112;
  714.   {$EXTERNALSYM SPI_GETMOUSESPEED}
  715.   SPI_SETMOUSESPEED         = 113;
  716.   {$EXTERNALSYM SPI_SETMOUSESPEED}
  717.   SPI_GETSCREENSAVERRUNNING = 114;
  718.   {$EXTERNALSYM SPI_GETSCREENSAVERRUNNING}
  719.   SPI_GETDESKWALLPAPER      = 115;
  720.   {$EXTERNALSYM SPI_GETDESKWALLPAPER}
  721.   SPI_GETACTIVEWINDOWTRACKING   = $1000;
  722.   {$EXTERNALSYM SPI_GETACTIVEWINDOWTRACKING}
  723.   SPI_SETACTIVEWINDOWTRACKING   = $1001;
  724.   {$EXTERNALSYM SPI_SETACTIVEWINDOWTRACKING}
  725.   SPI_GETMENUANIMATION          = $1002;
  726.   {$EXTERNALSYM SPI_GETMENUANIMATION}
  727.   SPI_SETMENUANIMATION          = $1003;
  728.   {$EXTERNALSYM SPI_SETMENUANIMATION}
  729.   SPI_GETCOMBOBOXANIMATION      = $1004;
  730.   {$EXTERNALSYM SPI_GETCOMBOBOXANIMATION}
  731.   SPI_SETCOMBOBOXANIMATION      = $1005;
  732.   {$EXTERNALSYM SPI_SETCOMBOBOXANIMATION}
  733.   SPI_GETLISTBOXSMOOTHSCROLLING = $1006;
  734.   {$EXTERNALSYM SPI_GETLISTBOXSMOOTHSCROLLING}
  735.   SPI_SETLISTBOXSMOOTHSCROLLING = $1007;
  736.   {$EXTERNALSYM SPI_SETLISTBOXSMOOTHSCROLLING}
  737.   SPI_GETGRADIENTCAPTIONS       = $1008;
  738.   {$EXTERNALSYM SPI_GETGRADIENTCAPTIONS}
  739.   SPI_SETGRADIENTCAPTIONS       = $1009;
  740.   {$EXTERNALSYM SPI_SETGRADIENTCAPTIONS}
  741.   SPI_GETKEYBOARDCUES           = $100A;
  742.   {$EXTERNALSYM SPI_GETKEYBOARDCUES}
  743.   SPI_SETKEYBOARDCUES           = $100B;
  744.   {$EXTERNALSYM SPI_SETKEYBOARDCUES}
  745.   SPI_GETMENUUNDERLINES         = SPI_GETKEYBOARDCUES;
  746.   {$EXTERNALSYM SPI_GETMENUUNDERLINES}
  747.   SPI_SETMENUUNDERLINES         = SPI_SETKEYBOARDCUES;
  748.   {$EXTERNALSYM SPI_SETMENUUNDERLINES}
  749.   SPI_GETACTIVEWNDTRKZORDER     = $100C;
  750.   {$EXTERNALSYM SPI_GETACTIVEWNDTRKZORDER}
  751.   SPI_SETACTIVEWNDTRKZORDER     = $100D;
  752.   {$EXTERNALSYM SPI_SETACTIVEWNDTRKZORDER}
  753.   SPI_GETHOTTRACKING            = $100E;
  754.   {$EXTERNALSYM SPI_GETHOTTRACKING}
  755.   SPI_SETHOTTRACKING            = $100F;
  756.   {$EXTERNALSYM SPI_SETHOTTRACKING}
  757.   SPI_GETMENUFADE               = $1012;
  758.   {$EXTERNALSYM SPI_GETMENUFADE}
  759.   SPI_SETMENUFADE               = $1013;
  760.   {$EXTERNALSYM SPI_SETMENUFADE}
  761.   SPI_GETSELECTIONFADE          = $1014;
  762.   {$EXTERNALSYM SPI_GETSELECTIONFADE}
  763.   SPI_SETSELECTIONFADE          = $1015;
  764.   {$EXTERNALSYM SPI_SETSELECTIONFADE}
  765.   SPI_GETTOOLTIPANIMATION       = $1016;
  766.   {$EXTERNALSYM SPI_GETTOOLTIPANIMATION}
  767.   SPI_SETTOOLTIPANIMATION       = $1017;
  768.   {$EXTERNALSYM SPI_SETTOOLTIPANIMATION}
  769.   SPI_GETTOOLTIPFADE            = $1018;
  770.   {$EXTERNALSYM SPI_GETTOOLTIPFADE}
  771.   SPI_SETTOOLTIPFADE            = $1019;
  772.   {$EXTERNALSYM SPI_SETTOOLTIPFADE}
  773.   SPI_GETCURSORSHADOW           = $101A;
  774.   {$EXTERNALSYM SPI_GETCURSORSHADOW}
  775.   SPI_SETCURSORSHADOW           = $101B;
  776.   {$EXTERNALSYM SPI_SETCURSORSHADOW}
  777.   SPI_GETMOUSESONAR             = $101C;
  778.   {$EXTERNALSYM SPI_GETMOUSESONAR}
  779.   SPI_SETMOUSESONAR             = $101D;
  780.   {$EXTERNALSYM SPI_SETMOUSESONAR}
  781.   SPI_GETMOUSECLICKLOCK         = $101E;
  782.   {$EXTERNALSYM SPI_GETMOUSECLICKLOCK}
  783.   SPI_SETMOUSECLICKLOCK         = $101F;
  784.   {$EXTERNALSYM SPI_SETMOUSECLICKLOCK}
  785.   SPI_GETMOUSEVANISH            = $1020;
  786.   {$EXTERNALSYM SPI_GETMOUSEVANISH}
  787.   SPI_SETMOUSEVANISH            = $1021;
  788.   {$EXTERNALSYM SPI_SETMOUSEVANISH}
  789.   SPI_GETFLATMENU               = $1022;
  790.   {$EXTERNALSYM SPI_GETFLATMENU}
  791.   SPI_SETFLATMENU               = $1023;
  792.   {$EXTERNALSYM SPI_SETFLATMENU}
  793.   SPI_GETDROPSHADOW             = $1024;
  794.   {$EXTERNALSYM SPI_GETDROPSHADOW}
  795.   SPI_SETDROPSHADOW             = $1025;
  796.   {$EXTERNALSYM SPI_SETDROPSHADOW}
  797.   SPI_GETBLOCKSENDINPUTRESETS   = $1026;
  798.   {$EXTERNALSYM SPI_GETBLOCKSENDINPUTRESETS}
  799.   SPI_SETBLOCKSENDINPUTRESETS   = $1027;
  800.   {$EXTERNALSYM SPI_SETBLOCKSENDINPUTRESETS}
  801.   SPI_GETUIEFFECTS = $103E;
  802.   {$EXTERNALSYM SPI_GETUIEFFECTS}
  803.   SPI_SETUIEFFECTS = $103F;
  804.   {$EXTERNALSYM SPI_SETUIEFFECTS}
  805.   SPI_GETFOREGROUNDLOCKTIMEOUT = $2000;
  806.   {$EXTERNALSYM SPI_GETFOREGROUNDLOCKTIMEOUT}
  807.   SPI_SETFOREGROUNDLOCKTIMEOUT = $2001;
  808.   {$EXTERNALSYM SPI_SETFOREGROUNDLOCKTIMEOUT}
  809.   SPI_GETACTIVEWNDTRKTIMEOUT   = $2002;
  810.   {$EXTERNALSYM SPI_GETACTIVEWNDTRKTIMEOUT}
  811.   SPI_SETACTIVEWNDTRKTIMEOUT   = $2003;
  812.   {$EXTERNALSYM SPI_SETACTIVEWNDTRKTIMEOUT}
  813.   SPI_GETFOREGROUNDFLASHCOUNT  = $2004;
  814.   {$EXTERNALSYM SPI_GETFOREGROUNDFLASHCOUNT}
  815.   SPI_SETFOREGROUNDFLASHCOUNT  = $2005;
  816.   {$EXTERNALSYM SPI_SETFOREGROUNDFLASHCOUNT}
  817.   SPI_GETCARETWIDTH            = $2006;
  818.   {$EXTERNALSYM SPI_GETCARETWIDTH}
  819.   SPI_SETCARETWIDTH            = $2007;
  820.   {$EXTERNALSYM SPI_SETCARETWIDTH}
  821.   SPI_GETMOUSECLICKLOCKTIME    = $2008;
  822.   {$EXTERNALSYM SPI_GETMOUSECLICKLOCKTIME}
  823.   SPI_SETMOUSECLICKLOCKTIME    = $2009;
  824.   {$EXTERNALSYM SPI_SETMOUSECLICKLOCKTIME}
  825.   SPI_GETFONTSMOOTHINGTYPE     = $200A;
  826.   {$EXTERNALSYM SPI_GETFONTSMOOTHINGTYPE}
  827.   SPI_SETFONTSMOOTHINGTYPE     = $200B;
  828.   {$EXTERNALSYM SPI_SETFONTSMOOTHINGTYPE}
  829. // constants for SPI_GETFONTSMOOTHINGTYPE and SPI_SETFONTSMOOTHINGTYPE
  830.   FE_FONTSMOOTHINGSTANDARD     = $0001;
  831.   {$EXTERNALSYM FE_FONTSMOOTHINGSTANDARD}
  832.   FE_FONTSMOOTHINGCLEARTYPE    = $0002;
  833.   {$EXTERNALSYM FE_FONTSMOOTHINGCLEARTYPE}
  834.   FE_FONTSMOOTHINGDOCKING      = $8000;
  835.   {$EXTERNALSYM FE_FONTSMOOTHINGDOCKING}
  836.   SPI_GETFONTSMOOTHINGCONTRAST = $200C;
  837.   {$EXTERNALSYM SPI_GETFONTSMOOTHINGCONTRAST}
  838.   SPI_SETFONTSMOOTHINGCONTRAST = $200D;
  839.   {$EXTERNALSYM SPI_SETFONTSMOOTHINGCONTRAST}
  840.   SPI_GETFOCUSBORDERWIDTH      = $200E;
  841.   {$EXTERNALSYM SPI_GETFOCUSBORDERWIDTH}
  842.   SPI_SETFOCUSBORDERWIDTH      = $200F;
  843.   {$EXTERNALSYM SPI_SETFOCUSBORDERWIDTH}
  844.   SPI_GETFOCUSBORDERHEIGHT     = $2010;
  845.   {$EXTERNALSYM SPI_GETFOCUSBORDERHEIGHT}
  846.   SPI_SETFOCUSBORDERHEIGHT     = $2011;
  847.   {$EXTERNALSYM SPI_SETFOCUSBORDERHEIGHT}
  848.   SPI_GETFONTSMOOTHINGORIENTATION = $2012;
  849.   {$EXTERNALSYM SPI_GETFONTSMOOTHINGORIENTATION}
  850.   SPI_SETFONTSMOOTHINGORIENTATION = $2013;
  851.   {$EXTERNALSYM SPI_SETFONTSMOOTHINGORIENTATION}
  852. // constants for SPI_GETFONTSMOOTHINGORIENTATION and SPI_SETFONTSMOOTHINGORIENTATION:
  853.   FE_FONTSMOOTHINGORIENTATIONBGR = $0000;
  854.   {$EXTERNALSYM FE_FONTSMOOTHINGORIENTATIONBGR}
  855.   FE_FONTSMOOTHINGORIENTATIONRGB = $0001;
  856.   {$EXTERNALSYM FE_FONTSMOOTHINGORIENTATIONRGB}
  857. //
  858. // Flags
  859. //
  860.   SPIF_UPDATEINIFILE    = $0001;
  861.   {$EXTERNALSYM SPIF_UPDATEINIFILE}
  862.   SPIF_SENDWININICHANGE = $0002;
  863.   {$EXTERNALSYM SPIF_SENDWININICHANGE}
  864.   SPIF_SENDCHANGE       = SPIF_SENDWININICHANGE;
  865.   {$EXTERNALSYM SPIF_SENDCHANGE}
  866.   METRICS_USEDEFAULT = DWORD(-1);
  867.   {$EXTERNALSYM METRICS_USEDEFAULT}
  868. type
  869.   LPNONCLIENTMETRICSA = ^NONCLIENTMETRICSA;
  870.   {$EXTERNALSYM LPNONCLIENTMETRICSA}
  871.   tagNONCLIENTMETRICSA = record
  872.     cbSize: UINT;
  873.     iBorderWidth: Integer;
  874.     iScrollWidth: Integer;
  875.     iScrollHeight: Integer;
  876.     iCaptionWidth: Integer;
  877.     iCaptionHeight: Integer;
  878.     lfCaptionFont: LOGFONTA;
  879.     iSmCaptionWidth: Integer;
  880.     iSmCaptionHeight: Integer;
  881.     lfSmCaptionFont: LOGFONTA;
  882.     iMenuWidth: Integer;
  883.     iMenuHeight: Integer;
  884.     lfMenuFont: LOGFONTA;
  885.     lfStatusFont: LOGFONTA;
  886.     lfMessageFont: LOGFONTA;
  887.   end;
  888.   {$EXTERNALSYM tagNONCLIENTMETRICSA}
  889.   NONCLIENTMETRICSA = tagNONCLIENTMETRICSA;
  890.   {$EXTERNALSYM NONCLIENTMETRICSA}
  891.   TNonClientMetricsA = NONCLIENTMETRICSA;
  892.   PNonClientMetricsA = LPNONCLIENTMETRICSA;
  893.   LPNONCLIENTMETRICSW = ^NONCLIENTMETRICSW;
  894.   {$EXTERNALSYM LPNONCLIENTMETRICSW}
  895.   tagNONCLIENTMETRICSW = record
  896.     cbSize: UINT;
  897.     iBorderWidth: Integer;
  898.     iScrollWidth: Integer;
  899.     iScrollHeight: Integer;
  900.     iCaptionWidth: Integer;
  901.     iCaptionHeight: Integer;
  902.     lfCaptionFont: LOGFONTW;
  903.     iSmCaptionWidth: Integer;
  904.     iSmCaptionHeight: Integer;
  905.     lfSmCaptionFont: LOGFONTW;
  906.     iMenuWidth: Integer;
  907.     iMenuHeight: Integer;
  908.     lfMenuFont: LOGFONTW;
  909.     lfStatusFont: LOGFONTW;
  910.     lfMessageFont: LOGFONTW;
  911.   end;
  912.   {$EXTERNALSYM tagNONCLIENTMETRICSW}
  913.   NONCLIENTMETRICSW = tagNONCLIENTMETRICSW;
  914.   {$EXTERNALSYM NONCLIENTMETRICSW}
  915.   TNonClientMetricsW = NONCLIENTMETRICSW;
  916.   PNonClientMetricsW = LPNONCLIENTMETRICSW;
  917. {$IFDEF UNICODE}
  918.   NONCLIENTMETRICS = NONCLIENTMETRICSW;
  919.   {$EXTERNALSYM NONCLIENTMETRICS}
  920.   LPNONCLIENTMETRICS = LPNONCLIENTMETRICSW;
  921.   {$EXTERNALSYM LPNONCLIENTMETRICS}
  922.   TNonClientMetrics = TNonClientMetricsW;
  923.   PNonClientMetrics = PNonClientMetricsW;
  924. {$ELSE}
  925.   NONCLIENTMETRICS = NONCLIENTMETRICSA;
  926.   {$EXTERNALSYM NONCLIENTMETRICS}
  927.   LPNONCLIENTMETRICS = LPNONCLIENTMETRICSA;
  928.   {$EXTERNALSYM LPNONCLIENTMETRICS}
  929.   TNonClientMetrics = TNonClientMetricsA;
  930.   PNonClientMetrics = PNonClientMetricsA;
  931. {$ENDIF}
  932. const
  933.   ARW_BOTTOMLEFT  = $0000;
  934.   {$EXTERNALSYM ARW_BOTTOMLEFT}
  935.   ARW_BOTTOMRIGHT = $0001;
  936.   {$EXTERNALSYM ARW_BOTTOMRIGHT}
  937.   ARW_TOPLEFT     = $0002;
  938.   {$EXTERNALSYM ARW_TOPLEFT}
  939.   ARW_TOPRIGHT    = $0003;
  940.   {$EXTERNALSYM ARW_TOPRIGHT}
  941.   ARW_STARTMASK   = $0003;
  942.   {$EXTERNALSYM ARW_STARTMASK}
  943.   ARW_STARTRIGHT  = $0001;
  944.   {$EXTERNALSYM ARW_STARTRIGHT}
  945.   ARW_STARTTOP    = $0002;
  946.   {$EXTERNALSYM ARW_STARTTOP}
  947.   ARW_LEFT  = $0000;
  948.   {$EXTERNALSYM ARW_LEFT}
  949.   ARW_RIGHT = $0000;
  950.   {$EXTERNALSYM ARW_RIGHT}
  951.   ARW_UP    = $0004;
  952.   {$EXTERNALSYM ARW_UP}
  953.   ARW_DOWN  = $0004;
  954.   {$EXTERNALSYM ARW_DOWN}
  955.   ARW_HIDE  = $0008;
  956.   {$EXTERNALSYM ARW_HIDE}
  957. type
  958.   LPMINIMIZEDMETRICS = ^MINIMIZEDMETRICS;
  959.   {$EXTERNALSYM LPMINIMIZEDMETRICS}
  960.   tagMINIMIZEDMETRICS = record
  961.     cbSize: UINT;
  962.     iWidth: Integer;
  963.     iHorzGap: Integer;
  964.     iVertGap: Integer;
  965.     iArrange: Integer;
  966.   end;
  967.   {$EXTERNALSYM tagMINIMIZEDMETRICS}
  968.   MINIMIZEDMETRICS = tagMINIMIZEDMETRICS;
  969.   {$EXTERNALSYM MINIMIZEDMETRICS}
  970.   TMinimizedMetrics = MINIMIZEDMETRICS;
  971.   PMinimizedMetrics = LPMINIMIZEDMETRICS;
  972.   LPICONMETRICSA = ^ICONMETRICSA;
  973.   {$EXTERNALSYM LPICONMETRICSA}
  974.   tagICONMETRICSA = record
  975.     cbSize: UINT;
  976.     iHorzSpacing: Integer;
  977.     iVertSpacing: Integer;
  978.     iTitleWrap: Integer;
  979.     lfFont: LOGFONTA;
  980.   end;
  981.   {$EXTERNALSYM tagICONMETRICSA}
  982.   ICONMETRICSA = tagICONMETRICSA;
  983.   {$EXTERNALSYM ICONMETRICSA}
  984.   TIconMetricsA = ICONMETRICSA;
  985.   PIconMetricsA = LPICONMETRICSA;
  986.   LPICONMETRICSW = ^ICONMETRICSW;
  987.   {$EXTERNALSYM LPICONMETRICSW}
  988.   tagICONMETRICSW = record
  989.     cbSize: UINT;
  990.     iHorzSpacing: Integer;
  991.     iVertSpacing: Integer;
  992.     iTitleWrap: Integer;
  993.     lfFont: LOGFONTW;
  994.   end;
  995.   {$EXTERNALSYM tagICONMETRICSW}
  996.   ICONMETRICSW = tagICONMETRICSW;
  997.   {$EXTERNALSYM ICONMETRICSW}
  998.   TIconMetricsW = ICONMETRICSW;
  999.   PIconMetricsW = LPICONMETRICSW;
  1000. {$IFDEF UNICODE}
  1001.   ICONMETRICS = ICONMETRICSW;
  1002.   {$EXTERNALSYM ICONMETRICS}
  1003.   LPICONMETRICS = LPICONMETRICSW;
  1004.   {$EXTERNALSYM LPICONMETRICS}
  1005.   TIconMetrics = TIconMetricsW;
  1006.   PIconMetrics = PIconMetricsW;
  1007. {$ELSE}
  1008.   ICONMETRICS = ICONMETRICSA;
  1009.   {$EXTERNALSYM ICONMETRICS}
  1010.   LPICONMETRICS = LPICONMETRICSA;
  1011.   {$EXTERNALSYM LPICONMETRICS}
  1012.   TIconMetrics = TIconMetricsA;
  1013.   PIconMetrics = PIconMetricsA;
  1014. {$ENDIF}
  1015.   LPANIMATIONINFO = ^ANIMATIONINFO;
  1016.   {$EXTERNALSYM LPANIMATIONINFO}
  1017.   tagANIMATIONINFO = record
  1018.     cbSize: UINT;
  1019.     iMinAnimate: Integer;
  1020.   end;
  1021.   {$EXTERNALSYM tagANIMATIONINFO}
  1022.   ANIMATIONINFO = tagANIMATIONINFO;
  1023.   {$EXTERNALSYM ANIMATIONINFO}
  1024.   TAnimationInfo = ANIMATIONINFO;
  1025.   PAnimationInfo = LPANIMATIONINFO;
  1026.   LPSERIALKEYSA = ^SERIALKEYSA;
  1027.   {$EXTERNALSYM LPSERIALKEYSA}
  1028.   tagSERIALKEYSA = record
  1029.     cbSize: UINT;
  1030.     dwFlags: DWORD;
  1031.     lpszActivePort: LPSTR;
  1032.     lpszPort: LPSTR;
  1033.     iBaudRate: UINT;
  1034.     iPortState: UINT;
  1035.     iActive: UINT;
  1036.   end;
  1037.   {$EXTERNALSYM tagSERIALKEYSA}
  1038.   SERIALKEYSA = tagSERIALKEYSA;
  1039.   {$EXTERNALSYM SERIALKEYSA}
  1040.   TSerialKeysA = SERIALKEYSA;
  1041.   PSerialKeysA = LPSERIALKEYSA;
  1042.   LPSERIALKEYSW = ^SERIALKEYSW;
  1043.   {$EXTERNALSYM LPSERIALKEYSW}
  1044.   tagSERIALKEYSW = record
  1045.     cbSize: UINT;
  1046.     dwFlags: DWORD;
  1047.     lpszActivePort: LPWSTR;
  1048.     lpszPort: LPWSTR;
  1049.     iBaudRate: UINT;
  1050.     iPortState: UINT;
  1051.     iActive: UINT;
  1052.   end;
  1053.   {$EXTERNALSYM tagSERIALKEYSW}
  1054.   SERIALKEYSW = tagSERIALKEYSW;
  1055.   {$EXTERNALSYM SERIALKEYSW}
  1056.   TSerialKeysW = SERIALKEYSW;
  1057.   PSerialKeysW = LPSERIALKEYSW;
  1058. {$IFDEF UNICODE}
  1059.   SERIALKEYS = SERIALKEYSW;
  1060.   {$EXTERNALSYM SERIALKEYS}
  1061.   LPSERIALKEYS = LPSERIALKEYSW;
  1062.   {$EXTERNALSYM LPSERIALKEYS}
  1063.   TSerialKeys = TSerialKeysW;
  1064.   PSerialKeys = PSerialKeysW;
  1065. {$ELSE}
  1066.   SERIALKEYS = SERIALKEYSA;
  1067.   {$EXTERNALSYM SERIALKEYS}
  1068.   LPSERIALKEYS = LPSERIALKEYSA;
  1069.   {$EXTERNALSYM LPSERIALKEYS}
  1070.   TSerialKeys = TSerialKeysA;
  1071.   PSerialKeys = PSerialKeysA;
  1072. {$ENDIF}
  1073. // flags for SERIALKEYS dwFlags field//
  1074. const
  1075.   SERKF_SERIALKEYSON = $00000001;
  1076.   {$EXTERNALSYM SERKF_SERIALKEYSON}
  1077.   SERKF_AVAILABLE    = $00000002;
  1078.   {$EXTERNALSYM SERKF_AVAILABLE}
  1079.   SERKF_INDICATOR    = $00000004;
  1080.   {$EXTERNALSYM SERKF_INDICATOR}
  1081. type
  1082.   LPHIGHCONTRASTA = ^HIGHCONTRASTA;
  1083.   {$EXTERNALSYM LPHIGHCONTRASTA}
  1084.   tagHIGHCONTRASTA = record
  1085.     cbSize: UINT;
  1086.     dwFlags: DWORD;
  1087.     lpszDefaultScheme: LPSTR;
  1088.   end;
  1089.   {$EXTERNALSYM tagHIGHCONTRASTA}
  1090.   HIGHCONTRASTA = tagHIGHCONTRASTA;
  1091.   {$EXTERNALSYM HIGHCONTRASTA}
  1092.   THighContrastA = HIGHCONTRASTA;
  1093.   PHighContrastA = LPHIGHCONTRASTA;
  1094.   LPHIGHCONTRASTW = ^HIGHCONTRASTW;
  1095.   {$EXTERNALSYM LPHIGHCONTRASTW}
  1096.   tagHIGHCONTRASTW = record
  1097.     cbSize: UINT;
  1098.     dwFlags: DWORD;
  1099.     lpszDefaultScheme: LPWSTR;
  1100.   end;
  1101.   {$EXTERNALSYM tagHIGHCONTRASTW}
  1102.   HIGHCONTRASTW = tagHIGHCONTRASTW;
  1103.   {$EXTERNALSYM HIGHCONTRASTW}
  1104.   THighContrastW = HIGHCONTRASTW;
  1105.   PHighContrastW = LPHIGHCONTRASTW;
  1106. {$IFDEF UNICODE}
  1107.   HIGHCONTRAST = HIGHCONTRASTW;
  1108.   {$EXTERNALSYM HIGHCONTRAST}
  1109.   LPHIGHCONTRAST = LPHIGHCONTRASTW;
  1110.   {$EXTERNALSYM LPHIGHCONTRAST}
  1111.   THighContrast = THighContrastW;
  1112.   PHighContrast = PHighContrastW;  
  1113. {$ELSE}
  1114.   HIGHCONTRAST = HIGHCONTRASTA;
  1115.   {$EXTERNALSYM HIGHCONTRAST}
  1116.   LPHIGHCONTRAST = LPHIGHCONTRASTA;
  1117.   {$EXTERNALSYM LPHIGHCONTRAST}
  1118.   THighContrast = THighContrastA;
  1119.   PHighContrast = PHighContrastA;
  1120. {$ENDIF}
  1121. // flags for HIGHCONTRAST dwFlags field//
  1122. const
  1123.   HCF_HIGHCONTRASTON  = $00000001;
  1124.   {$EXTERNALSYM HCF_HIGHCONTRASTON}
  1125.   HCF_AVAILABLE       = $00000002;
  1126.   {$EXTERNALSYM HCF_AVAILABLE}
  1127.   HCF_HOTKEYACTIVE    = $00000004;
  1128.   {$EXTERNALSYM HCF_HOTKEYACTIVE}
  1129.   HCF_CONFIRMHOTKEY   = $00000008;
  1130.   {$EXTERNALSYM HCF_CONFIRMHOTKEY}
  1131.   HCF_HOTKEYSOUND     = $00000010;
  1132.   {$EXTERNALSYM HCF_HOTKEYSOUND}
  1133.   HCF_INDICATOR       = $00000020;
  1134.   {$EXTERNALSYM HCF_INDICATOR}
  1135.   HCF_HOTKEYAVAILABLE = $00000040;
  1136.   {$EXTERNALSYM HCF_HOTKEYAVAILABLE}
  1137. // Flags for ChangeDisplaySettings//
  1138.   CDS_UPDATEREGISTRY  = $00000001;
  1139.   {$EXTERNALSYM CDS_UPDATEREGISTRY}
  1140.   CDS_TEST            = $00000002;
  1141.   {$EXTERNALSYM CDS_TEST}
  1142.   CDS_FULLSCREEN      = $00000004;
  1143.   {$EXTERNALSYM CDS_FULLSCREEN}
  1144.   CDS_GLOBAL          = $00000008;
  1145.   {$EXTERNALSYM CDS_GLOBAL}
  1146.   CDS_SET_PRIMARY     = $00000010;
  1147.   {$EXTERNALSYM CDS_SET_PRIMARY}
  1148.   CDS_VIDEOPARAMETERS = $00000020;
  1149.   {$EXTERNALSYM CDS_VIDEOPARAMETERS}
  1150.   CDS_RESET           = $40000000;
  1151.   {$EXTERNALSYM CDS_RESET}
  1152.   CDS_NORESET         = $10000000;
  1153.   {$EXTERNALSYM CDS_NORESET}
  1154. // #include <tvout.h>
  1155. // Return values for ChangeDisplaySettings
  1156.   DISP_CHANGE_SUCCESSFUL = 0;
  1157.   {$EXTERNALSYM DISP_CHANGE_SUCCESSFUL}
  1158.   DISP_CHANGE_RESTART    = 1;
  1159.   {$EXTERNALSYM DISP_CHANGE_RESTART}
  1160.   DISP_CHANGE_FAILED     = DWORD(-1);
  1161.   {$EXTERNALSYM DISP_CHANGE_FAILED}
  1162.   DISP_CHANGE_BADMODE    = DWORD(-2);
  1163.   {$EXTERNALSYM DISP_CHANGE_BADMODE}
  1164.   DISP_CHANGE_NOTUPDATED = DWORD(-3);
  1165.   {$EXTERNALSYM DISP_CHANGE_NOTUPDATED}
  1166.   DISP_CHANGE_BADFLAGS   = DWORD(-4);
  1167.   {$EXTERNALSYM DISP_CHANGE_BADFLAGS}
  1168.   DISP_CHANGE_BADPARAM   = DWORD(-5);
  1169.   {$EXTERNALSYM DISP_CHANGE_BADPARAM}
  1170.   DISP_CHANGE_BADDUALVIEW = DWORD(-6);
  1171.   {$EXTERNALSYM DISP_CHANGE_BADDUALVIEW}
  1172. function ChangeDisplaySettingsA(lpDevMode: LPDEVMODEA; dwFlags: DWORD): LONG; stdcall;
  1173. {$EXTERNALSYM ChangeDisplaySettingsA}
  1174. function ChangeDisplaySettingsW(lpDevMode: LPDEVMODEW; dwFlags: DWORD): LONG; stdcall;
  1175. {$EXTERNALSYM ChangeDisplaySettingsW}
  1176. {$IFDEF UNICODE}
  1177. function ChangeDisplaySettings(lpDevMode: LPDEVMODEW; dwFlags: DWORD): LONG; stdcall;
  1178. {$EXTERNALSYM ChangeDisplaySettings}
  1179. {$ELSE}
  1180. function ChangeDisplaySettings(lpDevMode: LPDEVMODEA; dwFlags: DWORD): LONG; stdcall;
  1181. {$EXTERNALSYM ChangeDisplaySettings}
  1182. {$ENDIF}
  1183. function ChangeDisplaySettingsExA(lpszDeviceName: LPCSTR; lpDevMode: LPDEVMODEA;
  1184.   hwnd: HWND; dwflags: DWORD; lParam: LPVOID): LONG; stdcall;
  1185. {$EXTERNALSYM ChangeDisplaySettingsExA}
  1186. function ChangeDisplaySettingsExW(lpszDeviceName: LPCWSTR; lpDevMode: LPDEVMODEW;
  1187.   hwnd: HWND; dwflags: DWORD; lParam: LPVOID): LONG; stdcall;
  1188. {$EXTERNALSYM ChangeDisplaySettingsExW}
  1189. {$IFDEF UNICODE}
  1190. function ChangeDisplaySettingsEx(lpszDeviceName: LPCWSTR; lpDevMode: LPDEVMODEW;
  1191.   hwnd: HWND; dwflags: DWORD; lParam: LPVOID): LONG; stdcall;
  1192. {$EXTERNALSYM ChangeDisplaySettingsEx}
  1193. {$ELSE}
  1194. function ChangeDisplaySettingsEx(lpszDeviceName: LPCSTR; lpDevMode: LPDEVMODEA;
  1195.   hwnd: HWND; dwflags: DWORD; lParam: LPVOID): LONG; stdcall;
  1196. {$EXTERNALSYM ChangeDisplaySettingsEx}
  1197. {$ENDIF}
  1198. const
  1199.   ENUM_CURRENT_SETTINGS  = DWORD(-1);
  1200.   {$EXTERNALSYM ENUM_CURRENT_SETTINGS}
  1201.   ENUM_REGISTRY_SETTINGS = DWORD(-2);
  1202.   {$EXTERNALSYM ENUM_REGISTRY_SETTINGS}
  1203. function EnumDisplaySettingsA(lpszDeviceName: LPCSTR; iModeNum: DWORD;
  1204.   var lpDevMode: DEVMODEA): BOOL; stdcall;
  1205. {$EXTERNALSYM EnumDisplaySettingsA}
  1206. function EnumDisplaySettingsW(lpszDeviceName: LPCWSTR; iModeNum: DWORD;
  1207.   var lpDevMode: DEVMODEW): BOOL; stdcall;
  1208. {$EXTERNALSYM EnumDisplaySettingsW}
  1209. {$IFDEF UNICODE}
  1210. function EnumDisplaySettings(lpszDeviceName: LPCWSTR; iModeNum: DWORD;
  1211.   var lpDevMode: DEVMODEW): BOOL; stdcall;
  1212. {$EXTERNALSYM EnumDisplaySettings}
  1213. {$ELSE}
  1214. function EnumDisplaySettings(lpszDeviceName: LPCSTR; iModeNum: DWORD;
  1215.   var lpDevMode: DEVMODEA): BOOL; stdcall;
  1216. {$EXTERNALSYM EnumDisplaySettings}
  1217. {$ENDIF}
  1218. function EnumDisplaySettingsExA(lpszDeviceName: LPCSTR; iModeNum: DWORD;
  1219.   var lpDevMode: DEVMODEA; dwFlags: DWORD): BOOL; stdcall;
  1220. {$EXTERNALSYM EnumDisplaySettingsExA}
  1221. function EnumDisplaySettingsExW(lpszDeviceName: LPCWSTR; iModeNum: DWORD;
  1222.   var lpDevMode: DEVMODEW; dwFlags: DWORD): BOOL; stdcall;
  1223. {$EXTERNALSYM EnumDisplaySettingsExW}
  1224. {$IFDEF UNICODE}
  1225. function EnumDisplaySettingsEx(lpszDeviceName: LPCWSTR; iModeNum: DWORD;
  1226.   var lpDevMode: DEVMODEW; dwFlags: DWORD): BOOL; stdcall;
  1227. {$EXTERNALSYM EnumDisplaySettingsEx}
  1228. {$ELSE}
  1229. function EnumDisplaySettingsEx(lpszDeviceName: LPCSTR; iModeNum: DWORD;
  1230.   var lpDevMode: DEVMODEA; dwFlags: DWORD): BOOL; stdcall;
  1231. {$EXTERNALSYM EnumDisplaySettingsEx}
  1232. {$ENDIF}
  1233. // Flags for EnumDisplaySettingsEx//
  1234. const
  1235.   EDS_RAWMODE = $00000002;
  1236.   {$EXTERNALSYM EDS_RAWMODE}
  1237. function EnumDisplayDevicesA(lpDevice: LPCSTR; iDevNum: DWORD;
  1238.   var lpDisplayDevice: DISPLAY_DEVICEA; dwFlags: DWORD): BOOL; stdcall;
  1239. {$EXTERNALSYM EnumDisplayDevicesA}
  1240. function EnumDisplayDevicesW(lpDevice: LPCWSTR; iDevNum: DWORD;
  1241.   var lpDisplayDevice: DISPLAY_DEVICEW; dwFlags: DWORD): BOOL; stdcall;
  1242. {$EXTERNALSYM EnumDisplayDevicesW}
  1243. {$IFDEF UNICODE}
  1244. function EnumDisplayDevices(lpDevice: LPCWSTR; iDevNum: DWORD;
  1245.   var lpDisplayDevice: DISPLAY_DEVICEW; dwFlags: DWORD): BOOL; stdcall;
  1246. {$EXTERNALSYM EnumDisplayDevices}
  1247. {$ELSE}
  1248. function EnumDisplayDevices(lpDevice: LPCSTR; iDevNum: DWORD;
  1249.   var lpDisplayDevice: DISPLAY_DEVICEA; dwFlags: DWORD): BOOL; stdcall;
  1250. {$EXTERNALSYM EnumDisplayDevices}
  1251. {$ENDIF}
  1252. function SystemParametersInfoA(uiAction: UINT; uiParam: UINT;
  1253.   pvParam: PVOID; fWinIni: UINT): BOOL; stdcall;
  1254. {$EXTERNALSYM SystemParametersInfoA}
  1255. function SystemParametersInfoW(uiAction: UINT; uiParam: UINT;
  1256.   pvParam: PVOID; fWinIni: UINT): BOOL; stdcall;
  1257. {$EXTERNALSYM SystemParametersInfoW}
  1258. {$IFDEF UNICODE}
  1259. function SystemParametersInfo(uiAction: UINT; uiParam: UINT;
  1260.   pvParam: PVOID; fWinIni: UINT): BOOL; stdcall;
  1261. {$EXTERNALSYM SystemParametersInfo}
  1262. {$ELSE}
  1263. function SystemParametersInfo(uiAction: UINT; uiParam: UINT;
  1264.   pvParam: PVOID; fWinIni: UINT): BOOL; stdcall;
  1265. {$EXTERNALSYM SystemParametersInfo}
  1266. {$ENDIF}
  1267. //
  1268. // Accessibility support
  1269. //
  1270. type
  1271.   LPFILTERKEYS = ^FILTERKEYS;
  1272.   {$EXTERNALSYM LPFILTERKEYS}
  1273.   tagFILTERKEYS = record
  1274.     cbSize: UINT;
  1275.     dwFlags: DWORD;
  1276.     iWaitMSec: DWORD;   // Acceptance Delay
  1277.     iDelayMSec: DWORD;  // Delay Until Repeat
  1278.     iRepeatMSec: DWORD; // Repeat Rate
  1279.     iBounceMSec: DWORD; // Debounce Time
  1280.   end;
  1281.   {$EXTERNALSYM tagFILTERKEYS}
  1282.   FILTERKEYS = tagFILTERKEYS;
  1283.   {$EXTERNALSYM FILTERKEYS}
  1284.   TFilterKeys = FILTERKEYS;
  1285.   PFilterKeys = LPFILTERKEYS;
  1286. //
  1287. // FILTERKEYS dwFlags field
  1288. //
  1289. const
  1290.   FKF_FILTERKEYSON  = $00000001;
  1291.   {$EXTERNALSYM FKF_FILTERKEYSON}
  1292.   FKF_AVAILABLE     = $00000002;
  1293.   {$EXTERNALSYM FKF_AVAILABLE}
  1294.   FKF_HOTKEYACTIVE  = $00000004;
  1295.   {$EXTERNALSYM FKF_HOTKEYACTIVE}
  1296.   FKF_CONFIRMHOTKEY = $00000008;
  1297.   {$EXTERNALSYM FKF_CONFIRMHOTKEY}
  1298.   FKF_HOTKEYSOUND   = $00000010;
  1299.   {$EXTERNALSYM FKF_HOTKEYSOUND}
  1300.   FKF_INDICATOR     = $00000020;
  1301.   {$EXTERNALSYM FKF_INDICATOR}
  1302.   FKF_CLICKON       = $00000040;
  1303.   {$EXTERNALSYM FKF_CLICKON}
  1304. type
  1305.   LPSTICKYKEYS = ^STICKYKEYS;
  1306.   {$EXTERNALSYM LPSTICKYKEYS}
  1307.   tagSTICKYKEYS = record
  1308.     cbSize: UINT;
  1309.     dwFlags: DWORD;
  1310.   end;
  1311.   {$EXTERNALSYM tagSTICKYKEYS}
  1312.   STICKYKEYS = tagSTICKYKEYS;
  1313.   {$EXTERNALSYM STICKYKEYS}
  1314.   TStickyKeys = STICKYKEYS;
  1315.   PStickyKeys = LPSTICKYKEYS;
  1316. //
  1317. // STICKYKEYS dwFlags field
  1318. //
  1319. const
  1320.   SKF_STICKYKEYSON    = $00000001;
  1321.   {$EXTERNALSYM SKF_STICKYKEYSON}
  1322.   SKF_AVAILABLE       = $00000002;
  1323.   {$EXTERNALSYM SKF_AVAILABLE}
  1324.   SKF_HOTKEYACTIVE    = $00000004;
  1325.   {$EXTERNALSYM SKF_HOTKEYACTIVE}
  1326.   SKF_CONFIRMHOTKEY   = $00000008;
  1327.   {$EXTERNALSYM SKF_CONFIRMHOTKEY}
  1328.   SKF_HOTKEYSOUND     = $00000010;
  1329.   {$EXTERNALSYM SKF_HOTKEYSOUND}
  1330.   SKF_INDICATOR       = $00000020;
  1331.   {$EXTERNALSYM SKF_INDICATOR}
  1332.   SKF_AUDIBLEFEEDBACK = $00000040;
  1333.   {$EXTERNALSYM SKF_AUDIBLEFEEDBACK}
  1334.   SKF_TRISTATE        = $00000080;
  1335.   {$EXTERNALSYM SKF_TRISTATE}
  1336.   SKF_TWOKEYSOFF      = $00000100;
  1337.   {$EXTERNALSYM SKF_TWOKEYSOFF}
  1338.   SKF_LALTLATCHED     = $10000000;
  1339.   {$EXTERNALSYM SKF_LALTLATCHED}
  1340.   SKF_LCTLLATCHED     = $04000000;
  1341.   {$EXTERNALSYM SKF_LCTLLATCHED}
  1342.   SKF_LSHIFTLATCHED   = $01000000;
  1343.   {$EXTERNALSYM SKF_LSHIFTLATCHED}
  1344.   SKF_RALTLATCHED     = $20000000;
  1345.   {$EXTERNALSYM SKF_RALTLATCHED}
  1346.   SKF_RCTLLATCHED     = $08000000;
  1347.   {$EXTERNALSYM SKF_RCTLLATCHED}
  1348.   SKF_RSHIFTLATCHED   = $02000000;
  1349.   {$EXTERNALSYM SKF_RSHIFTLATCHED}
  1350.   SKF_LWINLATCHED     = $40000000;
  1351.   {$EXTERNALSYM SKF_LWINLATCHED}
  1352.   SKF_RWINLATCHED     = $80000000;
  1353.   {$EXTERNALSYM SKF_RWINLATCHED}
  1354.   SKF_LALTLOCKED      = $00100000;
  1355.   {$EXTERNALSYM SKF_LALTLOCKED}
  1356.   SKF_LCTLLOCKED      = $00040000;
  1357.   {$EXTERNALSYM SKF_LCTLLOCKED}
  1358.   SKF_LSHIFTLOCKED    = $00010000;
  1359.   {$EXTERNALSYM SKF_LSHIFTLOCKED}
  1360.   SKF_RALTLOCKED      = $00200000;
  1361.   {$EXTERNALSYM SKF_RALTLOCKED}
  1362.   SKF_RCTLLOCKED      = $00080000;
  1363.   {$EXTERNALSYM SKF_RCTLLOCKED}
  1364.   SKF_RSHIFTLOCKED    = $00020000;
  1365.   {$EXTERNALSYM SKF_RSHIFTLOCKED}
  1366.   SKF_LWINLOCKED      = $00400000;
  1367.   {$EXTERNALSYM SKF_LWINLOCKED}
  1368.   SKF_RWINLOCKED      = $00800000;
  1369.   {$EXTERNALSYM SKF_RWINLOCKED}
  1370. type
  1371.   LPMOUSEKEYS = ^MOUSEKEYS;
  1372.   {$EXTERNALSYM LPMOUSEKEYS}
  1373.   tagMOUSEKEYS = record
  1374.     cbSize: UINT;
  1375.     dwFlags: DWORD;
  1376.     iMaxSpeed: DWORD;
  1377.     iTimeToMaxSpeed: DWORD;
  1378.     iCtrlSpeed: DWORD;
  1379.     dwReserved1: DWORD;
  1380.     dwReserved2: DWORD;
  1381.   end;
  1382.   {$EXTERNALSYM tagMOUSEKEYS}
  1383.   MOUSEKEYS = tagMOUSEKEYS;
  1384.   {$EXTERNALSYM MOUSEKEYS}
  1385.   TMouseKeys = MOUSEKEYS;
  1386.   PMouseKeys = LPMOUSEKEYS;
  1387. //
  1388. // MOUSEKEYS dwFlags field
  1389. //
  1390. const
  1391.   MKF_MOUSEKEYSON     = $00000001;
  1392.   {$EXTERNALSYM MKF_MOUSEKEYSON}
  1393.   MKF_AVAILABLE       = $00000002;
  1394.   {$EXTERNALSYM MKF_AVAILABLE}
  1395.   MKF_HOTKEYACTIVE    = $00000004;
  1396.   {$EXTERNALSYM MKF_HOTKEYACTIVE}
  1397.   MKF_CONFIRMHOTKEY   = $00000008;
  1398.   {$EXTERNALSYM MKF_CONFIRMHOTKEY}
  1399.   MKF_HOTKEYSOUND     = $00000010;
  1400.   {$EXTERNALSYM MKF_HOTKEYSOUND}
  1401.   MKF_INDICATOR       = $00000020;
  1402.   {$EXTERNALSYM MKF_INDICATOR}
  1403.   MKF_MODIFIERS       = $00000040;
  1404.   {$EXTERNALSYM MKF_MODIFIERS}
  1405.   MKF_REPLACENUMBERS  = $00000080;
  1406.   {$EXTERNALSYM MKF_REPLACENUMBERS}
  1407.   MKF_LEFTBUTTONSEL   = $10000000;
  1408.   {$EXTERNALSYM MKF_LEFTBUTTONSEL}
  1409.   MKF_RIGHTBUTTONSEL  = $20000000;
  1410.   {$EXTERNALSYM MKF_RIGHTBUTTONSEL}
  1411.   MKF_LEFTBUTTONDOWN  = $01000000;
  1412.   {$EXTERNALSYM MKF_LEFTBUTTONDOWN}
  1413.   MKF_RIGHTBUTTONDOWN = $02000000;
  1414.   {$EXTERNALSYM MKF_RIGHTBUTTONDOWN}
  1415.   MKF_MOUSEMODE       = $80000000;
  1416.   {$EXTERNALSYM MKF_MOUSEMODE}
  1417. type
  1418.   LPACCESSTIMEOUT = ^ACCESSTIMEOUT;
  1419.   {$EXTERNALSYM LPACCESSTIMEOUT}
  1420.   tagACCESSTIMEOUT = record
  1421.     cbSize: UINT;
  1422.     dwFlags: DWORD;
  1423.     iTimeOutMSec: DWORD;
  1424.   end;
  1425.   {$EXTERNALSYM tagACCESSTIMEOUT}
  1426.   ACCESSTIMEOUT = tagACCESSTIMEOUT;
  1427.   {$EXTERNALSYM ACCESSTIMEOUT}
  1428.   TAccessTimeout = ACCESSTIMEOUT;
  1429.   PAccessTimeout = LPACCESSTIMEOUT;
  1430. //
  1431. // ACCESSTIMEOUT dwFlags field
  1432. //
  1433. const
  1434.   ATF_TIMEOUTON     = $00000001;
  1435.   {$EXTERNALSYM ATF_TIMEOUTON}
  1436.   ATF_ONOFFFEEDBACK = $00000002;
  1437.   {$EXTERNALSYM ATF_ONOFFFEEDBACK}
  1438. // values for SOUNDSENTRY iFSGrafEffect field//
  1439.   SSGF_NONE    = 0;
  1440.   {$EXTERNALSYM SSGF_NONE}
  1441.   SSGF_DISPLAY = 3;
  1442.   {$EXTERNALSYM SSGF_DISPLAY}
  1443. // values for SOUNDSENTRY iFSTextEffect field//
  1444.   SSTF_NONE    = 0;
  1445.   {$EXTERNALSYM SSTF_NONE}
  1446.   SSTF_CHARS   = 1;
  1447.   {$EXTERNALSYM SSTF_CHARS}
  1448.   SSTF_BORDER  = 2;
  1449.   {$EXTERNALSYM SSTF_BORDER}
  1450.   SSTF_DISPLAY = 3;
  1451.   {$EXTERNALSYM SSTF_DISPLAY}
  1452. // values for SOUNDSENTRY iWindowsEffect field//
  1453.   SSWF_NONE    = 0;
  1454.   {$EXTERNALSYM SSWF_NONE}
  1455.   SSWF_TITLE   = 1;
  1456.   {$EXTERNALSYM SSWF_TITLE}
  1457.   SSWF_WINDOW  = 2;
  1458.   {$EXTERNALSYM SSWF_WINDOW}
  1459.   SSWF_DISPLAY = 3;
  1460.   {$EXTERNALSYM SSWF_DISPLAY}
  1461.   SSWF_CUSTOM  = 4;
  1462.   {$EXTERNALSYM SSWF_CUSTOM}
  1463. type
  1464.   LPSOUNDSENTRYA = ^SOUNDSENTRYA;
  1465.   {$EXTERNALSYM LPSOUNDSENTRYA}
  1466.   tagSOUNDSENTRYA = record
  1467.     cbSize: UINT;
  1468.     dwFlags: DWORD;
  1469.     iFSTextEffect: DWORD;
  1470.     iFSTextEffectMSec: DWORD;
  1471.     iFSTextEffectColorBits: DWORD;
  1472.     iFSGrafEffect: DWORD;
  1473.     iFSGrafEffectMSec: DWORD;
  1474.     iFSGrafEffectColor: DWORD;
  1475.     iWindowsEffect: DWORD;
  1476.     iWindowsEffectMSec: DWORD;
  1477.     lpszWindowsEffectDLL: LPSTR;
  1478.     iWindowsEffectOrdinal: DWORD;
  1479.   end;
  1480.   {$EXTERNALSYM tagSOUNDSENTRYA}
  1481.   SOUNDSENTRYA = tagSOUNDSENTRYA;
  1482.   {$EXTERNALSYM SOUNDSENTRYA}
  1483.   TSoundsEntryA = SOUNDSENTRYA;
  1484.   PSoundsEntryA = LPSOUNDSENTRYA;
  1485.   LPSOUNDSENTRYW = ^SOUNDSENTRYW;
  1486.   {$EXTERNALSYM LPSOUNDSENTRYW}
  1487.   tagSOUNDSENTRYW = record
  1488.     cbSize: UINT;
  1489.     dwFlags: DWORD;
  1490.     iFSTextEffect: DWORD;
  1491.     iFSTextEffectMSec: DWORD;
  1492.     iFSTextEffectColorBits: DWORD;
  1493.     iFSGrafEffect: DWORD;
  1494.     iFSGrafEffectMSec: DWORD;
  1495.     iFSGrafEffectColor: DWORD;
  1496.     iWindowsEffect: DWORD;
  1497.     iWindowsEffectMSec: DWORD;
  1498.     lpszWindowsEffectDLL: LPWSTR;
  1499.     iWindowsEffectOrdinal: DWORD;
  1500.   end;
  1501.   {$EXTERNALSYM tagSOUNDSENTRYW}
  1502.   SOUNDSENTRYW = tagSOUNDSENTRYW;
  1503.   {$EXTERNALSYM SOUNDSENTRYW}
  1504.   TSoundsEntryW = SOUNDSENTRYW;
  1505.   PSoundsEntryW = LPSOUNDSENTRYW;
  1506. {$IFDEF UNICODE}
  1507.   SOUNDSENTRY = SOUNDSENTRYW;
  1508.   {$EXTERNALSYM SOUNDSENTRY}
  1509.   LPSOUNDSENTRY = LPSOUNDSENTRYW;
  1510.   {$EXTERNALSYM LPSOUNDSENTRY}
  1511.   TSoundsEntry = TSoundsEntryW;
  1512.   PSoundsEntry = PSoundsEntryW;
  1513. {$ELSE}
  1514.   SOUNDSENTRY = SOUNDSENTRYA;
  1515.   {$EXTERNALSYM SOUNDSENTRY}
  1516.   LPSOUNDSENTRY = LPSOUNDSENTRYA;
  1517.   {$EXTERNALSYM LPSOUNDSENTRY}
  1518.   TSoundsEntry = TSoundsEntryA;
  1519.   PSoundsEntry = PSoundsEntryA;
  1520. {$ENDIF}
  1521. //
  1522. // SOUNDSENTRY dwFlags field
  1523. //
  1524. const
  1525.   SSF_SOUNDSENTRYON = $00000001;
  1526.   {$EXTERNALSYM SSF_SOUNDSENTRYON}
  1527.   SSF_AVAILABLE     = $00000002;
  1528.   {$EXTERNALSYM SSF_AVAILABLE}
  1529.   SSF_INDICATOR     = $00000004;
  1530.   {$EXTERNALSYM SSF_INDICATOR}
  1531. type
  1532.   LPTOGGLEKEYS = ^TOGGLEKEYS;
  1533.   {$EXTERNALSYM LPTOGGLEKEYS}
  1534.   tagTOGGLEKEYS = record
  1535.     cbSize: UINT;
  1536.     dwFlags: DWORD;
  1537.   end;
  1538.   {$EXTERNALSYM tagTOGGLEKEYS}
  1539.   TOGGLEKEYS = tagTOGGLEKEYS;
  1540.   {$EXTERNALSYM TOGGLEKEYS}
  1541.   TToggleKeys = TOGGLEKEYS;
  1542.   PToggleKeys = LPTOGGLEKEYS;
  1543. //
  1544. // TOGGLEKEYS dwFlags field
  1545. //
  1546. const
  1547.   TKF_TOGGLEKEYSON  = $00000001;
  1548.   {$EXTERNALSYM TKF_TOGGLEKEYSON}
  1549.   TKF_AVAILABLE     = $00000002;
  1550.   {$EXTERNALSYM TKF_AVAILABLE}
  1551.   TKF_HOTKEYACTIVE  = $00000004;
  1552.   {$EXTERNALSYM TKF_HOTKEYACTIVE}
  1553.   TKF_CONFIRMHOTKEY = $00000008;
  1554.   {$EXTERNALSYM TKF_CONFIRMHOTKEY}
  1555.   TKF_HOTKEYSOUND   = $00000010;
  1556.   {$EXTERNALSYM TKF_HOTKEYSOUND}
  1557.   TKF_INDICATOR     = $00000020;
  1558.   {$EXTERNALSYM TKF_INDICATOR}
  1559. //
  1560. // Set debug level
  1561. //
  1562. procedure SetDebugErrorLevel(dwLevel: DWORD); stdcall;
  1563. {$EXTERNALSYM SetDebugErrorLevel}
  1564. //
  1565. // SetLastErrorEx() types.
  1566. //
  1567. const
  1568.   SLE_ERROR      = $00000001;
  1569.   {$EXTERNALSYM SLE_ERROR}
  1570.   SLE_MINORERROR = $00000002;
  1571.   {$EXTERNALSYM SLE_MINORERROR}
  1572.   SLE_WARNING    = $00000003;
  1573.   {$EXTERNALSYM SLE_WARNING}
  1574. procedure SetLastErrorEx(dwErrCode, dwType: DWORD); stdcall;
  1575. {$EXTERNALSYM SetLastErrorEx}
  1576. function InternalGetWindowText(hWnd: HWND; lpString: LPWSTR; nMaxCount: Integer): Integer; stdcall;
  1577. {$EXTERNALSYM InternalGetWindowText}
  1578. function EndTask(hWnd: HWND; fShutDown, fForce: BOOL): BOOL; stdcall;
  1579. {$EXTERNALSYM EndTask}
  1580. //
  1581. // Multimonitor API.
  1582. //
  1583. const
  1584.   MONITOR_DEFAULTTONULL    = $00000000;
  1585.   {$EXTERNALSYM MONITOR_DEFAULTTONULL}
  1586.   MONITOR_DEFAULTTOPRIMARY = $00000001;
  1587.   {$EXTERNALSYM MONITOR_DEFAULTTOPRIMARY}
  1588.   MONITOR_DEFAULTTONEAREST = $00000002;
  1589.   {$EXTERNALSYM MONITOR_DEFAULTTONEAREST}
  1590. function MonitorFromPoint(pt: POINT; dwFlags: DWORD): HMONITOR; stdcall;
  1591. {$EXTERNALSYM MonitorFromPoint}
  1592. function MonitorFromRect(const lprc: RECT; dwFlags: DWORD): HMONITOR; stdcall;
  1593. {$EXTERNALSYM MonitorFromRect}
  1594. function MonitorFromWindow(hwnd: HWND; dwFlags: DWORD): HMONITOR; stdcall;
  1595. {$EXTERNALSYM MonitorFromWindow}
  1596. const
  1597.   MONITORINFOF_PRIMARY = $00000001;
  1598.   {$EXTERNALSYM MONITORINFOF_PRIMARY}
  1599.   CCHDEVICENAME = 32;
  1600.   {$EXTERNALSYM CCHDEVICENAME}
  1601. type
  1602.   LPMONITORINFO = ^MONITORINFO;
  1603.   {$EXTERNALSYM LPMONITORINFO}
  1604.   tagMONITORINFO = record
  1605.     cbSize: DWORD;
  1606.     rcMonitor: RECT;
  1607.     rcWork: RECT;
  1608.     dwFlags: DWORD;
  1609.   end;
  1610.   {$EXTERNALSYM tagMONITORINFO}
  1611.   MONITORINFO = tagMONITORINFO;
  1612.   {$EXTERNALSYM MONITORINFO}
  1613.   TMonitorInfo = MONITORINFO;
  1614.   PMonitorInfo = LPMONITORINFO;
  1615.   LPMONITORINFOEXA = ^MONITORINFOEXA;
  1616.   {$EXTERNALSYM LPMONITORINFOEXA}
  1617.   tagMONITORINFOEXA = record
  1618.     MonitorInfo: MONITORINFO;
  1619.     szDevice: array [0..CCHDEVICENAME - 1] of CHAR;
  1620.   end;
  1621.   {$EXTERNALSYM tagMONITORINFOEXA}
  1622.   MONITORINFOEXA = tagMONITORINFOEXA;
  1623.   {$EXTERNALSYM MONITORINFOEXA}
  1624.   TMonitorinfoexa = MONITORINFOEXA;
  1625.   PMonitorInfoExA = LPMONITORINFOEXA;
  1626.   LPMONITORINFOEXW = ^MONITORINFOEXW;
  1627.   {$EXTERNALSYM LPMONITORINFOEXW}
  1628.   tagMONITORINFOEXW = record
  1629.     MonitorInfo: MONITORINFO;
  1630.     szDevice: array [0..CCHDEVICENAME - 1] of WCHAR;
  1631.   end;
  1632.   {$EXTERNALSYM tagMONITORINFOEXW}
  1633.   MONITORINFOEXW = tagMONITORINFOEXW;
  1634.   {$EXTERNALSYM MONITORINFOEXW}
  1635.   TMonitorInfoExW = MONITORINFOEXW;
  1636.   PMonitorInfoExW = LPMONITORINFOEXW;
  1637. {$IFDEF UNICODE}
  1638.   MONITORINFOEX = MONITORINFOEXW;
  1639.   {$EXTERNALSYM MONITORINFOEX}
  1640.   LPMONITORINFOEX = LPMONITORINFOEXW;
  1641.   {$EXTERNALSYM LPMONITORINFOEX}
  1642.   TMonitorInfoEx = TMonitorInfoExW;
  1643.   PMonitorInfoEx = PMonitorInfoExW;
  1644. {$ELSE}
  1645.   MONITORINFOEX = MONITORINFOEXA;
  1646.   {$EXTERNALSYM MONITORINFOEX}
  1647.   LPMONITORINFOEX = LPMONITORINFOEXA;
  1648.   {$EXTERNALSYM LPMONITORINFOEX}
  1649.   TMonitorInfoEx = TMonitorInfoExA;
  1650.   PMonitorInfoEx = PMonitorInfoExA;
  1651. {$ENDIF}
  1652. function GetMonitorInfoA(hMonitor: HMONITOR; pmi: LPMONITORINFO): BOOL; stdcall;
  1653. {$EXTERNALSYM GetMonitorInfoA}
  1654. function GetMonitorInfoW(hMonitor: HMONITOR; lpmi: LPMONITORINFO): BOOL; stdcall;
  1655. {$EXTERNALSYM GetMonitorInfoW}
  1656. {$IFDEF UNICODE}
  1657. function GetMonitorInfo(hMonitor: HMONITOR; lpmi: LPMONITORINFO): BOOL; stdcall;
  1658. {$EXTERNALSYM GetMonitorInfo}
  1659. {$ELSE}
  1660. function GetMonitorInfo(hMonitor: HMONITOR; lpmi: LPMONITORINFO): BOOL; stdcall;
  1661. {$EXTERNALSYM GetMonitorInfo}
  1662. {$ENDIF}
  1663. type
  1664.   MONITORENUMPROC = function (hMonitor: HMONITOR; hdcMonitor: HDC;
  1665.     lprcMonitor: LPRECT; dwData: LPARAM): BOOL; stdcall;
  1666.   {$EXTERNALSYM MONITORENUMPROC}
  1667.   TMonitorEnumProc = MONITORENUMPROC;
  1668. function EnumDisplayMonitors(hdc: HDC; lprcClip: LPCRECT;
  1669.   lpfnEnum: MONITORENUMPROC; dwData: LPARAM): BOOL; stdcall;
  1670. {$EXTERNALSYM EnumDisplayMonitors}
  1671. //
  1672. // WinEvents - Active Accessibility hooks
  1673. //
  1674. procedure NotifyWinEvent(event: DWORD; hwnd: HWND; idObject: LONG; idChild: LONG); stdcall;
  1675. {$EXTERNALSYM NotifyWinEvent}
  1676. type
  1677.   WINEVENTPROC = procedure (hWinEventHook: HWINEVENTHOOK; event: DWORD; hwnd: HWND;
  1678.     idObject, idChild: LONG; idEventThread, dwmsEventTime: DWORD); stdcall;
  1679.   {$EXTERNALSYM WINEVENTPROC}
  1680.   TWinEventProc = WINEVENTPROC;
  1681. function SetWinEventHook(eventMin: DWORD; eventMax: DWORD;
  1682.   hmodWinEventProc: HMODULE; pfnWinEventProc: WINEVENTPROC; idProcess: DWORD;
  1683.   idThread: DWORD; dwFlags: DWORD): HWINEVENTHOOK; stdcall;
  1684. {$EXTERNALSYM SetWinEventHook}
  1685. function IsWinEventHookInstalled(event: DWORD): BOOL; stdcall;
  1686. {$EXTERNALSYM IsWinEventHookInstalled}
  1687. //
  1688. // dwFlags for SetWinEventHook
  1689. //
  1690. const
  1691.   WINEVENT_OUTOFCONTEXT   = $0000; // Events are ASYNC
  1692.   {$EXTERNALSYM WINEVENT_OUTOFCONTEXT}
  1693.   WINEVENT_SKIPOWNTHREAD  = $0001; // Don't call back for events on installer's thread
  1694.   {$EXTERNALSYM WINEVENT_SKIPOWNTHREAD}
  1695.   WINEVENT_SKIPOWNPROCESS = $0002; // Don't call back for events on installer's process
  1696.   {$EXTERNALSYM WINEVENT_SKIPOWNPROCESS}
  1697.   WINEVENT_INCONTEXT      = $0004; // Events are SYNC, this causes your dll to be injected into every process
  1698.   {$EXTERNALSYM WINEVENT_INCONTEXT}
  1699. function UnhookWinEvent(hWinEventHook: HWINEVENTHOOK): BOOL; stdcall;
  1700. {$EXTERNALSYM UnhookWinEvent}
  1701. //
  1702. // idObject values for WinEventProc and NotifyWinEvent
  1703. //
  1704. //
  1705. // hwnd + idObject can be used with OLEACC.DLL's OleGetObjectFromWindow()
  1706. // to get an interface pointer to the container.  indexChild is the item
  1707. // within the container in question.  Setup a VARIANT with vt VT_I4 and
  1708. // lVal the indexChild and pass that in to all methods.  Then you
  1709. // are raring to go.
  1710. //
  1711. //
  1712. // Common object IDs (cookies, only for sending WM_GETOBJECT to get at the
  1713. // thing in question).  Positive IDs are reserved for apps (app specific),
  1714. // negative IDs are system things and are global, 0 means "just little old
  1715. // me".
  1716. //
  1717. const
  1718.   CHILDID_SELF      = 0;
  1719.   {$EXTERNALSYM CHILDID_SELF}
  1720.   INDEXID_OBJECT    = 0;
  1721.   {$EXTERNALSYM INDEXID_OBJECT}
  1722.   INDEXID_CONTAINER = 0;
  1723.   {$EXTERNALSYM INDEXID_CONTAINER}
  1724. //
  1725. // Reserved IDs for system objects
  1726. //
  1727. const
  1728.   OBJID_WINDOW            = DWORD($00000000);
  1729.   {$EXTERNALSYM OBJID_WINDOW}
  1730.   OBJID_SYSMENU           = DWORD($FFFFFFFF);
  1731.   {$EXTERNALSYM OBJID_SYSMENU}
  1732.   OBJID_TITLEBAR          = DWORD($FFFFFFFE);
  1733.   {$EXTERNALSYM OBJID_TITLEBAR}
  1734.   OBJID_MENU              = DWORD($FFFFFFFD);
  1735.   {$EXTERNALSYM OBJID_MENU}
  1736.   OBJID_CLIENT            = DWORD($FFFFFFFC);
  1737.   {$EXTERNALSYM OBJID_CLIENT}
  1738.   OBJID_VSCROLL           = DWORD($FFFFFFFB);
  1739.   {$EXTERNALSYM OBJID_VSCROLL}
  1740.   OBJID_HSCROLL           = DWORD($FFFFFFFA);
  1741.   {$EXTERNALSYM OBJID_HSCROLL}
  1742.   OBJID_SIZEGRIP          = DWORD($FFFFFFF9);
  1743.   {$EXTERNALSYM OBJID_SIZEGRIP}
  1744.   OBJID_CARET             = DWORD($FFFFFFF8);
  1745.   {$EXTERNALSYM OBJID_CARET}
  1746.   OBJID_CURSOR            = DWORD($FFFFFFF7);
  1747.   {$EXTERNALSYM OBJID_CURSOR}
  1748.   OBJID_ALERT             = DWORD($FFFFFFF6);
  1749.   {$EXTERNALSYM OBJID_ALERT}
  1750.   OBJID_SOUND             = DWORD($FFFFFFF5);
  1751.   {$EXTERNALSYM OBJID_SOUND}
  1752.   OBJID_QUERYCLASSNAMEIDX = DWORD($FFFFFFF4);
  1753.   {$EXTERNALSYM OBJID_QUERYCLASSNAMEIDX}
  1754.   OBJID_NATIVEOM          = DWORD($FFFFFFF0);
  1755.   {$EXTERNALSYM OBJID_NATIVEOM}
  1756. //
  1757. // EVENT DEFINITION
  1758. //
  1759.   EVENT_MIN = $00000001;
  1760.   {$EXTERNALSYM EVENT_MIN}
  1761.   EVENT_MAX = $7FFFFFFF;
  1762.   {$EXTERNALSYM EVENT_MAX}
  1763. //
  1764. //  EVENT_SYSTEM_SOUND
  1765. //  Sent when a sound is played.  Currently nothing is generating this, we
  1766. //  this event when a system sound (for menus, etc) is played.  Apps
  1767. //  generate this, if accessible, when a private sound is played.  For
  1768. //  example, if Mail plays a "New Mail" sound.
  1769. //
  1770. //  System Sounds:
  1771. //  (Generated by PlaySoundEvent in USER itself)
  1772. //      hwnd            is NULL
  1773. //      idObject        is OBJID_SOUND
  1774. //      idChild         is sound child ID if one
  1775. //  App Sounds:
  1776. //  (PlaySoundEvent won't generate notification; up to app)
  1777. //      hwnd + idObject gets interface pointer to Sound object
  1778. //      idChild identifies the sound in question
  1779. //  are going to be cleaning up the SOUNDSENTRY feature in the control panel
  1780. //  and will use this at that time.  Applications implementing WinEvents
  1781. //  are perfectly welcome to use it.  Clients of IAccessible* will simply
  1782. //  turn around and get back a non-visual object that describes the sound.
  1783. //
  1784.   EVENT_SYSTEM_SOUND = $0001;
  1785.   {$EXTERNALSYM EVENT_SYSTEM_SOUND}
  1786. //
  1787. // EVENT_SYSTEM_ALERT
  1788. // System Alerts:
  1789. // (Generated by MessageBox() calls for example)
  1790. //      hwnd            is hwndMessageBox
  1791. //      idObject        is OBJID_ALERT
  1792. // App Alerts:
  1793. // (Generated whenever)
  1794. //      hwnd+idObject gets interface pointer to Alert
  1795. //
  1796.   EVENT_SYSTEM_ALERT = $0002;
  1797.   {$EXTERNALSYM EVENT_SYSTEM_ALERT}
  1798. //
  1799. // EVENT_SYSTEM_FOREGROUND
  1800. // Sent when the foreground (active) window changes, even if it is changing
  1801. // to another window in the same thread as the previous one.
  1802. //      hwnd            is hwndNewForeground
  1803. //      idObject        is OBJID_WINDOW
  1804. //      idChild    is INDEXID_OBJECT
  1805. //
  1806.   EVENT_SYSTEM_FOREGROUND = $0003;
  1807.   {$EXTERNALSYM EVENT_SYSTEM_FOREGROUND}
  1808. //
  1809. // Menu
  1810. //      hwnd            is window (top level window or popup menu window)
  1811. //      idObject        is ID of control (OBJID_MENU, OBJID_SYSMENU, OBJID_SELF for popup)
  1812. //      idChild         is CHILDID_SELF
  1813. // EVENT_SYSTEM_MENUSTART
  1814. // EVENT_SYSTEM_MENUEND
  1815. // For MENUSTART, hwnd+idObject+idChild refers to the control with the menu bar,
  1816. //  or the control bringing up the context menu.
  1817. // Sent when entering into and leaving from menu mode (system, app bar, and
  1818. // track popups).
  1819. //
  1820.   EVENT_SYSTEM_MENUSTART = $0004;
  1821.   {$EXTERNALSYM EVENT_SYSTEM_MENUSTART}
  1822.   EVENT_SYSTEM_MENUEND   = $0005;
  1823.   {$EXTERNALSYM EVENT_SYSTEM_MENUEND}
  1824. //
  1825. // EVENT_SYSTEM_MENUPOPUPSTART
  1826. // EVENT_SYSTEM_MENUPOPUPEND
  1827. // Sent when a menu popup comes up and just before it is taken down.  Note
  1828. // that for a call to TrackPopupMenu(), a client will see EVENT_SYSTEM_MENUSTART
  1829. // followed almost immediately by EVENT_SYSTEM_MENUPOPUPSTART for the popup
  1830. // being shown.
  1831. // For MENUPOPUP, hwnd+idObject+idChild refers to the NEW popup coming up, not the
  1832. // parent item which is hierarchical.  You can get the parent menu/popup by
  1833. // asking for the accParent object.
  1834. //
  1835.   EVENT_SYSTEM_MENUPOPUPSTART = $0006;
  1836.   {$EXTERNALSYM EVENT_SYSTEM_MENUPOPUPSTART}
  1837.   EVENT_SYSTEM_MENUPOPUPEND   = $0007;
  1838.   {$EXTERNALSYM EVENT_SYSTEM_MENUPOPUPEND}
  1839. //
  1840. // EVENT_SYSTEM_CAPTURESTART
  1841. // EVENT_SYSTEM_CAPTUREEND
  1842. // Sent when a window takes the capture and releases the capture.
  1843. //
  1844.   EVENT_SYSTEM_CAPTURESTART = $0008;
  1845.   {$EXTERNALSYM EVENT_SYSTEM_CAPTURESTART}
  1846.   EVENT_SYSTEM_CAPTUREEND   = $0009;
  1847.   {$EXTERNALSYM EVENT_SYSTEM_CAPTUREEND}
  1848. //
  1849. // Move Size
  1850. // EVENT_SYSTEM_MOVESIZESTART
  1851. // EVENT_SYSTEM_MOVESIZEEND
  1852. // Sent when a window enters and leaves move-size dragging mode.
  1853. //
  1854.   EVENT_SYSTEM_MOVESIZESTART = $000A;
  1855.   {$EXTERNALSYM EVENT_SYSTEM_MOVESIZESTART}
  1856.   EVENT_SYSTEM_MOVESIZEEND   = $000B;
  1857.   {$EXTERNALSYM EVENT_SYSTEM_MOVESIZEEND}
  1858. //
  1859. // Context Help
  1860. // EVENT_SYSTEM_CONTEXTHELPSTART
  1861. // EVENT_SYSTEM_CONTEXTHELPEND
  1862. // Sent when a window enters and leaves context sensitive help mode.
  1863. //
  1864.   EVENT_SYSTEM_CONTEXTHELPSTART = $000C;
  1865.   {$EXTERNALSYM EVENT_SYSTEM_CONTEXTHELPSTART}
  1866.   EVENT_SYSTEM_CONTEXTHELPEND   = $000D;
  1867.   {$EXTERNALSYM EVENT_SYSTEM_CONTEXTHELPEND}
  1868. //
  1869. // Drag & Drop
  1870. // EVENT_SYSTEM_DRAGDROPSTART
  1871. // EVENT_SYSTEM_DRAGDROPEND
  1872. // Send the START notification just before going into drag&drop loop.  Send
  1873. // the END notification just after canceling out.
  1874. // Note that it is up to apps and OLE to generate this, since the system
  1875. // doesn't know.  Like EVENT_SYSTEM_SOUND, it will be a while before this
  1876. // is prevalent.
  1877. //
  1878.   EVENT_SYSTEM_DRAGDROPSTART = $000E;
  1879.   {$EXTERNALSYM EVENT_SYSTEM_DRAGDROPSTART}
  1880.   EVENT_SYSTEM_DRAGDROPEND   = $000F;
  1881.   {$EXTERNALSYM EVENT_SYSTEM_DRAGDROPEND}
  1882. //
  1883. // Dialog
  1884. // Send the START notification right after the dialog is completely
  1885. //  initialized and visible.  Send the END right before the dialog
  1886. //  is hidden and goes away.
  1887. // EVENT_SYSTEM_DIALOGSTART
  1888. // EVENT_SYSTEM_DIALOGEND
  1889. //
  1890.   EVENT_SYSTEM_DIALOGSTART = $0010;
  1891.   {$EXTERNALSYM EVENT_SYSTEM_DIALOGSTART}
  1892.   EVENT_SYSTEM_DIALOGEND   = $0011;
  1893.   {$EXTERNALSYM EVENT_SYSTEM_DIALOGEND}
  1894. //
  1895. // EVENT_SYSTEM_SCROLLING
  1896. // EVENT_SYSTEM_SCROLLINGSTART
  1897. // EVENT_SYSTEM_SCROLLINGEND
  1898. // Sent when beginning and ending the tracking of a scrollbar in a window,
  1899. // and also for scrollbar controls.
  1900. //
  1901.   EVENT_SYSTEM_SCROLLINGSTART = $0012;
  1902.   {$EXTERNALSYM EVENT_SYSTEM_SCROLLINGSTART}
  1903.   EVENT_SYSTEM_SCROLLINGEND   = $0013;
  1904.   {$EXTERNALSYM EVENT_SYSTEM_SCROLLINGEND}
  1905. //
  1906. // Alt-Tab Window
  1907. // Send the START notification right after the switch window is initialized
  1908. // and visible.  Send the END right before it is hidden and goes away.
  1909. // EVENT_SYSTEM_SWITCHSTART
  1910. // EVENT_SYSTEM_SWITCHEND
  1911. //
  1912.   EVENT_SYSTEM_SWITCHSTART = $0014;
  1913.   {$EXTERNALSYM EVENT_SYSTEM_SWITCHSTART}
  1914.   EVENT_SYSTEM_SWITCHEND   = $0015;
  1915.   {$EXTERNALSYM EVENT_SYSTEM_SWITCHEND}
  1916. //
  1917. // EVENT_SYSTEM_MINIMIZESTART
  1918. // EVENT_SYSTEM_MINIMIZEEND
  1919. // Sent when a window minimizes and just before it restores.
  1920. //
  1921.   EVENT_SYSTEM_MINIMIZESTART = $0016;
  1922.   {$EXTERNALSYM EVENT_SYSTEM_MINIMIZESTART}
  1923.   EVENT_SYSTEM_MINIMIZEEND   = $0017;
  1924.   {$EXTERNALSYM EVENT_SYSTEM_MINIMIZEEND}
  1925.   EVENT_CONSOLE_CARET             = $4001;
  1926.   {$EXTERNALSYM EVENT_CONSOLE_CARET}
  1927.   EVENT_CONSOLE_UPDATE_REGION     = $4002;
  1928.   {$EXTERNALSYM EVENT_CONSOLE_UPDATE_REGION}
  1929.   EVENT_CONSOLE_UPDATE_SIMPLE     = $4003;
  1930.   {$EXTERNALSYM EVENT_CONSOLE_UPDATE_SIMPLE}
  1931.   EVENT_CONSOLE_UPDATE_SCROLL     = $4004;
  1932.   {$EXTERNALSYM EVENT_CONSOLE_UPDATE_SCROLL}
  1933.   EVENT_CONSOLE_LAYOUT            = $4005;
  1934.   {$EXTERNALSYM EVENT_CONSOLE_LAYOUT}
  1935.   EVENT_CONSOLE_START_APPLICATION = $4006;
  1936.   {$EXTERNALSYM EVENT_CONSOLE_START_APPLICATION}
  1937.   EVENT_CONSOLE_END_APPLICATION   = $4007;
  1938.   {$EXTERNALSYM EVENT_CONSOLE_END_APPLICATION}
  1939. //
  1940. // Flags for EVENT_CONSOLE_START/END_APPLICATION.
  1941. //
  1942.   CONSOLE_APPLICATION_16BIT       = $0001;
  1943.   {$EXTERNALSYM CONSOLE_APPLICATION_16BIT}
  1944. //
  1945. // Flags for EVENT_CONSOLE_CARET
  1946. //
  1947.   CONSOLE_CARET_SELECTION         = $0001;
  1948.   {$EXTERNALSYM CONSOLE_CARET_SELECTION}
  1949.   CONSOLE_CARET_VISIBLE           = $0002;
  1950.   {$EXTERNALSYM CONSOLE_CARET_VISIBLE}
  1951. //
  1952. // Object events
  1953. // The system AND apps generate these.  The system generates these for
  1954. // real windows.  Apps generate these for objects within their window which
  1955. // act like a separate control, e.g. an item in a list view.
  1956. // When the system generate them, dwParam2 is always WMOBJID_SELF.  When
  1957. // apps generate them, apps put the has-meaning-to-the-app-only ID value
  1958. // in dwParam2.
  1959. // For all events, if you want detailed accessibility information, callers
  1960. // should
  1961. //      * Call AccessibleObjectFromWindow() with the hwnd, idObject parameters
  1962. //          of the event, and IID_IAccessible as the REFIID, to get back an
  1963. //          IAccessible* to talk to
  1964. //      * Initialize and fill in a VARIANT as VT_I4 with lVal the idChild
  1965. //          parameter of the event.
  1966. //      * If idChild isn't zero, call get_accChild() in the container to see
  1967. //          if the child is an object in its own right.  If so, you will get
  1968. //          back an IDispatch* object for the child.  You should release the
  1969. //          parent, and call QueryInterface() on the child object to get its
  1970. //          IAccessible*.  Then you talk directly to the child.  Otherwise,
  1971. //          if get_accChild() returns you nothing, you should continue to
  1972. //          use the child VARIANT.  You will ask the container for the properties
  1973. //          of the child identified by the VARIANT.  In other words, the
  1974. //          child in this case is accessible but not a full-blown object.
  1975. //          Like a button on a titlebar which is 'small' and has no children.
  1976. //
  1977. //
  1978. // For all EVENT_OBJECT events,
  1979. //      hwnd is the dude to Send the WM_GETOBJECT message to (unless NULL,
  1980. //          see above for system things)
  1981. //      idObject is the ID of the object that can resolve any queries a
  1982. //          client might have.  It's a way to deal with windowless controls,
  1983. //          controls that are just drawn on the screen in some larger parent
  1984. //          window (like SDM), or standard frame elements of a window.
  1985. //      idChild is the piece inside of the object that is affected.  This
  1986. //          allows clients to access things that are too small to have full
  1987. //          blown objects in their own right.  Like the thumb of a scrollbar.
  1988. //          The hwnd/idObject pair gets you to the container, the dude you
  1989. //          probably want to talk to most of the time anyway.  The idChild
  1990. //          can then be passed into the acc properties to get the name/value
  1991. //          of it as needed.
  1992. // Example #1:
  1993. //      System propagating a listbox selection change
  1994. //      EVENT_OBJECT_SELECTION
  1995. //          hwnd == listbox hwnd
  1996. //          idObject == OBJID_WINDOW
  1997. //          idChild == new selected item, or CHILDID_SELF if
  1998. //              nothing now selected within container.
  1999. //      Word '97 propagating a listbox selection change
  2000. //          hwnd == SDM window
  2001. //          idObject == SDM ID to get at listbox 'control'
  2002. //          idChild == new selected item, or CHILDID_SELF if
  2003. //              nothing
  2004. // Example #2:
  2005. //      System propagating a menu item selection on the menu bar
  2006. //      EVENT_OBJECT_SELECTION
  2007. //          hwnd == top level window
  2008. //          idObject == OBJID_MENU
  2009. //          idChild == ID of child menu bar item selected
  2010. // *
  2011. // Example #3:
  2012. //      System propagating a dropdown coming off of said menu bar item
  2013. //      EVENT_OBJECT_CREATE
  2014. //          hwnd == popup item
  2015. //          idObject == OBJID_WINDOW
  2016. //          idChild == CHILDID_SELF
  2017. //
  2018. // Example #4:
  2019. //
  2020. // For EVENT_OBJECT_REORDER, the object referred to by hwnd/idObject is the
  2021. // PARENT container in which the zorder is occurring.  This is because if
  2022. // one child is zordering, all of them are changing their relative zorder.
  2023. //
  2024.   EVENT_OBJECT_CREATE  = $8000; // hwnd + ID + idChild is created item
  2025.   {$EXTERNALSYM EVENT_OBJECT_CREATE}
  2026.   EVENT_OBJECT_DESTROY = $8001; // hwnd + ID + idChild is destroyed item
  2027.   {$EXTERNALSYM EVENT_OBJECT_DESTROY}
  2028.   EVENT_OBJECT_SHOW    = $8002; // hwnd + ID + idChild is shown item
  2029.   {$EXTERNALSYM EVENT_OBJECT_SHOW}
  2030.   EVENT_OBJECT_HIDE    = $8003; // hwnd + ID + idChild is hidden item
  2031.   {$EXTERNALSYM EVENT_OBJECT_HIDE}
  2032.   EVENT_OBJECT_REORDER = $8004; // hwnd + ID + idChild is parent of zordering children
  2033.   {$EXTERNALSYM EVENT_OBJECT_REORDER}
  2034. //
  2035. // NOTE:
  2036. // Minimize the number of notifications!
  2037. //
  2038. // When you are hiding a parent object, obviously all child objects are no
  2039. // longer visible on screen.  They still have the same "visible" status,
  2040. // but are not truly visible.  Hence do not send HIDE notifications for the
  2041. // children also.  One implies all.  The same goes for SHOW.
  2042. //
  2043.   EVENT_OBJECT_FOCUS           = $8005; // hwnd + ID + idChild is focused item
  2044.   {$EXTERNALSYM EVENT_OBJECT_FOCUS}
  2045.   EVENT_OBJECT_SELECTION       = $8006; // hwnd + ID + idChild is selected item (if only one), or idChild is OBJID_WINDOW if complex
  2046.   {$EXTERNALSYM EVENT_OBJECT_SELECTION}
  2047.   EVENT_OBJECT_SELECTIONADD    = $8007; // hwnd + ID + idChild is item added
  2048.   {$EXTERNALSYM EVENT_OBJECT_SELECTIONADD}
  2049.   EVENT_OBJECT_SELECTIONREMOVE = $8008; // hwnd + ID + idChild is item removed
  2050.   {$EXTERNALSYM EVENT_OBJECT_SELECTIONREMOVE}
  2051.   EVENT_OBJECT_SELECTIONWITHIN = $8009; // hwnd + ID + idChild is parent of changed selected items
  2052.   {$EXTERNALSYM EVENT_OBJECT_SELECTIONWITHIN}
  2053. //
  2054. // NOTES:
  2055. // There is only one "focused" child item in a parent.  This is the place
  2056. // keystrokes are going at a given moment.  Hence only send a notification
  2057. // about where the NEW focus is going.  A NEW item getting the focus already
  2058. // implies that the OLD item is losing it.
  2059. //
  2060. // SELECTION however can be multiple.  Hence the different SELECTION
  2061. // notifications.  Here's when to use each:
  2062. //
  2063. // (1) Send a SELECTION notification in the simple single selection
  2064. //     case (like the focus) when the item with the selection is
  2065. //     merely moving to a different item within a container.  hwnd + ID
  2066. //     is the container control, idChildItem is the new child with the
  2067. //     selection.
  2068. //
  2069. // (2) Send a SELECTIONADD notification when a new item has simply been added
  2070. //     to the selection within a container.  This is appropriate when the
  2071. //     number of newly selected items is very small.  hwnd + ID is the
  2072. //     container control, idChildItem is the new child added to the selection.
  2073. //
  2074. // (3) Send a SELECTIONREMOVE notification when a new item has simply been
  2075. //     removed from the selection within a container.  This is appropriate
  2076. //     when the number of newly selected items is very small, just like
  2077. //     SELECTIONADD.  hwnd + ID is the container control, idChildItem is the
  2078. //     new child removed from the selection.
  2079. //
  2080. // (4) Send a SELECTIONWITHIN notification when the selected items within a
  2081. //     control have changed substantially.  Rather than propagate a large
  2082. //     number of changes to reflect removal for some items, addition of
  2083. //     others, just tell somebody who cares that a lot happened.  It will
  2084. //     be faster an easier for somebody watching to just turn around and
  2085. //     query the container control what the new bunch of selected items
  2086. //     are.
  2087. //
  2088.   EVENT_OBJECT_STATECHANGE = $800A; // hwnd + ID + idChild is item w/ state change
  2089.   {$EXTERNALSYM EVENT_OBJECT_STATECHANGE}
  2090. //
  2091. // Examples of when to send an EVENT_OBJECT_STATECHANGE include
  2092. //      * It is being enabled/disabled (USER does for windows)
  2093. //      * It is being pressed/released (USER does for buttons)
  2094. //      * It is being checked/unchecked (USER does for radio/check buttons)
  2095. //
  2096.   EVENT_OBJECT_LOCATIONCHANGE = $800B; // hwnd + ID + idChild is moved/sized item
  2097.   {$EXTERNALSYM EVENT_OBJECT_LOCATIONCHANGE}
  2098. //
  2099. // Note:
  2100. // A LOCATIONCHANGE is not sent for every child object when the parent
  2101. // changes shape/moves.  Send one notification for the topmost object
  2102. // that is changing.  For example, if the user resizes a top level window,
  2103. // USER will generate a LOCATIONCHANGE for it, but not for the menu bar,
  2104. // title bar, scrollbars, etc.  that are also changing shape/moving.
  2105. //
  2106. // In other words, it only generates LOCATIONCHANGE notifications for
  2107. // real windows that are moving/sizing.  It will not generate a LOCATIONCHANGE
  2108. // for every non-floating child window when the parent moves (the children are
  2109. // logically moving also on screen, but not relative to the parent).
  2110. //
  2111. // Now, if the app itself resizes child windows as a result of being
  2112. // sized, USER will generate LOCATIONCHANGEs for those dudes also because
  2113. // it doesn't know better.
  2114. //
  2115. // Note also that USER will generate LOCATIONCHANGE notifications for two
  2116. // non-window sys objects:
  2117. //      (1) System caret
  2118. //      (2) Cursor
  2119. //
  2120.   EVENT_OBJECT_NAMECHANGE        = $800C; // hwnd + ID + idChild is item w/ name change
  2121.   {$EXTERNALSYM EVENT_OBJECT_NAMECHANGE}
  2122.   EVENT_OBJECT_DESCRIPTIONCHANGE = $800D; // hwnd + ID + idChild is item w/ desc change
  2123.   {$EXTERNALSYM EVENT_OBJECT_DESCRIPTIONCHANGE}
  2124.   EVENT_OBJECT_VALUECHANGE       = $800E; // hwnd + ID + idChild is item w/ value change
  2125.   {$EXTERNALSYM EVENT_OBJECT_VALUECHANGE}
  2126.   EVENT_OBJECT_PARENTCHANGE      = $800F; // hwnd + ID + idChild is item w/ new parent
  2127.   {$EXTERNALSYM EVENT_OBJECT_PARENTCHANGE}
  2128.   EVENT_OBJECT_HELPCHANGE        = $8010; // hwnd + ID + idChild is item w/ help change
  2129.   {$EXTERNALSYM EVENT_OBJECT_HELPCHANGE}
  2130.   EVENT_OBJECT_DEFACTIONCHANGE   = $8011; // hwnd + ID + idChild is item w/ def action change
  2131.   {$EXTERNALSYM EVENT_OBJECT_DEFACTIONCHANGE}
  2132.   EVENT_OBJECT_ACCELERATORCHANGE = $8012; // hwnd + ID + idChild is item w/ keybd accel change
  2133.   {$EXTERNALSYM EVENT_OBJECT_ACCELERATORCHANGE}
  2134. //
  2135. // Child IDs
  2136. //
  2137. //
  2138. // System Sounds (idChild of system SOUND notification)
  2139. //
  2140.   SOUND_SYSTEM_STARTUP     = 1;
  2141.   {$EXTERNALSYM SOUND_SYSTEM_STARTUP}
  2142.   SOUND_SYSTEM_SHUTDOWN    = 2;
  2143.   {$EXTERNALSYM SOUND_SYSTEM_SHUTDOWN}
  2144.   SOUND_SYSTEM_BEEP        = 3;
  2145.   {$EXTERNALSYM SOUND_SYSTEM_BEEP}
  2146.   SOUND_SYSTEM_ERROR       = 4;
  2147.   {$EXTERNALSYM SOUND_SYSTEM_ERROR}
  2148.   SOUND_SYSTEM_QUESTION    = 5;
  2149.   {$EXTERNALSYM SOUND_SYSTEM_QUESTION}
  2150.   SOUND_SYSTEM_WARNING     = 6;
  2151.   {$EXTERNALSYM SOUND_SYSTEM_WARNING}
  2152.   SOUND_SYSTEM_INFORMATION = 7;
  2153.   {$EXTERNALSYM SOUND_SYSTEM_INFORMATION}
  2154.   SOUND_SYSTEM_MAXIMIZE    = 8;
  2155.   {$EXTERNALSYM SOUND_SYSTEM_MAXIMIZE}
  2156.   SOUND_SYSTEM_MINIMIZE    = 9;
  2157.   {$EXTERNALSYM SOUND_SYSTEM_MINIMIZE}
  2158.   SOUND_SYSTEM_RESTOREUP   = 10;
  2159.   {$EXTERNALSYM SOUND_SYSTEM_RESTOREUP}
  2160.   SOUND_SYSTEM_RESTOREDOWN = 11;
  2161.   {$EXTERNALSYM SOUND_SYSTEM_RESTOREDOWN}
  2162.   SOUND_SYSTEM_APPSTART    = 12;
  2163.   {$EXTERNALSYM SOUND_SYSTEM_APPSTART}
  2164.   SOUND_SYSTEM_FAULT       = 13;
  2165.   {$EXTERNALSYM SOUND_SYSTEM_FAULT}
  2166.   SOUND_SYSTEM_APPEND      = 14;
  2167.   {$EXTERNALSYM SOUND_SYSTEM_APPEND}
  2168.   SOUND_SYSTEM_MENUCOMMAND = 15;
  2169.   {$EXTERNALSYM SOUND_SYSTEM_MENUCOMMAND}
  2170.   SOUND_SYSTEM_MENUPOPUP   = 16;
  2171.   {$EXTERNALSYM SOUND_SYSTEM_MENUPOPUP}
  2172.   CSOUND_SYSTEM            = 16;
  2173.   {$EXTERNALSYM CSOUND_SYSTEM}
  2174. //
  2175. // System Alerts (indexChild of system ALERT notification)
  2176. //
  2177.   ALERT_SYSTEM_INFORMATIONAL = 1; // MB_INFORMATION
  2178.   {$EXTERNALSYM ALERT_SYSTEM_INFORMATIONAL}
  2179.   ALERT_SYSTEM_WARNING       = 2; // MB_WARNING
  2180.   {$EXTERNALSYM ALERT_SYSTEM_WARNING}
  2181.   ALERT_SYSTEM_ERROR         = 3; // MB_ERROR
  2182.   {$EXTERNALSYM ALERT_SYSTEM_ERROR}
  2183.   ALERT_SYSTEM_QUERY         = 4; // MB_QUESTION
  2184.   {$EXTERNALSYM ALERT_SYSTEM_QUERY}
  2185.   ALERT_SYSTEM_CRITICAL      = 5; // HardSysErrBox
  2186.   {$EXTERNALSYM ALERT_SYSTEM_CRITICAL}
  2187.   CALERT_SYSTEM              = 6;
  2188.   {$EXTERNALSYM CALERT_SYSTEM}
  2189. type
  2190.   LPGUITHREADINFO = ^GUITHREADINFO;
  2191.   {$EXTERNALSYM LPGUITHREADINFO}
  2192.   tagGUITHREADINFO = record
  2193.     cbSize: DWORD;
  2194.     flags: DWORD;
  2195.     hwndActive: HWND;
  2196.     hwndFocus: HWND;
  2197.     hwndCapture: HWND;
  2198.     hwndMenuOwner: HWND;
  2199.     hwndMoveSize: HWND;
  2200.     hwndCaret: HWND;
  2201.     rcCaret: RECT;
  2202.   end;
  2203.   {$EXTERNALSYM tagGUITHREADINFO}
  2204.   GUITHREADINFO = tagGUITHREADINFO;
  2205.   {$EXTERNALSYM GUITHREADINFO}
  2206.   TGuiThreadInfo = GUITHREADINFO;
  2207.   PGuiThreadInfo = LPGUITHREADINFO;
  2208. const
  2209.   GUI_CARETBLINKING  = $00000001;
  2210.   {$EXTERNALSYM GUI_CARETBLINKING}
  2211.   GUI_INMOVESIZE     = $00000002;
  2212.   {$EXTERNALSYM GUI_INMOVESIZE}
  2213.   GUI_INMENUMODE     = $00000004;
  2214.   {$EXTERNALSYM GUI_INMENUMODE}
  2215.   GUI_SYSTEMMENUMODE = $00000008;
  2216.   {$EXTERNALSYM GUI_SYSTEMMENUMODE}
  2217.   GUI_POPUPMENUMODE  = $00000010;
  2218.   {$EXTERNALSYM GUI_POPUPMENUMODE}
  2219.   GUI_16BITTASK      = $00000020;
  2220.   {$EXTERNALSYM GUI_16BITTASK}
  2221. function GetGUIThreadInfo(idThread: DWORD; var pgui: GUITHREADINFO): BOOL; stdcall;
  2222. {$EXTERNALSYM GetGUIThreadInfo}
  2223. function GetWindowModuleFileNameA(hwnd: HWND; pszFileName: LPSTR; cchFileNameMax: UINT): UINT; stdcall;
  2224. {$EXTERNALSYM GetWindowModuleFileNameA}
  2225. function GetWindowModuleFileNameW(hwnd: HWND; pszFileName: LPWSTR; cchFileNameMax: UINT): UINT; stdcall;
  2226. {$EXTERNALSYM GetWindowModuleFileNameW}
  2227. {$IFDEF UNICODE}
  2228. function GetWindowModuleFileName(hwnd: HWND; pszFileName: LPWSTR; cchFileNameMax: UINT): UINT; stdcall;
  2229. {$EXTERNALSYM GetWindowModuleFileName}
  2230. {$ELSE}
  2231. function GetWindowModuleFileName(hwnd: HWND; pszFileName: LPSTR; cchFileNameMax: UINT): UINT; stdcall;
  2232. {$EXTERNALSYM GetWindowModuleFileName}
  2233. {$ENDIF}
  2234. const
  2235.   STATE_SYSTEM_UNAVAILABLE     = $00000001; // Disabled
  2236.   {$EXTERNALSYM STATE_SYSTEM_UNAVAILABLE}
  2237.   STATE_SYSTEM_SELECTED        = $00000002;
  2238.   {$EXTERNALSYM STATE_SYSTEM_SELECTED}
  2239.   STATE_SYSTEM_FOCUSED         = $00000004;
  2240.   {$EXTERNALSYM STATE_SYSTEM_FOCUSED}
  2241.   STATE_SYSTEM_PRESSED         = $00000008;
  2242.   {$EXTERNALSYM STATE_SYSTEM_PRESSED}
  2243.   STATE_SYSTEM_CHECKED         = $00000010;
  2244.   {$EXTERNALSYM STATE_SYSTEM_CHECKED}
  2245.   STATE_SYSTEM_MIXED           = $00000020; // 3-state checkbox or toolbar button
  2246.   {$EXTERNALSYM STATE_SYSTEM_MIXED}
  2247.   STATE_SYSTEM_INDETERMINATE   = STATE_SYSTEM_MIXED;
  2248.   {$EXTERNALSYM STATE_SYSTEM_INDETERMINATE}
  2249.   STATE_SYSTEM_READONLY        = $00000040;
  2250.   {$EXTERNALSYM STATE_SYSTEM_READONLY}
  2251.   STATE_SYSTEM_HOTTRACKED      = $00000080;
  2252.   {$EXTERNALSYM STATE_SYSTEM_HOTTRACKED}
  2253.   STATE_SYSTEM_DEFAULT         = $00000100;
  2254.   {$EXTERNALSYM STATE_SYSTEM_DEFAULT}
  2255.   STATE_SYSTEM_EXPANDED        = $00000200;
  2256.   {$EXTERNALSYM STATE_SYSTEM_EXPANDED}
  2257.   STATE_SYSTEM_COLLAPSED       = $00000400;
  2258.   {$EXTERNALSYM STATE_SYSTEM_COLLAPSED}
  2259.   STATE_SYSTEM_BUSY            = $00000800;
  2260.   {$EXTERNALSYM STATE_SYSTEM_BUSY}
  2261.   STATE_SYSTEM_FLOATING        = $00001000; // Children "owned" not "contained" by parent
  2262.   {$EXTERNALSYM STATE_SYSTEM_FLOATING}
  2263.   STATE_SYSTEM_MARQUEED        = $00002000;
  2264.   {$EXTERNALSYM STATE_SYSTEM_MARQUEED}
  2265.   STATE_SYSTEM_ANIMATED        = $00004000;
  2266.   {$EXTERNALSYM STATE_SYSTEM_ANIMATED}
  2267.   STATE_SYSTEM_INVISIBLE       = $00008000;
  2268.   {$EXTERNALSYM STATE_SYSTEM_INVISIBLE}
  2269.   STATE_SYSTEM_OFFSCREEN       = $00010000;
  2270.   {$EXTERNALSYM STATE_SYSTEM_OFFSCREEN}
  2271.   STATE_SYSTEM_SIZEABLE        = $00020000;
  2272.   {$EXTERNALSYM STATE_SYSTEM_SIZEABLE}
  2273.   STATE_SYSTEM_MOVEABLE        = $00040000;
  2274.   {$EXTERNALSYM STATE_SYSTEM_MOVEABLE}
  2275.   STATE_SYSTEM_SELFVOICING     = $00080000;
  2276.   {$EXTERNALSYM STATE_SYSTEM_SELFVOICING}
  2277.   STATE_SYSTEM_FOCUSABLE       = $00100000;
  2278.   {$EXTERNALSYM STATE_SYSTEM_FOCUSABLE}
  2279.   STATE_SYSTEM_SELECTABLE      = $00200000;
  2280.   {$EXTERNALSYM STATE_SYSTEM_SELECTABLE}
  2281.   STATE_SYSTEM_LINKED          = $00400000;
  2282.   {$EXTERNALSYM STATE_SYSTEM_LINKED}
  2283.   STATE_SYSTEM_TRAVERSED       = $00800000;
  2284.   {$EXTERNALSYM STATE_SYSTEM_TRAVERSED}
  2285.   STATE_SYSTEM_MULTISELECTABLE = $01000000; // Supports multiple selection
  2286.   {$EXTERNALSYM STATE_SYSTEM_MULTISELECTABLE}
  2287.   STATE_SYSTEM_EXTSELECTABLE   = $02000000; // Supports extended selection
  2288.   {$EXTERNALSYM STATE_SYSTEM_EXTSELECTABLE}
  2289.   STATE_SYSTEM_ALERT_LOW       = $04000000; // This information is of low priority
  2290.   {$EXTERNALSYM STATE_SYSTEM_ALERT_LOW}
  2291.   STATE_SYSTEM_ALERT_MEDIUM    = $08000000; // This information is of medium priority
  2292.   {$EXTERNALSYM STATE_SYSTEM_ALERT_MEDIUM}
  2293.   STATE_SYSTEM_ALERT_HIGH      = $10000000; // This information is of high priority
  2294.   {$EXTERNALSYM STATE_SYSTEM_ALERT_HIGH}
  2295.   STATE_SYSTEM_PROTECTED       = $20000000; // access to this is restricted
  2296.   {$EXTERNALSYM STATE_SYSTEM_PROTECTED}
  2297.   STATE_SYSTEM_VALID           = $3FFFFFFF;
  2298.   {$EXTERNALSYM STATE_SYSTEM_VALID}
  2299.   CCHILDREN_TITLEBAR  = 5;
  2300.   {$EXTERNALSYM CCHILDREN_TITLEBAR}
  2301.   CCHILDREN_SCROLLBAR = 5;
  2302.   {$EXTERNALSYM CCHILDREN_SCROLLBAR}
  2303. //
  2304. // Information about the global cursor.
  2305. //
  2306. type
  2307.   LPCURSORINFO = ^CURSORINFO;
  2308.   {$EXTERNALSYM LPCURSORINFO}
  2309.   tagCURSORINFO = record
  2310.     cbSize: DWORD;
  2311.     flags: DWORD;
  2312.     hCursor: HCURSOR;
  2313.     ptScreenPos: POINT;
  2314.   end;
  2315.   {$EXTERNALSYM tagCURSORINFO}
  2316.   CURSORINFO = tagCURSORINFO;
  2317.   {$EXTERNALSYM CURSORINFO}
  2318.   TCursorInfo = CURSORINFO;
  2319.   PCursorInfo = LPCURSORINFO;
  2320. const
  2321.   CURSOR_SHOWING = $00000001;
  2322.   {$EXTERNALSYM CURSOR_SHOWING}
  2323. function GetCursorInfo(var pci: CURSORINFO): BOOL; stdcall;
  2324. {$EXTERNALSYM GetCursorInfo}
  2325. //
  2326. // Window information snapshot
  2327. //
  2328. type
  2329.   LPWINDOWINFO = ^WINDOWINFO;
  2330.   {$EXTERNALSYM LPWINDOWINFO}
  2331.   tagWINDOWINFO = record
  2332.     cbSize: DWORD;
  2333.     rcWindow: RECT;
  2334.     rcClient: RECT;
  2335.     dwStyle: DWORD;
  2336.     dwExStyle: DWORD;
  2337.     dwWindowStatus: DWORD;
  2338.     cxWindowBorders: UINT;
  2339.     cyWindowBorders: UINT;
  2340.     atomWindowType: ATOM;
  2341.     wCreatorVersion: WORD;
  2342.   end;
  2343.   {$EXTERNALSYM tagWINDOWINFO}
  2344.   WINDOWINFO = tagWINDOWINFO;
  2345.   {$EXTERNALSYM WINDOWINFO}
  2346.   TWindowInfo = WINDOWINFO;
  2347.   PWindowInfo = LPWINDOWINFO;
  2348. const
  2349.   WS_ACTIVECAPTION = $0001;
  2350.   {$EXTERNALSYM WS_ACTIVECAPTION}
  2351. function GetWindowInfo(hwnd: HWND; var pwi: WINDOWINFO): BOOL; stdcall;
  2352. {$EXTERNALSYM GetWindowInfo}
  2353. //
  2354. // Titlebar information.
  2355. //
  2356. type
  2357.   LPTITLEBARINFO = ^TITLEBARINFO;
  2358.   {$EXTERNALSYM LPTITLEBARINFO}
  2359.   tagTITLEBARINFO = record
  2360.     cbSize: DWORD;
  2361.     rcTitleBar: RECT;
  2362.     rgstate: array [0..CCHILDREN_TITLEBAR] of DWORD;
  2363.   end;
  2364.   {$EXTERNALSYM tagTITLEBARINFO}
  2365.   TITLEBARINFO = tagTITLEBARINFO;
  2366.   {$EXTERNALSYM TITLEBARINFO}
  2367.   TTitleBarInfo = TITLEBARINFO;
  2368.   PTitleBarInfo = LPTITLEBARINFO;
  2369. function GetTitleBarInfo(hwnd: HWND; var pti: TITLEBARINFO): BOOL; stdcall;
  2370. {$EXTERNALSYM GetTitleBarInfo}
  2371. //
  2372. // Menubar information
  2373. //
  2374. type
  2375.   LPMENUBARINFO = ^MENUBARINFO;
  2376.   {$EXTERNALSYM LPMENUBARINFO}
  2377.   tagMENUBARINFO = record
  2378.     cbSize: DWORD;
  2379.     rcBar: RECT;          // rect of bar, popup, item
  2380.     hMenu: HMENU;         // real menu handle of bar, popup
  2381.     hwndMenu: HWND;       // hwnd of item submenu if one
  2382.     Flags: DWORD;
  2383.     // BOOL  fBarFocused:1;  // bar, popup has the focus
  2384.     // BOOL  fFocused:1;     // item has the focus
  2385.   end;
  2386.   {$EXTERNALSYM tagMENUBARINFO}
  2387.   MENUBARINFO = tagMENUBARINFO;
  2388.   {$EXTERNALSYM MENUBARINFO}
  2389.   TMenuBarInfo = MENUBARINFO;
  2390.   PMenuBarInfo = LPMENUBARINFO;
  2391. function GetMenuBarInfo(hwnd: HWND; idObject: LONG; idItem: LONG;
  2392.   var pmbi: MENUBARINFO): BOOL; stdcall;
  2393. {$EXTERNALSYM GetMenuBarInfo}
  2394. //
  2395. // Scrollbar information
  2396. //
  2397. type
  2398.   LPSCROLLBARINFO = ^SCROLLBARINFO;
  2399.   {$EXTERNALSYM LPSCROLLBARINFO}
  2400.   tagSCROLLBARINFO = record
  2401.     cbSize: DWORD;
  2402.     rcScrollBar: RECT;
  2403.     dxyLineButton: Integer;
  2404.     xyThumbTop: Integer;
  2405.     xyThumbBottom: Integer;
  2406.     reserved: Integer;
  2407.     rgstate: array [0..CCHILDREN_SCROLLBAR] of DWORD;
  2408.   end;
  2409.   {$EXTERNALSYM tagSCROLLBARINFO}
  2410.   SCROLLBARINFO = tagSCROLLBARINFO;
  2411.   {$EXTERNALSYM SCROLLBARINFO}
  2412.   TScrollBarInfo = SCROLLBARINFO;
  2413.   PScrollBarInfo = LPSCROLLBARINFO;
  2414. function GetScrollBarInfo(hwnd: HWND; idObject: LONG; var psbi: SCROLLBARINFO): BOOL; stdcall;
  2415. {$EXTERNALSYM GetScrollBarInfo}
  2416. //
  2417. // Combobox information
  2418. //
  2419. type
  2420.   LPCOMBOBOXINFO = ^COMBOBOXINFO;
  2421.   {$EXTERNALSYM LPCOMBOBOXINFO}
  2422.   tagCOMBOBOXINFO = record
  2423.     cbSize: DWORD;
  2424.     rcItem: RECT;
  2425.     rcButton: RECT;
  2426.     stateButton: DWORD;
  2427.     hwndCombo: HWND;
  2428.     hwndItem: HWND;
  2429.     hwndList: HWND;
  2430.   end;
  2431.   {$EXTERNALSYM tagCOMBOBOXINFO}
  2432.   COMBOBOXINFO = tagCOMBOBOXINFO;
  2433.   {$EXTERNALSYM COMBOBOXINFO}
  2434.   TComboBoxInfo = COMBOBOXINFO;
  2435.   PComboBoxInfo = LPCOMBOBOXINFO;
  2436. function GetComboBoxInfo(hwndCombo: HWND; var pcbi: COMBOBOXINFO): BOOL; stdcall;
  2437. {$EXTERNALSYM GetComboBoxInfo}
  2438. //
  2439. // The "real" ancestor window
  2440. //
  2441. const
  2442.   GA_PARENT    = 1;
  2443.   {$EXTERNALSYM GA_PARENT}
  2444.   GA_ROOT      = 2;
  2445.   {$EXTERNALSYM GA_ROOT}
  2446.   GA_ROOTOWNER = 3;
  2447.   {$EXTERNALSYM GA_ROOTOWNER}
  2448. function GetAncestor(hwnd: HWND; gaFlags: UINT): HWND; stdcall;
  2449. {$EXTERNALSYM GetAncestor}
  2450. //
  2451. // This gets the REAL child window at the point.  If it is in the dead
  2452. // space of a group box, it will try a sibling behind it.  But static
  2453. // fields will get returned.  In other words, it is kind of a cross between
  2454. // ChildWindowFromPointEx and WindowFromPoint.
  2455. //
  2456. function RealChildWindowFromPoint(hwndParent: HWND; ptParentClientCoords: POINT): HWND; stdcall;
  2457. {$EXTERNALSYM RealChildWindowFromPoint}
  2458. //
  2459. // This gets the name of the window TYPE, not class.  This allows us to
  2460. // recognize ThunderButton32 et al.
  2461. //
  2462. function RealGetWindowClassA(hwnd: HWND; pszType: LPSTR; cchType: UINT): UINT; stdcall;
  2463. {$EXTERNALSYM RealGetWindowClassA}
  2464. //
  2465. // This gets the name of the window TYPE, not class.  This allows us to
  2466. // recognize ThunderButton32 et al.
  2467. //
  2468. function RealGetWindowClassW(hwnd: HWND; pszType: LPWSTR; cchType: UINT): UINT; stdcall;
  2469. {$EXTERNALSYM RealGetWindowClassW}
  2470. {$IFDEF UNICODE}
  2471. function RealGetWindowClass(hwnd: HWND; pszType: LPWSTR; cchType: UINT): UINT; stdcall;
  2472. {$EXTERNALSYM RealGetWindowClass}
  2473. {$ELSE}
  2474. function RealGetWindowClass(hwnd: HWND; pszType: LPSTR; cchType: UINT): UINT; stdcall;
  2475. {$EXTERNALSYM RealGetWindowClass}
  2476. {$ENDIF}
  2477. //
  2478. // Alt-Tab Switch window information.
  2479. //
  2480. type
  2481.   LPALTTABINFO = ^ALTTABINFO;
  2482.   {$EXTERNALSYM LPALTTABINFO}
  2483.   tagALTTABINFO = record
  2484.     cbSize: DWORD;
  2485.     cItems: Integer;
  2486.     cColumns: Integer;
  2487.     cRows: Integer;
  2488.     iColFocus: Integer;
  2489.     iRowFocus: Integer;
  2490.     cxItem: Integer;
  2491.     cyItem: Integer;
  2492.     ptStart: POINT;
  2493.   end;
  2494.   {$EXTERNALSYM tagALTTABINFO}
  2495.   ALTTABINFO = tagALTTABINFO;
  2496.   {$EXTERNALSYM ALTTABINFO}
  2497.   TAltTabInfo = ALTTABINFO;
  2498.   PAltTabInfo = LPALTTABINFO;
  2499. function GetAltTabInfoA(hwnd: HWND; iItem: Integer; var pati: ALTTABINFO;
  2500.   pszItemText: LPSTR; cchItemText: UINT): BOOL; stdcall;
  2501. {$EXTERNALSYM GetAltTabInfoA}
  2502. function GetAltTabInfoW(hwnd: HWND; iItem: Integer; var pati: ALTTABINFO;
  2503.   pszItemText: LPWSTR; cchItemText: UINT): BOOL; stdcall;
  2504. {$EXTERNALSYM GetAltTabInfoW}
  2505. {$IFDEF UNICODE}
  2506. function GetAltTabInfo(hwnd: HWND; iItem: Integer; var pati: ALTTABINFO;
  2507.   pszItemText: LPWSTR; cchItemText: UINT): BOOL; stdcall;
  2508. {$EXTERNALSYM GetAltTabInfo}
  2509. {$ELSE}
  2510. function GetAltTabInfo(hwnd: HWND; iItem: Integer; var pati: ALTTABINFO;
  2511.   pszItemText: LPSTR; cchItemText: UINT): BOOL; stdcall;
  2512. {$EXTERNALSYM GetAltTabInfo}
  2513. {$ENDIF}
  2514. //
  2515. // Listbox information.
  2516. // Returns the number of items per row.
  2517. //
  2518. function GetListBoxInfo(hwnd: HWND): DWORD; stdcall;
  2519. {$EXTERNALSYM GetListBoxInfo}
  2520. function LockWorkStation: BOOL; stdcall;
  2521. {$EXTERNALSYM LockWorkStation}
  2522. function UserHandleGrantAccess(hUserHandle, hJob: HANDLE; bGrant: BOOL): BOOL; stdcall;
  2523. {$EXTERNALSYM UserHandleGrantAccess}
  2524. //
  2525. // Raw Input Messages.
  2526. //
  2527. type
  2528.   HRAWINPUT = HANDLE;
  2529.   {$EXTERNALSYM HRAWINPUT}
  2530. //
  2531. // WM_INPUT wParam
  2532. //
  2533. //
  2534. // Use this macro to get the input code from wParam.
  2535. //
  2536. function GET_RAWINPUT_CODE_WPARAM(wParam: WPARAM): DWORD;
  2537. {$EXTERNALSYM GET_RAWINPUT_CODE_WPARAM}
  2538. //
  2539. // The input is in the regular message flow,
  2540. // the app is required to call DefWindowProc
  2541. // so that the system can perform clean ups.
  2542. //
  2543. const
  2544.   RIM_INPUT       = 0;
  2545.   {$EXTERNALSYM RIM_INPUT}
  2546. //
  2547. // The input is sink only. The app is expected
  2548. // to behave nicely.
  2549. //
  2550.   RIM_INPUTSINK   = 1;
  2551.   {$EXTERNALSYM RIM_INPUTSINK}
  2552. //
  2553. // Raw Input data header
  2554. //
  2555. type
  2556.   tagRAWINPUTHEADER = record
  2557.     dwType: DWORD;
  2558.     dwSize: DWORD;
  2559.     hDevice: HANDLE;
  2560.     wParam: WPARAM;
  2561.   end;
  2562.   {$EXTERNALSYM tagRAWINPUTHEADER}
  2563.   RAWINPUTHEADER = tagRAWINPUTHEADER;
  2564.   {$EXTERNALSYM RAWINPUTHEADER}
  2565.   PRAWINPUTHEADER = ^RAWINPUTHEADER;
  2566.   {$EXTERNALSYM PRAWINPUTHEADER}
  2567.   LPRAWINPUTHEADER = ^RAWINPUTHEADER;
  2568.   {$EXTERNALSYM LPRAWINPUTHEADER}
  2569.   TRawInputHeader = RAWINPUTHEADER;
  2570. //
  2571. // Type of the raw input
  2572. //
  2573. const
  2574.   RIM_TYPEMOUSE      = 0;
  2575.   {$EXTERNALSYM RIM_TYPEMOUSE}
  2576.   RIM_TYPEKEYBOARD   = 1;
  2577.   {$EXTERNALSYM RIM_TYPEKEYBOARD}
  2578.   RIM_TYPEHID        = 2;
  2579.   {$EXTERNALSYM RIM_TYPEHID}
  2580. //
  2581. // Raw format of the mouse input
  2582. //
  2583. type
  2584.   tagRAWMOUSE = record
  2585.     //
  2586.     // Indicator flags.
  2587.     //
  2588.     usFlags: USHORT;
  2589.     //
  2590.     // The transition state of the mouse buttons.
  2591.     //
  2592.     union: record
  2593.     case Integer of
  2594.       0: (
  2595.         ulButtons: ULONG);
  2596.       1: (
  2597.         usButtonFlags: USHORT;
  2598.         usButtonData: USHORT);
  2599.     end;
  2600.     //
  2601.     // The raw state of the mouse buttons.
  2602.     //
  2603.     ulRawButtons: ULONG;
  2604.     //
  2605.     // The signed relative or absolute motion in the X direction.
  2606.     //
  2607.     lLastX: LONG;
  2608.     //
  2609.     // The signed relative or absolute motion in the Y direction.
  2610.     //
  2611.     lLastY: LONG;
  2612.     //
  2613.     // Device-specific additional information for the event.
  2614.     //
  2615.     ulExtraInformation: ULONG;
  2616.   end;
  2617.   {$EXTERNALSYM tagRAWMOUSE}
  2618.   RAWMOUSE = tagRAWMOUSE;
  2619.   {$EXTERNALSYM RAWMOUSE}
  2620.   PRAWMOUSE = ^RAWMOUSE;
  2621.   {$EXTERNALSYM PRAWMOUSE}
  2622.   LPRAWMOUSE = ^RAWMOUSE;
  2623.   {$EXTERNALSYM LPRAWMOUSE}
  2624.   TRawMouse = RAWMOUSE;
  2625. //
  2626. // Define the mouse button state indicators.
  2627. //
  2628. const
  2629.   RI_MOUSE_LEFT_BUTTON_DOWN   = $0001; // Left Button changed to down.
  2630.   {$EXTERNALSYM RI_MOUSE_LEFT_BUTTON_DOWN}
  2631.   RI_MOUSE_LEFT_BUTTON_UP     = $0002; // Left Button changed to up.
  2632.   {$EXTERNALSYM RI_MOUSE_LEFT_BUTTON_UP}
  2633.   RI_MOUSE_RIGHT_BUTTON_DOWN  = $0004; // Right Button changed to down.
  2634.   {$EXTERNALSYM RI_MOUSE_RIGHT_BUTTON_DOWN}
  2635.   RI_MOUSE_RIGHT_BUTTON_UP    = $0008; // Right Button changed to up.
  2636.   {$EXTERNALSYM RI_MOUSE_RIGHT_BUTTON_UP}
  2637.   RI_MOUSE_MIDDLE_BUTTON_DOWN = $0010; // Middle Button changed to down.
  2638.   {$EXTERNALSYM RI_MOUSE_MIDDLE_BUTTON_DOWN}
  2639.   RI_MOUSE_MIDDLE_BUTTON_UP   = $0020; // Middle Button changed to up.
  2640.   {$EXTERNALSYM RI_MOUSE_MIDDLE_BUTTON_UP}
  2641.   RI_MOUSE_BUTTON_1_DOWN = RI_MOUSE_LEFT_BUTTON_DOWN;
  2642.   {$EXTERNALSYM RI_MOUSE_BUTTON_1_DOWN}
  2643.   RI_MOUSE_BUTTON_1_UP   = RI_MOUSE_LEFT_BUTTON_UP;
  2644.   {$EXTERNALSYM RI_MOUSE_BUTTON_1_UP}
  2645.   RI_MOUSE_BUTTON_2_DOWN = RI_MOUSE_RIGHT_BUTTON_DOWN;
  2646.   {$EXTERNALSYM RI_MOUSE_BUTTON_2_DOWN}
  2647.   RI_MOUSE_BUTTON_2_UP   = RI_MOUSE_RIGHT_BUTTON_UP;
  2648.   {$EXTERNALSYM RI_MOUSE_BUTTON_2_UP}
  2649.   RI_MOUSE_BUTTON_3_DOWN = RI_MOUSE_MIDDLE_BUTTON_DOWN;
  2650.   {$EXTERNALSYM RI_MOUSE_BUTTON_3_DOWN}
  2651.   RI_MOUSE_BUTTON_3_UP   = RI_MOUSE_MIDDLE_BUTTON_UP;
  2652.   {$EXTERNALSYM RI_MOUSE_BUTTON_3_UP}
  2653.   RI_MOUSE_BUTTON_4_DOWN = $0040;
  2654.   {$EXTERNALSYM RI_MOUSE_BUTTON_4_DOWN}
  2655.   RI_MOUSE_BUTTON_4_UP   = $0080;
  2656.   {$EXTERNALSYM RI_MOUSE_BUTTON_4_UP}
  2657.   RI_MOUSE_BUTTON_5_DOWN = $0100;
  2658.   {$EXTERNALSYM RI_MOUSE_BUTTON_5_DOWN}
  2659.   RI_MOUSE_BUTTON_5_UP   = $0200;
  2660.   {$EXTERNALSYM RI_MOUSE_BUTTON_5_UP}
  2661. //
  2662. // If usButtonFlags has RI_MOUSE_WHEEL, the wheel delta is stored in usButtonData.
  2663. // Take it as a signed value.
  2664. //
  2665.   RI_MOUSE_WHEEL = $0400;
  2666.   {$EXTERNALSYM RI_MOUSE_WHEEL}
  2667. //
  2668. // Define the mouse indicator flags.
  2669. //
  2670.   MOUSE_MOVE_RELATIVE      = 0;
  2671.   {$EXTERNALSYM MOUSE_MOVE_RELATIVE}
  2672.   MOUSE_MOVE_ABSOLUTE      = 1;
  2673.   {$EXTERNALSYM MOUSE_MOVE_ABSOLUTE}
  2674.   MOUSE_VIRTUAL_DESKTOP    = $02; // the coordinates are mapped to the virtual desktop
  2675.   {$EXTERNALSYM MOUSE_VIRTUAL_DESKTOP}
  2676.   MOUSE_ATTRIBUTES_CHANGED = $04; // requery for mouse attributes
  2677.   {$EXTERNALSYM MOUSE_ATTRIBUTES_CHANGED}
  2678. //
  2679. // Raw format of the keyboard input
  2680. //
  2681. type
  2682.   tagRAWKEYBOARD = record
  2683.     //
  2684.     // The "make" scan code (key depression).
  2685.     //
  2686.     MakeCode: USHORT;
  2687.     //
  2688.     // The flags field indicates a "break" (key release) and other
  2689.     // miscellaneous scan code information defined in ntddkbd.h.
  2690.     //
  2691.     Flags: USHORT;
  2692.     Reserved: USHORT;
  2693.     //
  2694.     // Windows message compatible information
  2695.     //
  2696.     VKey: USHORT;
  2697.     Message: UINT;
  2698.     //
  2699.     // Device-specific additional information for the event.
  2700.     //
  2701.     ExtraInformation: ULONG;
  2702.   end;
  2703.   {$EXTERNALSYM tagRAWKEYBOARD}
  2704.   RAWKEYBOARD = tagRAWKEYBOARD;
  2705.   {$EXTERNALSYM RAWKEYBOARD}
  2706.   PRAWKEYBOARD = ^RAWKEYBOARD;
  2707.   {$EXTERNALSYM PRAWKEYBOARD}
  2708.   LPRAWKEYBOARD = ^RAWKEYBOARD;
  2709.   {$EXTERNALSYM LPRAWKEYBOARD}
  2710.   TRawKeyBoard = RAWKEYBOARD;
  2711. //
  2712. // Define the keyboard overrun MakeCode.
  2713. //
  2714. const
  2715.   KEYBOARD_OVERRUN_MAKE_CODE = $FF;
  2716.   {$EXTERNALSYM KEYBOARD_OVERRUN_MAKE_CODE}
  2717. //
  2718. // Define the keyboard input data Flags.
  2719. //
  2720.   RI_KEY_MAKE            = 0;
  2721.   {$EXTERNALSYM RI_KEY_MAKE}
  2722.   RI_KEY_BREAK           = 1;
  2723.   {$EXTERNALSYM RI_KEY_BREAK}
  2724.   RI_KEY_E0              = 2;
  2725.   {$EXTERNALSYM RI_KEY_E0}
  2726.   RI_KEY_E1              = 4;
  2727.   {$EXTERNALSYM RI_KEY_E1}
  2728.   RI_KEY_TERMSRV_SET_LED = 8;
  2729.   {$EXTERNALSYM RI_KEY_TERMSRV_SET_LED}
  2730.   RI_KEY_TERMSRV_SHADOW  = $10;
  2731.   {$EXTERNALSYM RI_KEY_TERMSRV_SHADOW}
  2732. //
  2733. // Raw format of the input from Human Input Devices
  2734. //
  2735. type
  2736.   tagRAWHID = record
  2737.     dwSizeHid: DWORD;    // byte size of each report
  2738.     dwCount: DWORD;      // number of input packed
  2739.     bRawData: array [0..0] of BYTE;
  2740.   end;
  2741.   {$EXTERNALSYM tagRAWHID}
  2742.   RAWHID = tagRAWHID;
  2743.   {$EXTERNALSYM RAWHID}
  2744.   PRAWHID = ^RAWHID;
  2745.   {$EXTERNALSYM PRAWHID}
  2746.   LPRAWHID = ^RAWHID;
  2747.   {$EXTERNALSYM LPRAWHID}
  2748.   TRawHid = RAWHID;
  2749. //
  2750. // RAWINPUT data structure.
  2751. //
  2752.   tagRAWINPUT = record
  2753.     header: RAWINPUTHEADER;
  2754.     case Integer of
  2755.       0: (mouse: RAWMOUSE);
  2756.       1: (keyboard: RAWKEYBOARD);
  2757.       2: (hid: RAWHID);
  2758.   end;
  2759.   {$EXTERNALSYM tagRAWINPUT}
  2760.   RAWINPUT = tagRAWINPUT;
  2761.   {$EXTERNALSYM RAWINPUT}
  2762.   PRAWINPUT = ^RAWINPUT;
  2763.   {$EXTERNALSYM PRAWINPUT}
  2764.   LPRAWINPUT = ^RAWINPUT;
  2765.   {$EXTERNALSYM LPRAWINPUT}
  2766.   TRawInput = RAWINPUT;
  2767. function RAWINPUT_ALIGN(x: Pointer): Pointer;
  2768. {$EXTERNALSYM RAWINPUT_ALIGN}
  2769. function NEXTRAWINPUTBLOCK(ptr: PRawInput): PRawInput;
  2770. {$EXTERNALSYM NEXTRAWINPUTBLOCK}
  2771. //
  2772. // Flags for GetRawInputData
  2773. //
  2774. const
  2775.   RID_INPUT  = $10000003;
  2776.   {$EXTERNALSYM RID_INPUT}
  2777.   RID_HEADER = $10000005;
  2778.   {$EXTERNALSYM RID_HEADER}
  2779. function GetRawInputData(hRawInput: HRAWINPUT; uiCommand: UINT; pData: LPVOID;
  2780.   var pcbSize: UINT; cbSizeHeader: UINT): UINT; stdcall;
  2781. {$EXTERNALSYM GetRawInputData}
  2782. //
  2783. // Raw Input Device Information
  2784. //
  2785. const
  2786.   RIDI_PREPARSEDDATA = $20000005;
  2787.   {$EXTERNALSYM RIDI_PREPARSEDDATA}
  2788.   RIDI_DEVICENAME    = $20000007; // the return valus is the character length, not the byte size
  2789.   {$EXTERNALSYM RIDI_DEVICENAME}
  2790.   RIDI_DEVICEINFO    = $2000000b;
  2791.   {$EXTERNALSYM RIDI_DEVICEINFO}
  2792. type
  2793.   PRID_DEVICE_INFO_MOUSE = ^RID_DEVICE_INFO_MOUSE;
  2794.   {$EXTERNALSYM PRID_DEVICE_INFO_MOUSE}
  2795.   tagRID_DEVICE_INFO_MOUSE = record
  2796.     dwId: DWORD;
  2797.     dwNumberOfButtons: DWORD;
  2798.     dwSampleRate: DWORD;
  2799.   end;
  2800.   {$EXTERNALSYM tagRID_DEVICE_INFO_MOUSE}
  2801.   RID_DEVICE_INFO_MOUSE = tagRID_DEVICE_INFO_MOUSE;
  2802.   {$EXTERNALSYM RID_DEVICE_INFO_MOUSE}
  2803.   TRidDeviceInfoMouse = RID_DEVICE_INFO_MOUSE;
  2804.   PRidDeviceInfoMouse = PRID_DEVICE_INFO_MOUSE;
  2805.   PRID_DEVICE_INFO_KEYBOARD = ^RID_DEVICE_INFO_KEYBOARD;
  2806.   {$EXTERNALSYM PRID_DEVICE_INFO_KEYBOARD}
  2807.   tagRID_DEVICE_INFO_KEYBOARD = record
  2808.     dwType: DWORD;
  2809.     dwSubType: DWORD;
  2810.     dwKeyboardMode: DWORD;
  2811.     dwNumberOfFunctionKeys: DWORD;
  2812.     dwNumberOfIndicators: DWORD;
  2813.     dwNumberOfKeysTotal: DWORD;
  2814.   end;
  2815.   {$EXTERNALSYM tagRID_DEVICE_INFO_KEYBOARD}
  2816.   RID_DEVICE_INFO_KEYBOARD = tagRID_DEVICE_INFO_KEYBOARD;
  2817.   {$EXTERNALSYM RID_DEVICE_INFO_KEYBOARD}
  2818.   TRidDeviceInfoKeyboard = RID_DEVICE_INFO_KEYBOARD;
  2819.   PRidDeviceInfoKeyboard = PRID_DEVICE_INFO_KEYBOARD;
  2820.   PRID_DEVICE_INFO_HID = ^RID_DEVICE_INFO_HID;
  2821.   {$EXTERNALSYM PRID_DEVICE_INFO_HID}
  2822.   tagRID_DEVICE_INFO_HID = record
  2823.     dwVendorId: DWORD;
  2824.     dwProductId: DWORD;
  2825.     dwVersionNumber: DWORD;
  2826.     //
  2827.     // Top level collection UsagePage and Usage
  2828.     //
  2829.     usUsagePage: USHORT;
  2830.     usUsage: USHORT;
  2831.   end;
  2832.   {$EXTERNALSYM tagRID_DEVICE_INFO_HID}
  2833.   RID_DEVICE_INFO_HID = tagRID_DEVICE_INFO_HID;
  2834.   {$EXTERNALSYM RID_DEVICE_INFO_HID}
  2835.   TRidDeviceInfoHid = RID_DEVICE_INFO_HID;
  2836.   PRidDeviceInfoHid = PRID_DEVICE_INFO_HID;
  2837.   tagRID_DEVICE_INFO = record
  2838.     cbSize: DWORD;
  2839.     dwType: DWORD;
  2840.     case Integer of
  2841.     0: (mouse: RID_DEVICE_INFO_MOUSE);
  2842.     1: (keyboard: RID_DEVICE_INFO_KEYBOARD);
  2843.     2: (hid: RID_DEVICE_INFO_HID);
  2844.   end;
  2845.   {$EXTERNALSYM tagRID_DEVICE_INFO}
  2846.   RID_DEVICE_INFO = tagRID_DEVICE_INFO;
  2847.   {$EXTERNALSYM RID_DEVICE_INFO}
  2848.   PRID_DEVICE_INFO = ^RID_DEVICE_INFO;
  2849.   {$EXTERNALSYM PRID_DEVICE_INFO}
  2850.   LPRID_DEVICE_INFO = ^RID_DEVICE_INFO;
  2851.   {$EXTERNALSYM LPRID_DEVICE_INFO}
  2852.   TRidDeviceInfo = RID_DEVICE_INFO;
  2853.   PRidDeviceInfo = PRID_DEVICE_INFO;
  2854. function GetRawInputDeviceInfoA(hDevice: HANDLE; uiCommand: UINT; pData: LPVOID;
  2855.   var pcbSize: UINT): UINT; stdcall;
  2856. {$EXTERNALSYM GetRawInputDeviceInfoA}
  2857. function GetRawInputDeviceInfoW(hDevice: HANDLE; uiCommand: UINT; pData: LPVOID;
  2858.   var pcbSize: UINT): UINT; stdcall;
  2859. {$EXTERNALSYM GetRawInputDeviceInfoW}
  2860. {$IFDEF UNICODE}
  2861. function GetRawInputDeviceInfo(hDevice: HANDLE; uiCommand: UINT; pData: LPVOID;
  2862.   var pcbSize: UINT): UINT; stdcall;
  2863. {$EXTERNALSYM GetRawInputDeviceInfo}
  2864. {$ELSE}
  2865. function GetRawInputDeviceInfo(hDevice: HANDLE; uiCommand: UINT; pData: LPVOID;
  2866.   var pcbSize: UINT): UINT; stdcall;
  2867. {$EXTERNALSYM GetRawInputDeviceInfo}
  2868. {$ENDIF}
  2869. //
  2870. // Raw Input Bulk Read: GetRawInputBuffer
  2871. //
  2872. function GetRawInputBuffer(pData: PRAWINPUT; var pcbSize: UINT; cbSizeHeader: UINT): UINT; stdcall;
  2873. {$EXTERNALSYM GetRawInputBuffer}
  2874. //
  2875. // Raw Input request APIs
  2876. //
  2877. type
  2878.   LPRAWINPUTDEVICE = ^RAWINPUTDEVICE;
  2879.   {$EXTERNALSYM LPRAWINPUTDEVICE}
  2880.   PRAWINPUTDEVICE = ^RAWINPUTDEVICE;
  2881.   {$EXTERNALSYM PRAWINPUTDEVICE}
  2882.   tagRAWINPUTDEVICE = record
  2883.     usUsagePage: USHORT; // Toplevel collection UsagePage
  2884.     usUsage: USHORT;     // Toplevel collection Usage
  2885.     dwFlags: DWORD;
  2886.     hwndTarget: HWND;    // Target hwnd. NULL = follows keyboard focus
  2887.   end;
  2888.   {$EXTERNALSYM tagRAWINPUTDEVICE}
  2889.   RAWINPUTDEVICE = tagRAWINPUTDEVICE;
  2890.   {$EXTERNALSYM RAWINPUTDEVICE}
  2891.   TRawInputDevice = RAWINPUTDEVICE;
  2892. const
  2893.   RIDEV_REMOVE       = $00000001;
  2894.   {$EXTERNALSYM RIDEV_REMOVE}
  2895.   RIDEV_EXCLUDE      = $00000010;
  2896.   {$EXTERNALSYM RIDEV_EXCLUDE}
  2897.   RIDEV_PAGEONLY     = $00000020;
  2898.   {$EXTERNALSYM RIDEV_PAGEONLY}
  2899.   RIDEV_NOLEGACY     = $00000030;
  2900.   {$EXTERNALSYM RIDEV_NOLEGACY}
  2901.   RIDEV_INPUTSINK    = $00000100;
  2902.   {$EXTERNALSYM RIDEV_INPUTSINK}
  2903.   RIDEV_CAPTUREMOUSE = $00000200; // effective when mouse nolegacy is specified, otherwise it would be an error
  2904.   {$EXTERNALSYM RIDEV_CAPTUREMOUSE}
  2905.   RIDEV_NOHOTKEYS    = $00000200; // effective for keyboard.
  2906.   {$EXTERNALSYM RIDEV_NOHOTKEYS}
  2907.   RIDEV_APPKEYS      = $00000400;  // effective for keyboard.
  2908.   {$EXTERNALSYM RIDEV_APPKEYS}
  2909.   RIDEV_EXMODEMASK   = $000000F0;
  2910.   {$EXTERNALSYM RIDEV_EXMODEMASK}
  2911. function RIDEV_EXMODE(mode: DWORD): DWORD;
  2912. {$EXTERNALSYM RIDEV_EXMODE}
  2913. function RegisterRawInputDevices(pRawInputDevices: PRAWINPUTDEVICE;
  2914.   uiNumDevices: UINT; cbSize: UINT): BOOL; stdcall;
  2915. {$EXTERNALSYM RegisterRawInputDevices}
  2916. function GetRegisteredRawInputDevices(pRawInputDevices: PRAWINPUTDEVICE;
  2917.   var puiNumDevices: UINT; cbSize: UINT): UINT; stdcall;
  2918. {$EXTERNALSYM GetRegisteredRawInputDevices}
  2919. type
  2920.   PRAWINPUTDEVICELIST = ^RAWINPUTDEVICELIST;
  2921.   {$EXTERNALSYM PRAWINPUTDEVICELIST}
  2922.   tagRAWINPUTDEVICELIST = record
  2923.     hDevice: HANDLE;
  2924.     dwType: DWORD;
  2925.   end;
  2926.   {$EXTERNALSYM tagRAWINPUTDEVICELIST}
  2927.   RAWINPUTDEVICELIST = tagRAWINPUTDEVICELIST;
  2928.   {$EXTERNALSYM RAWINPUTDEVICELIST}
  2929.   TRawInputDeviceList = RAWINPUTDEVICELIST;
  2930. function GetRawInputDeviceList(pRawInputDeviceList: PRAWINPUTDEVICELIST; var puiNumDevices: UINT;
  2931.   cbSize: UINT): UINT; stdcall;
  2932. {$EXTERNALSYM GetRawInputDeviceList}
  2933. function DefRawInputProc(paRawInput: PRAWINPUT; nInput: Integer; cbSizeHeader: UINT): LRESULT; stdcall;
  2934. {$EXTERNALSYM DefRawInputProc}
  2935. implementation
  2936. const
  2937.   user32 = 'user32.dll';
  2938. function IS_INTRESOURCE(wInteger: WORD): BOOL;
  2939. begin
  2940.   Result := (ULONG_PTR(wInteger) shr 16) = 0;
  2941. end;
  2942. function GET_WHEEL_DELTA_WPARAM(wParam: WPARAM): SHORT;
  2943. begin
  2944.   Result := SHORT(HIWORD(wParam));
  2945. end;
  2946. function GET_KEYSTATE_WPARAM(wParam: WPARAM): Integer;
  2947. begin
  2948.   Result := LOWORD(wParam);
  2949. end;
  2950. function GET_NCHITTEST_WPARAM(wParam: WPARAM): Shortint;
  2951. begin
  2952.   Result := LOWORD(wParam);
  2953. end;
  2954. function GET_XBUTTON_WPARAM(wParam: WPARAM): Integer;
  2955. begin
  2956.   Result := HIWORD(wParam);
  2957. end;
  2958. function GET_APPCOMMAND_LPARAM(lParam: LPARAM): Shortint;
  2959. begin
  2960.   Result := Shortint(HIWORD(lParam) and not FAPPCOMMAND_MASK);
  2961. end;
  2962. function GET_DEVICE_LPARAM(lParam: LPARAM): WORD;
  2963. begin
  2964.   Result := WORD(HIWORD(lParam) and FAPPCOMMAND_MASK);
  2965. end;
  2966. function GET_MOUSEORKEY_LPARAM(lParam: LPARAM): WORD;
  2967. begin
  2968.   Result := GET_DEVICE_LPARAM(lParam);
  2969. end;
  2970. function GET_FLAGS_LPARAM(lParam: LPARAM): Integer;
  2971. begin
  2972.   Result := LOWORD(lParam);
  2973. end;
  2974. function GET_KEYSTATE_LPARAM(lParam: LPARAM): Integer;
  2975. begin
  2976.   Result := GET_FLAGS_LPARAM(lParam);
  2977. end;
  2978. function MAKEWPARAM(wLow, wHigh: WORD): WPARAM;
  2979. begin
  2980.   Result := WPARAM(DWORD(MAKELONG(wLow, wHigh)));
  2981. end;
  2982. function MAKELPARAM(wLow, wHigh: WORD): LPARAM;
  2983. begin
  2984.   Result := LPARAM(DWORD(MAKELONG(wLow, wHigh)));
  2985. end;
  2986. function MAKELRESULT(wLow, wHigh: WORD): LRESULT;
  2987. begin
  2988.   Result := LRESULT(DWORD(MAKELONG(wLow, wHigh)));
  2989. end;
  2990. function ExitWindows(dwReserved: DWORD; uREserved: UINT): BOOL;
  2991. begin
  2992.   Result := ExitWindowsEx(EWX_LOGOFF, $FFFFFFFF);
  2993. end;
  2994. function PostAppMessageA(idThread: DWORD; wMsg: UINT; wParam: WPARAM; lParam: LPARAM): BOOL;
  2995. begin
  2996.   Result := PostThreadMessageA(idThread, wMsg, wParam, lParam);
  2997. end;
  2998. function PostAppMessageW(idThread: DWORD; wMsg: UINT; wParam: WPARAM; lParam: LPARAM): BOOL;
  2999. begin
  3000.   Result := PostThreadMessageW(idThread, wMsg, wParam, lParam);
  3001. end;
  3002. {$IFDEF UNICODE}
  3003. function PostAppMessage(idThread: DWORD; wMsg: UINT; wParam: WPARAM; lParam: LPARAM): BOOL;
  3004. begin
  3005.   Result := PostThreadMessageW(idThread, wMsg, wParam, lParam);
  3006. end;
  3007. {$ELSE}
  3008. function PostAppMessage(idThread: DWORD; wMsg: UINT; wParam: WPARAM; lParam: LPARAM): BOOL;
  3009. begin
  3010.   Result := PostThreadMessageA(idThread, wMsg, wParam, lParam);
  3011. end;
  3012. {$ENDIF}
  3013. function CreateWindowA(lpClassName: LPCSTR; lpWindowName: LPCSTR; dwStyle: DWORD;
  3014.   x, y, nWidth, nHeight: Integer; hWndParent: HWND; hMenu: HMENU;
  3015.   hInstance: HINSTANCE; lpParam: LPVOID): HWND;
  3016. begin
  3017.   Result := CreateWindowExA(0, lpClassName, lpWindowName, dwStyle, x, y,
  3018.     nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam);
  3019. end;
  3020. function CreateWindowW(lpClassName: LPCWSTR; lpWindowName: LPCWSTR; dwStyle: DWORD;
  3021.   x, y, nWidth, nHeight: Integer; hWndParent: HWND; hMenu: HMENU;
  3022.   hInstance: HINSTANCE; lpParam: LPVOID): HWND;
  3023. begin
  3024.   Result := CreateWindowExW(0, lpClassName, lpWindowName, dwStyle, x, y,
  3025.     nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam);
  3026. end;
  3027. {$IFDEF UNICODE}
  3028. function CreateWindow(lpClassName: LPCWSTR; lpWindowName: LPCWSTR; dwStyle: DWORD;
  3029.   x, y, nWidth, nHeight: Integer; hWndParent: HWND; hMenu: HMENU;
  3030.   hInstance: HINSTANCE; lpParam: LPVOID): HWND;
  3031. begin
  3032.   Result := CreateWindowExW(0, lpClassName, lpWindowName, dwStyle, x, y,
  3033.     nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam);
  3034. end;
  3035. {$ELSE}
  3036. function CreateWindow(lpClassName: LPCSTR; lpWindowName: LPCSTR; dwStyle: DWORD;
  3037.   x, y, nWidth, nHeight: Integer; hWndParent: HWND; hMenu: HMENU;
  3038.   hInstance: HINSTANCE; lpParam: LPVOID): HWND;
  3039. begin
  3040.   Result := CreateWindowExA(0, lpClassName, lpWindowName, dwStyle, x, y,
  3041.     nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam);
  3042. end;
  3043. {$ENDIF}
  3044. function CreateDialogA(hInstance: HINSTANCE; lpName: LPCSTR; hWndParent: HWND; lpDialogFunc: DLGPROC): HWND;
  3045. begin
  3046.   Result := CreateDialogParamA(hInstance, lpName, hWndParent, lpDialogFunc, 0);
  3047. end;
  3048. function CreateDialogW(hInstance: HINSTANCE; lpName: LPCWSTR; hWndParent: HWND; lpDialogFunc: DLGPROC): HWND;
  3049. begin
  3050.   Result := CreateDialogParamW(hInstance, lpName, hWndParent, lpDialogFunc, 0);
  3051. end;
  3052. {$IFDEF UNICODE}
  3053. function CreateDialog(hInstance: HINSTANCE; lpName: LPCWSTR; hWndParent: HWND; lpDialogFunc: DLGPROC): HWND;
  3054. begin
  3055.   Result := CreateDialogParamW(hInstance, lpName, hWndParent, lpDialogFunc, 0);
  3056. end;
  3057. {$ELSE}
  3058. function CreateDialog(hInstance: HINSTANCE; lpName: LPCSTR; hWndParent: HWND; lpDialogFunc: DLGPROC): HWND;
  3059. begin
  3060.   Result := CreateDialogParamA(hInstance, lpName, hWndParent, lpDialogFunc, 0);
  3061. end;
  3062. {$ENDIF}
  3063. function CreateDialogIndirectA(hInstance: HINSTANCE; const lpTemplate: DLGTEMPLATE;
  3064.   hWndParent: HWND; lpDialogFunc: DLGPROC): HWND;
  3065. begin
  3066.   Result := CreateDialogIndirectParamA(hInstance, lpTemplate, hWndParent, lpDialogFunc, 0);
  3067. end;
  3068. function CreateDialogIndirectW(hInstance: HINSTANCE; const lpTemplate: DLGTEMPLATE;
  3069.   hWndParent: HWND; lpDialogFunc: DLGPROC): HWND;
  3070. begin
  3071.   Result := CreateDialogIndirectParamW(hInstance, lpTemplate, hWndParent, lpDialogFunc, 0);
  3072. end;
  3073. {$IFDEF UNICODE}
  3074. function CreateDialogIndirect(hInstance: HINSTANCE; const lpTemplate: DLGTEMPLATE;
  3075.   hWndParent: HWND; lpDialogFunc: DLGPROC): HWND;
  3076. begin
  3077.   Result := CreateDialogIndirectParamW(hInstance, lpTemplate, hWndParent, lpDialogFunc, 0);
  3078. end;
  3079. {$ELSE}
  3080. function CreateDialogIndirect(hInstance: HINSTANCE; const lpTemplate: DLGTEMPLATE;
  3081.   hWndParent: HWND; lpDialogFunc: DLGPROC): HWND;
  3082. begin
  3083.   Result := CreateDialogIndirectParamA(hInstance, lpTemplate, hWndParent, lpDialogFunc, 0);
  3084. end;
  3085. {$ENDIF}
  3086. function DialogBoxA(hInstance: HINSTANCE; lpTemplate: LPCSTR; hWndParent: HWND; lpDialogFunc: DLGPROC): INT_PTR;
  3087. begin
  3088.   Result := DialogBoxParamA(hInstance, lpTemplate, hWndParent, lpDialogFunc, 0);
  3089. end;
  3090. function DialogBoxW(hInstance: HINSTANCE; lpTemplate: LPCWSTR; hWndParent: HWND; lpDialogFunc: DLGPROC): INT_PTR;
  3091. begin
  3092.   Result := DialogBoxParamW(hInstance, lpTemplate, hWndParent, lpDialogFunc, 0);
  3093. end;
  3094. {$IFDEF UNICODE}
  3095. function DialogBox(hInstance: HINSTANCE; lpTemplate: LPCWSTR; hWndParent: HWND; lpDialogFunc: DLGPROC): INT_PTR;
  3096. begin
  3097.   Result := DialogBoxParamW(hInstance, lpTemplate, hWndParent, lpDialogFunc, 0);
  3098. end;
  3099. {$ELSE}
  3100. function DialogBox(hInstance: HINSTANCE; lpTemplate: LPCSTR; hWndParent: HWND; lpDialogFunc: DLGPROC): INT_PTR;
  3101. begin
  3102.   Result := DialogBoxParamA(hInstance, lpTemplate, hWndParent, lpDialogFunc, 0);
  3103. end;
  3104. {$ENDIF}
  3105. function DialogBoxIndirectA(hInstance: HINSTANCE; const lpTemplate: DLGTEMPLATE; hWndParent: HWND; lpDialogFunc: DLGPROC): INT_PTR;
  3106. begin
  3107.   Result := DialogBoxIndirectParamA(hInstance, lpTemplate, hWndParent, lpDialogFunc, 0);
  3108. end;
  3109. function DialogBoxIndirectW(hInstance: HINSTANCE; const lpTemplate: DLGTEMPLATE; hWndParent: HWND; lpDialogFunc: DLGPROC): INT_PTR;
  3110. begin
  3111.   Result := DialogBoxIndirectParamW(hInstance, lpTemplate, hWndParent, lpDialogFunc, 0);
  3112. end;
  3113. {$IFDEF UNICODE}
  3114. function DialogBoxIndirect(hInstance: HINSTANCE; const lpTemplate: DLGTEMPLATE; hWndParent: HWND; lpDialogFunc: DLGPROC): INT_PTR;
  3115. begin
  3116.   Result := DialogBoxIndirectParamW(hInstance, lpTemplate, hWndParent, lpDialogFunc, 0);
  3117. end;
  3118. {$ELSE}
  3119. function DialogBoxIndirect(hInstance: HINSTANCE; const lpTemplate: DLGTEMPLATE; hWndParent: HWND; lpDialogFunc: DLGPROC): INT_PTR;
  3120. begin
  3121.   Result := DialogBoxIndirectParamA(hInstance, lpTemplate, hWndParent, lpDialogFunc, 0);
  3122. end;
  3123. {$ENDIF}
  3124. function AnsiToOem(lpszSrc: LPCSTR; lpszDst: LPSTR): BOOL;
  3125. begin
  3126.   Result := CharToOemA(lpszSrc, lpszDst);
  3127. end;
  3128. function OemToAnsi(lpszSrc: LPCSTR; lpszDst: LPSTR): BOOL;
  3129. begin
  3130.   Result := OemToCharA(lpszSrc, lpszDst);
  3131. end;
  3132. function AnsiToOemBuff(lpszSrc: LPCSTR; lpszDst: LPSTR; cchDstLength: DWORD): BOOL;
  3133. begin
  3134.   Result := CharToOemBuffA(lpszSrc, lpszDst, cchDstLength);
  3135. end;
  3136. function OemToAnsiBuff(lpszSrc: LPCSTR; lpszDst: LPSTR; cchDstLength: DWORD): BOOL;
  3137. begin
  3138.   Result := OemToCharBuffA(lpszSrc, lpszDst, cchDstLength);
  3139. end;
  3140. function AnsiUpper(lpsz: LPSTR): LPSTR;
  3141. begin
  3142.   Result := CharUpperA(lpsz);
  3143. end;
  3144. function AnsiUpperBuff(lpsz: LPSTR; cchLength: DWORD): DWORD;
  3145. begin
  3146.   Result := CharUpperBuffA(lpsz, cchLength);
  3147. end;
  3148. function AnsiLower(lpsz: LPSTR): LPSTR;
  3149. begin
  3150.   Result := CharLowerA(lpsz);
  3151. end;
  3152. function AnsiLowerBuff(lpsz: LPSTR; cchLength: DWORD): DWORD;
  3153. begin
  3154.   Result := CharLowerBuffA(lpsz, cchLength);
  3155. end;
  3156. function AnsiNext(lpsz: LPCSTR): LPSTR;
  3157. begin
  3158.   Result := CharNextA(lpsz);
  3159. end;
  3160. function AnsiPrev(lpszStart: LPCSTR; lpszCurrent: LPCSTR): LPSTR;
  3161. begin
  3162.   Result := CharPrevA(lpszStart, lpszCurrent);
  3163. end;
  3164. function GetWindowLongPtrA(hWnd: HWND; nIndex: Integer): LONG_PTR;
  3165. begin
  3166.   Result := GetWindowLongA(hWnd, nIndex);
  3167. end;
  3168. function GetWindowLongPtrW(hWnd: HWND; nIndex: Integer): LONG_PTR;
  3169. begin
  3170.   Result := GetWindowLongW(hWnd, nIndex);
  3171. end;
  3172. {$IFDEF UNICODE}
  3173. function GetWindowLongPtr(hWnd: HWND; nIndex: Integer): LONG_PTR;
  3174. begin
  3175.   Result := GetWindowLongW(hWnd, nIndex);
  3176. end;
  3177. {$ELSE}
  3178. function GetWindowLongPtr(hWnd: HWND; nIndex: Integer): LONG_PTR;
  3179. begin
  3180.   Result := GetWindowLongA(hWnd, nIndex);
  3181. end;
  3182. {$ENDIF}
  3183. function SetWindowLongPtrA(hWnd: HWND; nIndex: Integer; dwNewLong: LONG_PTR): LONG_PTR;
  3184. begin
  3185.   Result := SetWindowLongA(hWnd, nIndex, dwNewLong);
  3186. end;
  3187. function SetWindowLongPtrW(hWnd: HWND; nIndex: Integer; dwNewLong: LONG_PTR): LONG_PTR;
  3188. begin
  3189.   Result := SetWindowLongW(hWnd, nIndex, dwNewLong);
  3190. end;
  3191. {$IFDEF UNICODE}
  3192. function SetWindowLongPtr(hWnd: HWND; nIndex: Integer; dwNewLong: LONG_PTR): LONG_PTR;
  3193. begin
  3194.   Result := SetWindowLongW(hWnd, nIndex, dwNewLong);
  3195. end;
  3196. {$ELSE}
  3197. function SetWindowLongPtr(hWnd: HWND; nIndex: Integer; dwNewLong: LONG_PTR): LONG_PTR;
  3198. begin
  3199.   Result := SetWindowLongA(hWnd, nIndex, dwNewLong);
  3200. end;
  3201. {$ENDIF}
  3202. function GetClassLongPtrA(hWnd: HWND; nIndex: Integer): ULONG_PTR;
  3203. begin
  3204.   Result := GetClassLongA(hWnd, nIndex);
  3205. end;
  3206. function GetClassLongPtrW(hWnd: HWND; nIndex: Integer): ULONG_PTR;
  3207. begin
  3208.   Result := GetClassLongW(hWnd, nIndex);
  3209. end;
  3210. {$IFDEF UNICODE}
  3211. function GetClassLongPtr(hWnd: HWND; nIndex: Integer): ULONG_PTR;
  3212. begin
  3213.   Result := GetClassLongW(hWnd, nIndex);
  3214. end;
  3215. {$ELSE}
  3216. function GetClassLongPtr(hWnd: HWND; nIndex: Integer): ULONG_PTR;
  3217. begin
  3218.   Result := GetClassLongA(hWnd, nIndex);
  3219. end;
  3220. {$ENDIF}
  3221. function SetClassLongPtrA(hWnd: HWND; nIndex: Integer; dwNewLong: ULONG_PTR): ULONG_PTR;
  3222. begin
  3223.   Result := SetClassLongA(hWnd, nIndex, dwNewLong);
  3224. end;
  3225. function SetClassLongPtrW(hWnd: HWND; nIndex: Integer; dwNewLong: ULONG_PTR): ULONG_PTR;
  3226. begin
  3227.   Result := SetClassLongW(hWnd, nIndex, dwNewLong);
  3228. end;
  3229. {$IFDEF UNICODE}
  3230. function SetClassLongPtr(hWnd: HWND; nIndex: Integer; dwNewLong: ULONG_PTR): ULONG_PTR;
  3231. begin
  3232.   Result := SetClassLongW(hWnd, nIndex, dwNewLong);
  3233. end;
  3234. {$ELSE}
  3235. function SetClassLongPtr(hWnd: HWND; nIndex: Integer; dwNewLong: ULONG_PTR): ULONG_PTR;
  3236. begin
  3237.   Result := SetClassLongA(hWnd, nIndex, dwNewLong);
  3238. end;
  3239. {$ENDIF}
  3240. function EnumTaskWindows(hTask: HANDLE; lpfn: WNDENUMPROC; lParam: LPARAM): BOOL;
  3241. begin
  3242.   Result := EnumThreadWindows(ULONG(hTask), lpfn, lParam);
  3243. end;
  3244. function GetNextWindow(hWnd: HWND; wCmd: UINT): HWND;
  3245. begin
  3246.   Result := GetWindow(hWnd, wCmd);
  3247. end;
  3248. function GetWindowTask(hWnd: HWND): HANDLE;
  3249. begin
  3250.   Result := HANDLE(DWORD_PTR(GetWindowThreadProcessId(hWnd, nil)));
  3251. end;
  3252. function DefHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM; phhk: LPHHOOK): LRESULT;
  3253. begin
  3254.   Result := CallNextHookEx(HHOOK(phhk^), nCode, wParam, lParam);
  3255. end;
  3256. function CopyCursor(pcur: HCURSOR): HCURSOR;
  3257. begin
  3258.  Result := HCURSOR(CopyIcon(HICON(pcur)));
  3259. end;
  3260. {$IFDEF DYNAMIC_LINK}
  3261. var
  3262.   _IsHungAppWindow: Pointer;
  3263. function IsHungAppWindow;
  3264. begin
  3265.   GetProcedureAddress(_IsHungAppWindow, user32, 'IsHungAppWindow');
  3266.   asm
  3267.     mov esp, ebp
  3268.     pop ebp
  3269.     jmp [_IsHungAppWindow]
  3270.   end;
  3271. end;
  3272. {$ELSE}
  3273. function IsHungAppWindow; external user32 name 'IsHungAppWindow';
  3274. {$ENDIF DYNAMIC_LINK}
  3275. {$IFDEF DYNAMIC_LINK}
  3276. var
  3277.   _wvsprintfA: Pointer;
  3278. function wvsprintfA;
  3279. begin
  3280.   GetProcedureAddress(_wvsprintfA, user32, 'wvsprintfA');
  3281.   asm
  3282.     mov esp, ebp
  3283.     pop ebp
  3284.     jmp [_wvsprintfA]
  3285.   end;
  3286. end;
  3287. {$ELSE}
  3288. function wvsprintfA; external user32 name 'wvsprintfA';
  3289. {$ENDIF DYNAMIC_LINK}
  3290. {$IFDEF DYNAMIC_LINK}
  3291. var
  3292.   _wvsprintfW: Pointer;
  3293. function wvsprintfW;
  3294. begin
  3295.   GetProcedureAddress(_wvsprintfW, user32, 'wvsprintfW');
  3296.   asm
  3297.     mov esp, ebp
  3298.     pop ebp
  3299.     jmp [_wvsprintfW]
  3300.   end;
  3301. end;
  3302. {$ELSE}
  3303. function wvsprintfW; external user32 name 'wvsprintfW';
  3304. {$ENDIF DYNAMIC_LINK}
  3305. {$IFDEF UNICODE}
  3306. {$IFDEF DYNAMIC_LINK}
  3307. var
  3308.   _wvsprintf: Pointer;
  3309. function wvsprintf;
  3310. begin
  3311.   GetProcedureAddress(_wvsprintf, user32, 'wvsprintfW');
  3312.   asm
  3313.     mov esp, ebp
  3314.     pop ebp
  3315.     jmp [_wvsprintf]
  3316.   end;
  3317. end;
  3318. {$ELSE}
  3319. function wvsprintf; external user32 name 'wvsprintfW';
  3320. {$ENDIF DYNAMIC_LINK}
  3321. {$ELSE}
  3322. {$IFDEF DYNAMIC_LINK}
  3323. var
  3324.   _wvsprintf: Pointer;
  3325. function wvsprintf;
  3326. begin
  3327.   GetProcedureAddress(_wvsprintf, user32, 'wvsprintfA');
  3328.   asm
  3329.     mov esp, ebp
  3330.     pop ebp
  3331.     jmp [_wvsprintf]
  3332.   end;
  3333. end;
  3334. {$ELSE}
  3335. function wvsprintf; external user32 name 'wvsprintfA';
  3336. {$ENDIF DYNAMIC_LINK}
  3337. {$ENDIF}
  3338. {$IFDEF DYNAMIC_LINK}
  3339. var
  3340.   _wsprintfA: Pointer;
  3341. function wsprintfA;
  3342. begin
  3343.   GetProcedureAddress(_wsprintfA, user32, 'wsprintfA');
  3344.   asm
  3345.     mov esp, ebp
  3346.     pop ebp
  3347.     jmp [_wsprintfA]
  3348.   end;
  3349. end;
  3350. {$ELSE}
  3351. function wsprintfA; external user32 name 'wsprintfA';
  3352. {$ENDIF DYNAMIC_LINK}
  3353. {$IFDEF DYNAMIC_LINK}
  3354. var
  3355.   _wsprintfW: Pointer;
  3356. function wsprintfW;
  3357. begin
  3358.   GetProcedureAddress(_wsprintfW, user32, 'wsprintfW');
  3359.   asm
  3360.     mov esp, ebp
  3361.     pop ebp
  3362.     jmp [_wsprintfW]
  3363.   end;
  3364. end;
  3365. {$ELSE}
  3366. function wsprintfW; external user32 name 'wsprintfW';
  3367. {$ENDIF DYNAMIC_LINK}
  3368. {$IFDEF UNICODE}
  3369. {$IFDEF DYNAMIC_LINK}
  3370. var
  3371.   _wsprintf: Pointer;
  3372. function wsprintf;
  3373. begin
  3374.   GetProcedureAddress(_wsprintf, user32, 'wsprintfW');
  3375.   asm
  3376.     mov esp, ebp
  3377.     pop ebp
  3378.     jmp [_wsprintf]
  3379.   end;
  3380. end;
  3381. {$ELSE}
  3382. function wsprintf; external user32 name 'wsprintfW';
  3383. {$ENDIF DYNAMIC_LINK}
  3384. {$ELSE}
  3385. {$IFDEF DYNAMIC_LINK}
  3386. var
  3387.   _wsprintf: Pointer;
  3388. function wsprintf;
  3389. begin
  3390.   GetProcedureAddress(_wsprintf, user32, 'wsprintfA');
  3391.   asm
  3392.     mov esp, ebp
  3393.     pop ebp
  3394.     jmp [_wsprintf]
  3395.   end;
  3396. end;
  3397. {$ELSE}
  3398. function wsprintf; external user32 name 'wsprintfA';
  3399. {$ENDIF DYNAMIC_LINK}
  3400. {$ENDIF}
  3401. {$IFDEF DYNAMIC_LINK}
  3402. var
  3403.   _LoadKeyboardLayoutA: Pointer;
  3404. function LoadKeyboardLayoutA;
  3405. begin
  3406.   GetProcedureAddress(_LoadKeyboardLayoutA, user32, 'LoadKeyboardLayoutA');
  3407.   asm
  3408.     mov esp, ebp
  3409.     pop ebp
  3410.     jmp [_LoadKeyboardLayoutA]
  3411.   end;
  3412. end;
  3413. {$ELSE}
  3414. function LoadKeyboardLayoutA; external user32 name 'LoadKeyboardLayoutA';
  3415. {$ENDIF DYNAMIC_LINK}
  3416. {$IFDEF DYNAMIC_LINK}
  3417. var
  3418.   _LoadKeyboardLayoutW: Pointer;
  3419. function LoadKeyboardLayoutW;
  3420. begin
  3421.   GetProcedureAddress(_LoadKeyboardLayoutW, user32, 'LoadKeyboardLayoutW');
  3422.   asm
  3423.     mov esp, ebp
  3424.     pop ebp
  3425.     jmp [_LoadKeyboardLayoutW]
  3426.   end;
  3427. end;
  3428. {$ELSE}
  3429. function LoadKeyboardLayoutW; external user32 name 'LoadKeyboardLayoutW';
  3430. {$ENDIF DYNAMIC_LINK}
  3431. {$IFDEF UNICODE}
  3432. {$IFDEF DYNAMIC_LINK}
  3433. var
  3434.   _LoadKeyboardLayout: Pointer;
  3435. function LoadKeyboardLayout;
  3436. begin
  3437.   GetProcedureAddress(_LoadKeyboardLayout, user32, 'LoadKeyboardLayoutW');
  3438.   asm
  3439.     mov esp, ebp
  3440.     pop ebp
  3441.     jmp [_LoadKeyboardLayout]
  3442.   end;
  3443. end;
  3444. {$ELSE}
  3445. function LoadKeyboardLayout; external user32 name 'LoadKeyboardLayoutW';
  3446. {$ENDIF DYNAMIC_LINK}
  3447. {$ELSE}
  3448. {$IFDEF DYNAMIC_LINK}
  3449. var
  3450.   _LoadKeyboardLayout: Pointer;
  3451. function LoadKeyboardLayout;
  3452. begin
  3453.   GetProcedureAddress(_LoadKeyboardLayout, user32, 'LoadKeyboardLayoutA');
  3454.   asm
  3455.     mov esp, ebp
  3456.     pop ebp
  3457.     jmp [_LoadKeyboardLayout]
  3458.   end;
  3459. end;
  3460. {$ELSE}
  3461. function LoadKeyboardLayout; external user32 name 'LoadKeyboardLayoutA';
  3462. {$ENDIF DYNAMIC_LINK}
  3463. {$ENDIF}
  3464. {$IFDEF DYNAMIC_LINK}
  3465. var
  3466.   _ActivateKeyboardLayout: Pointer;
  3467. function ActivateKeyboardLayout;
  3468. begin
  3469.   GetProcedureAddress(_ActivateKeyboardLayout, user32, 'ActivateKeyboardLayout');
  3470.   asm
  3471.     mov esp, ebp
  3472.     pop ebp
  3473.     jmp [_ActivateKeyboardLayout]
  3474.   end;
  3475. end;
  3476. {$ELSE}
  3477. function ActivateKeyboardLayout; external user32 name 'ActivateKeyboardLayout';
  3478. {$ENDIF DYNAMIC_LINK}
  3479. {$IFDEF DYNAMIC_LINK}
  3480. var
  3481.   _ToUnicodeEx: Pointer;
  3482. function ToUnicodeEx;
  3483. begin
  3484.   GetProcedureAddress(_ToUnicodeEx, user32, 'ToUnicodeEx');
  3485.   asm
  3486.     mov esp, ebp
  3487.     pop ebp
  3488.     jmp [_ToUnicodeEx]
  3489.   end;
  3490. end;
  3491. {$ELSE}
  3492. function ToUnicodeEx; external user32 name 'ToUnicodeEx';
  3493. {$ENDIF DYNAMIC_LINK}
  3494. {$IFDEF DYNAMIC_LINK}
  3495. var
  3496.   _UnloadKeyboardLayout: Pointer;
  3497. function UnloadKeyboardLayout;
  3498. begin
  3499.   GetProcedureAddress(_UnloadKeyboardLayout, user32, 'UnloadKeyboardLayout');
  3500.   asm
  3501.     mov esp, ebp
  3502.     pop ebp
  3503.     jmp [_UnloadKeyboardLayout]
  3504.   end;
  3505. end;
  3506. {$ELSE}
  3507. function UnloadKeyboardLayout; external user32 name 'UnloadKeyboardLayout';
  3508. {$ENDIF DYNAMIC_LINK}
  3509. {$IFDEF DYNAMIC_LINK}
  3510. var
  3511.   _GetKeyboardLayoutNameA: Pointer;
  3512. function GetKeyboardLayoutNameA;
  3513. begin
  3514.   GetProcedureAddress(_GetKeyboardLayoutNameA, user32, 'GetKeyboardLayoutNameA');
  3515.   asm
  3516.     mov esp, ebp
  3517.     pop ebp
  3518.     jmp [_GetKeyboardLayoutNameA]
  3519.   end;
  3520. end;
  3521. {$ELSE}
  3522. function GetKeyboardLayoutNameA; external user32 name 'GetKeyboardLayoutNameA';
  3523. {$ENDIF DYNAMIC_LINK}
  3524. {$IFDEF DYNAMIC_LINK}
  3525. var
  3526.   _GetKeyboardLayoutNameW: Pointer;
  3527. function GetKeyboardLayoutNameW;
  3528. begin
  3529.   GetProcedureAddress(_GetKeyboardLayoutNameW, user32, 'GetKeyboardLayoutNameW');
  3530.   asm
  3531.     mov esp, ebp
  3532.     pop ebp
  3533.     jmp [_GetKeyboardLayoutNameW]
  3534.   end;
  3535. end;
  3536. {$ELSE}
  3537. function GetKeyboardLayoutNameW; external user32 name 'GetKeyboardLayoutNameW';
  3538. {$ENDIF DYNAMIC_LINK}
  3539. {$IFDEF UNICODE}
  3540. {$IFDEF DYNAMIC_LINK}
  3541. var
  3542.   _GetKeyboardLayoutName: Pointer;
  3543. function GetKeyboardLayoutName;
  3544. begin
  3545.   GetProcedureAddress(_GetKeyboardLayoutName, user32, 'GetKeyboardLayoutNameW');
  3546.   asm
  3547.     mov esp, ebp
  3548.     pop ebp
  3549.     jmp [_GetKeyboardLayoutName]
  3550.   end;
  3551. end;
  3552. {$ELSE}
  3553. function GetKeyboardLayoutName; external user32 name 'GetKeyboardLayoutNameW';
  3554. {$ENDIF DYNAMIC_LINK}
  3555. {$ELSE}
  3556. {$IFDEF DYNAMIC_LINK}
  3557. var
  3558.   _GetKeyboardLayoutName: Pointer;
  3559. function GetKeyboardLayoutName;
  3560. begin
  3561.   GetProcedureAddress(_GetKeyboardLayoutName, user32, 'GetKeyboardLayoutNameA');
  3562.   asm
  3563.     mov esp, ebp
  3564.     pop ebp
  3565.     jmp [_GetKeyboardLayoutName]
  3566.   end;
  3567. end;
  3568. {$ELSE}
  3569. function GetKeyboardLayoutName; external user32 name 'GetKeyboardLayoutNameA';
  3570. {$ENDIF DYNAMIC_LINK}
  3571. {$ENDIF}
  3572. {$IFDEF DYNAMIC_LINK}
  3573. var
  3574.   _GetKeyboardLayoutList: Pointer;
  3575. function GetKeyboardLayoutList;
  3576. begin
  3577.   GetProcedureAddress(_GetKeyboardLayoutList, user32, 'GetKeyboardLayoutList');
  3578.   asm
  3579.     mov esp, ebp
  3580.     pop ebp
  3581.     jmp [_GetKeyboardLayoutList]
  3582.   end;
  3583. end;
  3584. {$ELSE}
  3585. function GetKeyboardLayoutList; external user32 name 'GetKeyboardLayoutList';
  3586. {$ENDIF DYNAMIC_LINK}
  3587. {$IFDEF DYNAMIC_LINK}
  3588. var
  3589.   _GetKeyboardLayout: Pointer;
  3590. function GetKeyboardLayout;
  3591. begin
  3592.   GetProcedureAddress(_GetKeyboardLayout, user32, 'GetKeyboardLayout');
  3593.   asm
  3594.     mov esp, ebp
  3595.     pop ebp
  3596.     jmp [_GetKeyboardLayout]
  3597.   end;
  3598. end;
  3599. {$ELSE}
  3600. function GetKeyboardLayout; external user32 name 'GetKeyboardLayout';
  3601. {$ENDIF DYNAMIC_LINK}
  3602. {$IFDEF DYNAMIC_LINK}
  3603. var
  3604.   _GetMouseMovePointsEx: Pointer;
  3605. function GetMouseMovePointsEx;
  3606. begin
  3607.   GetProcedureAddress(_GetMouseMovePointsEx, user32, 'GetMouseMovePointsEx');
  3608.   asm
  3609.     mov esp, ebp
  3610.     pop ebp
  3611.     jmp [_GetMouseMovePointsEx]
  3612.   end;
  3613. end;
  3614. {$ELSE}
  3615. function GetMouseMovePointsEx; external user32 name 'GetMouseMovePointsEx';
  3616. {$ENDIF DYNAMIC_LINK}
  3617. {$IFDEF DYNAMIC_LINK}
  3618. var
  3619.   _CreateDesktopA: Pointer;
  3620. function CreateDesktopA;
  3621. begin
  3622.   GetProcedureAddress(_CreateDesktopA, user32, 'CreateDesktopA');
  3623.   asm
  3624.     mov esp, ebp
  3625.     pop ebp
  3626.     jmp [_CreateDesktopA]
  3627.   end;
  3628. end;
  3629. {$ELSE}
  3630. function CreateDesktopA; external user32 name 'CreateDesktopA';
  3631. {$ENDIF DYNAMIC_LINK}
  3632. {$IFDEF DYNAMIC_LINK}
  3633. var
  3634.   _CreateDesktopW: Pointer;
  3635. function CreateDesktopW;
  3636. begin
  3637.   GetProcedureAddress(_CreateDesktopW, user32, 'CreateDesktopW');
  3638.   asm
  3639.     mov esp, ebp
  3640.     pop ebp
  3641.     jmp [_CreateDesktopW]
  3642.   end;
  3643. end;
  3644. {$ELSE}
  3645. function CreateDesktopW; external user32 name 'CreateDesktopW';
  3646. {$ENDIF DYNAMIC_LINK}
  3647. {$IFDEF UNICODE}
  3648. {$IFDEF DYNAMIC_LINK}
  3649. var
  3650.   _CreateDesktop: Pointer;
  3651. function CreateDesktop;
  3652. begin
  3653.   GetProcedureAddress(_CreateDesktop, user32, 'CreateDesktopW');
  3654.   asm
  3655.     mov esp, ebp
  3656.     pop ebp
  3657.     jmp [_CreateDesktop]
  3658.   end;
  3659. end;
  3660. {$ELSE}
  3661. function CreateDesktop; external user32 name 'CreateDesktopW';
  3662. {$ENDIF DYNAMIC_LINK}
  3663. {$ELSE}
  3664. {$IFDEF DYNAMIC_LINK}
  3665. var
  3666.   _CreateDesktop: Pointer;
  3667. function CreateDesktop;
  3668. begin
  3669.   GetProcedureAddress(_CreateDesktop, user32, 'CreateDesktopA');
  3670.   asm
  3671.     mov esp, ebp
  3672.     pop ebp
  3673.     jmp [_CreateDesktop]
  3674.   end;
  3675. end;
  3676. {$ELSE}
  3677. function CreateDesktop; external user32 name 'CreateDesktopA';
  3678. {$ENDIF DYNAMIC_LINK}
  3679. {$ENDIF}
  3680. {$IFDEF DYNAMIC_LINK}
  3681. var
  3682.   _OpenDesktopA: Pointer;
  3683. function OpenDesktopA;
  3684. begin
  3685.   GetProcedureAddress(_OpenDesktopA, user32, 'OpenDesktopA');
  3686.   asm
  3687.     mov esp, ebp
  3688.     pop ebp
  3689.     jmp [_OpenDesktopA]
  3690.   end;
  3691. end;
  3692. {$ELSE}
  3693. function OpenDesktopA; external user32 name 'OpenDesktopA';
  3694. {$ENDIF DYNAMIC_LINK}
  3695. {$IFDEF DYNAMIC_LINK}
  3696. var
  3697.   _OpenDesktopW: Pointer;
  3698. function OpenDesktopW;
  3699. begin
  3700.   GetProcedureAddress(_OpenDesktopW, user32, 'OpenDesktopW');
  3701.   asm
  3702.     mov esp, ebp
  3703.     pop ebp
  3704.     jmp [_OpenDesktopW]
  3705.   end;
  3706. end;
  3707. {$ELSE}
  3708. function OpenDesktopW; external user32 name 'OpenDesktopW';
  3709. {$ENDIF DYNAMIC_LINK}
  3710. {$IFDEF UNICODE}
  3711. {$IFDEF DYNAMIC_LINK}
  3712. var
  3713.   _OpenDesktop: Pointer;
  3714. function OpenDesktop;
  3715. begin
  3716.   GetProcedureAddress(_OpenDesktop, user32, 'OpenDesktopW');
  3717.   asm
  3718.     mov esp, ebp
  3719.     pop ebp
  3720.     jmp [_OpenDesktop]
  3721.   end;
  3722. end;
  3723. {$ELSE}
  3724. function OpenDesktop; external user32 name 'OpenDesktopW';
  3725. {$ENDIF DYNAMIC_LINK}
  3726. {$ELSE}
  3727. {$IFDEF DYNAMIC_LINK}
  3728. var
  3729.   _OpenDesktop: Pointer;
  3730. function OpenDesktop;
  3731. begin
  3732.   GetProcedureAddress(_OpenDesktop, user32, 'OpenDesktopA');
  3733.   asm
  3734.     mov esp, ebp
  3735.     pop ebp
  3736.     jmp [_OpenDesktop]
  3737.   end;
  3738. end;
  3739. {$ELSE}
  3740. function OpenDesktop; external user32 name 'OpenDesktopA';
  3741. {$ENDIF DYNAMIC_LINK}
  3742. {$ENDIF}
  3743. {$IFDEF DYNAMIC_LINK}
  3744. var
  3745.   _OpenInputDesktop: Pointer;
  3746. function OpenInputDesktop;
  3747. begin
  3748.   GetProcedureAddress(_OpenInputDesktop, user32, 'OpenInputDesktop');
  3749.   asm
  3750.     mov esp, ebp
  3751.     pop ebp
  3752.     jmp [_OpenInputDesktop]
  3753.   end;
  3754. end;
  3755. {$ELSE}
  3756. function OpenInputDesktop; external user32 name 'OpenInputDesktop';
  3757. {$ENDIF DYNAMIC_LINK}
  3758. {$IFDEF DYNAMIC_LINK}
  3759. var
  3760.   _EnumDesktopsA: Pointer;
  3761. function EnumDesktopsA;
  3762. begin
  3763.   GetProcedureAddress(_EnumDesktopsA, user32, 'EnumDesktopsA');
  3764.   asm
  3765.     mov esp, ebp
  3766.     pop ebp
  3767.     jmp [_EnumDesktopsA]
  3768.   end;
  3769. end;
  3770. {$ELSE}
  3771. function EnumDesktopsA; external user32 name 'EnumDesktopsA';
  3772. {$ENDIF DYNAMIC_LINK}
  3773. {$IFDEF DYNAMIC_LINK}
  3774. var
  3775.   _EnumDesktopsW: Pointer;
  3776. function EnumDesktopsW;
  3777. begin
  3778.   GetProcedureAddress(_EnumDesktopsW, user32, 'EnumDesktopsW');
  3779.   asm
  3780.     mov esp, ebp
  3781.     pop ebp
  3782.     jmp [_EnumDesktopsW]
  3783.   end;
  3784. end;
  3785. {$ELSE}
  3786. function EnumDesktopsW; external user32 name 'EnumDesktopsW';
  3787. {$ENDIF DYNAMIC_LINK}
  3788. {$IFDEF UNICODE}
  3789. {$IFDEF DYNAMIC_LINK}
  3790. var
  3791.   _EnumDesktops: Pointer;
  3792. function EnumDesktops;
  3793. begin
  3794.   GetProcedureAddress(_EnumDesktops, user32, 'EnumDesktopsW');
  3795.   asm
  3796.     mov esp, ebp
  3797.     pop ebp
  3798.     jmp [_EnumDesktops]
  3799.   end;
  3800. end;
  3801. {$ELSE}
  3802. function EnumDesktops; external user32 name 'EnumDesktopsW';
  3803. {$ENDIF DYNAMIC_LINK}
  3804. {$ELSE}
  3805. {$IFDEF DYNAMIC_LINK}
  3806. var
  3807.   _EnumDesktops: Pointer;
  3808. function EnumDesktops;
  3809. begin
  3810.   GetProcedureAddress(_EnumDesktops, user32, 'EnumDesktopsA');
  3811.   asm
  3812.     mov esp, ebp
  3813.     pop ebp
  3814.     jmp [_EnumDesktops]
  3815.   end;
  3816. end;
  3817. {$ELSE}
  3818. function EnumDesktops; external user32 name 'EnumDesktopsA';
  3819. {$ENDIF DYNAMIC_LINK}
  3820. {$ENDIF}
  3821. {$IFDEF DYNAMIC_LINK}
  3822. var
  3823.   _EnumDesktopWindows: Pointer;
  3824. function EnumDesktopWindows;
  3825. begin
  3826.   GetProcedureAddress(_EnumDesktopWindows, user32, 'EnumDesktopWindows');
  3827.   asm
  3828.     mov esp, ebp
  3829.     pop ebp
  3830.     jmp [_EnumDesktopWindows]
  3831.   end;
  3832. end;
  3833. {$ELSE}
  3834. function EnumDesktopWindows; external user32 name 'EnumDesktopWindows';
  3835. {$ENDIF DYNAMIC_LINK}
  3836. {$IFDEF DYNAMIC_LINK}
  3837. var
  3838.   _SwitchDesktop: Pointer;
  3839. function SwitchDesktop;
  3840. begin
  3841.   GetProcedureAddress(_SwitchDesktop, user32, 'SwitchDesktop');
  3842.   asm
  3843.     mov esp, ebp
  3844.     pop ebp
  3845.     jmp [_SwitchDesktop]
  3846.   end;
  3847. end;
  3848. {$ELSE}
  3849. function SwitchDesktop; external user32 name 'SwitchDesktop';
  3850. {$ENDIF DYNAMIC_LINK}
  3851. {$IFDEF DYNAMIC_LINK}
  3852. var
  3853.   _SetThreadDesktop: Pointer;
  3854. function SetThreadDesktop;
  3855. begin
  3856.   GetProcedureAddress(_SetThreadDesktop, user32, 'SetThreadDesktop');
  3857.   asm
  3858.     mov esp, ebp
  3859.     pop ebp
  3860.     jmp [_SetThreadDesktop]
  3861.   end;
  3862. end;
  3863. {$ELSE}
  3864. function SetThreadDesktop; external user32 name 'SetThreadDesktop';
  3865. {$ENDIF DYNAMIC_LINK}
  3866. {$IFDEF DYNAMIC_LINK}
  3867. var
  3868.   _CloseDesktop: Pointer;
  3869. function CloseDesktop;
  3870. begin
  3871.   GetProcedureAddress(_CloseDesktop, user32, 'CloseDesktop');
  3872.   asm
  3873.     mov esp, ebp
  3874.     pop ebp
  3875.     jmp [_CloseDesktop]
  3876.   end;
  3877. end;
  3878. {$ELSE}
  3879. function CloseDesktop; external user32 name 'CloseDesktop';
  3880. {$ENDIF DYNAMIC_LINK}
  3881. {$IFDEF DYNAMIC_LINK}
  3882. var
  3883.   _GetThreadDesktop: Pointer;
  3884. function GetThreadDesktop;
  3885. begin
  3886.   GetProcedureAddress(_GetThreadDesktop, user32, 'GetThreadDesktop');
  3887.   asm
  3888.     mov esp, ebp
  3889.     pop ebp
  3890.     jmp [_GetThreadDesktop]
  3891.   end;
  3892. end;
  3893. {$ELSE}
  3894. function GetThreadDesktop; external user32 name 'GetThreadDesktop';
  3895. {$ENDIF DYNAMIC_LINK}
  3896. {$IFDEF DYNAMIC_LINK}
  3897. var
  3898.   _CreateWindowStationA: Pointer;
  3899. function CreateWindowStationA;
  3900. begin
  3901.   GetProcedureAddress(_CreateWindowStationA, user32, 'CreateWindowStationA');
  3902.   asm
  3903.     mov esp, ebp
  3904.     pop ebp
  3905.     jmp [_CreateWindowStationA]
  3906.   end;
  3907. end;
  3908. {$ELSE}
  3909. function CreateWindowStationA; external user32 name 'CreateWindowStationA';
  3910. {$ENDIF DYNAMIC_LINK}
  3911. {$IFDEF DYNAMIC_LINK}
  3912. var
  3913.   _CreateWindowStationW: Pointer;
  3914. function CreateWindowStationW;
  3915. begin
  3916.   GetProcedureAddress(_CreateWindowStationW, user32, 'CreateWindowStationW');
  3917.   asm
  3918.     mov esp, ebp
  3919.     pop ebp
  3920.     jmp [_CreateWindowStationW]
  3921.   end;
  3922. end;
  3923. {$ELSE}
  3924. function CreateWindowStationW; external user32 name 'CreateWindowStationW';
  3925. {$ENDIF DYNAMIC_LINK}
  3926. {$IFDEF UNICODE}
  3927. {$IFDEF DYNAMIC_LINK}
  3928. var
  3929.   _CreateWindowStation: Pointer;
  3930. function CreateWindowStation;
  3931. begin
  3932.   GetProcedureAddress(_CreateWindowStation, user32, 'CreateWindowStationW');
  3933.   asm
  3934.     mov esp, ebp
  3935.     pop ebp
  3936.     jmp [_CreateWindowStation]
  3937.   end;
  3938. end;
  3939. {$ELSE}
  3940. function CreateWindowStation; external user32 name 'CreateWindowStationW';
  3941. {$ENDIF DYNAMIC_LINK}
  3942. {$ELSE}
  3943. {$IFDEF DYNAMIC_LINK}
  3944. var
  3945.   _CreateWindowStation: Pointer;
  3946. function CreateWindowStation;
  3947. begin
  3948.   GetProcedureAddress(_CreateWindowStation, user32, 'CreateWindowStationA');
  3949.   asm
  3950.     mov esp, ebp
  3951.     pop ebp
  3952.     jmp [_CreateWindowStation]
  3953.   end;
  3954. end;
  3955. {$ELSE}
  3956. function CreateWindowStation; external user32 name 'CreateWindowStationA';
  3957. {$ENDIF DYNAMIC_LINK}
  3958. {$ENDIF}
  3959. {$IFDEF DYNAMIC_LINK}
  3960. var
  3961.   _OpenWindowStationA: Pointer;
  3962. function OpenWindowStationA;
  3963. begin
  3964.   GetProcedureAddress(_OpenWindowStationA, user32, 'OpenWindowStationA');
  3965.   asm
  3966.     mov esp, ebp
  3967.     pop ebp
  3968.     jmp [_OpenWindowStationA]
  3969.   end;
  3970. end;
  3971. {$ELSE}
  3972. function OpenWindowStationA; external user32 name 'OpenWindowStationA';
  3973. {$ENDIF DYNAMIC_LINK}
  3974. {$IFDEF DYNAMIC_LINK}
  3975. var
  3976.   _OpenWindowStationW: Pointer;
  3977. function OpenWindowStationW;
  3978. begin
  3979.   GetProcedureAddress(_OpenWindowStationW, user32, 'OpenWindowStationW');
  3980.   asm
  3981.     mov esp, ebp
  3982.     pop ebp
  3983.     jmp [_OpenWindowStationW]
  3984.   end;
  3985. end;
  3986. {$ELSE}
  3987. function OpenWindowStationW; external user32 name 'OpenWindowStationW';
  3988. {$ENDIF DYNAMIC_LINK}
  3989. {$IFDEF UNICODE}
  3990. {$IFDEF DYNAMIC_LINK}
  3991. var
  3992.   _OpenWindowStation: Pointer;
  3993. function OpenWindowStation;
  3994. begin
  3995.   GetProcedureAddress(_OpenWindowStation, user32, 'OpenWindowStationW');
  3996.   asm
  3997.     mov esp, ebp
  3998.     pop ebp
  3999.     jmp [_OpenWindowStation]
  4000.   end;
  4001. end;
  4002. {$ELSE}
  4003. function OpenWindowStation; external user32 name 'OpenWindowStationW';
  4004. {$ENDIF DYNAMIC_LINK}
  4005. {$ELSE}
  4006. {$IFDEF DYNAMIC_LINK}
  4007. var
  4008.   _OpenWindowStation: Pointer;
  4009. function OpenWindowStation;
  4010. begin
  4011.   GetProcedureAddress(_OpenWindowStation, user32, 'OpenWindowStationA');
  4012.   asm
  4013.     mov esp, ebp
  4014.     pop ebp
  4015.     jmp [_OpenWindowStation]
  4016.   end;
  4017. end;
  4018. {$ELSE}
  4019. function OpenWindowStation; external user32 name 'OpenWindowStationA';
  4020. {$ENDIF DYNAMIC_LINK}
  4021. {$ENDIF}
  4022. {$IFDEF DYNAMIC_LINK}
  4023. var
  4024.   _EnumWindowStationsA: Pointer;
  4025. function EnumWindowStationsA;
  4026. begin
  4027.   GetProcedureAddress(_EnumWindowStationsA, user32, 'EnumWindowStationsA');
  4028.   asm
  4029.     mov esp, ebp
  4030.     pop ebp
  4031.     jmp [_EnumWindowStationsA]
  4032.   end;
  4033. end;
  4034. {$ELSE}
  4035. function EnumWindowStationsA; external user32 name 'EnumWindowStationsA';
  4036. {$ENDIF DYNAMIC_LINK}
  4037. {$IFDEF DYNAMIC_LINK}
  4038. var
  4039.   _EnumWindowStationsW: Pointer;
  4040. function EnumWindowStationsW;
  4041. begin
  4042.   GetProcedureAddress(_EnumWindowStationsW, user32, 'EnumWindowStationsW');
  4043.   asm
  4044.     mov esp, ebp
  4045.     pop ebp
  4046.     jmp [_EnumWindowStationsW]
  4047.   end;
  4048. end;
  4049. {$ELSE}
  4050. function EnumWindowStationsW; external user32 name 'EnumWindowStationsW';
  4051. {$ENDIF DYNAMIC_LINK}
  4052. {$IFDEF UNICODE}
  4053. {$IFDEF DYNAMIC_LINK}
  4054. var
  4055.   _EnumWindowStations: Pointer;
  4056. function EnumWindowStations;
  4057. begin
  4058.   GetProcedureAddress(_EnumWindowStations, user32, 'EnumWindowStationsW');
  4059.   asm
  4060.     mov esp, ebp
  4061.     pop ebp
  4062.     jmp [_EnumWindowStations]
  4063.   end;
  4064. end;
  4065. {$ELSE}
  4066. function EnumWindowStations; external user32 name 'EnumWindowStationsW';
  4067. {$ENDIF DYNAMIC_LINK}
  4068. {$ELSE}
  4069. {$IFDEF DYNAMIC_LINK}
  4070. var
  4071.   _EnumWindowStations: Pointer;
  4072. function EnumWindowStations;
  4073. begin
  4074.   GetProcedureAddress(_EnumWindowStations, user32, 'EnumWindowStationsA');