summaryrefslogtreecommitdiff
path: root/libphobos/libdruntime/core/sys/windows/w32api.d
blob: bf841953805d5fd5e533832386d7415da41a7d21 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/**
 * Windows API header module
 *
 * Translated from MinGW API for MS-Windows 4.0
 *
 * Authors: Stewart Gordon
 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
 * Source: $(DRUNTIMESRC core/sys/windows/_w32api.d)
 */
module core.sys.windows.w32api;
version (Windows):

import core.sys.windows.sdkddkver;

version (ANSI) {} else version = Unicode;

enum __W32API_VERSION = 3.17;
enum __W32API_MAJOR_VERSION = 3;
enum __W32API_MINOR_VERSION = 17;

enum Windows95 = 0x0400;
enum Windows98 = 0x0410;
enum WindowsME = 0x0500;

enum WindowsNT4   = 0x0400;
enum Windows2000  = 0x0500;
enum WindowsXP    = 0x0501;
enum Windows2003  = 0x0502;
enum WindowsVista = 0x0600;
enum Windows7     = 0x0601;
enum Windows8     = 0x0602;

enum IE3   = 0x0300;
enum IE301 = 0x0300;
enum IE302 = 0x0300;
enum IE4   = 0x0400;
enum IE401 = 0x0401;
enum IE5   = 0x0500;
enum IE5a  = 0x0500;
enum IE5b  = 0x0500;
enum IE501 = 0x0501;
enum IE55  = 0x0501;
enum IE56  = 0x0560;
enum IE6   = 0x0600;
enum IE601 = 0x0601;
enum IE602 = 0x0603;
enum IE7   = 0x0700;
enum IE8   = 0x0800;
enum IE9   = 0x0900;
enum IE10  = 0x0A00;

/*  These version identifiers are used to specify the minimum version of Windows that an
 *  application will support.
 *
 *  Previously the minimum Windows 9x and Windows NT versions could be specified.  However, since
 *  Windows 9x is no longer supported, either by Microsoft or by DMD, this distinction has been
 *  removed in order to simplify the bindings.
 */
version (Windows11) {
    enum uint _WIN32_WINNT = _WIN32_WINNT_WIN10;
} else version (Windows10) {
    enum uint _WIN32_WINNT = _WIN32_WINNT_WIN10;
} else version (Windows8_1) {    // also Windows2012R2
    enum uint _WIN32_WINNT = _WIN32_WINNT_WINBLUE;
} else version (Windows8) {      // also Windows2012
    enum uint _WIN32_WINNT = _WIN32_WINNT_WIN8;
} else version (Windows7) {      // also Windows2008R2
    enum uint _WIN32_WINNT = _WIN32_WINNT_WIN7;
} else version (WindowsVista) {  // also Windows2008
    enum uint _WIN32_WINNT = _WIN32_WINNT_VISTA;
} else version (Windows2003) {   // also WindowsHomeServer, WindowsXP64
    enum uint _WIN32_WINNT = _WIN32_WINNT_WS03;
} else version (WindowsXP) {
    enum uint _WIN32_WINNT = _WIN32_WINNT_WINXP;
} else version (Windows2000) {
    // Current DMD doesn't support any version of Windows older than XP,
    // but third-party compilers could use this
    enum uint _WIN32_WINNT = _WIN32_WINNT_WIN2K;
} else {
    enum uint _WIN32_WINNT = _WIN32_WINNT_WIN7;
}

version (IE11) {
    enum uint _WIN32_IE = _WIN32_IE_IE110;
} else version (IE10) {
    enum uint _WIN32_IE = _WIN32_IE_IE100;
} else version (IE9) {
    enum uint _WIN32_IE = _WIN32_IE_IE90;
} else version (IE8) {
    enum uint _WIN32_IE = _WIN32_IE_IE80;
} else version (IE7) {
    enum uint _WIN32_IE = _WIN32_IE_IE70;
} else version (IE602) {
    enum uint _WIN32_IE = _WIN32_IE_IE60SP2;
} else version (IE601) {
    enum uint _WIN32_IE = _WIN32_IE_IE60SP1;
} else version (IE6) {
    enum uint _WIN32_IE = _WIN32_IE_IE60;
} else version (IE56) {
    enum uint _WIN32_IE = _WIN32_IE_IE60;
} else version (IE55) {
    enum uint _WIN32_IE = _WIN32_IE_IE55;
} else version (IE501) {
    enum uint _WIN32_IE = _WIN32_IE_IE501;
} else version (IE5) {
    enum uint _WIN32_IE = _WIN32_IE_IE50;
} else version (IE401) {
    enum uint _WIN32_IE = _WIN32_IE_IE401;
} else version (IE4) {
    enum uint _WIN32_IE = _WIN32_IE_IE40;
} else version (IE3) {
    enum uint _WIN32_IE = _WIN32_IE_IE30;
} else static if (_WIN32_WINNT >= _WIN32_WINNT_WIN2K) {
    enum uint _WIN32_IE = _WIN32_IE_IE60;
} else static if (_WIN32_WINNT >= Windows98) { //NOTE: _WIN32_WINNT will never be set this low
    enum uint _WIN32_IE = _WIN32_IE_IE40;
} else {
    enum uint _WIN32_IE = 0;
}

debug (WindowsUnitTest) {
    unittest {
        printf("Windows NT version: %03x\n", _WIN32_WINNT);
        printf("IE version:         %03x\n", _WIN32_IE);
    }
}

version (Unicode) {
    enum bool _WIN32_UNICODE = true;
    package template DECLARE_AW(string name) {
        mixin("alias " ~ name ~ "W " ~ name ~ ";");
    }
} else {
    enum bool _WIN32_UNICODE = false;
    package template DECLARE_AW(string name) {
        mixin("alias " ~ name ~ "A " ~ name ~ ";");
    }
}