WinUser.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:274k
源码类别:

模拟服务器

开发平台:

C/C++

  1. WINAPI
  2. SetWindowsHookA(
  3.     IN int nFilterType,
  4.     IN HOOKPROC pfnFilterProc);
  5. WINUSERAPI
  6. HHOOK
  7. WINAPI
  8. SetWindowsHookW(
  9.     IN int nFilterType,
  10.     IN HOOKPROC pfnFilterProc);
  11. #ifdef UNICODE
  12. #define SetWindowsHook  SetWindowsHookW
  13. #else
  14. #define SetWindowsHook  SetWindowsHookA
  15. #endif // !UNICODE
  16. #else /* !STRICT */
  17. WINUSERAPI
  18. HOOKPROC
  19. WINAPI
  20. SetWindowsHookA(
  21.     IN int nFilterType,
  22.     IN HOOKPROC pfnFilterProc);
  23. WINUSERAPI
  24. HOOKPROC
  25. WINAPI
  26. SetWindowsHookW(
  27.     IN int nFilterType,
  28.     IN HOOKPROC pfnFilterProc);
  29. #ifdef UNICODE
  30. #define SetWindowsHook  SetWindowsHookW
  31. #else
  32. #define SetWindowsHook  SetWindowsHookA
  33. #endif // !UNICODE
  34. #endif /* !STRICT */
  35. WINUSERAPI
  36. BOOL
  37. WINAPI
  38. UnhookWindowsHook(
  39.     IN int nCode,
  40.     IN HOOKPROC pfnFilterProc);
  41. WINUSERAPI
  42. HHOOK
  43. WINAPI
  44. SetWindowsHookExA(
  45.     IN int idHook,
  46.     IN HOOKPROC lpfn,
  47.     IN HINSTANCE hmod,
  48.     IN DWORD dwThreadId);
  49. WINUSERAPI
  50. HHOOK
  51. WINAPI
  52. SetWindowsHookExW(
  53.     IN int idHook,
  54.     IN HOOKPROC lpfn,
  55.     IN HINSTANCE hmod,
  56.     IN DWORD dwThreadId);
  57. #ifdef UNICODE
  58. #define SetWindowsHookEx  SetWindowsHookExW
  59. #else
  60. #define SetWindowsHookEx  SetWindowsHookExA
  61. #endif // !UNICODE
  62. WINUSERAPI
  63. BOOL
  64. WINAPI
  65. UnhookWindowsHookEx(
  66.     IN HHOOK hhk);
  67. WINUSERAPI
  68. LRESULT
  69. WINAPI
  70. CallNextHookEx(
  71.     IN HHOOK hhk,
  72.     IN int nCode,
  73.     IN WPARAM wParam,
  74.     IN LPARAM lParam);
  75. /*
  76.  * Macros for source-level compatibility with old functions.
  77.  */
  78. #ifdef STRICT
  79. #define DefHookProc(nCode, wParam, lParam, phhk)
  80.         CallNextHookEx(*phhk, nCode, wParam, lParam)
  81. #else
  82. #define DefHookProc(nCode, wParam, lParam, phhk)
  83.         CallNextHookEx((HHOOK)*phhk, nCode, wParam, lParam)
  84. #endif /* STRICT */
  85. #endif /* !NOWH */
  86. #ifndef NOMENUS
  87. /* ;win40  -- A lot of MF_* flags have been renamed as MFT_* and MFS_* flags */
  88. /*
  89.  * Menu flags for Add/Check/EnableMenuItem()
  90.  */
  91. #define MF_INSERT           0x00000000L
  92. #define MF_CHANGE           0x00000080L
  93. #define MF_APPEND           0x00000100L
  94. #define MF_DELETE           0x00000200L
  95. #define MF_REMOVE           0x00001000L
  96. #define MF_BYCOMMAND        0x00000000L
  97. #define MF_BYPOSITION       0x00000400L
  98. #define MF_SEPARATOR        0x00000800L
  99. #define MF_ENABLED          0x00000000L
  100. #define MF_GRAYED           0x00000001L
  101. #define MF_DISABLED         0x00000002L
  102. #define MF_UNCHECKED        0x00000000L
  103. #define MF_CHECKED          0x00000008L
  104. #define MF_USECHECKBITMAPS  0x00000200L
  105. #define MF_STRING           0x00000000L
  106. #define MF_BITMAP           0x00000004L
  107. #define MF_OWNERDRAW        0x00000100L
  108. #define MF_POPUP            0x00000010L
  109. #define MF_MENUBARBREAK     0x00000020L
  110. #define MF_MENUBREAK        0x00000040L
  111. #define MF_UNHILITE         0x00000000L
  112. #define MF_HILITE           0x00000080L
  113. #if(WINVER >= 0x0400)
  114. #define MF_DEFAULT          0x00001000L
  115. #endif /* WINVER >= 0x0400 */
  116. #define MF_SYSMENU          0x00002000L
  117. #define MF_HELP             0x00004000L
  118. #if(WINVER >= 0x0400)
  119. #define MF_RIGHTJUSTIFY     0x00004000L
  120. #endif /* WINVER >= 0x0400 */
  121. #define MF_MOUSESELECT      0x00008000L
  122. #if(WINVER >= 0x0400)
  123. #define MF_END              0x00000080L  /* Obsolete -- only used by old RES files */
  124. #endif /* WINVER >= 0x0400 */
  125. #if(WINVER >= 0x0400)
  126. #define MFT_STRING          MF_STRING
  127. #define MFT_BITMAP          MF_BITMAP
  128. #define MFT_MENUBARBREAK    MF_MENUBARBREAK
  129. #define MFT_MENUBREAK       MF_MENUBREAK
  130. #define MFT_OWNERDRAW       MF_OWNERDRAW
  131. #define MFT_RADIOCHECK      0x00000200L
  132. #define MFT_SEPARATOR       MF_SEPARATOR
  133. #define MFT_RIGHTORDER      0x00002000L
  134. #define MFT_RIGHTJUSTIFY    MF_RIGHTJUSTIFY
  135. /* Menu flags for Add/Check/EnableMenuItem() */
  136. #define MFS_GRAYED          0x00000003L
  137. #define MFS_DISABLED        MFS_GRAYED
  138. #define MFS_CHECKED         MF_CHECKED
  139. #define MFS_HILITE          MF_HILITE
  140. #define MFS_ENABLED         MF_ENABLED
  141. #define MFS_UNCHECKED       MF_UNCHECKED
  142. #define MFS_UNHILITE        MF_UNHILITE
  143. #define MFS_DEFAULT         MF_DEFAULT
  144. #endif /* WINVER >= 0x0400 */
  145. #if(WINVER >= 0x0400)
  146. WINUSERAPI
  147. BOOL
  148. WINAPI
  149. CheckMenuRadioItem(
  150.     IN HMENU,
  151.     IN UINT,
  152.     IN UINT,
  153.     IN UINT,
  154.     IN UINT);
  155. #endif /* WINVER >= 0x0400 */
  156. /*
  157.  * Menu item resource format
  158.  */
  159. typedef struct {
  160.     WORD versionNumber;
  161.     WORD offset;
  162. } MENUITEMTEMPLATEHEADER, *PMENUITEMTEMPLATEHEADER;
  163. typedef struct {        // version 0
  164.     WORD mtOption;
  165.     WORD mtID;
  166.     WCHAR mtString[1];
  167. } MENUITEMTEMPLATE, *PMENUITEMTEMPLATE;
  168. #define MF_END             0x00000080L
  169. #endif /* !NOMENUS */
  170. #ifndef NOSYSCOMMANDS
  171. /*
  172.  * System Menu Command Values
  173.  */
  174. #define SC_SIZE         0xF000
  175. #define SC_MOVE         0xF010
  176. #define SC_MINIMIZE     0xF020
  177. #define SC_MAXIMIZE     0xF030
  178. #define SC_NEXTWINDOW   0xF040
  179. #define SC_PREVWINDOW   0xF050
  180. #define SC_CLOSE        0xF060
  181. #define SC_VSCROLL      0xF070
  182. #define SC_HSCROLL      0xF080
  183. #define SC_MOUSEMENU    0xF090
  184. #define SC_KEYMENU      0xF100
  185. #define SC_ARRANGE      0xF110
  186. #define SC_RESTORE      0xF120
  187. #define SC_TASKLIST     0xF130
  188. #define SC_SCREENSAVE   0xF140
  189. #define SC_HOTKEY       0xF150
  190. #if(WINVER >= 0x0400)
  191. #define SC_DEFAULT      0xF160
  192. #define SC_MONITORPOWER 0xF170
  193. #define SC_CONTEXTHELP  0xF180
  194. #define SC_SEPARATOR    0xF00F
  195. #endif /* WINVER >= 0x0400 */
  196. /*
  197.  * Obsolete names
  198.  */
  199. #define SC_ICON         SC_MINIMIZE
  200. #define SC_ZOOM         SC_MAXIMIZE
  201. #endif /* !NOSYSCOMMANDS */
  202. /*
  203.  * Resource Loading Routines
  204.  */
  205. WINUSERAPI
  206. HBITMAP
  207. WINAPI
  208. LoadBitmapA(
  209.     IN HINSTANCE hInstance,
  210.     IN LPCSTR lpBitmapName);
  211. WINUSERAPI
  212. HBITMAP
  213. WINAPI
  214. LoadBitmapW(
  215.     IN HINSTANCE hInstance,
  216.     IN LPCWSTR lpBitmapName);
  217. #ifdef UNICODE
  218. #define LoadBitmap  LoadBitmapW
  219. #else
  220. #define LoadBitmap  LoadBitmapA
  221. #endif // !UNICODE
  222. WINUSERAPI
  223. HCURSOR
  224. WINAPI
  225. LoadCursorA(
  226.     IN HINSTANCE hInstance,
  227.     IN LPCSTR lpCursorName);
  228. WINUSERAPI
  229. HCURSOR
  230. WINAPI
  231. LoadCursorW(
  232.     IN HINSTANCE hInstance,
  233.     IN LPCWSTR lpCursorName);
  234. #ifdef UNICODE
  235. #define LoadCursor  LoadCursorW
  236. #else
  237. #define LoadCursor  LoadCursorA
  238. #endif // !UNICODE
  239. WINUSERAPI
  240. HCURSOR
  241. WINAPI
  242. LoadCursorFromFileA(
  243.     IN LPCSTR lpFileName);
  244. WINUSERAPI
  245. HCURSOR
  246. WINAPI
  247. LoadCursorFromFileW(
  248.     IN LPCWSTR lpFileName);
  249. #ifdef UNICODE
  250. #define LoadCursorFromFile  LoadCursorFromFileW
  251. #else
  252. #define LoadCursorFromFile  LoadCursorFromFileA
  253. #endif // !UNICODE
  254. WINUSERAPI
  255. HCURSOR
  256. WINAPI
  257. CreateCursor(
  258.     IN HINSTANCE hInst,
  259.     IN int xHotSpot,
  260.     IN int yHotSpot,
  261.     IN int nWidth,
  262.     IN int nHeight,
  263.     IN CONST VOID *pvANDPlane,
  264.     IN CONST VOID *pvXORPlane);
  265. WINUSERAPI
  266. BOOL
  267. WINAPI
  268. DestroyCursor(
  269.     IN HCURSOR hCursor);
  270. #ifndef _MAC
  271. #define CopyCursor(pcur) ((HCURSOR)CopyIcon((HICON)(pcur)))
  272. #else
  273. WINUSERAPI
  274. HCURSOR
  275. WINAPI
  276. CopyCursor(
  277.     IN HCURSOR hCursor);
  278. #endif
  279. /*
  280.  * Standard Cursor IDs
  281.  */
  282. #define IDC_ARROW           MAKEINTRESOURCE(32512)
  283. #define IDC_IBEAM           MAKEINTRESOURCE(32513)
  284. #define IDC_WAIT            MAKEINTRESOURCE(32514)
  285. #define IDC_CROSS           MAKEINTRESOURCE(32515)
  286. #define IDC_UPARROW         MAKEINTRESOURCE(32516)
  287. #define IDC_SIZE            MAKEINTRESOURCE(32640)  /* OBSOLETE: use IDC_SIZEALL */
  288. #define IDC_ICON            MAKEINTRESOURCE(32641)  /* OBSOLETE: use IDC_ARROW */
  289. #define IDC_SIZENWSE        MAKEINTRESOURCE(32642)
  290. #define IDC_SIZENESW        MAKEINTRESOURCE(32643)
  291. #define IDC_SIZEWE          MAKEINTRESOURCE(32644)
  292. #define IDC_SIZENS          MAKEINTRESOURCE(32645)
  293. #define IDC_SIZEALL         MAKEINTRESOURCE(32646)
  294. #define IDC_NO              MAKEINTRESOURCE(32648) /*not in win3.1 */
  295. #if(WINVER >= 0x0500)
  296. #define IDC_HAND            MAKEINTRESOURCE(32649)
  297. #endif /* WINVER >= 0x0500 */
  298. #define IDC_APPSTARTING     MAKEINTRESOURCE(32650) /*not in win3.1 */
  299. #if(WINVER >= 0x0400)
  300. #define IDC_HELP            MAKEINTRESOURCE(32651)
  301. #endif /* WINVER >= 0x0400 */
  302. WINUSERAPI
  303. BOOL
  304. WINAPI
  305. SetSystemCursor(
  306.     IN HCURSOR hcur,
  307.     IN DWORD   id);
  308. typedef struct _ICONINFO {
  309.     BOOL    fIcon;
  310.     DWORD   xHotspot;
  311.     DWORD   yHotspot;
  312.     HBITMAP hbmMask;
  313.     HBITMAP hbmColor;
  314. } ICONINFO;
  315. typedef ICONINFO *PICONINFO;
  316. WINUSERAPI
  317. HICON
  318. WINAPI
  319. LoadIconA(
  320.     IN HINSTANCE hInstance,
  321.     IN LPCSTR lpIconName);
  322. WINUSERAPI
  323. HICON
  324. WINAPI
  325. LoadIconW(
  326.     IN HINSTANCE hInstance,
  327.     IN LPCWSTR lpIconName);
  328. #ifdef UNICODE
  329. #define LoadIcon  LoadIconW
  330. #else
  331. #define LoadIcon  LoadIconA
  332. #endif // !UNICODE
  333. WINUSERAPI
  334. HICON
  335. WINAPI
  336. CreateIcon(
  337.     IN HINSTANCE hInstance,
  338.     IN int nWidth,
  339.     IN int nHeight,
  340.     IN BYTE cPlanes,
  341.     IN BYTE cBitsPixel,
  342.     IN CONST BYTE *lpbANDbits,
  343.     IN CONST BYTE *lpbXORbits);
  344. WINUSERAPI
  345. BOOL
  346. WINAPI
  347. DestroyIcon(
  348.     IN HICON hIcon);
  349. WINUSERAPI
  350. int
  351. WINAPI
  352. LookupIconIdFromDirectory(
  353.     IN PBYTE presbits,
  354.     IN BOOL fIcon);
  355. #if(WINVER >= 0x0400)
  356. WINUSERAPI
  357. int
  358. WINAPI
  359. LookupIconIdFromDirectoryEx(
  360.     IN PBYTE presbits,
  361.     IN BOOL  fIcon,
  362.     IN int   cxDesired,
  363.     IN int   cyDesired,
  364.     IN UINT  Flags);
  365. #endif /* WINVER >= 0x0400 */
  366. WINUSERAPI
  367. HICON
  368. WINAPI
  369. CreateIconFromResource(
  370.     IN PBYTE presbits,
  371.     IN DWORD dwResSize,
  372.     IN BOOL fIcon,
  373.     IN DWORD dwVer);
  374. #if(WINVER >= 0x0400)
  375. WINUSERAPI
  376. HICON
  377. WINAPI
  378. CreateIconFromResourceEx(
  379.     IN PBYTE presbits,
  380.     IN DWORD dwResSize,
  381.     IN BOOL  fIcon,
  382.     IN DWORD dwVer,
  383.     IN int   cxDesired,
  384.     IN int   cyDesired,
  385.     IN UINT  Flags);
  386. /* Icon/Cursor header */
  387. typedef struct tagCURSORSHAPE
  388. {
  389.     int     xHotSpot;
  390.     int     yHotSpot;
  391.     int     cx;
  392.     int     cy;
  393.     int     cbWidth;
  394.     BYTE    Planes;
  395.     BYTE    BitsPixel;
  396. } CURSORSHAPE, FAR *LPCURSORSHAPE;
  397. #endif /* WINVER >= 0x0400 */
  398. #define IMAGE_BITMAP        0
  399. #define IMAGE_ICON          1
  400. #define IMAGE_CURSOR        2
  401. #if(WINVER >= 0x0400)
  402. #define IMAGE_ENHMETAFILE   3
  403. #define LR_DEFAULTCOLOR     0x0000
  404. #define LR_MONOCHROME       0x0001
  405. #define LR_COLOR            0x0002
  406. #define LR_COPYRETURNORG    0x0004
  407. #define LR_COPYDELETEORG    0x0008
  408. #define LR_LOADFROMFILE     0x0010
  409. #define LR_LOADTRANSPARENT  0x0020
  410. #define LR_DEFAULTSIZE      0x0040
  411. #define LR_VGACOLOR         0x0080
  412. #define LR_LOADMAP3DCOLORS  0x1000
  413. #define LR_CREATEDIBSECTION 0x2000
  414. #define LR_COPYFROMRESOURCE 0x4000
  415. #define LR_SHARED           0x8000
  416. WINUSERAPI
  417. HANDLE
  418. WINAPI
  419. LoadImageA(
  420.     IN HINSTANCE,
  421.     IN LPCSTR,
  422.     IN UINT,
  423.     IN int,
  424.     IN int,
  425.     IN UINT);
  426. WINUSERAPI
  427. HANDLE
  428. WINAPI
  429. LoadImageW(
  430.     IN HINSTANCE,
  431.     IN LPCWSTR,
  432.     IN UINT,
  433.     IN int,
  434.     IN int,
  435.     IN UINT);
  436. #ifdef UNICODE
  437. #define LoadImage  LoadImageW
  438. #else
  439. #define LoadImage  LoadImageA
  440. #endif // !UNICODE
  441. WINUSERAPI
  442. HANDLE
  443. WINAPI
  444. CopyImage(
  445.     IN HANDLE,
  446.     IN UINT,
  447.     IN int,
  448.     IN int,
  449.     IN UINT);
  450. #define DI_MASK         0x0001
  451. #define DI_IMAGE        0x0002
  452. #define DI_NORMAL       0x0003
  453. #define DI_COMPAT       0x0004
  454. #define DI_DEFAULTSIZE  0x0008
  455. #if(_WIN32_WINNT >= 0x0501)
  456. #define DI_NOMIRROR     0x0010
  457. #endif /* _WIN32_WINNT >= 0x0501 */
  458. WINUSERAPI BOOL WINAPI DrawIconEx( IN HDC hdc, IN int xLeft, IN int yTop,
  459.               IN HICON hIcon, IN int cxWidth, IN int cyWidth,
  460.               IN UINT istepIfAniCur, IN HBRUSH hbrFlickerFreeDraw, IN UINT diFlags);
  461. #endif /* WINVER >= 0x0400 */
  462. WINUSERAPI
  463. HICON
  464. WINAPI
  465. CreateIconIndirect(
  466.     IN PICONINFO piconinfo);
  467. WINUSERAPI
  468. HICON
  469. WINAPI
  470. CopyIcon(
  471.     IN HICON hIcon);
  472. WINUSERAPI
  473. BOOL
  474. WINAPI
  475. GetIconInfo(
  476.     IN HICON hIcon,
  477.     OUT PICONINFO piconinfo);
  478. #if(WINVER >= 0x0400)
  479. #define RES_ICON    1
  480. #define RES_CURSOR  2
  481. #endif /* WINVER >= 0x0400 */
  482. #ifdef OEMRESOURCE
  483. /*
  484.  * OEM Resource Ordinal Numbers
  485.  */
  486. #define OBM_CLOSE           32754
  487. #define OBM_UPARROW         32753
  488. #define OBM_DNARROW         32752
  489. #define OBM_RGARROW         32751
  490. #define OBM_LFARROW         32750
  491. #define OBM_REDUCE          32749
  492. #define OBM_ZOOM            32748
  493. #define OBM_RESTORE         32747
  494. #define OBM_REDUCED         32746
  495. #define OBM_ZOOMD           32745
  496. #define OBM_RESTORED        32744
  497. #define OBM_UPARROWD        32743
  498. #define OBM_DNARROWD        32742
  499. #define OBM_RGARROWD        32741
  500. #define OBM_LFARROWD        32740
  501. #define OBM_MNARROW         32739
  502. #define OBM_COMBO           32738
  503. #define OBM_UPARROWI        32737
  504. #define OBM_DNARROWI        32736
  505. #define OBM_RGARROWI        32735
  506. #define OBM_LFARROWI        32734
  507. #define OBM_OLD_CLOSE       32767
  508. #define OBM_SIZE            32766
  509. #define OBM_OLD_UPARROW     32765
  510. #define OBM_OLD_DNARROW     32764
  511. #define OBM_OLD_RGARROW     32763
  512. #define OBM_OLD_LFARROW     32762
  513. #define OBM_BTSIZE          32761
  514. #define OBM_CHECK           32760
  515. #define OBM_CHECKBOXES      32759
  516. #define OBM_BTNCORNERS      32758
  517. #define OBM_OLD_REDUCE      32757
  518. #define OBM_OLD_ZOOM        32756
  519. #define OBM_OLD_RESTORE     32755
  520. #define OCR_NORMAL          32512
  521. #define OCR_IBEAM           32513
  522. #define OCR_WAIT            32514
  523. #define OCR_CROSS           32515
  524. #define OCR_UP              32516
  525. #define OCR_SIZE            32640   /* OBSOLETE: use OCR_SIZEALL */
  526. #define OCR_ICON            32641   /* OBSOLETE: use OCR_NORMAL */
  527. #define OCR_SIZENWSE        32642
  528. #define OCR_SIZENESW        32643
  529. #define OCR_SIZEWE          32644
  530. #define OCR_SIZENS          32645
  531. #define OCR_SIZEALL         32646
  532. #define OCR_ICOCUR          32647   /* OBSOLETE: use OIC_WINLOGO */
  533. #define OCR_NO              32648
  534. #if(WINVER >= 0x0500)
  535. #define OCR_HAND            32649
  536. #endif /* WINVER >= 0x0500 */
  537. #if(WINVER >= 0x0400)
  538. #define OCR_APPSTARTING     32650
  539. #endif /* WINVER >= 0x0400 */
  540. #define OIC_SAMPLE          32512
  541. #define OIC_HAND            32513
  542. #define OIC_QUES            32514
  543. #define OIC_BANG            32515
  544. #define OIC_NOTE            32516
  545. #if(WINVER >= 0x0400)
  546. #define OIC_WINLOGO         32517
  547. #define OIC_WARNING         OIC_BANG
  548. #define OIC_ERROR           OIC_HAND
  549. #define OIC_INFORMATION     OIC_NOTE
  550. #endif /* WINVER >= 0x0400 */
  551. #endif /* OEMRESOURCE */
  552. #define ORD_LANGDRIVER    1     /* The ordinal number for the entry point of
  553.                                 ** language drivers.
  554.                                 */
  555. #ifndef NOICONS
  556. /*
  557.  * Standard Icon IDs
  558.  */
  559. #ifdef RC_INVOKED
  560. #define IDI_APPLICATION     32512
  561. #define IDI_HAND            32513
  562. #define IDI_QUESTION        32514
  563. #define IDI_EXCLAMATION     32515
  564. #define IDI_ASTERISK        32516
  565. #if(WINVER >= 0x0400)
  566. #define IDI_WINLOGO         32517
  567. #endif /* WINVER >= 0x0400 */
  568. #else
  569. #define IDI_APPLICATION     MAKEINTRESOURCE(32512)
  570. #define IDI_HAND            MAKEINTRESOURCE(32513)
  571. #define IDI_QUESTION        MAKEINTRESOURCE(32514)
  572. #define IDI_EXCLAMATION     MAKEINTRESOURCE(32515)
  573. #define IDI_ASTERISK        MAKEINTRESOURCE(32516)
  574. #if(WINVER >= 0x0400)
  575. #define IDI_WINLOGO         MAKEINTRESOURCE(32517)
  576. #endif /* WINVER >= 0x0400 */
  577. #endif /* RC_INVOKED */
  578. #if(WINVER >= 0x0400)
  579. #define IDI_WARNING     IDI_EXCLAMATION
  580. #define IDI_ERROR       IDI_HAND
  581. #define IDI_INFORMATION IDI_ASTERISK
  582. #endif /* WINVER >= 0x0400 */
  583. #endif /* !NOICONS */
  584. WINUSERAPI
  585. int
  586. WINAPI
  587. LoadStringA(
  588.     IN HINSTANCE hInstance,
  589.     IN UINT uID,
  590.     OUT LPSTR lpBuffer,
  591.     IN int nBufferMax);
  592. WINUSERAPI
  593. int
  594. WINAPI
  595. LoadStringW(
  596.     IN HINSTANCE hInstance,
  597.     IN UINT uID,
  598.     OUT LPWSTR lpBuffer,
  599.     IN int nBufferMax);
  600. #ifdef UNICODE
  601. #define LoadString  LoadStringW
  602. #else
  603. #define LoadString  LoadStringA
  604. #endif // !UNICODE
  605. /*
  606.  * Dialog Box Command IDs
  607.  */
  608. #define IDOK                1
  609. #define IDCANCEL            2
  610. #define IDABORT             3
  611. #define IDRETRY             4
  612. #define IDIGNORE            5
  613. #define IDYES               6
  614. #define IDNO                7
  615. #if(WINVER >= 0x0400)
  616. #define IDCLOSE         8
  617. #define IDHELP          9
  618. #endif /* WINVER >= 0x0400 */
  619. #if(WINVER >= 0x0500)
  620. #define IDTRYAGAIN      10
  621. #define IDCONTINUE      11
  622. #endif /* WINVER >= 0x0500 */
  623. #if(WINVER >= 0x0501)
  624. #ifndef IDTIMEOUT
  625. #define IDTIMEOUT 32000
  626. #endif
  627. #endif /* WINVER >= 0x0501 */
  628. #ifndef NOCTLMGR
  629. /*
  630.  * Control Manager Structures and Definitions
  631.  */
  632. #ifndef NOWINSTYLES
  633. /*
  634.  * Edit Control Styles
  635.  */
  636. #define ES_LEFT             0x0000L
  637. #define ES_CENTER           0x0001L
  638. #define ES_RIGHT            0x0002L
  639. #define ES_MULTILINE        0x0004L
  640. #define ES_UPPERCASE        0x0008L
  641. #define ES_LOWERCASE        0x0010L
  642. #define ES_PASSWORD         0x0020L
  643. #define ES_AUTOVSCROLL      0x0040L
  644. #define ES_AUTOHSCROLL      0x0080L
  645. #define ES_NOHIDESEL        0x0100L
  646. #define ES_OEMCONVERT       0x0400L
  647. #define ES_READONLY         0x0800L
  648. #define ES_WANTRETURN       0x1000L
  649. #if(WINVER >= 0x0400)
  650. #define ES_NUMBER           0x2000L
  651. #endif /* WINVER >= 0x0400 */
  652. #endif /* !NOWINSTYLES */
  653. /*
  654.  * Edit Control Notification Codes
  655.  */
  656. #define EN_SETFOCUS         0x0100
  657. #define EN_KILLFOCUS        0x0200
  658. #define EN_CHANGE           0x0300
  659. #define EN_UPDATE           0x0400
  660. #define EN_ERRSPACE         0x0500
  661. #define EN_MAXTEXT          0x0501
  662. #define EN_HSCROLL          0x0601
  663. #define EN_VSCROLL          0x0602
  664. #if(_WIN32_WINNT >= 0x0500)
  665. #define EN_ALIGN_LTR_EC     0x0700
  666. #define EN_ALIGN_RTL_EC     0x0701
  667. #endif /* _WIN32_WINNT >= 0x0500 */
  668. #if(WINVER >= 0x0400)
  669. /* Edit control EM_SETMARGIN parameters */
  670. #define EC_LEFTMARGIN       0x0001
  671. #define EC_RIGHTMARGIN      0x0002
  672. #define EC_USEFONTINFO      0xffff
  673. #endif /* WINVER >= 0x0400 */
  674. #if(WINVER >= 0x0500)
  675. /* wParam of EM_GET/SETIMESTATUS  */
  676. #define EMSIS_COMPOSITIONSTRING        0x0001
  677. /* lParam for EMSIS_COMPOSITIONSTRING  */
  678. #define EIMES_GETCOMPSTRATONCE         0x0001
  679. #define EIMES_CANCELCOMPSTRINFOCUS     0x0002
  680. #define EIMES_COMPLETECOMPSTRKILLFOCUS 0x0004
  681. #endif /* WINVER >= 0x0500 */
  682. #ifndef NOWINMESSAGES
  683. /*
  684.  * Edit Control Messages
  685.  */
  686. #define EM_GETSEL               0x00B0
  687. #define EM_SETSEL               0x00B1
  688. #define EM_GETRECT              0x00B2
  689. #define EM_SETRECT              0x00B3
  690. #define EM_SETRECTNP            0x00B4
  691. #define EM_SCROLL               0x00B5
  692. #define EM_LINESCROLL           0x00B6
  693. #define EM_SCROLLCARET          0x00B7
  694. #define EM_GETMODIFY            0x00B8
  695. #define EM_SETMODIFY            0x00B9
  696. #define EM_GETLINECOUNT         0x00BA
  697. #define EM_LINEINDEX            0x00BB
  698. #define EM_SETHANDLE            0x00BC
  699. #define EM_GETHANDLE            0x00BD
  700. #define EM_GETTHUMB             0x00BE
  701. #define EM_LINELENGTH           0x00C1
  702. #define EM_REPLACESEL           0x00C2
  703. #define EM_GETLINE              0x00C4
  704. #define EM_LIMITTEXT            0x00C5
  705. #define EM_CANUNDO              0x00C6
  706. #define EM_UNDO                 0x00C7
  707. #define EM_FMTLINES             0x00C8
  708. #define EM_LINEFROMCHAR         0x00C9
  709. #define EM_SETTABSTOPS          0x00CB
  710. #define EM_SETPASSWORDCHAR      0x00CC
  711. #define EM_EMPTYUNDOBUFFER      0x00CD
  712. #define EM_GETFIRSTVISIBLELINE  0x00CE
  713. #define EM_SETREADONLY          0x00CF
  714. #define EM_SETWORDBREAKPROC     0x00D0
  715. #define EM_GETWORDBREAKPROC     0x00D1
  716. #define EM_GETPASSWORDCHAR      0x00D2
  717. #if(WINVER >= 0x0400)
  718. #define EM_SETMARGINS           0x00D3
  719. #define EM_GETMARGINS           0x00D4
  720. #define EM_SETLIMITTEXT         EM_LIMITTEXT   /* ;win40 Name change */
  721. #define EM_GETLIMITTEXT         0x00D5
  722. #define EM_POSFROMCHAR          0x00D6
  723. #define EM_CHARFROMPOS          0x00D7
  724. #endif /* WINVER >= 0x0400 */
  725. #if(WINVER >= 0x0500)
  726. #define EM_SETIMESTATUS         0x00D8
  727. #define EM_GETIMESTATUS         0x00D9
  728. #endif /* WINVER >= 0x0500 */
  729. #endif /* !NOWINMESSAGES */
  730. /*
  731.  * EDITWORDBREAKPROC code values
  732.  */
  733. #define WB_LEFT            0
  734. #define WB_RIGHT           1
  735. #define WB_ISDELIMITER     2
  736. /*
  737.  * Button Control Styles
  738.  */
  739. #define BS_PUSHBUTTON       0x00000000L
  740. #define BS_DEFPUSHBUTTON    0x00000001L
  741. #define BS_CHECKBOX         0x00000002L
  742. #define BS_AUTOCHECKBOX     0x00000003L
  743. #define BS_RADIOBUTTON      0x00000004L
  744. #define BS_3STATE           0x00000005L
  745. #define BS_AUTO3STATE       0x00000006L
  746. #define BS_GROUPBOX         0x00000007L
  747. #define BS_USERBUTTON       0x00000008L
  748. #define BS_AUTORADIOBUTTON  0x00000009L
  749. #define BS_OWNERDRAW        0x0000000BL
  750. #define BS_LEFTTEXT         0x00000020L
  751. #if(WINVER >= 0x0400)
  752. #define BS_TEXT             0x00000000L
  753. #define BS_ICON             0x00000040L
  754. #define BS_BITMAP           0x00000080L
  755. #define BS_LEFT             0x00000100L
  756. #define BS_RIGHT            0x00000200L
  757. #define BS_CENTER           0x00000300L
  758. #define BS_TOP              0x00000400L
  759. #define BS_BOTTOM           0x00000800L
  760. #define BS_VCENTER          0x00000C00L
  761. #define BS_PUSHLIKE         0x00001000L
  762. #define BS_MULTILINE        0x00002000L
  763. #define BS_NOTIFY           0x00004000L
  764. #define BS_FLAT             0x00008000L
  765. #define BS_RIGHTBUTTON      BS_LEFTTEXT
  766. #endif /* WINVER >= 0x0400 */
  767. /*
  768.  * User Button Notification Codes
  769.  */
  770. #define BN_CLICKED          0
  771. #define BN_PAINT            1
  772. #define BN_HILITE           2
  773. #define BN_UNHILITE         3
  774. #define BN_DISABLE          4
  775. #define BN_DOUBLECLICKED    5
  776. #if(WINVER >= 0x0400)
  777. #define BN_PUSHED           BN_HILITE
  778. #define BN_UNPUSHED         BN_UNHILITE
  779. #define BN_DBLCLK           BN_DOUBLECLICKED
  780. #define BN_SETFOCUS         6
  781. #define BN_KILLFOCUS        7
  782. #endif /* WINVER >= 0x0400 */
  783. /*
  784.  * Button Control Messages
  785.  */
  786. #define BM_GETCHECK        0x00F0
  787. #define BM_SETCHECK        0x00F1
  788. #define BM_GETSTATE        0x00F2
  789. #define BM_SETSTATE        0x00F3
  790. #define BM_SETSTYLE        0x00F4
  791. #if(WINVER >= 0x0400)
  792. #define BM_CLICK           0x00F5
  793. #define BM_GETIMAGE        0x00F6
  794. #define BM_SETIMAGE        0x00F7
  795. #define BST_UNCHECKED      0x0000
  796. #define BST_CHECKED        0x0001
  797. #define BST_INDETERMINATE  0x0002
  798. #define BST_PUSHED         0x0004
  799. #define BST_FOCUS          0x0008
  800. #endif /* WINVER >= 0x0400 */
  801. /*
  802.  * Static Control Constants
  803.  */
  804. #define SS_LEFT             0x00000000L
  805. #define SS_CENTER           0x00000001L
  806. #define SS_RIGHT            0x00000002L
  807. #define SS_ICON             0x00000003L
  808. #define SS_BLACKRECT        0x00000004L
  809. #define SS_GRAYRECT         0x00000005L
  810. #define SS_WHITERECT        0x00000006L
  811. #define SS_BLACKFRAME       0x00000007L
  812. #define SS_GRAYFRAME        0x00000008L
  813. #define SS_WHITEFRAME       0x00000009L
  814. #define SS_USERITEM         0x0000000AL
  815. #define SS_SIMPLE           0x0000000BL
  816. #define SS_LEFTNOWORDWRAP   0x0000000CL
  817. #if(WINVER >= 0x0400)
  818. #define SS_OWNERDRAW        0x0000000DL
  819. #define SS_BITMAP           0x0000000EL
  820. #define SS_ENHMETAFILE      0x0000000FL
  821. #define SS_ETCHEDHORZ       0x00000010L
  822. #define SS_ETCHEDVERT       0x00000011L
  823. #define SS_ETCHEDFRAME      0x00000012L
  824. #define SS_TYPEMASK         0x0000001FL
  825. #endif /* WINVER >= 0x0400 */
  826. #if(WINVER >= 0x0501)
  827. #define SS_REALSIZECONTROL  0x00000040L
  828. #endif /* WINVER >= 0x0501 */
  829. #define SS_NOPREFIX         0x00000080L /* Don't do "&" character translation */
  830. #if(WINVER >= 0x0400)
  831. #define SS_NOTIFY           0x00000100L
  832. #define SS_CENTERIMAGE      0x00000200L
  833. #define SS_RIGHTJUST        0x00000400L
  834. #define SS_REALSIZEIMAGE    0x00000800L
  835. #define SS_SUNKEN           0x00001000L
  836. #define SS_ENDELLIPSIS      0x00004000L
  837. #define SS_PATHELLIPSIS     0x00008000L
  838. #define SS_WORDELLIPSIS     0x0000C000L
  839. #define SS_ELLIPSISMASK     0x0000C000L
  840. #endif /* WINVER >= 0x0400 */
  841. #ifndef NOWINMESSAGES
  842. /*
  843.  * Static Control Mesages
  844.  */
  845. #define STM_SETICON         0x0170
  846. #define STM_GETICON         0x0171
  847. #if(WINVER >= 0x0400)
  848. #define STM_SETIMAGE        0x0172
  849. #define STM_GETIMAGE        0x0173
  850. #define STN_CLICKED         0
  851. #define STN_DBLCLK          1
  852. #define STN_ENABLE          2
  853. #define STN_DISABLE         3
  854. #endif /* WINVER >= 0x0400 */
  855. #define STM_MSGMAX          0x0174
  856. #endif /* !NOWINMESSAGES */
  857. /*
  858.  * Dialog window class
  859.  */
  860. #define WC_DIALOG       (MAKEINTATOM(0x8002))
  861. /*
  862.  * Get/SetWindowWord/Long offsets for use with WC_DIALOG windows
  863.  */
  864. #define DWL_MSGRESULT   0
  865. #define DWL_DLGPROC     4
  866. #define DWL_USER        8
  867. #ifdef _WIN64
  868. #undef DWL_MSGRESULT
  869. #undef DWL_DLGPROC
  870. #undef DWL_USER
  871. #endif /* _WIN64 */
  872. #define DWLP_MSGRESULT  0
  873. #define DWLP_DLGPROC    DWLP_MSGRESULT + sizeof(LRESULT)
  874. #define DWLP_USER       DWLP_DLGPROC + sizeof(DLGPROC)
  875. /*
  876.  * Dialog Manager Routines
  877.  */
  878. #ifndef NOMSG
  879. WINUSERAPI
  880. BOOL
  881. WINAPI
  882. IsDialogMessageA(
  883.     IN HWND hDlg,
  884.     IN LPMSG lpMsg);
  885. WINUSERAPI
  886. BOOL
  887. WINAPI
  888. IsDialogMessageW(
  889.     IN HWND hDlg,
  890.     IN LPMSG lpMsg);
  891. #ifdef UNICODE
  892. #define IsDialogMessage  IsDialogMessageW
  893. #else
  894. #define IsDialogMessage  IsDialogMessageA
  895. #endif // !UNICODE
  896. #endif /* !NOMSG */
  897. WINUSERAPI
  898. BOOL
  899. WINAPI
  900. MapDialogRect(
  901.     IN HWND hDlg,
  902.     IN OUT LPRECT lpRect);
  903. WINUSERAPI
  904. int
  905. WINAPI
  906. DlgDirListA(
  907.     IN HWND hDlg,
  908.     IN OUT LPSTR lpPathSpec,
  909.     IN int nIDListBox,
  910.     IN int nIDStaticPath,
  911.     IN UINT uFileType);
  912. WINUSERAPI
  913. int
  914. WINAPI
  915. DlgDirListW(
  916.     IN HWND hDlg,
  917.     IN OUT LPWSTR lpPathSpec,
  918.     IN int nIDListBox,
  919.     IN int nIDStaticPath,
  920.     IN UINT uFileType);
  921. #ifdef UNICODE
  922. #define DlgDirList  DlgDirListW
  923. #else
  924. #define DlgDirList  DlgDirListA
  925. #endif // !UNICODE
  926. /*
  927.  * DlgDirList, DlgDirListComboBox flags values
  928.  */
  929. #define DDL_READWRITE       0x0000
  930. #define DDL_READONLY        0x0001
  931. #define DDL_HIDDEN          0x0002
  932. #define DDL_SYSTEM          0x0004
  933. #define DDL_DIRECTORY       0x0010
  934. #define DDL_ARCHIVE         0x0020
  935. #define DDL_POSTMSGS        0x2000
  936. #define DDL_DRIVES          0x4000
  937. #define DDL_EXCLUSIVE       0x8000
  938. WINUSERAPI
  939. BOOL
  940. WINAPI
  941. DlgDirSelectExA(
  942.     IN HWND hDlg,
  943.     OUT LPSTR lpString,
  944.     IN int nCount,
  945.     IN int nIDListBox);
  946. WINUSERAPI
  947. BOOL
  948. WINAPI
  949. DlgDirSelectExW(
  950.     IN HWND hDlg,
  951.     OUT LPWSTR lpString,
  952.     IN int nCount,
  953.     IN int nIDListBox);
  954. #ifdef UNICODE
  955. #define DlgDirSelectEx  DlgDirSelectExW
  956. #else
  957. #define DlgDirSelectEx  DlgDirSelectExA
  958. #endif // !UNICODE
  959. WINUSERAPI
  960. int
  961. WINAPI
  962. DlgDirListComboBoxA(
  963.     IN HWND hDlg,
  964.     IN OUT LPSTR lpPathSpec,
  965.     IN int nIDComboBox,
  966.     IN int nIDStaticPath,
  967.     IN UINT uFiletype);
  968. WINUSERAPI
  969. int
  970. WINAPI
  971. DlgDirListComboBoxW(
  972.     IN HWND hDlg,
  973.     IN OUT LPWSTR lpPathSpec,
  974.     IN int nIDComboBox,
  975.     IN int nIDStaticPath,
  976.     IN UINT uFiletype);
  977. #ifdef UNICODE
  978. #define DlgDirListComboBox  DlgDirListComboBoxW
  979. #else
  980. #define DlgDirListComboBox  DlgDirListComboBoxA
  981. #endif // !UNICODE
  982. WINUSERAPI
  983. BOOL
  984. WINAPI
  985. DlgDirSelectComboBoxExA(
  986.     IN HWND hDlg,
  987.     OUT LPSTR lpString,
  988.     IN int nCount,
  989.     IN int nIDComboBox);
  990. WINUSERAPI
  991. BOOL
  992. WINAPI
  993. DlgDirSelectComboBoxExW(
  994.     IN HWND hDlg,
  995.     OUT LPWSTR lpString,
  996.     IN int nCount,
  997.     IN int nIDComboBox);
  998. #ifdef UNICODE
  999. #define DlgDirSelectComboBoxEx  DlgDirSelectComboBoxExW
  1000. #else
  1001. #define DlgDirSelectComboBoxEx  DlgDirSelectComboBoxExA
  1002. #endif // !UNICODE
  1003. /*
  1004.  * Dialog Styles
  1005.  */
  1006. #define DS_ABSALIGN         0x01L
  1007. #define DS_SYSMODAL         0x02L
  1008. #define DS_LOCALEDIT        0x20L   /* Edit items get Local storage. */
  1009. #define DS_SETFONT          0x40L   /* User specified font for Dlg controls */
  1010. #define DS_MODALFRAME       0x80L   /* Can be combined with WS_CAPTION  */
  1011. #define DS_NOIDLEMSG        0x100L  /* WM_ENTERIDLE message will not be sent */
  1012. #define DS_SETFOREGROUND    0x200L  /* not in win3.1 */
  1013. #if(WINVER >= 0x0400)
  1014. #define DS_3DLOOK           0x0004L
  1015. #define DS_FIXEDSYS         0x0008L
  1016. #define DS_NOFAILCREATE     0x0010L
  1017. #define DS_CONTROL          0x0400L
  1018. #define DS_CENTER           0x0800L
  1019. #define DS_CENTERMOUSE      0x1000L
  1020. #define DS_CONTEXTHELP      0x2000L
  1021. #define DS_SHELLFONT        (DS_SETFONT | DS_FIXEDSYS)
  1022. #endif /* WINVER >= 0x0400 */
  1023. #define DM_GETDEFID         (WM_USER+0)
  1024. #define DM_SETDEFID         (WM_USER+1)
  1025. #if(WINVER >= 0x0400)
  1026. #define DM_REPOSITION       (WM_USER+2)
  1027. #endif /* WINVER >= 0x0400 */
  1028. /*
  1029.  * Returned in HIWORD() of DM_GETDEFID result if msg is supported
  1030.  */
  1031. #define DC_HASDEFID         0x534B
  1032. /*
  1033.  * Dialog Codes
  1034.  */
  1035. #define DLGC_WANTARROWS     0x0001      /* Control wants arrow keys         */
  1036. #define DLGC_WANTTAB        0x0002      /* Control wants tab keys           */
  1037. #define DLGC_WANTALLKEYS    0x0004      /* Control wants all keys           */
  1038. #define DLGC_WANTMESSAGE    0x0004      /* Pass message to control          */
  1039. #define DLGC_HASSETSEL      0x0008      /* Understands EM_SETSEL message    */
  1040. #define DLGC_DEFPUSHBUTTON  0x0010      /* Default pushbutton               */
  1041. #define DLGC_UNDEFPUSHBUTTON 0x0020     /* Non-default pushbutton           */
  1042. #define DLGC_RADIOBUTTON    0x0040      /* Radio button                     */
  1043. #define DLGC_WANTCHARS      0x0080      /* Want WM_CHAR messages            */
  1044. #define DLGC_STATIC         0x0100      /* Static item: don't include       */
  1045. #define DLGC_BUTTON         0x2000      /* Button item: can be checked      */
  1046. #define LB_CTLCODE          0L
  1047. /*
  1048.  * Listbox Return Values
  1049.  */
  1050. #define LB_OKAY             0
  1051. #define LB_ERR              (-1)
  1052. #define LB_ERRSPACE         (-2)
  1053. /*
  1054. **  The idStaticPath parameter to DlgDirList can have the following values
  1055. **  ORed if the list box should show other details of the files along with
  1056. **  the name of the files;
  1057. */
  1058.                                   /* all other details also will be returned */
  1059. /*
  1060.  * Listbox Notification Codes
  1061.  */
  1062. #define LBN_ERRSPACE        (-2)
  1063. #define LBN_SELCHANGE       1
  1064. #define LBN_DBLCLK          2
  1065. #define LBN_SELCANCEL       3
  1066. #define LBN_SETFOCUS        4
  1067. #define LBN_KILLFOCUS       5
  1068. #ifndef NOWINMESSAGES
  1069. /*
  1070.  * Listbox messages
  1071.  */
  1072. #define LB_ADDSTRING            0x0180
  1073. #define LB_INSERTSTRING         0x0181
  1074. #define LB_DELETESTRING         0x0182
  1075. #define LB_SELITEMRANGEEX       0x0183
  1076. #define LB_RESETCONTENT         0x0184
  1077. #define LB_SETSEL               0x0185
  1078. #define LB_SETCURSEL            0x0186
  1079. #define LB_GETSEL               0x0187
  1080. #define LB_GETCURSEL            0x0188
  1081. #define LB_GETTEXT              0x0189
  1082. #define LB_GETTEXTLEN           0x018A
  1083. #define LB_GETCOUNT             0x018B
  1084. #define LB_SELECTSTRING         0x018C
  1085. #define LB_DIR                  0x018D
  1086. #define LB_GETTOPINDEX          0x018E
  1087. #define LB_FINDSTRING           0x018F
  1088. #define LB_GETSELCOUNT          0x0190
  1089. #define LB_GETSELITEMS          0x0191
  1090. #define LB_SETTABSTOPS          0x0192
  1091. #define LB_GETHORIZONTALEXTENT  0x0193
  1092. #define LB_SETHORIZONTALEXTENT  0x0194
  1093. #define LB_SETCOLUMNWIDTH       0x0195
  1094. #define LB_ADDFILE              0x0196
  1095. #define LB_SETTOPINDEX          0x0197
  1096. #define LB_GETITEMRECT          0x0198
  1097. #define LB_GETITEMDATA          0x0199
  1098. #define LB_SETITEMDATA          0x019A
  1099. #define LB_SELITEMRANGE         0x019B
  1100. #define LB_SETANCHORINDEX       0x019C
  1101. #define LB_GETANCHORINDEX       0x019D
  1102. #define LB_SETCARETINDEX        0x019E
  1103. #define LB_GETCARETINDEX        0x019F
  1104. #define LB_SETITEMHEIGHT        0x01A0
  1105. #define LB_GETITEMHEIGHT        0x01A1
  1106. #define LB_FINDSTRINGEXACT      0x01A2
  1107. #define LB_SETLOCALE            0x01A5
  1108. #define LB_GETLOCALE            0x01A6
  1109. #define LB_SETCOUNT             0x01A7
  1110. #if(WINVER >= 0x0400)
  1111. #define LB_INITSTORAGE          0x01A8
  1112. #define LB_ITEMFROMPOINT        0x01A9
  1113. #endif /* WINVER >= 0x0400 */
  1114. #if(_WIN32_WCE >= 0x0400)
  1115. #define LB_MULTIPLEADDSTRING    0x01B1
  1116. #endif
  1117. #if(_WIN32_WINNT >= 0x0501)
  1118. #define LB_GETLISTBOXINFO       0x01B2
  1119. #endif /* _WIN32_WINNT >= 0x0501 */
  1120. #if(_WIN32_WINNT >= 0x0501)
  1121. #define LB_MSGMAX               0x01B3
  1122. #elif(_WIN32_WCE >= 0x0400)
  1123. #define LB_MSGMAX               0x01B1
  1124. #elif(WINVER >= 0x0400)
  1125. #define LB_MSGMAX               0x01B0
  1126. #else
  1127. #define LB_MSGMAX               0x01A8
  1128. #endif
  1129. #endif /* !NOWINMESSAGES */
  1130. #ifndef NOWINSTYLES
  1131. /*
  1132.  * Listbox Styles
  1133.  */
  1134. #define LBS_NOTIFY            0x0001L
  1135. #define LBS_SORT              0x0002L
  1136. #define LBS_NOREDRAW          0x0004L
  1137. #define LBS_MULTIPLESEL       0x0008L
  1138. #define LBS_OWNERDRAWFIXED    0x0010L
  1139. #define LBS_OWNERDRAWVARIABLE 0x0020L
  1140. #define LBS_HASSTRINGS        0x0040L
  1141. #define LBS_USETABSTOPS       0x0080L
  1142. #define LBS_NOINTEGRALHEIGHT  0x0100L
  1143. #define LBS_MULTICOLUMN       0x0200L
  1144. #define LBS_WANTKEYBOARDINPUT 0x0400L
  1145. #define LBS_EXTENDEDSEL       0x0800L
  1146. #define LBS_DISABLENOSCROLL   0x1000L
  1147. #define LBS_NODATA            0x2000L
  1148. #if(WINVER >= 0x0400)
  1149. #define LBS_NOSEL             0x4000L
  1150. #endif /* WINVER >= 0x0400 */
  1151. #define LBS_STANDARD          (LBS_NOTIFY | LBS_SORT | WS_VSCROLL | WS_BORDER)
  1152. #endif /* !NOWINSTYLES */
  1153. /*
  1154.  * Combo Box return Values
  1155.  */
  1156. #define CB_OKAY             0
  1157. #define CB_ERR              (-1)
  1158. #define CB_ERRSPACE         (-2)
  1159. /*
  1160.  * Combo Box Notification Codes
  1161.  */
  1162. #define CBN_ERRSPACE        (-1)
  1163. #define CBN_SELCHANGE       1
  1164. #define CBN_DBLCLK          2
  1165. #define CBN_SETFOCUS        3
  1166. #define CBN_KILLFOCUS       4
  1167. #define CBN_EDITCHANGE      5
  1168. #define CBN_EDITUPDATE      6
  1169. #define CBN_DROPDOWN        7
  1170. #define CBN_CLOSEUP         8
  1171. #define CBN_SELENDOK        9
  1172. #define CBN_SELENDCANCEL    10
  1173. #ifndef NOWINSTYLES
  1174. /*
  1175.  * Combo Box styles
  1176.  */
  1177. #define CBS_SIMPLE            0x0001L
  1178. #define CBS_DROPDOWN          0x0002L
  1179. #define CBS_DROPDOWNLIST      0x0003L
  1180. #define CBS_OWNERDRAWFIXED    0x0010L
  1181. #define CBS_OWNERDRAWVARIABLE 0x0020L
  1182. #define CBS_AUTOHSCROLL       0x0040L
  1183. #define CBS_OEMCONVERT        0x0080L
  1184. #define CBS_SORT              0x0100L
  1185. #define CBS_HASSTRINGS        0x0200L
  1186. #define CBS_NOINTEGRALHEIGHT  0x0400L
  1187. #define CBS_DISABLENOSCROLL   0x0800L
  1188. #if(WINVER >= 0x0400)
  1189. #define CBS_UPPERCASE           0x2000L
  1190. #define CBS_LOWERCASE           0x4000L
  1191. #endif /* WINVER >= 0x0400 */
  1192. #endif  /* !NOWINSTYLES */
  1193. /*
  1194.  * Combo Box messages
  1195.  */
  1196. #ifndef NOWINMESSAGES
  1197. #define CB_GETEDITSEL               0x0140
  1198. #define CB_LIMITTEXT                0x0141
  1199. #define CB_SETEDITSEL               0x0142
  1200. #define CB_ADDSTRING                0x0143
  1201. #define CB_DELETESTRING             0x0144
  1202. #define CB_DIR                      0x0145
  1203. #define CB_GETCOUNT                 0x0146
  1204. #define CB_GETCURSEL                0x0147
  1205. #define CB_GETLBTEXT                0x0148
  1206. #define CB_GETLBTEXTLEN             0x0149
  1207. #define CB_INSERTSTRING             0x014A
  1208. #define CB_RESETCONTENT             0x014B
  1209. #define CB_FINDSTRING               0x014C
  1210. #define CB_SELECTSTRING             0x014D
  1211. #define CB_SETCURSEL                0x014E
  1212. #define CB_SHOWDROPDOWN             0x014F
  1213. #define CB_GETITEMDATA              0x0150
  1214. #define CB_SETITEMDATA              0x0151
  1215. #define CB_GETDROPPEDCONTROLRECT    0x0152
  1216. #define CB_SETITEMHEIGHT            0x0153
  1217. #define CB_GETITEMHEIGHT            0x0154
  1218. #define CB_SETEXTENDEDUI            0x0155
  1219. #define CB_GETEXTENDEDUI            0x0156
  1220. #define CB_GETDROPPEDSTATE          0x0157
  1221. #define CB_FINDSTRINGEXACT          0x0158
  1222. #define CB_SETLOCALE                0x0159
  1223. #define CB_GETLOCALE                0x015A
  1224. #if(WINVER >= 0x0400)
  1225. #define CB_GETTOPINDEX              0x015b
  1226. #define CB_SETTOPINDEX              0x015c
  1227. #define CB_GETHORIZONTALEXTENT      0x015d
  1228. #define CB_SETHORIZONTALEXTENT      0x015e
  1229. #define CB_GETDROPPEDWIDTH          0x015f
  1230. #define CB_SETDROPPEDWIDTH          0x0160
  1231. #define CB_INITSTORAGE              0x0161
  1232. #if(_WIN32_WCE >= 0x0400)
  1233. #define CB_MULTIPLEADDSTRING        0x0163
  1234. #endif
  1235. #endif /* WINVER >= 0x0400 */
  1236. #if(_WIN32_WINNT >= 0x0501)
  1237. #define CB_GETCOMBOBOXINFO          0x0164
  1238. #endif /* _WIN32_WINNT >= 0x0501 */
  1239. #if(_WIN32_WINNT >= 0x0501)
  1240. #define CB_MSGMAX                   0x0165
  1241. #elif(_WIN32_WCE >= 0x0400)
  1242. #define CB_MSGMAX                   0x0163
  1243. #elif(WINVER >= 0x0400)
  1244. #define CB_MSGMAX                   0x0162
  1245. #else
  1246. #define CB_MSGMAX                   0x015B
  1247. #endif
  1248. #endif  /* !NOWINMESSAGES */
  1249. #ifndef NOWINSTYLES
  1250. /*
  1251.  * Scroll Bar Styles
  1252.  */
  1253. #define SBS_HORZ                    0x0000L
  1254. #define SBS_VERT                    0x0001L
  1255. #define SBS_TOPALIGN                0x0002L
  1256. #define SBS_LEFTALIGN               0x0002L
  1257. #define SBS_BOTTOMALIGN             0x0004L
  1258. #define SBS_RIGHTALIGN              0x0004L
  1259. #define SBS_SIZEBOXTOPLEFTALIGN     0x0002L
  1260. #define SBS_SIZEBOXBOTTOMRIGHTALIGN 0x0004L
  1261. #define SBS_SIZEBOX                 0x0008L
  1262. #if(WINVER >= 0x0400)
  1263. #define SBS_SIZEGRIP                0x0010L
  1264. #endif /* WINVER >= 0x0400 */
  1265. #endif /* !NOWINSTYLES */
  1266. /*
  1267.  * Scroll bar messages
  1268.  */
  1269. #ifndef NOWINMESSAGES
  1270. #define SBM_SETPOS                  0x00E0 /*not in win3.1 */
  1271. #define SBM_GETPOS                  0x00E1 /*not in win3.1 */
  1272. #define SBM_SETRANGE                0x00E2 /*not in win3.1 */
  1273. #define SBM_SETRANGEREDRAW          0x00E6 /*not in win3.1 */
  1274. #define SBM_GETRANGE                0x00E3 /*not in win3.1 */
  1275. #define SBM_ENABLE_ARROWS           0x00E4 /*not in win3.1 */
  1276. #if(WINVER >= 0x0400)
  1277. #define SBM_SETSCROLLINFO           0x00E9
  1278. #define SBM_GETSCROLLINFO           0x00EA
  1279. #endif /* WINVER >= 0x0400 */
  1280. #if(_WIN32_WINNT >= 0x0501)
  1281. #define SBM_GETSCROLLBARINFO        0x00EB
  1282. #endif /* _WIN32_WINNT >= 0x0501 */
  1283. #if(WINVER >= 0x0400)
  1284. #define SIF_RANGE           0x0001
  1285. #define SIF_PAGE            0x0002
  1286. #define SIF_POS             0x0004
  1287. #define SIF_DISABLENOSCROLL 0x0008
  1288. #define SIF_TRACKPOS        0x0010
  1289. #define SIF_ALL             (SIF_RANGE | SIF_PAGE | SIF_POS | SIF_TRACKPOS)
  1290. typedef struct tagSCROLLINFO
  1291. {
  1292.     UINT    cbSize;
  1293.     UINT    fMask;
  1294.     int     nMin;
  1295.     int     nMax;
  1296.     UINT    nPage;
  1297.     int     nPos;
  1298.     int     nTrackPos;
  1299. }   SCROLLINFO, FAR *LPSCROLLINFO;
  1300. typedef SCROLLINFO CONST FAR *LPCSCROLLINFO;
  1301. WINUSERAPI int     WINAPI SetScrollInfo(IN HWND, IN int, IN LPCSCROLLINFO, IN BOOL);
  1302. WINUSERAPI BOOL    WINAPI GetScrollInfo(IN HWND, IN int, IN OUT LPSCROLLINFO);
  1303. #endif /* WINVER >= 0x0400 */
  1304. #endif /* !NOWINMESSAGES */
  1305. #endif /* !NOCTLMGR */
  1306. #ifndef NOMDI
  1307. /*
  1308.  * MDI client style bits
  1309.  */
  1310. #define MDIS_ALLCHILDSTYLES    0x0001
  1311. /*
  1312.  * wParam Flags for WM_MDITILE and WM_MDICASCADE messages.
  1313.  */
  1314. #define MDITILE_VERTICAL       0x0000 /*not in win3.1 */
  1315. #define MDITILE_HORIZONTAL     0x0001 /*not in win3.1 */
  1316. #define MDITILE_SKIPDISABLED   0x0002 /*not in win3.1 */
  1317. #if(_WIN32_WINNT >= 0x0500)
  1318. #define MDITILE_ZORDER         0x0004
  1319. #endif /* _WIN32_WINNT >= 0x0500 */
  1320. typedef struct tagMDICREATESTRUCTA {
  1321.     LPCSTR   szClass;
  1322.     LPCSTR   szTitle;
  1323.     HANDLE hOwner;
  1324.     int x;
  1325.     int y;
  1326.     int cx;
  1327.     int cy;
  1328.     DWORD style;
  1329.     LPARAM lParam;        /* app-defined stuff */
  1330. } MDICREATESTRUCTA, *LPMDICREATESTRUCTA;
  1331. typedef struct tagMDICREATESTRUCTW {
  1332.     LPCWSTR  szClass;
  1333.     LPCWSTR  szTitle;
  1334.     HANDLE hOwner;
  1335.     int x;
  1336.     int y;
  1337.     int cx;
  1338.     int cy;
  1339.     DWORD style;
  1340.     LPARAM lParam;        /* app-defined stuff */
  1341. } MDICREATESTRUCTW, *LPMDICREATESTRUCTW;
  1342. #ifdef UNICODE
  1343. typedef MDICREATESTRUCTW MDICREATESTRUCT;
  1344. typedef LPMDICREATESTRUCTW LPMDICREATESTRUCT;
  1345. #else
  1346. typedef MDICREATESTRUCTA MDICREATESTRUCT;
  1347. typedef LPMDICREATESTRUCTA LPMDICREATESTRUCT;
  1348. #endif // UNICODE
  1349. typedef struct tagCLIENTCREATESTRUCT {
  1350.     HANDLE hWindowMenu;
  1351.     UINT idFirstChild;
  1352. } CLIENTCREATESTRUCT, *LPCLIENTCREATESTRUCT;
  1353. WINUSERAPI
  1354. LRESULT
  1355. WINAPI
  1356. DefFrameProcA(
  1357.     IN HWND hWnd,
  1358.     IN HWND hWndMDIClient,
  1359.     IN UINT uMsg,
  1360.     IN WPARAM wParam,
  1361.     IN LPARAM lParam);
  1362. WINUSERAPI
  1363. LRESULT
  1364. WINAPI
  1365. DefFrameProcW(
  1366.     IN HWND hWnd,
  1367.     IN HWND hWndMDIClient,
  1368.     IN UINT uMsg,
  1369.     IN WPARAM wParam,
  1370.     IN LPARAM lParam);
  1371. #ifdef UNICODE
  1372. #define DefFrameProc  DefFrameProcW
  1373. #else
  1374. #define DefFrameProc  DefFrameProcA
  1375. #endif // !UNICODE
  1376. WINUSERAPI
  1377. #ifndef _MAC
  1378. LRESULT
  1379. WINAPI
  1380. #else
  1381. LRESULT
  1382. CALLBACK
  1383. #endif
  1384. DefMDIChildProcA(
  1385.     IN HWND hWnd,
  1386.     IN UINT uMsg,
  1387.     IN WPARAM wParam,
  1388.     IN LPARAM lParam);
  1389. WINUSERAPI
  1390. #ifndef _MAC
  1391. LRESULT
  1392. WINAPI
  1393. #else
  1394. LRESULT
  1395. CALLBACK
  1396. #endif
  1397. DefMDIChildProcW(
  1398.     IN HWND hWnd,
  1399.     IN UINT uMsg,
  1400.     IN WPARAM wParam,
  1401.     IN LPARAM lParam);
  1402. #ifdef UNICODE
  1403. #define DefMDIChildProc  DefMDIChildProcW
  1404. #else
  1405. #define DefMDIChildProc  DefMDIChildProcA
  1406. #endif // !UNICODE
  1407. #ifndef NOMSG
  1408. WINUSERAPI
  1409. BOOL
  1410. WINAPI
  1411. TranslateMDISysAccel(
  1412.     IN HWND hWndClient,
  1413.     IN LPMSG lpMsg);
  1414. #endif /* !NOMSG */
  1415. WINUSERAPI
  1416. UINT
  1417. WINAPI
  1418. ArrangeIconicWindows(
  1419.     IN HWND hWnd);
  1420. WINUSERAPI
  1421. HWND
  1422. WINAPI
  1423. CreateMDIWindowA(
  1424.     IN LPCSTR lpClassName,
  1425.     IN LPCSTR lpWindowName,
  1426.     IN DWORD dwStyle,
  1427.     IN int X,
  1428.     IN int Y,
  1429.     IN int nWidth,
  1430.     IN int nHeight,
  1431.     IN HWND hWndParent,
  1432.     IN HINSTANCE hInstance,
  1433.     IN LPARAM lParam
  1434.     );
  1435. WINUSERAPI
  1436. HWND
  1437. WINAPI
  1438. CreateMDIWindowW(
  1439.     IN LPCWSTR lpClassName,
  1440.     IN LPCWSTR lpWindowName,
  1441.     IN DWORD dwStyle,
  1442.     IN int X,
  1443.     IN int Y,
  1444.     IN int nWidth,
  1445.     IN int nHeight,
  1446.     IN HWND hWndParent,
  1447.     IN HINSTANCE hInstance,
  1448.     IN LPARAM lParam
  1449.     );
  1450. #ifdef UNICODE
  1451. #define CreateMDIWindow  CreateMDIWindowW
  1452. #else
  1453. #define CreateMDIWindow  CreateMDIWindowA
  1454. #endif // !UNICODE
  1455. #if(WINVER >= 0x0400)
  1456. WINUSERAPI WORD    WINAPI TileWindows( IN HWND hwndParent, IN UINT wHow, IN CONST RECT * lpRect, IN UINT cKids, IN const HWND FAR * lpKids);
  1457. WINUSERAPI WORD    WINAPI CascadeWindows( IN HWND hwndParent, IN UINT wHow, IN CONST RECT * lpRect, IN UINT cKids,  IN const HWND FAR * lpKids);
  1458. #endif /* WINVER >= 0x0400 */
  1459. #endif /* !NOMDI */
  1460. #endif /* !NOUSER */
  1461. /****** Help support ********************************************************/
  1462. #ifndef NOHELP
  1463. typedef DWORD HELPPOLY;
  1464. typedef struct tagMULTIKEYHELPA {
  1465. #ifndef _MAC
  1466.     DWORD  mkSize;
  1467. #else
  1468.     WORD   mkSize;
  1469. #endif
  1470.     CHAR   mkKeylist;
  1471.     CHAR   szKeyphrase[1];
  1472. } MULTIKEYHELPA, *PMULTIKEYHELPA, *LPMULTIKEYHELPA;
  1473. typedef struct tagMULTIKEYHELPW {
  1474. #ifndef _MAC
  1475.     DWORD  mkSize;
  1476. #else
  1477.     WORD   mkSize;
  1478. #endif
  1479.     WCHAR  mkKeylist;
  1480.     WCHAR  szKeyphrase[1];
  1481. } MULTIKEYHELPW, *PMULTIKEYHELPW, *LPMULTIKEYHELPW;
  1482. #ifdef UNICODE
  1483. typedef MULTIKEYHELPW MULTIKEYHELP;
  1484. typedef PMULTIKEYHELPW PMULTIKEYHELP;
  1485. typedef LPMULTIKEYHELPW LPMULTIKEYHELP;
  1486. #else
  1487. typedef MULTIKEYHELPA MULTIKEYHELP;
  1488. typedef PMULTIKEYHELPA PMULTIKEYHELP;
  1489. typedef LPMULTIKEYHELPA LPMULTIKEYHELP;
  1490. #endif // UNICODE
  1491. typedef struct tagHELPWININFOA {
  1492.     int  wStructSize;
  1493.     int  x;
  1494.     int  y;
  1495.     int  dx;
  1496.     int  dy;
  1497.     int  wMax;
  1498.     CHAR   rgchMember[2];
  1499. } HELPWININFOA, *PHELPWININFOA, *LPHELPWININFOA;
  1500. typedef struct tagHELPWININFOW {
  1501.     int  wStructSize;
  1502.     int  x;
  1503.     int  y;
  1504.     int  dx;
  1505.     int  dy;
  1506.     int  wMax;
  1507.     WCHAR  rgchMember[2];
  1508. } HELPWININFOW, *PHELPWININFOW, *LPHELPWININFOW;
  1509. #ifdef UNICODE
  1510. typedef HELPWININFOW HELPWININFO;
  1511. typedef PHELPWININFOW PHELPWININFO;
  1512. typedef LPHELPWININFOW LPHELPWININFO;
  1513. #else
  1514. typedef HELPWININFOA HELPWININFO;
  1515. typedef PHELPWININFOA PHELPWININFO;
  1516. typedef LPHELPWININFOA LPHELPWININFO;
  1517. #endif // UNICODE
  1518. /*
  1519.  * Commands to pass to WinHelp()
  1520.  */
  1521. #define HELP_CONTEXT      0x0001L  /* Display topic in ulTopic */
  1522. #define HELP_QUIT         0x0002L  /* Terminate help */
  1523. #define HELP_INDEX        0x0003L  /* Display index */
  1524. #define HELP_CONTENTS     0x0003L
  1525. #define HELP_HELPONHELP   0x0004L  /* Display help on using help */
  1526. #define HELP_SETINDEX     0x0005L  /* Set current Index for multi index help */
  1527. #define HELP_SETCONTENTS  0x0005L
  1528. #define HELP_CONTEXTPOPUP 0x0008L
  1529. #define HELP_FORCEFILE    0x0009L
  1530. #define HELP_KEY          0x0101L  /* Display topic for keyword in offabData */
  1531. #define HELP_COMMAND      0x0102L
  1532. #define HELP_PARTIALKEY   0x0105L
  1533. #define HELP_MULTIKEY     0x0201L
  1534. #define HELP_SETWINPOS    0x0203L
  1535. #if(WINVER >= 0x0400)
  1536. #define HELP_CONTEXTMENU  0x000a
  1537. #define HELP_FINDER       0x000b
  1538. #define HELP_WM_HELP      0x000c
  1539. #define HELP_SETPOPUP_POS 0x000d
  1540. #define HELP_TCARD              0x8000
  1541. #define HELP_TCARD_DATA         0x0010
  1542. #define HELP_TCARD_OTHER_CALLER 0x0011
  1543. // These are in winhelp.h in Win95.
  1544. #define IDH_NO_HELP                     28440
  1545. #define IDH_MISSING_CONTEXT             28441 // Control doesn't have matching help context
  1546. #define IDH_GENERIC_HELP_BUTTON         28442 // Property sheet help button
  1547. #define IDH_OK                          28443
  1548. #define IDH_CANCEL                      28444
  1549. #define IDH_HELP                        28445
  1550. #endif /* WINVER >= 0x0400 */
  1551. WINUSERAPI
  1552. BOOL
  1553. WINAPI
  1554. WinHelpA(
  1555.     IN HWND hWndMain,
  1556.     IN LPCSTR lpszHelp,
  1557.     IN UINT uCommand,
  1558.     IN ULONG_PTR dwData
  1559.     );
  1560. WINUSERAPI
  1561. BOOL
  1562. WINAPI
  1563. WinHelpW(
  1564.     IN HWND hWndMain,
  1565.     IN LPCWSTR lpszHelp,
  1566.     IN UINT uCommand,
  1567.     IN ULONG_PTR dwData
  1568.     );
  1569. #ifdef UNICODE
  1570. #define WinHelp  WinHelpW
  1571. #else
  1572. #define WinHelp  WinHelpA
  1573. #endif // !UNICODE
  1574. #endif /* !NOHELP */
  1575. #if(WINVER >= 0x0500)
  1576. #define GR_GDIOBJECTS     0       /* Count of GDI objects */
  1577. #define GR_USEROBJECTS    1       /* Count of USER objects */
  1578. WINUSERAPI
  1579. DWORD
  1580. WINAPI
  1581. GetGuiResources(
  1582.     IN HANDLE hProcess,
  1583.     IN DWORD uiFlags);
  1584. #endif /* WINVER >= 0x0500 */
  1585. #ifndef NOSYSPARAMSINFO
  1586. /*
  1587.  * Parameter for SystemParametersInfo()
  1588.  */
  1589. #define SPI_GETBEEP                 0x0001
  1590. #define SPI_SETBEEP                 0x0002
  1591. #define SPI_GETMOUSE                0x0003
  1592. #define SPI_SETMOUSE                0x0004
  1593. #define SPI_GETBORDER               0x0005
  1594. #define SPI_SETBORDER               0x0006
  1595. #define SPI_GETKEYBOARDSPEED        0x000A
  1596. #define SPI_SETKEYBOARDSPEED        0x000B
  1597. #define SPI_LANGDRIVER              0x000C
  1598. #define SPI_ICONHORIZONTALSPACING   0x000D
  1599. #define SPI_GETSCREENSAVETIMEOUT    0x000E
  1600. #define SPI_SETSCREENSAVETIMEOUT    0x000F
  1601. #define SPI_GETSCREENSAVEACTIVE     0x0010
  1602. #define SPI_SETSCREENSAVEACTIVE     0x0011
  1603. #define SPI_GETGRIDGRANULARITY      0x0012
  1604. #define SPI_SETGRIDGRANULARITY      0x0013
  1605. #define SPI_SETDESKWALLPAPER        0x0014
  1606. #define SPI_SETDESKPATTERN          0x0015
  1607. #define SPI_GETKEYBOARDDELAY        0x0016
  1608. #define SPI_SETKEYBOARDDELAY        0x0017
  1609. #define SPI_ICONVERTICALSPACING     0x0018
  1610. #define SPI_GETICONTITLEWRAP        0x0019
  1611. #define SPI_SETICONTITLEWRAP        0x001A
  1612. #define SPI_GETMENUDROPALIGNMENT    0x001B
  1613. #define SPI_SETMENUDROPALIGNMENT    0x001C
  1614. #define SPI_SETDOUBLECLKWIDTH       0x001D
  1615. #define SPI_SETDOUBLECLKHEIGHT      0x001E
  1616. #define SPI_GETICONTITLELOGFONT     0x001F
  1617. #define SPI_SETDOUBLECLICKTIME      0x0020
  1618. #define SPI_SETMOUSEBUTTONSWAP      0x0021
  1619. #define SPI_SETICONTITLELOGFONT     0x0022
  1620. #define SPI_GETFASTTASKSWITCH       0x0023
  1621. #define SPI_SETFASTTASKSWITCH       0x0024
  1622. #if(WINVER >= 0x0400)
  1623. #define SPI_SETDRAGFULLWINDOWS      0x0025
  1624. #define SPI_GETDRAGFULLWINDOWS      0x0026
  1625. #define SPI_GETNONCLIENTMETRICS     0x0029
  1626. #define SPI_SETNONCLIENTMETRICS     0x002A
  1627. #define SPI_GETMINIMIZEDMETRICS     0x002B
  1628. #define SPI_SETMINIMIZEDMETRICS     0x002C
  1629. #define SPI_GETICONMETRICS          0x002D
  1630. #define SPI_SETICONMETRICS          0x002E
  1631. #define SPI_SETWORKAREA             0x002F
  1632. #define SPI_GETWORKAREA             0x0030
  1633. #define SPI_SETPENWINDOWS           0x0031
  1634. #define SPI_GETHIGHCONTRAST         0x0042
  1635. #define SPI_SETHIGHCONTRAST         0x0043
  1636. #define SPI_GETKEYBOARDPREF         0x0044
  1637. #define SPI_SETKEYBOARDPREF         0x0045
  1638. #define SPI_GETSCREENREADER         0x0046
  1639. #define SPI_SETSCREENREADER         0x0047
  1640. #define SPI_GETANIMATION            0x0048
  1641. #define SPI_SETANIMATION            0x0049
  1642. #define SPI_GETFONTSMOOTHING        0x004A
  1643. #define SPI_SETFONTSMOOTHING        0x004B
  1644. #define SPI_SETDRAGWIDTH            0x004C
  1645. #define SPI_SETDRAGHEIGHT           0x004D
  1646. #define SPI_SETHANDHELD             0x004E
  1647. #define SPI_GETLOWPOWERTIMEOUT      0x004F
  1648. #define SPI_GETPOWEROFFTIMEOUT      0x0050
  1649. #define SPI_SETLOWPOWERTIMEOUT      0x0051
  1650. #define SPI_SETPOWEROFFTIMEOUT      0x0052
  1651. #define SPI_GETLOWPOWERACTIVE       0x0053
  1652. #define SPI_GETPOWEROFFACTIVE       0x0054
  1653. #define SPI_SETLOWPOWERACTIVE       0x0055
  1654. #define SPI_SETPOWEROFFACTIVE       0x0056
  1655. #define SPI_SETCURSORS              0x0057
  1656. #define SPI_SETICONS                0x0058
  1657. #define SPI_GETDEFAULTINPUTLANG     0x0059
  1658. #define SPI_SETDEFAULTINPUTLANG     0x005A
  1659. #define SPI_SETLANGTOGGLE           0x005B
  1660. #define SPI_GETWINDOWSEXTENSION     0x005C
  1661. #define SPI_SETMOUSETRAILS          0x005D
  1662. #define SPI_GETMOUSETRAILS          0x005E
  1663. #define SPI_SETSCREENSAVERRUNNING   0x0061
  1664. #define SPI_SCREENSAVERRUNNING     SPI_SETSCREENSAVERRUNNING
  1665. #endif /* WINVER >= 0x0400 */
  1666. #define SPI_GETFILTERKEYS          0x0032
  1667. #define SPI_SETFILTERKEYS          0x0033
  1668. #define SPI_GETTOGGLEKEYS          0x0034
  1669. #define SPI_SETTOGGLEKEYS          0x0035
  1670. #define SPI_GETMOUSEKEYS           0x0036
  1671. #define SPI_SETMOUSEKEYS           0x0037
  1672. #define SPI_GETSHOWSOUNDS          0x0038
  1673. #define SPI_SETSHOWSOUNDS          0x0039
  1674. #define SPI_GETSTICKYKEYS          0x003A
  1675. #define SPI_SETSTICKYKEYS          0x003B
  1676. #define SPI_GETACCESSTIMEOUT       0x003C
  1677. #define SPI_SETACCESSTIMEOUT       0x003D
  1678. #if(WINVER >= 0x0400)
  1679. #define SPI_GETSERIALKEYS          0x003E
  1680. #define SPI_SETSERIALKEYS          0x003F
  1681. #endif /* WINVER >= 0x0400 */
  1682. #define SPI_GETSOUNDSENTRY         0x0040
  1683. #define SPI_SETSOUNDSENTRY         0x0041
  1684. #if(_WIN32_WINNT >= 0x0400)
  1685. #define SPI_GETSNAPTODEFBUTTON     0x005F
  1686. #define SPI_SETSNAPTODEFBUTTON     0x0060
  1687. #endif /* _WIN32_WINNT >= 0x0400 */
  1688. #if (_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400)
  1689. #define SPI_GETMOUSEHOVERWIDTH     0x0062
  1690. #define SPI_SETMOUSEHOVERWIDTH     0x0063
  1691. #define SPI_GETMOUSEHOVERHEIGHT    0x0064
  1692. #define SPI_SETMOUSEHOVERHEIGHT    0x0065
  1693. #define SPI_GETMOUSEHOVERTIME      0x0066
  1694. #define SPI_SETMOUSEHOVERTIME      0x0067
  1695. #define SPI_GETWHEELSCROLLLINES    0x0068
  1696. #define SPI_SETWHEELSCROLLLINES    0x0069
  1697. #define SPI_GETMENUSHOWDELAY       0x006A
  1698. #define SPI_SETMENUSHOWDELAY       0x006B
  1699. #define SPI_GETSHOWIMEUI          0x006E
  1700. #define SPI_SETSHOWIMEUI          0x006F
  1701. #endif
  1702. #if(WINVER >= 0x0500)
  1703. #define SPI_GETMOUSESPEED         0x0070
  1704. #define SPI_SETMOUSESPEED         0x0071
  1705. #define SPI_GETSCREENSAVERRUNNING 0x0072
  1706. #define SPI_GETDESKWALLPAPER      0x0073
  1707. #endif /* WINVER >= 0x0500 */
  1708. #if(WINVER >= 0x0500)
  1709. #define SPI_GETACTIVEWINDOWTRACKING         0x1000
  1710. #define SPI_SETACTIVEWINDOWTRACKING         0x1001
  1711. #define SPI_GETMENUANIMATION                0x1002
  1712. #define SPI_SETMENUANIMATION                0x1003
  1713. #define SPI_GETCOMBOBOXANIMATION            0x1004
  1714. #define SPI_SETCOMBOBOXANIMATION            0x1005
  1715. #define SPI_GETLISTBOXSMOOTHSCROLLING       0x1006
  1716. #define SPI_SETLISTBOXSMOOTHSCROLLING       0x1007
  1717. #define SPI_GETGRADIENTCAPTIONS             0x1008
  1718. #define SPI_SETGRADIENTCAPTIONS             0x1009
  1719. #define SPI_GETKEYBOARDCUES                 0x100A
  1720. #define SPI_SETKEYBOARDCUES                 0x100B
  1721. #define SPI_GETMENUUNDERLINES               SPI_GETKEYBOARDCUES
  1722. #define SPI_SETMENUUNDERLINES               SPI_SETKEYBOARDCUES
  1723. #define SPI_GETACTIVEWNDTRKZORDER           0x100C
  1724. #define SPI_SETACTIVEWNDTRKZORDER           0x100D
  1725. #define SPI_GETHOTTRACKING                  0x100E
  1726. #define SPI_SETHOTTRACKING                  0x100F
  1727. #define SPI_GETMENUFADE                     0x1012
  1728. #define SPI_SETMENUFADE                     0x1013
  1729. #define SPI_GETSELECTIONFADE                0x1014
  1730. #define SPI_SETSELECTIONFADE                0x1015
  1731. #define SPI_GETTOOLTIPANIMATION             0x1016
  1732. #define SPI_SETTOOLTIPANIMATION             0x1017
  1733. #define SPI_GETTOOLTIPFADE                  0x1018
  1734. #define SPI_SETTOOLTIPFADE                  0x1019
  1735. #define SPI_GETCURSORSHADOW                 0x101A
  1736. #define SPI_SETCURSORSHADOW                 0x101B
  1737. #if(_WIN32_WINNT >= 0x0501)
  1738. #define SPI_GETMOUSESONAR                   0x101C
  1739. #define SPI_SETMOUSESONAR                   0x101D
  1740. #define SPI_GETMOUSECLICKLOCK               0x101E
  1741. #define SPI_SETMOUSECLICKLOCK               0x101F
  1742. #define SPI_GETMOUSEVANISH                  0x1020
  1743. #define SPI_SETMOUSEVANISH                  0x1021
  1744. #define SPI_GETFLATMENU                     0x1022
  1745. #define SPI_SETFLATMENU                     0x1023
  1746. #define SPI_GETDROPSHADOW                   0x1024
  1747. #define SPI_SETDROPSHADOW                   0x1025
  1748. #endif /* _WIN32_WINNT >= 0x0501 */
  1749. #define SPI_GETUIEFFECTS                    0x103E
  1750. #define SPI_SETUIEFFECTS                    0x103F
  1751. #define SPI_GETFOREGROUNDLOCKTIMEOUT        0x2000
  1752. #define SPI_SETFOREGROUNDLOCKTIMEOUT        0x2001
  1753. #define SPI_GETACTIVEWNDTRKTIMEOUT          0x2002
  1754. #define SPI_SETACTIVEWNDTRKTIMEOUT          0x2003
  1755. #define SPI_GETFOREGROUNDFLASHCOUNT         0x2004
  1756. #define SPI_SETFOREGROUNDFLASHCOUNT         0x2005
  1757. #define SPI_GETCARETWIDTH                   0x2006
  1758. #define SPI_SETCARETWIDTH                   0x2007
  1759. #if(_WIN32_WINNT >= 0x0501)
  1760. #define SPI_GETMOUSECLICKLOCKTIME           0x2008
  1761. #define SPI_SETMOUSECLICKLOCKTIME           0x2009
  1762. #define SPI_GETFONTSMOOTHINGTYPE            0x200A
  1763. #define SPI_SETFONTSMOOTHINGTYPE            0x200B
  1764. /* constants for SPI_GETFONTSMOOTHINGTYPE and SPI_SETFONTSMOOTHINGTYPE: */
  1765. #define FE_FONTSMOOTHINGSTANDARD            0x0001
  1766. #define FE_FONTSMOOTHINGCLEARTYPE           0x0002
  1767. #define FE_FONTSMOOTHINGDOCKING             0x8000
  1768. #define SPI_GETFONTSMOOTHINGCONTRAST           0x200C
  1769. #define SPI_SETFONTSMOOTHINGCONTRAST           0x200D
  1770. #define SPI_GETFOCUSBORDERWIDTH             0x200E
  1771. #define SPI_SETFOCUSBORDERWIDTH             0x200F
  1772. #define SPI_GETFOCUSBORDERHEIGHT            0x2010
  1773. #define SPI_SETFOCUSBORDERHEIGHT            0x2011
  1774. #endif /* _WIN32_WINNT >= 0x0501 */
  1775. #endif /* WINVER >= 0x0500 */
  1776. /*
  1777.  * Flags
  1778.  */
  1779. #define SPIF_UPDATEINIFILE    0x0001
  1780. #define SPIF_SENDWININICHANGE 0x0002
  1781. #define SPIF_SENDCHANGE       SPIF_SENDWININICHANGE
  1782. #define METRICS_USEDEFAULT -1
  1783. #ifdef _WINGDI_
  1784. #ifndef NOGDI
  1785. typedef struct tagNONCLIENTMETRICSA
  1786. {
  1787.     UINT    cbSize;
  1788.     int     iBorderWidth;
  1789.     int     iScrollWidth;
  1790.     int     iScrollHeight;
  1791.     int     iCaptionWidth;
  1792.     int     iCaptionHeight;
  1793.     LOGFONTA lfCaptionFont;
  1794.     int     iSmCaptionWidth;
  1795.     int     iSmCaptionHeight;
  1796.     LOGFONTA lfSmCaptionFont;
  1797.     int     iMenuWidth;
  1798.     int     iMenuHeight;
  1799.     LOGFONTA lfMenuFont;
  1800.     LOGFONTA lfStatusFont;
  1801.     LOGFONTA lfMessageFont;
  1802. }   NONCLIENTMETRICSA, *PNONCLIENTMETRICSA, FAR* LPNONCLIENTMETRICSA;
  1803. typedef struct tagNONCLIENTMETRICSW
  1804. {
  1805.     UINT    cbSize;
  1806.     int     iBorderWidth;
  1807.     int     iScrollWidth;
  1808.     int     iScrollHeight;
  1809.     int     iCaptionWidth;
  1810.     int     iCaptionHeight;
  1811.     LOGFONTW lfCaptionFont;
  1812.     int     iSmCaptionWidth;
  1813.     int     iSmCaptionHeight;
  1814.     LOGFONTW lfSmCaptionFont;
  1815.     int     iMenuWidth;
  1816.     int     iMenuHeight;
  1817.     LOGFONTW lfMenuFont;
  1818.     LOGFONTW lfStatusFont;
  1819.     LOGFONTW lfMessageFont;
  1820. }   NONCLIENTMETRICSW, *PNONCLIENTMETRICSW, FAR* LPNONCLIENTMETRICSW;
  1821. #ifdef UNICODE
  1822. typedef NONCLIENTMETRICSW NONCLIENTMETRICS;
  1823. typedef PNONCLIENTMETRICSW PNONCLIENTMETRICS;
  1824. typedef LPNONCLIENTMETRICSW LPNONCLIENTMETRICS;
  1825. #else
  1826. typedef NONCLIENTMETRICSA NONCLIENTMETRICS;
  1827. typedef PNONCLIENTMETRICSA PNONCLIENTMETRICS;
  1828. typedef LPNONCLIENTMETRICSA LPNONCLIENTMETRICS;
  1829. #endif // UNICODE
  1830. #endif /* NOGDI */
  1831. #endif /* _WINGDI_ */
  1832. #define ARW_BOTTOMLEFT              0x0000L
  1833. #define ARW_BOTTOMRIGHT             0x0001L
  1834. #define ARW_TOPLEFT                 0x0002L
  1835. #define ARW_TOPRIGHT                0x0003L
  1836. #define ARW_STARTMASK               0x0003L
  1837. #define ARW_STARTRIGHT              0x0001L
  1838. #define ARW_STARTTOP                0x0002L
  1839. #define ARW_LEFT                    0x0000L
  1840. #define ARW_RIGHT                   0x0000L
  1841. #define ARW_UP                      0x0004L
  1842. #define ARW_DOWN                    0x0004L
  1843. #define ARW_HIDE                    0x0008L
  1844. typedef struct tagMINIMIZEDMETRICS
  1845. {
  1846.     UINT    cbSize;
  1847.     int     iWidth;
  1848.     int     iHorzGap;
  1849.     int     iVertGap;
  1850.     int     iArrange;
  1851. }   MINIMIZEDMETRICS, *PMINIMIZEDMETRICS, *LPMINIMIZEDMETRICS;
  1852. #ifdef _WINGDI_
  1853. #ifndef NOGDI
  1854. typedef struct tagICONMETRICSA
  1855. {
  1856.     UINT    cbSize;
  1857.     int     iHorzSpacing;
  1858.     int     iVertSpacing;
  1859.     int     iTitleWrap;
  1860.     LOGFONTA lfFont;
  1861. }   ICONMETRICSA, *PICONMETRICSA, *LPICONMETRICSA;
  1862. typedef struct tagICONMETRICSW
  1863. {
  1864.     UINT    cbSize;
  1865.     int     iHorzSpacing;
  1866.     int     iVertSpacing;
  1867.     int     iTitleWrap;
  1868.     LOGFONTW lfFont;
  1869. }   ICONMETRICSW, *PICONMETRICSW, *LPICONMETRICSW;
  1870. #ifdef UNICODE
  1871. typedef ICONMETRICSW ICONMETRICS;
  1872. typedef PICONMETRICSW PICONMETRICS;
  1873. typedef LPICONMETRICSW LPICONMETRICS;
  1874. #else
  1875. typedef ICONMETRICSA ICONMETRICS;
  1876. typedef PICONMETRICSA PICONMETRICS;
  1877. typedef LPICONMETRICSA LPICONMETRICS;
  1878. #endif // UNICODE
  1879. #endif /* NOGDI */
  1880. #endif /* _WINGDI_ */
  1881. typedef struct tagANIMATIONINFO
  1882. {
  1883.     UINT    cbSize;
  1884.     int     iMinAnimate;
  1885. }   ANIMATIONINFO, *LPANIMATIONINFO;
  1886. typedef struct tagSERIALKEYSA
  1887. {
  1888.     UINT    cbSize;
  1889.     DWORD   dwFlags;
  1890.     LPSTR     lpszActivePort;
  1891.     LPSTR     lpszPort;
  1892.     UINT    iBaudRate;
  1893.     UINT    iPortState;
  1894.     UINT    iActive;
  1895. }   SERIALKEYSA, *LPSERIALKEYSA;
  1896. typedef struct tagSERIALKEYSW
  1897. {
  1898.     UINT    cbSize;
  1899.     DWORD   dwFlags;
  1900.     LPWSTR    lpszActivePort;
  1901.     LPWSTR    lpszPort;
  1902.     UINT    iBaudRate;
  1903.     UINT    iPortState;
  1904.     UINT    iActive;
  1905. }   SERIALKEYSW, *LPSERIALKEYSW;
  1906. #ifdef UNICODE
  1907. typedef SERIALKEYSW SERIALKEYS;
  1908. typedef LPSERIALKEYSW LPSERIALKEYS;
  1909. #else
  1910. typedef SERIALKEYSA SERIALKEYS;
  1911. typedef LPSERIALKEYSA LPSERIALKEYS;
  1912. #endif // UNICODE
  1913. /* flags for SERIALKEYS dwFlags field */
  1914. #define SERKF_SERIALKEYSON  0x00000001
  1915. #define SERKF_AVAILABLE     0x00000002
  1916. #define SERKF_INDICATOR     0x00000004
  1917. typedef struct tagHIGHCONTRASTA
  1918. {
  1919.     UINT    cbSize;
  1920.     DWORD   dwFlags;
  1921.     LPSTR   lpszDefaultScheme;
  1922. }   HIGHCONTRASTA, *LPHIGHCONTRASTA;
  1923. typedef struct tagHIGHCONTRASTW
  1924. {
  1925.     UINT    cbSize;
  1926.     DWORD   dwFlags;
  1927.     LPWSTR  lpszDefaultScheme;
  1928. }   HIGHCONTRASTW, *LPHIGHCONTRASTW;
  1929. #ifdef UNICODE
  1930. typedef HIGHCONTRASTW HIGHCONTRAST;
  1931. typedef LPHIGHCONTRASTW LPHIGHCONTRAST;
  1932. #else
  1933. typedef HIGHCONTRASTA HIGHCONTRAST;
  1934. typedef LPHIGHCONTRASTA LPHIGHCONTRAST;
  1935. #endif // UNICODE
  1936. /* flags for HIGHCONTRAST dwFlags field */
  1937. #define HCF_HIGHCONTRASTON  0x00000001
  1938. #define HCF_AVAILABLE       0x00000002
  1939. #define HCF_HOTKEYACTIVE    0x00000004
  1940. #define HCF_CONFIRMHOTKEY   0x00000008
  1941. #define HCF_HOTKEYSOUND     0x00000010
  1942. #define HCF_INDICATOR       0x00000020
  1943. #define HCF_HOTKEYAVAILABLE 0x00000040
  1944. /* Flags for ChangeDisplaySettings */
  1945. #define CDS_UPDATEREGISTRY  0x00000001
  1946. #define CDS_TEST            0x00000002
  1947. #define CDS_FULLSCREEN      0x00000004
  1948. #define CDS_GLOBAL          0x00000008
  1949. #define CDS_SET_PRIMARY     0x00000010
  1950. #define CDS_VIDEOPARAMETERS 0x00000020
  1951. #define CDS_RESET           0x40000000
  1952. #define CDS_NORESET         0x10000000
  1953. #include <tvout.h>
  1954. /* Return values for ChangeDisplaySettings */
  1955. #define DISP_CHANGE_SUCCESSFUL       0
  1956. #define DISP_CHANGE_RESTART          1
  1957. #define DISP_CHANGE_FAILED          -1
  1958. #define DISP_CHANGE_BADMODE         -2
  1959. #define DISP_CHANGE_NOTUPDATED      -3
  1960. #define DISP_CHANGE_BADFLAGS        -4
  1961. #define DISP_CHANGE_BADPARAM        -5
  1962. #if(_WIN32_WINNT >= 0x0501)
  1963. #define DISP_CHANGE_BADDUALVIEW     -6
  1964. #endif /* _WIN32_WINNT >= 0x0501 */
  1965. #ifdef _WINGDI_
  1966. #ifndef NOGDI
  1967. WINUSERAPI
  1968. LONG
  1969. WINAPI
  1970. ChangeDisplaySettingsA(
  1971.     IN LPDEVMODEA  lpDevMode,
  1972.     IN DWORD       dwFlags);
  1973. WINUSERAPI
  1974. LONG
  1975. WINAPI
  1976. ChangeDisplaySettingsW(
  1977.     IN LPDEVMODEW  lpDevMode,
  1978.     IN DWORD       dwFlags);
  1979. #ifdef UNICODE
  1980. #define ChangeDisplaySettings  ChangeDisplaySettingsW
  1981. #else
  1982. #define ChangeDisplaySettings  ChangeDisplaySettingsA
  1983. #endif // !UNICODE
  1984. WINUSERAPI
  1985. LONG
  1986. WINAPI
  1987. ChangeDisplaySettingsExA(
  1988.     IN LPCSTR    lpszDeviceName,
  1989.     IN LPDEVMODEA  lpDevMode,
  1990.     IN HWND        hwnd,
  1991.     IN DWORD       dwflags,
  1992.     IN LPVOID      lParam);
  1993. WINUSERAPI
  1994. LONG
  1995. WINAPI
  1996. ChangeDisplaySettingsExW(
  1997.     IN LPCWSTR    lpszDeviceName,
  1998.     IN LPDEVMODEW  lpDevMode,
  1999.     IN HWND        hwnd,
  2000.     IN DWORD       dwflags,
  2001.     IN LPVOID      lParam);
  2002. #ifdef UNICODE
  2003. #define ChangeDisplaySettingsEx  ChangeDisplaySettingsExW
  2004. #else
  2005. #define ChangeDisplaySettingsEx  ChangeDisplaySettingsExA
  2006. #endif // !UNICODE
  2007. #define ENUM_CURRENT_SETTINGS       ((DWORD)-1)
  2008. #define ENUM_REGISTRY_SETTINGS      ((DWORD)-2)
  2009. WINUSERAPI
  2010. BOOL
  2011. WINAPI
  2012. EnumDisplaySettingsA(
  2013.     IN LPCSTR lpszDeviceName,
  2014.     IN DWORD iModeNum,
  2015.     OUT LPDEVMODEA lpDevMode);
  2016. WINUSERAPI
  2017. BOOL
  2018. WINAPI
  2019. EnumDisplaySettingsW(
  2020.     IN LPCWSTR lpszDeviceName,
  2021.     IN DWORD iModeNum,
  2022.     OUT LPDEVMODEW lpDevMode);
  2023. #ifdef UNICODE
  2024. #define EnumDisplaySettings  EnumDisplaySettingsW
  2025. #else
  2026. #define EnumDisplaySettings  EnumDisplaySettingsA
  2027. #endif // !UNICODE
  2028. #if(WINVER >= 0x0500)
  2029. WINUSERAPI
  2030. BOOL
  2031. WINAPI
  2032. EnumDisplaySettingsExA(
  2033.     IN LPCSTR lpszDeviceName,
  2034.     IN DWORD iModeNum,
  2035.     OUT LPDEVMODEA lpDevMode,
  2036.     IN DWORD dwFlags);
  2037. WINUSERAPI
  2038. BOOL
  2039. WINAPI
  2040. EnumDisplaySettingsExW(
  2041.     IN LPCWSTR lpszDeviceName,
  2042.     IN DWORD iModeNum,
  2043.     OUT LPDEVMODEW lpDevMode,
  2044.     IN DWORD dwFlags);
  2045. #ifdef UNICODE
  2046. #define EnumDisplaySettingsEx  EnumDisplaySettingsExW
  2047. #else
  2048. #define EnumDisplaySettingsEx  EnumDisplaySettingsExA
  2049. #endif // !UNICODE
  2050. /* Flags for EnumDisplaySettingsEx */
  2051. #define EDS_RAWMODE                   0x00000002
  2052. WINUSERAPI
  2053. BOOL
  2054. WINAPI
  2055. EnumDisplayDevicesA(
  2056.     IN LPCSTR lpDevice,
  2057.     IN DWORD iDevNum,
  2058.     OUT PDISPLAY_DEVICEA lpDisplayDevice,
  2059.     IN DWORD dwFlags);
  2060. WINUSERAPI
  2061. BOOL
  2062. WINAPI
  2063. EnumDisplayDevicesW(
  2064.     IN LPCWSTR lpDevice,
  2065.     IN DWORD iDevNum,
  2066.     OUT PDISPLAY_DEVICEW lpDisplayDevice,
  2067.     IN DWORD dwFlags);
  2068. #ifdef UNICODE
  2069. #define EnumDisplayDevices  EnumDisplayDevicesW
  2070. #else
  2071. #define EnumDisplayDevices  EnumDisplayDevicesA
  2072. #endif // !UNICODE
  2073. #endif /* WINVER >= 0x0500 */
  2074. #endif /* NOGDI */
  2075. #endif /* _WINGDI_ */
  2076. WINUSERAPI
  2077. BOOL
  2078. WINAPI
  2079. SystemParametersInfoA(
  2080.     IN UINT uiAction,
  2081.     IN UINT uiParam,
  2082.     IN OUT PVOID pvParam,
  2083.     IN UINT fWinIni);
  2084. WINUSERAPI
  2085. BOOL
  2086. WINAPI
  2087. SystemParametersInfoW(
  2088.     IN UINT uiAction,
  2089.     IN UINT uiParam,
  2090.     IN OUT PVOID pvParam,
  2091.     IN UINT fWinIni);
  2092. #ifdef UNICODE
  2093. #define SystemParametersInfo  SystemParametersInfoW
  2094. #else
  2095. #define SystemParametersInfo  SystemParametersInfoA
  2096. #endif // !UNICODE
  2097. #endif  /* !NOSYSPARAMSINFO  */
  2098. /*
  2099.  * Accessibility support
  2100.  */
  2101. typedef struct tagFILTERKEYS
  2102. {
  2103.     UINT  cbSize;
  2104.     DWORD dwFlags;
  2105.     DWORD iWaitMSec;            // Acceptance Delay
  2106.     DWORD iDelayMSec;           // Delay Until Repeat
  2107.     DWORD iRepeatMSec;          // Repeat Rate
  2108.     DWORD iBounceMSec;          // Debounce Time
  2109. } FILTERKEYS, *LPFILTERKEYS;
  2110. /*
  2111.  * FILTERKEYS dwFlags field
  2112.  */
  2113. #define FKF_FILTERKEYSON    0x00000001
  2114. #define FKF_AVAILABLE       0x00000002
  2115. #define FKF_HOTKEYACTIVE    0x00000004
  2116. #define FKF_CONFIRMHOTKEY   0x00000008
  2117. #define FKF_HOTKEYSOUND     0x00000010
  2118. #define FKF_INDICATOR       0x00000020
  2119. #define FKF_CLICKON         0x00000040
  2120. typedef struct tagSTICKYKEYS
  2121. {
  2122.     UINT  cbSize;
  2123.     DWORD dwFlags;
  2124. } STICKYKEYS, *LPSTICKYKEYS;
  2125. /*
  2126.  * STICKYKEYS dwFlags field
  2127.  */
  2128. #define SKF_STICKYKEYSON    0x00000001
  2129. #define SKF_AVAILABLE       0x00000002
  2130. #define SKF_HOTKEYACTIVE    0x00000004
  2131. #define SKF_CONFIRMHOTKEY   0x00000008
  2132. #define SKF_HOTKEYSOUND     0x00000010
  2133. #define SKF_INDICATOR       0x00000020
  2134. #define SKF_AUDIBLEFEEDBACK 0x00000040
  2135. #define SKF_TRISTATE        0x00000080
  2136. #define SKF_TWOKEYSOFF      0x00000100
  2137. #if(_WIN32_WINNT >= 0x0500)
  2138. #define SKF_LALTLATCHED       0x10000000
  2139. #define SKF_LCTLLATCHED       0x04000000
  2140. #define SKF_LSHIFTLATCHED     0x01000000
  2141. #define SKF_RALTLATCHED       0x20000000
  2142. #define SKF_RCTLLATCHED       0x08000000
  2143. #define SKF_RSHIFTLATCHED     0x02000000
  2144. #define SKF_LWINLATCHED       0x40000000
  2145. #define SKF_RWINLATCHED       0x80000000
  2146. #define SKF_LALTLOCKED        0x00100000
  2147. #define SKF_LCTLLOCKED        0x00040000
  2148. #define SKF_LSHIFTLOCKED      0x00010000
  2149. #define SKF_RALTLOCKED        0x00200000
  2150. #define SKF_RCTLLOCKED        0x00080000
  2151. #define SKF_RSHIFTLOCKED      0x00020000
  2152. #define SKF_LWINLOCKED        0x00400000
  2153. #define SKF_RWINLOCKED        0x00800000
  2154. #endif /* _WIN32_WINNT >= 0x0500 */
  2155. typedef struct tagMOUSEKEYS
  2156. {
  2157.     UINT cbSize;
  2158.     DWORD dwFlags;
  2159.     DWORD iMaxSpeed;
  2160.     DWORD iTimeToMaxSpeed;
  2161.     DWORD iCtrlSpeed;
  2162.     DWORD dwReserved1;
  2163.     DWORD dwReserved2;
  2164. } MOUSEKEYS, *LPMOUSEKEYS;
  2165. /*
  2166.  * MOUSEKEYS dwFlags field
  2167.  */
  2168. #define MKF_MOUSEKEYSON     0x00000001
  2169. #define MKF_AVAILABLE       0x00000002
  2170. #define MKF_HOTKEYACTIVE    0x00000004
  2171. #define MKF_CONFIRMHOTKEY   0x00000008
  2172. #define MKF_HOTKEYSOUND     0x00000010
  2173. #define MKF_INDICATOR       0x00000020
  2174. #define MKF_MODIFIERS       0x00000040
  2175. #define MKF_REPLACENUMBERS  0x00000080
  2176. #if(_WIN32_WINNT >= 0x0500)
  2177. #define MKF_LEFTBUTTONSEL   0x10000000
  2178. #define MKF_RIGHTBUTTONSEL  0x20000000
  2179. #define MKF_LEFTBUTTONDOWN  0x01000000
  2180. #define MKF_RIGHTBUTTONDOWN 0x02000000
  2181. #define MKF_MOUSEMODE       0x80000000
  2182. #endif /* _WIN32_WINNT >= 0x0500 */
  2183. typedef struct tagACCESSTIMEOUT
  2184. {
  2185.     UINT  cbSize;
  2186.     DWORD dwFlags;
  2187.     DWORD iTimeOutMSec;
  2188. } ACCESSTIMEOUT, *LPACCESSTIMEOUT;
  2189. /*
  2190.  * ACCESSTIMEOUT dwFlags field
  2191.  */
  2192. #define ATF_TIMEOUTON       0x00000001
  2193. #define ATF_ONOFFFEEDBACK   0x00000002
  2194. /* values for SOUNDSENTRY iFSGrafEffect field */
  2195. #define SSGF_NONE       0
  2196. #define SSGF_DISPLAY    3
  2197. /* values for SOUNDSENTRY iFSTextEffect field */
  2198. #define SSTF_NONE       0
  2199. #define SSTF_CHARS      1
  2200. #define SSTF_BORDER     2
  2201. #define SSTF_DISPLAY    3
  2202. /* values for SOUNDSENTRY iWindowsEffect field */
  2203. #define SSWF_NONE     0
  2204. #define SSWF_TITLE    1
  2205. #define SSWF_WINDOW   2
  2206. #define SSWF_DISPLAY  3
  2207. #define SSWF_CUSTOM   4
  2208. typedef struct tagSOUNDSENTRYA
  2209. {
  2210.     UINT cbSize;
  2211.     DWORD dwFlags;
  2212.     DWORD iFSTextEffect;
  2213.     DWORD iFSTextEffectMSec;
  2214.     DWORD iFSTextEffectColorBits;
  2215.     DWORD iFSGrafEffect;
  2216.     DWORD iFSGrafEffectMSec;
  2217.     DWORD iFSGrafEffectColor;
  2218.     DWORD iWindowsEffect;
  2219.     DWORD iWindowsEffectMSec;
  2220.     LPSTR   lpszWindowsEffectDLL;
  2221.     DWORD iWindowsEffectOrdinal;
  2222. } SOUNDSENTRYA, *LPSOUNDSENTRYA;
  2223. typedef struct tagSOUNDSENTRYW
  2224. {
  2225.     UINT cbSize;
  2226.     DWORD dwFlags;
  2227.     DWORD iFSTextEffect;
  2228.     DWORD iFSTextEffectMSec;
  2229.     DWORD iFSTextEffectColorBits;
  2230.     DWORD iFSGrafEffect;
  2231.     DWORD iFSGrafEffectMSec;
  2232.     DWORD iFSGrafEffectColor;
  2233.     DWORD iWindowsEffect;
  2234.     DWORD iWindowsEffectMSec;
  2235.     LPWSTR  lpszWindowsEffectDLL;
  2236.     DWORD iWindowsEffectOrdinal;
  2237. } SOUNDSENTRYW, *LPSOUNDSENTRYW;
  2238. #ifdef UNICODE
  2239. typedef SOUNDSENTRYW SOUNDSENTRY;
  2240. typedef LPSOUNDSENTRYW LPSOUNDSENTRY;
  2241. #else
  2242. typedef SOUNDSENTRYA SOUNDSENTRY;
  2243. typedef LPSOUNDSENTRYA LPSOUNDSENTRY;
  2244. #endif // UNICODE
  2245. /*
  2246.  * SOUNDSENTRY dwFlags field
  2247.  */
  2248. #define SSF_SOUNDSENTRYON   0x00000001
  2249. #define SSF_AVAILABLE       0x00000002
  2250. #define SSF_INDICATOR       0x00000004
  2251. typedef struct tagTOGGLEKEYS
  2252. {
  2253.     UINT cbSize;
  2254.     DWORD dwFlags;
  2255. } TOGGLEKEYS, *LPTOGGLEKEYS;
  2256. /*
  2257.  * TOGGLEKEYS dwFlags field
  2258.  */
  2259. #define TKF_TOGGLEKEYSON    0x00000001
  2260. #define TKF_AVAILABLE       0x00000002
  2261. #define TKF_HOTKEYACTIVE    0x00000004
  2262. #define TKF_CONFIRMHOTKEY   0x00000008
  2263. #define TKF_HOTKEYSOUND     0x00000010
  2264. #define TKF_INDICATOR       0x00000020
  2265. /*
  2266.  * Set debug level
  2267.  */
  2268. WINUSERAPI
  2269. VOID
  2270. WINAPI
  2271. SetDebugErrorLevel(
  2272.     IN DWORD dwLevel
  2273.     );
  2274. /*
  2275.  * SetLastErrorEx() types.
  2276.  */
  2277. #define SLE_ERROR       0x00000001
  2278. #define SLE_MINORERROR  0x00000002
  2279. #define SLE_WARNING     0x00000003
  2280. WINUSERAPI
  2281. VOID
  2282. WINAPI
  2283. SetLastErrorEx(
  2284.     IN DWORD dwErrCode,
  2285.     IN DWORD dwType
  2286.     );
  2287. #if(WINVER >= 0x0500)
  2288. /*
  2289.  * Multimonitor API.
  2290.  */
  2291. #define MONITOR_DEFAULTTONULL       0x00000000
  2292. #define MONITOR_DEFAULTTOPRIMARY    0x00000001
  2293. #define MONITOR_DEFAULTTONEAREST    0x00000002
  2294. WINUSERAPI
  2295. HMONITOR
  2296. WINAPI
  2297. MonitorFromPoint(
  2298.     IN POINT pt,
  2299.     IN DWORD dwFlags);
  2300. WINUSERAPI
  2301. HMONITOR
  2302. WINAPI
  2303. MonitorFromRect(
  2304.     IN LPCRECT lprc,
  2305.     IN DWORD dwFlags);
  2306. WINUSERAPI
  2307. HMONITOR
  2308. WINAPI
  2309. MonitorFromWindow( IN HWND hwnd, IN DWORD dwFlags);
  2310. #define MONITORINFOF_PRIMARY        0x00000001
  2311. #ifndef CCHDEVICENAME
  2312. #define CCHDEVICENAME 32
  2313. #endif
  2314. typedef struct tagMONITORINFO
  2315. {
  2316.     DWORD   cbSize;
  2317.     RECT    rcMonitor;
  2318.     RECT    rcWork;
  2319.     DWORD   dwFlags;
  2320. } MONITORINFO, *LPMONITORINFO;
  2321. #ifdef __cplusplus
  2322. typedef struct tagMONITORINFOEXA : public tagMONITORINFO
  2323. {
  2324.     CHAR        szDevice[CCHDEVICENAME];
  2325. } MONITORINFOEXA, *LPMONITORINFOEXA;
  2326. typedef struct tagMONITORINFOEXW : public tagMONITORINFO
  2327. {
  2328.     WCHAR       szDevice[CCHDEVICENAME];
  2329. } MONITORINFOEXW, *LPMONITORINFOEXW;
  2330. #ifdef UNICODE
  2331. typedef MONITORINFOEXW MONITORINFOEX;
  2332. typedef LPMONITORINFOEXW LPMONITORINFOEX;
  2333. #else
  2334. typedef MONITORINFOEXA MONITORINFOEX;
  2335. typedef LPMONITORINFOEXA LPMONITORINFOEX;
  2336. #endif // UNICODE
  2337. #else // ndef __cplusplus
  2338. typedef struct tagMONITORINFOEXA
  2339. {
  2340.     MONITORINFO;
  2341.     CHAR        szDevice[CCHDEVICENAME];
  2342. } MONITORINFOEXA, *LPMONITORINFOEXA;
  2343. typedef struct tagMONITORINFOEXW
  2344. {
  2345.     MONITORINFO;
  2346.     WCHAR       szDevice[CCHDEVICENAME];
  2347. } MONITORINFOEXW, *LPMONITORINFOEXW;
  2348. #ifdef UNICODE
  2349. typedef MONITORINFOEXW MONITORINFOEX;
  2350. typedef LPMONITORINFOEXW LPMONITORINFOEX;
  2351. #else
  2352. typedef MONITORINFOEXA MONITORINFOEX;
  2353. typedef LPMONITORINFOEXA LPMONITORINFOEX;
  2354. #endif // UNICODE
  2355. #endif
  2356. WINUSERAPI BOOL WINAPI GetMonitorInfoA( IN HMONITOR hMonitor, OUT LPMONITORINFO lpmi);
  2357. WINUSERAPI BOOL WINAPI GetMonitorInfoW( IN HMONITOR hMonitor, OUT LPMONITORINFO lpmi);
  2358. #ifdef UNICODE
  2359. #define GetMonitorInfo  GetMonitorInfoW
  2360. #else
  2361. #define GetMonitorInfo  GetMonitorInfoA
  2362. #endif // !UNICODE
  2363. typedef BOOL (CALLBACK* MONITORENUMPROC)(HMONITOR, HDC, LPRECT, LPARAM);
  2364. WINUSERAPI
  2365. BOOL
  2366. WINAPI
  2367. EnumDisplayMonitors(
  2368.     IN HDC             hdc,
  2369.     IN LPCRECT         lprcClip,
  2370.     IN MONITORENUMPROC lpfnEnum,
  2371.     IN LPARAM          dwData);
  2372. #ifndef NOWINABLE
  2373. /*
  2374.  * WinEvents - Active Accessibility hooks
  2375.  */
  2376. WINUSERAPI
  2377. VOID
  2378. WINAPI
  2379. NotifyWinEvent(
  2380.     IN DWORD event,
  2381.     IN HWND  hwnd,
  2382.     IN LONG  idObject,
  2383.     IN LONG  idChild);
  2384. typedef VOID (CALLBACK* WINEVENTPROC)(
  2385.     HWINEVENTHOOK hWinEventHook,
  2386.     DWORD         event,
  2387.     HWND          hwnd,
  2388.     LONG          idObject,
  2389.     LONG          idChild,
  2390.     DWORD         idEventThread,
  2391.     DWORD         dwmsEventTime);
  2392. WINUSERAPI
  2393. HWINEVENTHOOK
  2394. WINAPI
  2395. SetWinEventHook(
  2396.     IN DWORD        eventMin,
  2397.     IN DWORD        eventMax,
  2398.     IN HMODULE      hmodWinEventProc,
  2399.     IN WINEVENTPROC pfnWinEventProc,
  2400.     IN DWORD        idProcess,
  2401.     IN DWORD        idThread,
  2402.     IN DWORD        dwFlags);
  2403. #if(_WIN32_WINNT >= 0x0501)
  2404. WINUSERAPI
  2405. BOOL
  2406. WINAPI
  2407. IsWinEventHookInstalled(
  2408.     IN DWORD event);
  2409. #endif /* _WIN32_WINNT >= 0x0501 */
  2410. /*
  2411.  * dwFlags for SetWinEventHook
  2412.  */
  2413. #define WINEVENT_OUTOFCONTEXT   0x0000  // Events are ASYNC
  2414. #define WINEVENT_SKIPOWNTHREAD  0x0001  // Don't call back for events on installer's thread
  2415. #define WINEVENT_SKIPOWNPROCESS 0x0002  // Don't call back for events on installer's process
  2416. #define WINEVENT_INCONTEXT      0x0004  // Events are SYNC, this causes your dll to be injected into every process
  2417. WINUSERAPI
  2418. BOOL
  2419. WINAPI
  2420. UnhookWinEvent(
  2421.     IN HWINEVENTHOOK hWinEventHook);
  2422. /*
  2423.  * idObject values for WinEventProc and NotifyWinEvent
  2424.  */
  2425. /*
  2426.  * hwnd + idObject can be used with OLEACC.DLL's OleGetObjectFromWindow()
  2427.  * to get an interface pointer to the container.  indexChild is the item
  2428.  * within the container in question.  Setup a VARIANT with vt VT_I4 and
  2429.  * lVal the indexChild and pass that in to all methods.  Then you
  2430.  * are raring to go.
  2431.  */
  2432. /*
  2433.  * Common object IDs (cookies, only for sending WM_GETOBJECT to get at the
  2434.  * thing in question).  Positive IDs are reserved for apps (app specific),
  2435.  * negative IDs are system things and are global, 0 means "just little old
  2436.  * me".
  2437.  */
  2438. #define     CHILDID_SELF        0
  2439. #define     INDEXID_OBJECT      0
  2440. #define     INDEXID_CONTAINER   0
  2441. /*
  2442.  * Reserved IDs for system objects
  2443.  */
  2444. #define     OBJID_WINDOW        ((LONG)0x00000000)
  2445. #define     OBJID_SYSMENU       ((LONG)0xFFFFFFFF)
  2446. #define     OBJID_TITLEBAR      ((LONG)0xFFFFFFFE)
  2447. #define     OBJID_MENU          ((LONG)0xFFFFFFFD)
  2448. #define     OBJID_CLIENT        ((LONG)0xFFFFFFFC)
  2449. #define     OBJID_VSCROLL       ((LONG)0xFFFFFFFB)
  2450. #define     OBJID_HSCROLL       ((LONG)0xFFFFFFFA)
  2451. #define     OBJID_SIZEGRIP      ((LONG)0xFFFFFFF9)
  2452. #define     OBJID_CARET         ((LONG)0xFFFFFFF8)
  2453. #define     OBJID_CURSOR        ((LONG)0xFFFFFFF7)
  2454. #define     OBJID_ALERT         ((LONG)0xFFFFFFF6)
  2455. #define     OBJID_SOUND         ((LONG)0xFFFFFFF5)
  2456. #define     OBJID_QUERYCLASSNAMEIDX ((LONG)0xFFFFFFF4)
  2457. #define     OBJID_NATIVEOM      ((LONG)0xFFFFFFF0)
  2458. /*
  2459.  * EVENT DEFINITION
  2460.  */
  2461. #define EVENT_MIN           0x00000001
  2462. #define EVENT_MAX           0x7FFFFFFF
  2463. /*
  2464.  *  EVENT_SYSTEM_SOUND
  2465.  *  Sent when a sound is played.  Currently nothing is generating this, we
  2466.  *  this event when a system sound (for menus, etc) is played.  Apps
  2467.  *  generate this, if accessible, when a private sound is played.  For
  2468.  *  example, if Mail plays a "New Mail" sound.
  2469.  *
  2470.  *  System Sounds:
  2471.  *  (Generated by PlaySoundEvent in USER itself)
  2472.  *      hwnd            is NULL
  2473.  *      idObject        is OBJID_SOUND
  2474.  *      idChild         is sound child ID if one
  2475.  *  App Sounds:
  2476.  *  (PlaySoundEvent won't generate notification; up to app)
  2477.  *      hwnd + idObject gets interface pointer to Sound object
  2478.  *      idChild identifies the sound in question
  2479.  *  are going to be cleaning up the SOUNDSENTRY feature in the control panel
  2480.  *  and will use this at that time.  Applications implementing WinEvents
  2481.  *  are perfectly welcome to use it.  Clients of IAccessible* will simply
  2482.  *  turn around and get back a non-visual object that describes the sound.
  2483.  */
  2484. #define EVENT_SYSTEM_SOUND              0x0001
  2485. /*
  2486.  * EVENT_SYSTEM_ALERT
  2487.  * System Alerts:
  2488.  * (Generated by MessageBox() calls for example)
  2489.  *      hwnd            is hwndMessageBox
  2490.  *      idObject        is OBJID_ALERT
  2491.  * App Alerts:
  2492.  * (Generated whenever)
  2493.  *      hwnd+idObject gets interface pointer to Alert
  2494.  */
  2495. #define EVENT_SYSTEM_ALERT              0x0002
  2496. /*
  2497.  * EVENT_SYSTEM_FOREGROUND
  2498.  * Sent when the foreground (active) window changes, even if it is changing
  2499.  * to another window in the same thread as the previous one.
  2500.  *      hwnd            is hwndNewForeground
  2501.  *      idObject        is OBJID_WINDOW
  2502.  *      idChild    is INDEXID_OBJECT
  2503.  */
  2504. #define EVENT_SYSTEM_FOREGROUND         0x0003
  2505. /*
  2506.  * Menu
  2507.  *      hwnd            is window (top level window or popup menu window)
  2508.  *      idObject        is ID of control (OBJID_MENU, OBJID_SYSMENU, OBJID_SELF for popup)
  2509.  *      idChild         is CHILDID_SELF
  2510.  *
  2511.  * EVENT_SYSTEM_MENUSTART
  2512.  * EVENT_SYSTEM_MENUEND
  2513.  * For MENUSTART, hwnd+idObject+idChild refers to the control with the menu bar,
  2514.  *  or the control bringing up the context menu.
  2515.  *
  2516.  * Sent when entering into and leaving from menu mode (system, app bar, and
  2517.  * track popups).
  2518.  */
  2519. #define EVENT_SYSTEM_MENUSTART          0x0004
  2520. #define EVENT_SYSTEM_MENUEND            0x0005
  2521. /*
  2522.  * EVENT_SYSTEM_MENUPOPUPSTART
  2523.  * EVENT_SYSTEM_MENUPOPUPEND
  2524.  * Sent when a menu popup comes up and just before it is taken down.  Note
  2525.  * that for a call to TrackPopupMenu(), a client will see EVENT_SYSTEM_MENUSTART
  2526.  * followed almost immediately by EVENT_SYSTEM_MENUPOPUPSTART for the popup
  2527.  * being shown.
  2528.  *
  2529.  * For MENUPOPUP, hwnd+idObject+idChild refers to the NEW popup coming up, not the
  2530.  * parent item which is hierarchical.  You can get the parent menu/popup by
  2531.  * asking for the accParent object.
  2532.  */
  2533. #define EVENT_SYSTEM_MENUPOPUPSTART     0x0006
  2534. #define EVENT_SYSTEM_MENUPOPUPEND       0x0007
  2535. /*
  2536.  * EVENT_SYSTEM_CAPTURESTART
  2537.  * EVENT_SYSTEM_CAPTUREEND
  2538.  * Sent when a window takes the capture and releases the capture.
  2539.  */
  2540. #define EVENT_SYSTEM_CAPTURESTART       0x0008
  2541. #define EVENT_SYSTEM_CAPTUREEND         0x0009
  2542. /*
  2543.  * Move Size
  2544.  * EVENT_SYSTEM_MOVESIZESTART
  2545.  * EVENT_SYSTEM_MOVESIZEEND
  2546.  * Sent when a window enters and leaves move-size dragging mode.
  2547.  */
  2548. #define EVENT_SYSTEM_MOVESIZESTART      0x000A
  2549. #define EVENT_SYSTEM_MOVESIZEEND        0x000B
  2550. /*
  2551.  * Context Help
  2552.  * EVENT_SYSTEM_CONTEXTHELPSTART
  2553.  * EVENT_SYSTEM_CONTEXTHELPEND
  2554.  * Sent when a window enters and leaves context sensitive help mode.
  2555.  */
  2556. #define EVENT_SYSTEM_CONTEXTHELPSTART   0x000C
  2557. #define EVENT_SYSTEM_CONTEXTHELPEND     0x000D
  2558. /*
  2559.  * Drag & Drop
  2560.  * EVENT_SYSTEM_DRAGDROPSTART
  2561.  * EVENT_SYSTEM_DRAGDROPEND
  2562.  * Send the START notification just before going into drag&drop loop.  Send
  2563.  * the END notification just after canceling out.
  2564.  * Note that it is up to apps and OLE to generate this, since the system
  2565.  * doesn't know.  Like EVENT_SYSTEM_SOUND, it will be a while before this
  2566.  * is prevalent.
  2567.  */
  2568. #define EVENT_SYSTEM_DRAGDROPSTART      0x000E
  2569. #define EVENT_SYSTEM_DRAGDROPEND        0x000F
  2570. /*
  2571.  * Dialog
  2572.  * Send the START notification right after the dialog is completely
  2573.  *  initialized and visible.  Send the END right before the dialog
  2574.  *  is hidden and goes away.
  2575.  * EVENT_SYSTEM_DIALOGSTART
  2576.  * EVENT_SYSTEM_DIALOGEND
  2577.  */
  2578. #define EVENT_SYSTEM_DIALOGSTART        0x0010
  2579. #define EVENT_SYSTEM_DIALOGEND          0x0011
  2580. /*
  2581.  * EVENT_SYSTEM_SCROLLING
  2582.  * EVENT_SYSTEM_SCROLLINGSTART
  2583.  * EVENT_SYSTEM_SCROLLINGEND
  2584.  * Sent when beginning and ending the tracking of a scrollbar in a window,
  2585.  * and also for scrollbar controls.
  2586.  */
  2587. #define EVENT_SYSTEM_SCROLLINGSTART     0x0012
  2588. #define EVENT_SYSTEM_SCROLLINGEND       0x0013
  2589. /*
  2590.  * Alt-Tab Window
  2591.  * Send the START notification right after the switch window is initialized
  2592.  * and visible.  Send the END right before it is hidden and goes away.
  2593.  * EVENT_SYSTEM_SWITCHSTART
  2594.  * EVENT_SYSTEM_SWITCHEND
  2595.  */
  2596. #define EVENT_SYSTEM_SWITCHSTART        0x0014
  2597. #define EVENT_SYSTEM_SWITCHEND          0x0015
  2598. /*
  2599.  * EVENT_SYSTEM_MINIMIZESTART
  2600.  * EVENT_SYSTEM_MINIMIZEEND
  2601.  * Sent when a window minimizes and just before it restores.
  2602.  */
  2603. #define EVENT_SYSTEM_MINIMIZESTART      0x0016
  2604. #define EVENT_SYSTEM_MINIMIZEEND        0x0017
  2605. #if(_WIN32_WINNT >= 0x0501)
  2606. #define EVENT_CONSOLE_CARET             0x4001
  2607. #define EVENT_CONSOLE_UPDATE_REGION     0x4002
  2608. #define EVENT_CONSOLE_UPDATE_SIMPLE     0x4003
  2609. #define EVENT_CONSOLE_UPDATE_SCROLL     0x4004
  2610. #define EVENT_CONSOLE_LAYOUT            0x4005
  2611. #define EVENT_CONSOLE_START_APPLICATION 0x4006
  2612. #define EVENT_CONSOLE_END_APPLICATION   0x4007
  2613. /*
  2614.  * Flags for EVENT_CONSOLE_START/END_APPLICATION.
  2615.  */
  2616. #define CONSOLE_APPLICATION_16BIT       0x0001
  2617. /*
  2618.  * Flags for EVENT_CONSOLE_CARET
  2619.  */
  2620. #define CONSOLE_CARET_SELECTION         0x0001
  2621. #define CONSOLE_CARET_VISIBLE           0x0002
  2622. #endif /* _WIN32_WINNT >= 0x0501 */
  2623. /*
  2624.  * Object events
  2625.  *
  2626.  * The system AND apps generate these.  The system generates these for
  2627.  * real windows.  Apps generate these for objects within their window which
  2628.  * act like a separate control, e.g. an item in a list view.
  2629.  *
  2630.  * When the system generate them, dwParam2 is always WMOBJID_SELF.  When
  2631.  * apps generate them, apps put the has-meaning-to-the-app-only ID value
  2632.  * in dwParam2.
  2633.  * For all events, if you want detailed accessibility information, callers
  2634.  * should
  2635.  *      * Call AccessibleObjectFromWindow() with the hwnd, idObject parameters
  2636.  *          of the event, and IID_IAccessible as the REFIID, to get back an
  2637.  *          IAccessible* to talk to
  2638.  *      * Initialize and fill in a VARIANT as VT_I4 with lVal the idChild
  2639.  *          parameter of the event.
  2640.  *      * If idChild isn't zero, call get_accChild() in the container to see
  2641.  *          if the child is an object in its own right.  If so, you will get
  2642.  *          back an IDispatch* object for the child.  You should release the
  2643.  *          parent, and call QueryInterface() on the child object to get its
  2644.  *          IAccessible*.  Then you talk directly to the child.  Otherwise,
  2645.  *          if get_accChild() returns you nothing, you should continue to
  2646.  *          use the child VARIANT.  You will ask the container for the properties
  2647.  *          of the child identified by the VARIANT.  In other words, the
  2648.  *          child in this case is accessible but not a full-blown object.
  2649.  *          Like a button on a titlebar which is 'small' and has no children.
  2650.  */
  2651. /*
  2652.  * For all EVENT_OBJECT events,
  2653.  *      hwnd is the dude to Send the WM_GETOBJECT message to (unless NULL,
  2654.  *          see above for system things)
  2655.  *      idObject is the ID of the object that can resolve any queries a
  2656.  *          client might have.  It's a way to deal with windowless controls,
  2657.  *          controls that are just drawn on the screen in some larger parent
  2658.  *          window (like SDM), or standard frame elements of a window.
  2659.  *      idChild is the piece inside of the object that is affected.  This
  2660.  *          allows clients to access things that are too small to have full
  2661.  *          blown objects in their own right.  Like the thumb of a scrollbar.
  2662.  *          The hwnd/idObject pair gets you to the container, the dude you
  2663.  *          probably want to talk to most of the time anyway.  The idChild
  2664.  *          can then be passed into the acc properties to get the name/value
  2665.  *          of it as needed.
  2666.  *
  2667.  * Example #1:
  2668.  *      System propagating a listbox selection change
  2669.  *      EVENT_OBJECT_SELECTION
  2670.  *          hwnd == listbox hwnd
  2671.  *          idObject == OBJID_WINDOW
  2672.  *          idChild == new selected item, or CHILDID_SELF if
  2673.  *              nothing now selected within container.
  2674.  *      Word '97 propagating a listbox selection change
  2675.  *          hwnd == SDM window
  2676.  *          idObject == SDM ID to get at listbox 'control'
  2677.  *          idChild == new selected item, or CHILDID_SELF if
  2678.  *              nothing
  2679.  *
  2680.  * Example #2:
  2681.  *      System propagating a menu item selection on the menu bar
  2682.  *      EVENT_OBJECT_SELECTION
  2683.  *          hwnd == top level window
  2684.  *          idObject == OBJID_MENU
  2685.  *          idChild == ID of child menu bar item selected
  2686.  *
  2687.  * Example #3:
  2688.  *      System propagating a dropdown coming off of said menu bar item
  2689.  *      EVENT_OBJECT_CREATE
  2690.  *          hwnd == popup item
  2691.  *          idObject == OBJID_WINDOW
  2692.  *          idChild == CHILDID_SELF
  2693.  *
  2694.  * Example #4:
  2695.  *
  2696.  * For EVENT_OBJECT_REORDER, the object referred to by hwnd/idObject is the
  2697.  * PARENT container in which the zorder is occurring.  This is because if
  2698.  * one child is zordering, all of them are changing their relative zorder.
  2699.  */
  2700. #define EVENT_OBJECT_CREATE                 0x8000  // hwnd + ID + idChild is created item
  2701. #define EVENT_OBJECT_DESTROY                0x8001  // hwnd + ID + idChild is destroyed item
  2702. #define EVENT_OBJECT_SHOW                   0x8002  // hwnd + ID + idChild is shown item
  2703. #define EVENT_OBJECT_HIDE                   0x8003  // hwnd + ID + idChild is hidden item
  2704. #define EVENT_OBJECT_REORDER                0x8004  // hwnd + ID + idChild is parent of zordering children
  2705. /*
  2706.  * NOTE:
  2707.  * Minimize the number of notifications!
  2708.  *
  2709.  * When you are hiding a parent object, obviously all child objects are no
  2710.  * longer visible on screen.  They still have the same "visible" status,
  2711.  * but are not truly visible.  Hence do not send HIDE notifications for the
  2712.  * children also.  One implies all.  The same goes for SHOW.
  2713.  */
  2714. #define EVENT_OBJECT_FOCUS                  0x8005  // hwnd + ID + idChild is focused item
  2715. #define EVENT_OBJECT_SELECTION              0x8006  // hwnd + ID + idChild is selected item (if only one), or idChild is OBJID_WINDOW if complex
  2716. #define EVENT_OBJECT_SELECTIONADD           0x8007  // hwnd + ID + idChild is item added
  2717. #define EVENT_OBJECT_SELECTIONREMOVE        0x8008  // hwnd + ID + idChild is item removed
  2718. #define EVENT_OBJECT_SELECTIONWITHIN        0x8009  // hwnd + ID + idChild is parent of changed selected items
  2719. /*
  2720.  * NOTES:
  2721.  * There is only one "focused" child item in a parent.  This is the place
  2722.  * keystrokes are going at a given moment.  Hence only send a notification
  2723.  * about where the NEW focus is going.  A NEW item getting the focus already
  2724.  * implies that the OLD item is losing it.
  2725.  *
  2726.  * SELECTION however can be multiple.  Hence the different SELECTION
  2727.  * notifications.  Here's when to use each:
  2728.  *
  2729.  * (1) Send a SELECTION notification in the simple single selection
  2730.  *     case (like the focus) when the item with the selection is
  2731.  *     merely moving to a different item within a container.  hwnd + ID
  2732.  *     is the container control, idChildItem is the new child with the
  2733.  *     selection.
  2734.  *
  2735.  * (2) Send a SELECTIONADD notification when a new item has simply been added
  2736.  *     to the selection within a container.  This is appropriate when the
  2737.  *     number of newly selected items is very small.  hwnd + ID is the
  2738.  *     container control, idChildItem is the new child added to the selection.
  2739.  *
  2740.  * (3) Send a SELECTIONREMOVE notification when a new item has simply been
  2741.  *     removed from the selection within a container.  This is appropriate
  2742.  *     when the number of newly selected items is very small, just like
  2743.  *     SELECTIONADD.  hwnd + ID is the container control, idChildItem is the
  2744.  *     new child removed from the selection.
  2745.  *
  2746.  * (4) Send a SELECTIONWITHIN notification when the selected items within a
  2747.  *     control have changed substantially.  Rather than propagate a large
  2748.  *     number of changes to reflect removal for some items, addition of
  2749.  *     others, just tell somebody who cares that a lot happened.  It will
  2750.  *     be faster an easier for somebody watching to just turn around and
  2751.  *     query the container control what the new bunch of selected items
  2752.  *     are.
  2753.  */
  2754. #define EVENT_OBJECT_STATECHANGE            0x800A  // hwnd + ID + idChild is item w/ state change
  2755. /*
  2756.  * Examples of when to send an EVENT_OBJECT_STATECHANGE include
  2757.  *      * It is being enabled/disabled (USER does for windows)
  2758.  *      * It is being pressed/released (USER does for buttons)
  2759.  *      * It is being checked/unchecked (USER does for radio/check buttons)
  2760.  */
  2761. #define EVENT_OBJECT_LOCATIONCHANGE         0x800B  // hwnd + ID + idChild is moved/sized item
  2762. /*
  2763.  * Note:
  2764.  * A LOCATIONCHANGE is not sent for every child object when the parent
  2765.  * changes shape/moves.  Send one notification for the topmost object
  2766.  * that is changing.  For example, if the user resizes a top level window,
  2767.  * USER will generate a LOCATIONCHANGE for it, but not for the menu bar,
  2768.  * title bar, scrollbars, etc.  that are also changing shape/moving.
  2769.  *
  2770.  * In other words, it only generates LOCATIONCHANGE notifications for
  2771.  * real windows that are moving/sizing.  It will not generate a LOCATIONCHANGE
  2772.  * for every non-floating child window when the parent moves (the children are
  2773.  * logically moving also on screen, but not relative to the parent).
  2774.  *
  2775.  * Now, if the app itself resizes child windows as a result of being
  2776.  * sized, USER will generate LOCATIONCHANGEs for those dudes also because
  2777.  * it doesn't know better.
  2778.  *
  2779.  * Note also that USER will generate LOCATIONCHANGE notifications for two
  2780.  * non-window sys objects:
  2781.  *      (1) System caret
  2782.  *      (2) Cursor
  2783.  */
  2784. #define EVENT_OBJECT_NAMECHANGE             0x800C  // hwnd + ID + idChild is item w/ name change
  2785. #define EVENT_OBJECT_DESCRIPTIONCHANGE      0x800D  // hwnd + ID + idChild is item w/ desc change
  2786. #define EVENT_OBJECT_VALUECHANGE            0x800E  // hwnd + ID + idChild is item w/ value change
  2787. #define EVENT_OBJECT_PARENTCHANGE           0x800F  // hwnd + ID + idChild is item w/ new parent
  2788. #define EVENT_OBJECT_HELPCHANGE             0x8010  // hwnd + ID + idChild is item w/ help change
  2789. #define EVENT_OBJECT_DEFACTIONCHANGE        0x8011  // hwnd + ID + idChild is item w/ def action change
  2790. #define EVENT_OBJECT_ACCELERATORCHANGE      0x8012  // hwnd + ID + idChild is item w/ keybd accel change
  2791. /*
  2792.  * Child IDs
  2793.  */
  2794. /*
  2795.  * System Sounds (idChild of system SOUND notification)
  2796.  */
  2797. #define SOUND_SYSTEM_STARTUP            1
  2798. #define SOUND_SYSTEM_SHUTDOWN           2
  2799. #define SOUND_SYSTEM_BEEP               3
  2800. #define SOUND_SYSTEM_ERROR              4
  2801. #define SOUND_SYSTEM_QUESTION           5
  2802. #define SOUND_SYSTEM_WARNING            6
  2803. #define SOUND_SYSTEM_INFORMATION        7
  2804. #define SOUND_SYSTEM_MAXIMIZE           8
  2805. #define SOUND_SYSTEM_MINIMIZE           9
  2806. #define SOUND_SYSTEM_RESTOREUP          10
  2807. #define SOUND_SYSTEM_RESTOREDOWN        11
  2808. #define SOUND_SYSTEM_APPSTART           12
  2809. #define SOUND_SYSTEM_FAULT              13
  2810. #define SOUND_SYSTEM_APPEND             14
  2811. #define SOUND_SYSTEM_MENUCOMMAND        15
  2812. #define SOUND_SYSTEM_MENUPOPUP          16
  2813. #define CSOUND_SYSTEM                   16
  2814. /*
  2815.  * System Alerts (indexChild of system ALERT notification)
  2816.  */
  2817. #define ALERT_SYSTEM_INFORMATIONAL      1       // MB_INFORMATION
  2818. #define ALERT_SYSTEM_WARNING            2       // MB_WARNING
  2819. #define ALERT_SYSTEM_ERROR              3       // MB_ERROR
  2820. #define ALERT_SYSTEM_QUERY              4       // MB_QUESTION
  2821. #define ALERT_SYSTEM_CRITICAL           5       // HardSysErrBox
  2822. #define CALERT_SYSTEM                   6
  2823. typedef struct tagGUITHREADINFO
  2824. {
  2825.     DWORD   cbSize;
  2826.     DWORD   flags;
  2827.     HWND    hwndActive;
  2828.     HWND    hwndFocus;
  2829.     HWND    hwndCapture;
  2830.     HWND    hwndMenuOwner;
  2831.     HWND    hwndMoveSize;
  2832.     HWND    hwndCaret;
  2833.     RECT    rcCaret;
  2834. } GUITHREADINFO, *PGUITHREADINFO, FAR * LPGUITHREADINFO;
  2835. #define GUI_CARETBLINKING   0x00000001
  2836. #define GUI_INMOVESIZE      0x00000002
  2837. #define GUI_INMENUMODE      0x00000004
  2838. #define GUI_SYSTEMMENUMODE  0x00000008
  2839. #define GUI_POPUPMENUMODE   0x00000010
  2840. #if(_WIN32_WINNT >= 0x0501)
  2841. #define GUI_16BITTASK       0x00000020
  2842. #endif /* _WIN32_WINNT >= 0x0501 */
  2843. WINUSERAPI
  2844. BOOL
  2845. WINAPI
  2846. GetGUIThreadInfo(
  2847.     IN DWORD idThread,
  2848.     OUT PGUITHREADINFO pgui);
  2849. WINUSERAPI
  2850. UINT
  2851. WINAPI
  2852. GetWindowModuleFileNameA(
  2853.     IN HWND     hwnd,
  2854.     OUT LPSTR pszFileName,
  2855.     IN UINT     cchFileNameMax);
  2856. WINUSERAPI
  2857. UINT
  2858. WINAPI
  2859. GetWindowModuleFileNameW(
  2860.     IN HWND     hwnd,
  2861.     OUT LPWSTR pszFileName,
  2862.     IN UINT     cchFileNameMax);
  2863. #ifdef UNICODE
  2864. #define GetWindowModuleFileName  GetWindowModuleFileNameW
  2865. #else
  2866. #define GetWindowModuleFileName  GetWindowModuleFileNameA
  2867. #endif // !UNICODE
  2868. #ifndef NO_STATE_FLAGS
  2869. #define STATE_SYSTEM_UNAVAILABLE        0x00000001  // Disabled
  2870. #define STATE_SYSTEM_SELECTED           0x00000002
  2871. #define STATE_SYSTEM_FOCUSED            0x00000004
  2872. #define STATE_SYSTEM_PRESSED            0x00000008
  2873. #define STATE_SYSTEM_CHECKED            0x00000010
  2874. #define STATE_SYSTEM_MIXED              0x00000020  // 3-state checkbox or toolbar button
  2875. #define STATE_SYSTEM_INDETERMINATE      STATE_SYSTEM_MIXED
  2876. #define STATE_SYSTEM_READONLY           0x00000040
  2877. #define STATE_SYSTEM_HOTTRACKED         0x00000080
  2878. #define STATE_SYSTEM_DEFAULT            0x00000100
  2879. #define STATE_SYSTEM_EXPANDED           0x00000200
  2880. #define STATE_SYSTEM_COLLAPSED          0x00000400
  2881. #define STATE_SYSTEM_BUSY               0x00000800
  2882. #define STATE_SYSTEM_FLOATING           0x00001000  // Children "owned" not "contained" by parent
  2883. #define STATE_SYSTEM_MARQUEED           0x00002000
  2884. #define STATE_SYSTEM_ANIMATED           0x00004000
  2885. #define STATE_SYSTEM_INVISIBLE          0x00008000
  2886. #define STATE_SYSTEM_OFFSCREEN          0x00010000
  2887. #define STATE_SYSTEM_SIZEABLE           0x00020000
  2888. #define STATE_SYSTEM_MOVEABLE           0x00040000
  2889. #define STATE_SYSTEM_SELFVOICING        0x00080000
  2890. #define STATE_SYSTEM_FOCUSABLE          0x00100000
  2891. #define STATE_SYSTEM_SELECTABLE         0x00200000
  2892. #define STATE_SYSTEM_LINKED             0x00400000
  2893. #define STATE_SYSTEM_TRAVERSED          0x00800000
  2894. #define STATE_SYSTEM_MULTISELECTABLE    0x01000000  // Supports multiple selection
  2895. #define STATE_SYSTEM_EXTSELECTABLE      0x02000000  // Supports extended selection
  2896. #define STATE_SYSTEM_ALERT_LOW          0x04000000  // This information is of low priority
  2897. #define STATE_SYSTEM_ALERT_MEDIUM       0x08000000  // This information is of medium priority
  2898. #define STATE_SYSTEM_ALERT_HIGH         0x10000000  // This information is of high priority
  2899. #define STATE_SYSTEM_PROTECTED          0x20000000  // access to this is restricted
  2900. #define STATE_SYSTEM_VALID              0x3FFFFFFF
  2901. #endif
  2902. #define CCHILDREN_TITLEBAR              5
  2903. #define CCHILDREN_SCROLLBAR             5
  2904. /*
  2905.  * Information about the global cursor.
  2906.  */
  2907. typedef struct tagCURSORINFO
  2908. {
  2909.     DWORD   cbSize;
  2910.     DWORD   flags;
  2911.     HCURSOR hCursor;
  2912.     POINT   ptScreenPos;
  2913. } CURSORINFO, *PCURSORINFO, *LPCURSORINFO;
  2914. #define CURSOR_SHOWING     0x00000001
  2915. WINUSERAPI
  2916. BOOL
  2917. WINAPI
  2918. GetCursorInfo(
  2919.     OUT PCURSORINFO pci
  2920. );
  2921. /*
  2922.  * Window information snapshot
  2923.  */
  2924. typedef struct tagWINDOWINFO
  2925. {
  2926.     DWORD cbSize;
  2927.     RECT  rcWindow;
  2928.     RECT  rcClient;
  2929.     DWORD dwStyle;
  2930.     DWORD dwExStyle;
  2931.     DWORD dwWindowStatus;
  2932.     UINT  cxWindowBorders;
  2933.     UINT  cyWindowBorders;
  2934.     ATOM  atomWindowType;
  2935.     WORD  wCreatorVersion;
  2936. } WINDOWINFO, *PWINDOWINFO, *LPWINDOWINFO;
  2937. #define WS_ACTIVECAPTION    0x0001
  2938. WINUSERAPI
  2939. BOOL
  2940. WINAPI
  2941. GetWindowInfo(
  2942.     IN HWND hwnd,
  2943.     OUT PWINDOWINFO pwi
  2944. );
  2945. /*
  2946.  * Titlebar information.
  2947.  */
  2948. typedef struct tagTITLEBARINFO
  2949. {
  2950.     DWORD cbSize;
  2951.     RECT  rcTitleBar;
  2952.     DWORD rgstate[CCHILDREN_TITLEBAR+1];
  2953. } TITLEBARINFO, *PTITLEBARINFO, *LPTITLEBARINFO;
  2954. WINUSERAPI
  2955. BOOL
  2956. WINAPI
  2957. GetTitleBarInfo(
  2958.     IN HWND hwnd,
  2959.     OUT PTITLEBARINFO pti
  2960. );
  2961. /*
  2962.  * Menubar information
  2963.  */
  2964. typedef struct tagMENUBARINFO
  2965. {
  2966.     DWORD cbSize;
  2967.     RECT  rcBar;          // rect of bar, popup, item
  2968.     HMENU hMenu;          // real menu handle of bar, popup
  2969.     HWND  hwndMenu;       // hwnd of item submenu if one
  2970.     BOOL  fBarFocused:1;  // bar, popup has the focus
  2971.     BOOL  fFocused:1;     // item has the focus
  2972. } MENUBARINFO, *PMENUBARINFO, *LPMENUBARINFO;
  2973. WINUSERAPI
  2974. BOOL
  2975. WINAPI
  2976. GetMenuBarInfo(
  2977.     IN HWND hwnd,
  2978.     IN LONG idObject,
  2979.     IN LONG idItem,
  2980.     OUT PMENUBARINFO pmbi
  2981. );
  2982. /*
  2983.  * Scrollbar information
  2984.  */
  2985. typedef struct tagSCROLLBARINFO
  2986. {
  2987.     DWORD cbSize;
  2988.     RECT  rcScrollBar;
  2989.     int   dxyLineButton;
  2990.     int   xyThumbTop;
  2991.     int   xyThumbBottom;
  2992.     int   reserved;
  2993.     DWORD rgstate[CCHILDREN_SCROLLBAR+1];
  2994. } SCROLLBARINFO, *PSCROLLBARINFO, *LPSCROLLBARINFO;
  2995. WINUSERAPI
  2996. BOOL
  2997. WINAPI
  2998. GetScrollBarInfo(
  2999.     IN HWND hwnd,
  3000.     IN LONG idObject,
  3001.     OUT PSCROLLBARINFO psbi
  3002. );
  3003. /*
  3004.  * Combobox information
  3005.  */
  3006. typedef struct tagCOMBOBOXINFO
  3007. {
  3008.     DWORD cbSize;
  3009.     RECT  rcItem;
  3010.     RECT  rcButton;
  3011.     DWORD stateButton;
  3012.     HWND  hwndCombo;
  3013.     HWND  hwndItem;
  3014.     HWND  hwndList;
  3015. } COMBOBOXINFO, *PCOMBOBOXINFO, *LPCOMBOBOXINFO;
  3016. WINUSERAPI
  3017. BOOL
  3018. WINAPI
  3019. GetComboBoxInfo(
  3020.     IN HWND hwndCombo,
  3021.     OUT PCOMBOBOXINFO pcbi
  3022. );
  3023. /*
  3024.  * The "real" ancestor window
  3025.  */
  3026. #define     GA_PARENT       1
  3027. #define     GA_ROOT         2
  3028. #define     GA_ROOTOWNER    3
  3029. WINUSERAPI
  3030. HWND
  3031. WINAPI
  3032. GetAncestor(
  3033.     IN HWND hwnd,
  3034.     IN UINT gaFlags
  3035. );
  3036. /*
  3037.  * This gets the REAL child window at the point.  If it is in the dead
  3038.  * space of a group box, it will try a sibling behind it.  But static
  3039.  * fields will get returned.  In other words, it is kind of a cross between
  3040.  * ChildWindowFromPointEx and WindowFromPoint.
  3041.  */
  3042. WINUSERAPI
  3043. HWND
  3044. WINAPI
  3045. RealChildWindowFromPoint(
  3046.     IN HWND hwndParent,
  3047.     IN POINT ptParentClientCoords
  3048. );
  3049. /*
  3050.  * This gets the name of the window TYPE, not class.  This allows us to
  3051.  * recognize ThunderButton32 et al.
  3052.  */
  3053. WINUSERAPI
  3054. UINT
  3055. WINAPI
  3056. RealGetWindowClassA(
  3057.     IN HWND  hwnd,
  3058.     OUT LPSTR pszType,
  3059.     IN UINT  cchType
  3060. );
  3061. /*
  3062.  * This gets the name of the window TYPE, not class.  This allows us to
  3063.  * recognize ThunderButton32 et al.
  3064.  */
  3065. WINUSERAPI
  3066. UINT
  3067. WINAPI
  3068. RealGetWindowClassW(
  3069.     IN HWND  hwnd,
  3070.     OUT LPWSTR pszType,
  3071.     IN UINT  cchType
  3072. );
  3073. #ifdef UNICODE
  3074. #define RealGetWindowClass  RealGetWindowClassW
  3075. #else
  3076. #define RealGetWindowClass  RealGetWindowClassA
  3077. #endif // !UNICODE
  3078. /*
  3079.  * Alt-Tab Switch window information.
  3080.  */
  3081. typedef struct tagALTTABINFO
  3082. {
  3083.     DWORD cbSize;
  3084.     int   cItems;
  3085.     int   cColumns;
  3086.     int   cRows;
  3087.     int   iColFocus;
  3088.     int   iRowFocus;
  3089.     int   cxItem;
  3090.     int   cyItem;
  3091.     POINT ptStart;
  3092. } ALTTABINFO, *PALTTABINFO, *LPALTTABINFO;
  3093. WINUSERAPI
  3094. BOOL
  3095. WINAPI
  3096. GetAltTabInfoA(
  3097.     IN HWND hwnd,
  3098.     IN int iItem,
  3099.     OUT PALTTABINFO pati,
  3100.     OUT LPSTR pszItemText,
  3101.     IN UINT cchItemText
  3102. );
  3103. WINUSERAPI
  3104. BOOL
  3105. WINAPI
  3106. GetAltTabInfoW(
  3107.     IN HWND hwnd,
  3108.     IN int iItem,
  3109.     OUT PALTTABINFO pati,
  3110.     OUT LPWSTR pszItemText,
  3111.     IN UINT cchItemText
  3112. );
  3113. #ifdef UNICODE
  3114. #define GetAltTabInfo  GetAltTabInfoW
  3115. #else
  3116. #define GetAltTabInfo  GetAltTabInfoA
  3117. #endif // !UNICODE
  3118. /*
  3119.  * Listbox information.
  3120.  * Returns the number of items per row.
  3121.  */
  3122. WINUSERAPI
  3123. DWORD
  3124. WINAPI
  3125. GetListBoxInfo(
  3126.     IN HWND hwnd
  3127. );
  3128. #endif /* NOWINABLE */
  3129. #endif /* WINVER >= 0x0500 */
  3130. #if(_WIN32_WINNT >= 0x0500)
  3131. WINUSERAPI
  3132. BOOL
  3133. WINAPI
  3134. LockWorkStation(
  3135.     VOID);
  3136. #endif /* _WIN32_WINNT >= 0x0500 */
  3137. #if(_WIN32_WINNT >= 0x0500)
  3138. WINUSERAPI
  3139. BOOL
  3140. WINAPI
  3141. UserHandleGrantAccess(
  3142.     HANDLE hUserHandle,
  3143.     HANDLE hJob,
  3144.     BOOL   bGrant);
  3145. #endif /* _WIN32_WINNT >= 0x0500 */
  3146. #if(_WIN32_WINNT >= 0x0501)
  3147. /*
  3148.  * Raw Input Messages.
  3149.  */
  3150. DECLARE_HANDLE(HRAWINPUT);
  3151. /*
  3152.  * WM_INPUT wParam
  3153.  */
  3154. /*
  3155.  * Use this macro to get the input code from wParam.
  3156.  */
  3157. #define GET_RAWINPUT_CODE_WPARAM(wParam)    ((wParam) & 0xff)
  3158. /*
  3159.  * The input is in the regular message flow,
  3160.  * the app is required to call DefWindowProc
  3161.  * so that the system can perform clean ups.
  3162.  */
  3163. #define RIM_INPUT       0
  3164. /*
  3165.  * The input is sink only. The app is expected
  3166.  * to behave nicely, honoring RIM_FOREGROUND etc.
  3167.  */
  3168. #define RIM_INPUTSINK   1
  3169. /*
  3170.  * Raw Input data header
  3171.  */
  3172. typedef struct tagRAWINPUTHEADER {
  3173.     DWORD dwType;
  3174.     DWORD dwSize;
  3175.     HANDLE hDevice;
  3176.     WPARAM wParam;
  3177. } RAWINPUTHEADER, *PRAWINPUTHEADER, *LPRAWINPUTHEADER;
  3178. /*
  3179.  * Type of the raw input
  3180.  */
  3181. #define RIM_TYPEMOUSE       0
  3182. #define RIM_TYPEKEYBOARD    1
  3183. #define RIM_TYPEHID         2
  3184. /*
  3185.  * Raw format of the mouse input
  3186.  */
  3187. typedef struct tagRAWMOUSE {
  3188.     /*
  3189.      * Indicator flags.
  3190.      */
  3191.     USHORT usFlags;
  3192.     /*
  3193.      * The transition state of the mouse buttons.
  3194.      */
  3195.     union {
  3196.         ULONG ulButtons;
  3197.         struct  {
  3198.             USHORT  usButtonFlags;
  3199.             USHORT  usButtonData;
  3200.         };
  3201.     };
  3202.     /*
  3203.      * The raw state of the mouse buttons.
  3204.      */
  3205.     ULONG ulRawButtons;
  3206.     /*
  3207.      * The signed relative or absolute motion in the X direction.
  3208.      */
  3209.     LONG lLastX;
  3210.     /*
  3211.      * The signed relative or absolute motion in the Y direction.
  3212.      */
  3213.     LONG lLastY;
  3214.     /*
  3215.      * Device-specific additional information for the event.
  3216.      */
  3217.     ULONG ulExtraInformation;
  3218. } RAWMOUSE, *PRAWMOUSE, *LPRAWMOUSE;
  3219. /*
  3220.  * Define the mouse button state indicators.
  3221.  */
  3222. #define RI_MOUSE_LEFT_BUTTON_DOWN   0x0001  // Left Button changed to down.
  3223. #define RI_MOUSE_LEFT_BUTTON_UP     0x0002  // Left Button changed to up.
  3224. #define RI_MOUSE_RIGHT_BUTTON_DOWN  0x0004  // Right Button changed to down.
  3225. #define RI_MOUSE_RIGHT_BUTTON_UP    0x0008  // Right Button changed to up.
  3226. #define RI_MOUSE_MIDDLE_BUTTON_DOWN 0x0010  // Middle Button changed to down.
  3227. #define RI_MOUSE_MIDDLE_BUTTON_UP   0x0020  // Middle Button changed to up.
  3228. #define RI_MOUSE_BUTTON_1_DOWN      RI_MOUSE_LEFT_BUTTON_DOWN
  3229. #define RI_MOUSE_BUTTON_1_UP        RI_MOUSE_LEFT_BUTTON_UP
  3230. #define RI_MOUSE_BUTTON_2_DOWN      RI_MOUSE_RIGHT_BUTTON_DOWN
  3231. #define RI_MOUSE_BUTTON_2_UP        RI_MOUSE_RIGHT_BUTTON_UP
  3232. #define RI_MOUSE_BUTTON_3_DOWN      RI_MOUSE_MIDDLE_BUTTON_DOWN
  3233. #define RI_MOUSE_BUTTON_3_UP        RI_MOUSE_MIDDLE_BUTTON_UP
  3234. #define RI_MOUSE_BUTTON_4_DOWN      0x0040
  3235. #define RI_MOUSE_BUTTON_4_UP        0x0080
  3236. #define RI_MOUSE_BUTTON_5_DOWN      0x0100
  3237. #define RI_MOUSE_BUTTON_5_UP        0x0200
  3238. /*
  3239.  * If usButtonFlags has RI_MOUSE_WHEEL, the wheel delta is stored in usButtonData.
  3240.  * Take it as a signed value.
  3241.  */
  3242. #define RI_MOUSE_WHEEL              0x0400
  3243. /*
  3244.  * Define the mouse indicator flags.
  3245.  */
  3246. #define MOUSE_MOVE_RELATIVE         0
  3247. #define MOUSE_MOVE_ABSOLUTE         1
  3248. #define MOUSE_VIRTUAL_DESKTOP    0x02  // the coordinates are mapped to the virtual desktop
  3249. #define MOUSE_ATTRIBUTES_CHANGED 0x04  // requery for mouse attributes
  3250. /*
  3251.  * Raw format of the keyboard input
  3252.  */
  3253. typedef struct tagRAWKEYBOARD {
  3254.     /*
  3255.      * The "make" scan code (key depression).
  3256.      */
  3257.     USHORT MakeCode;
  3258.     /*
  3259.      * The flags field indicates a "break" (key release) and other
  3260.      * miscellaneous scan code information defined in ntddkbd.h.
  3261.      */
  3262.     USHORT Flags;
  3263.     USHORT Reserved;
  3264.     /*
  3265.      * Windows message compatible information
  3266.      */
  3267.     USHORT VKey;
  3268.     UINT   Message;
  3269.     /*
  3270.      * Device-specific additional information for the event.
  3271.      */
  3272.     ULONG ExtraInformation;
  3273. } RAWKEYBOARD, *PRAWKEYBOARD, *LPRAWKEYBOARD;
  3274. /*
  3275.  * Define the keyboard overrun MakeCode.
  3276.  */
  3277. #define KEYBOARD_OVERRUN_MAKE_CODE    0xFF
  3278. /*
  3279.  * Define the keyboard input data Flags.
  3280.  */
  3281. #define RI_KEY_MAKE             0
  3282. #define RI_KEY_BREAK            1
  3283. #define RI_KEY_E0               2
  3284. #define RI_KEY_E1               4
  3285. #define RI_KEY_TERMSRV_SET_LED  8
  3286. #define RI_KEY_TERMSRV_SHADOW   0x10
  3287. /*
  3288.  * Raw format of the input from Human Input Devices
  3289.  */
  3290. typedef struct tagRAWHID {
  3291.     DWORD dwSizeHid;    // byte size of each report
  3292.     DWORD dwCount;      // number of input packed
  3293.     BYTE bRawData[1];
  3294. } RAWHID, *PRAWHID, *LPRAWHID;
  3295. /*
  3296.  * RAWINPUT data structure.
  3297.  */
  3298. typedef struct tagRAWINPUT {
  3299.     RAWINPUTHEADER header;
  3300.     union {
  3301.         RAWMOUSE    mouse;
  3302.         RAWKEYBOARD keyboard;
  3303.         RAWHID      hid;
  3304.     } data;
  3305. } RAWINPUT, *PRAWINPUT, *LPRAWINPUT;
  3306. #ifdef _WIN64
  3307. #define RAWINPUT_ALIGN(x)   (((x) + sizeof(QWORD) - 1) & ~(sizeof(QWORD) - 1))
  3308. #else   // _WIN64
  3309. #define RAWINPUT_ALIGN(x)   (((x) + sizeof(DWORD) - 1) & ~(sizeof(DWORD) - 1))
  3310. #endif  // _WIN64
  3311. #define NEXTRAWINPUTBLOCK(ptr) ((PRAWINPUT)RAWINPUT_ALIGN((ULONG_PTR)((PBYTE)(ptr) + (ptr)->header.dwSize)))
  3312. /*
  3313.  * Flags for GetRawInputData
  3314.  */
  3315. #define RID_INPUT               0x10000003
  3316. #define RID_HEADER              0x10000005
  3317. WINUSERAPI
  3318. UINT
  3319. WINAPI
  3320. GetRawInputData(
  3321.     IN HRAWINPUT    hRawInput,
  3322.     IN UINT         uiCommand,
  3323.     OUT LPVOID      pData,
  3324.     IN OUT PUINT    pcbSize,
  3325.     IN UINT         cbSizeHeader);
  3326. /*
  3327.  * Raw Input Device Information
  3328.  */
  3329. #define RIDI_PREPARSEDDATA      0x20000005
  3330. #define RIDI_DEVICENAME         0x20000007  // the return valus is the character length, not the byte size
  3331. #define RIDI_DEVICEINFO         0x2000000b
  3332. typedef struct tagRID_DEVICE_INFO_MOUSE {
  3333.     DWORD dwId;
  3334.     DWORD dwNumberOfButtons;
  3335.     DWORD dwSampleRate;
  3336. } RID_DEVICE_INFO_MOUSE, *PRID_DEVICE_INFO_MOUSE;
  3337. typedef struct tagRID_DEVICE_INFO_KEYBOARD {
  3338.     DWORD dwType;
  3339.     DWORD dwSubType;
  3340.     DWORD dwKeyboardMode;
  3341.     DWORD dwNumberOfFunctionKeys;
  3342.     DWORD dwNumberOfIndicators;
  3343.     DWORD dwNumberOfKeysTotal;
  3344. } RID_DEVICE_INFO_KEYBOARD, *PRID_DEVICE_INFO_KEYBOARD;
  3345. typedef struct tagRID_DEVICE_INFO_HID {
  3346.     DWORD dwVendorId;
  3347.     DWORD dwProductId;
  3348.     DWORD dwVersionNumber;
  3349.     /*
  3350.      * Top level collection UsagePage and Usage
  3351.      */
  3352.     USHORT usUsagePage;
  3353.     USHORT usUsage;
  3354. } RID_DEVICE_INFO_HID, *PRID_DEVICE_INFO_HID;
  3355. typedef struct tagRID_DEVICE_INFO {
  3356.     DWORD cbSize;
  3357.     DWORD dwType;
  3358.     union {
  3359.         RID_DEVICE_INFO_MOUSE mouse;
  3360.         RID_DEVICE_INFO_KEYBOARD keyboard;
  3361.         RID_DEVICE_INFO_HID hid;
  3362.     };
  3363. } RID_DEVICE_INFO, *PRID_DEVICE_INFO, *LPRID_DEVICE_INFO;
  3364. WINUSERAPI
  3365. UINT
  3366. WINAPI
  3367. GetRawInputDeviceInfoA(
  3368.     IN HANDLE hDevice,
  3369.     IN UINT uiCommand,
  3370.     OUT LPVOID pData,
  3371.     IN OUT PUINT pcbSize);
  3372. WINUSERAPI
  3373. UINT
  3374. WINAPI
  3375. GetRawInputDeviceInfoW(
  3376.     IN HANDLE hDevice,
  3377.     IN UINT uiCommand,
  3378.     OUT LPVOID pData,
  3379.     IN OUT PUINT pcbSize);
  3380. #ifdef UNICODE
  3381. #define GetRawInputDeviceInfo  GetRawInputDeviceInfoW
  3382. #else
  3383. #define GetRawInputDeviceInfo  GetRawInputDeviceInfoA
  3384. #endif // !UNICODE
  3385. /*
  3386.  * Raw Input Bulk Read: GetRawInputBuffer
  3387.  */
  3388. WINUSERAPI
  3389. UINT
  3390. WINAPI
  3391. GetRawInputBuffer(
  3392.     OUT PRAWINPUT   pData,
  3393.     IN OUT PUINT    pcbSize,
  3394.     IN UINT         cbSizeHeader);
  3395. /*
  3396.  * Raw Input request APIs
  3397.  */
  3398. typedef struct tagRAWINPUTDEVICE {
  3399.     USHORT usUsagePage; // Toplevel collection UsagePage
  3400.     USHORT usUsage;     // Toplevel collection Usage
  3401.     DWORD dwFlags;
  3402.     HWND hwndTarget;    // Target hwnd. NULL = follows keyboard focus
  3403. } RAWINPUTDEVICE, *PRAWINPUTDEVICE, *LPRAWINPUTDEVICE;
  3404. typedef CONST RAWINPUTDEVICE* PCRAWINPUTDEVICE;
  3405. #define RIDEV_REMOVE            0x00000001
  3406. #define RIDEV_EXCLUDE           0x00000010
  3407. #define RIDEV_PAGEONLY          0x00000020
  3408. #define RIDEV_NOLEGACY          0x00000030
  3409. #define RIDEV_CAPTUREMOUSE      0x00000200  // effective when mouse nolegacy is specified, otherwise it would be an error
  3410. #define RIDEV_NOHOTKEYS         0x00000200  // effective for keyboard.
  3411. #define RIDEV_EXMODEMASK        0x000000F0
  3412. #define RIDEV_EXMODE(mode)  ((mode) & RIDEV_EXMODEMASK)
  3413. WINUSERAPI
  3414. BOOL
  3415. WINAPI
  3416. RegisterRawInputDevices(
  3417.     IN PCRAWINPUTDEVICE pRawInputDevices,
  3418.     IN UINT uiNumDevices,
  3419.     IN UINT cbSize);
  3420. WINUSERAPI
  3421. UINT
  3422. WINAPI
  3423. GetRegisteredRawInputDevices(
  3424.     OUT PRAWINPUTDEVICE pRawInputDevices,
  3425.     IN OUT PUINT puiNumDevices,
  3426.     IN UINT cbSize);
  3427. typedef struct tagRAWINPUTDEVICELIST {
  3428.     HANDLE hDevice;
  3429.     DWORD dwType;
  3430. } RAWINPUTDEVICELIST, *PRAWINPUTDEVICELIST;
  3431. WINUSERAPI
  3432. UINT
  3433. WINAPI
  3434. GetRawInputDeviceList(
  3435.     OUT PRAWINPUTDEVICELIST pRawInputDeviceList,
  3436.     IN OUT PUINT puiNumDevices,
  3437.     IN UINT cbSize);
  3438. WINUSERAPI
  3439. LRESULT
  3440. WINAPI
  3441. DefRawInputProc(
  3442.     IN PRAWINPUT* paRawInput,
  3443.     IN INT nInput,
  3444.     IN UINT cbSizeHeader);
  3445. #endif /* _WIN32_WINNT >= 0x0501 */
  3446. #if !defined(RC_INVOKED) /* RC complains about long symbols in #ifs */
  3447. #if ISOLATION_AWARE_ENABLED
  3448. #include "winuser.inl"
  3449. #endif /* ISOLATION_AWARE_ENABLED */
  3450. #endif /* RC */
  3451. #ifdef __cplusplus
  3452. }
  3453. #endif  /* __cplusplus */
  3454. #endif /* !_WINUSER_ */