1 /**
2 * Windows API header module
3 *
4 * Translated from MinGW Windows headers
5 *
6 * Authors: Stewart Gordon
7 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
8 * Source: $(DRUNTIMESRC src/core/sys/windows/_ddeml.d)
9 */
10 module core.sys.windows.ddeml;
version(Windows)11 version (Windows):
12 @system:
13
14 version (ANSI) {} else version = Unicode;
15 pragma(lib, "user32");
16
17 import core.sys.windows.basetsd, core.sys.windows.windef, core.sys.windows.winnt;
18
19 enum : int {
20 CP_WINANSI = 1004,
21 CP_WINUNICODE = 1200
22 }
23
24 enum : UINT {
25 XTYPF_NOBLOCK = 2,
26 XTYPF_NODATA = 4,
27 XTYPF_ACKREQ = 8
28 }
29
30 enum : UINT {
31 XCLASS_MASK = 0xFC00,
32 XCLASS_BOOL = 0x1000,
33 XCLASS_DATA = 0x2000,
34 XCLASS_FLAGS = 0x4000,
35 XCLASS_NOTIFICATION = 0x8000
36 }
37
38 enum : UINT {
39 XST_NULL,
40 XST_INCOMPLETE,
41 XST_CONNECTED,
42 XST_INIT1,
43 XST_INIT2,
44 XST_REQSENT,
45 XST_DATARCVD,
46 XST_POKESENT,
47 XST_POKEACKRCVD,
48 XST_EXECSENT,
49 XST_EXECACKRCVD,
50 XST_ADVSENT,
51 XST_UNADVSENT,
52 XST_ADVACKRCVD,
53 XST_UNADVACKRCVD,
54 XST_ADVDATASENT,
55 XST_ADVDATAACKRCVD // = 16
56 }
57
58 enum : UINT {
59 XTYP_ERROR = XCLASS_NOTIFICATION | XTYPF_NOBLOCK,
60 XTYP_ADVDATA = 0x0010 | XCLASS_FLAGS,
61 XTYP_ADVREQ = 0x0020 | XCLASS_DATA | XTYPF_NOBLOCK,
62 XTYP_ADVSTART = 0x0030 | XCLASS_BOOL,
63 XTYP_ADVSTOP = 0x0040 | XCLASS_NOTIFICATION,
64 XTYP_EXECUTE = 0x0050 | XCLASS_FLAGS,
65 XTYP_CONNECT = 0x0060 | XCLASS_BOOL | XTYPF_NOBLOCK,
66 XTYP_CONNECT_CONFIRM = 0x0070 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK,
67 XTYP_XACT_COMPLETE = 0x0080 | XCLASS_NOTIFICATION,
68 XTYP_POKE = 0x0090 | XCLASS_FLAGS,
69 XTYP_REGISTER = 0x00A0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK,
70 XTYP_REQUEST = 0x00B0 | XCLASS_DATA,
71 XTYP_DISCONNECT = 0x00C0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK,
72 XTYP_UNREGISTER = 0x00D0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK,
73 XTYP_WILDCONNECT = 0x00E0 | XCLASS_DATA | XTYPF_NOBLOCK,
74 XTYP_MONITOR = 0X00F0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK,
75 XTYP_MASK = 0x00F0,
76 XTYP_SHIFT = 4
77 }
78
79 /+
80 #define TIMEOUT_ASYNC 0xFFFFFFFF
81 #define QID_SYNC 0xFFFFFFFF
82 +/
83
84 enum : UINT {
85 ST_CONNECTED = 1,
86 ST_ADVISE = 2,
87 ST_ISLOCAL = 4,
88 ST_BLOCKED = 8,
89 ST_CLIENT = 16,
90 ST_TERMINATED = 32,
91 ST_INLIST = 64,
92 ST_BLOCKNEXT = 128,
93 ST_ISSELF = 256
94 }
95
96 /+
97 #define CADV_LATEACK 0xFFFF
98 +/
99
100 enum : UINT {
101 DMLERR_NO_ERROR = 0,
102 DMLERR_FIRST = 0x4000,
103 DMLERR_ADVACKTIMEOUT = DMLERR_FIRST,
104 DMLERR_BUSY,
105 DMLERR_DATAACKTIMEOUT,
106 DMLERR_DLL_NOT_INITIALIZED,
107 DMLERR_DLL_USAGE,
108 DMLERR_EXECACKTIMEOUT,
109 DMLERR_INVALIDPARAMETER,
110 DMLERR_LOW_MEMORY,
111 DMLERR_MEMORY_ERROR,
112 DMLERR_NOTPROCESSED,
113 DMLERR_NO_CONV_ESTABLISHED,
114 DMLERR_POKEACKTIMEOUT,
115 DMLERR_POSTMSG_FAILED,
116 DMLERR_REENTRANCY,
117 DMLERR_SERVER_DIED,
118 DMLERR_SYS_ERROR,
119 DMLERR_UNADVACKTIMEOUT,
120 DMLERR_UNFOUND_QUEUE_ID, // = 0x4011
121 DMLERR_LAST = DMLERR_UNFOUND_QUEUE_ID
122 }
123
124 /+
125 #define DDE_FACK 0x8000
126 #define DDE_FBUSY 0x4000
127 #define DDE_FDEFERUPD 0x4000
128 #define DDE_FACKREQ 0x8000
129 #define DDE_FRELEASE 0x2000
130 #define DDE_FREQUESTED 0x1000
131 #define DDE_FAPPSTATUS 0x00ff
132 #define DDE_FNOTPROCESSED 0
133 #define DDE_FACKRESERVED (~(DDE_FACK|DDE_FBUSY|DDE_FAPPSTATUS))
134 #define DDE_FADVRESERVED (~(DDE_FACKREQ|DDE_FDEFERUPD))
135 #define DDE_FDATRESERVED (~(DDE_FACKREQ|DDE_FRELEASE|DDE_FREQUESTED))
136 #define DDE_FPOKRESERVED (~DDE_FRELEASE)
137 #define MSGF_DDEMGR 0x8001
138 #define CBR_BLOCK ((HDDEDATA)0xffffffff)
139 +/
140
141 enum DWORD
142 APPCLASS_STANDARD = 0,
143 APPCLASS_MONITOR = 0x00000001,
144 APPCLASS_MASK = 0x0000000F,
145 APPCMD_CLIENTONLY = 0x00000010,
146 APPCMD_FILTERINITS = 0x00000020,
147 APPCMD_MASK = 0x00000FF0,
148 CBF_FAIL_SELFCONNECTIONS = 0x00001000,
149 CBF_FAIL_CONNECTIONS = 0x00002000,
150 CBF_FAIL_ADVISES = 0x00004000,
151 CBF_FAIL_EXECUTES = 0x00008000,
152 CBF_FAIL_POKES = 0x00010000,
153 CBF_FAIL_REQUESTS = 0x00020000,
154 CBF_FAIL_ALLSVRXACTIONS = 0x0003f000,
155 CBF_SKIP_CONNECT_CONFIRMS = 0x00040000,
156 CBF_SKIP_REGISTRATIONS = 0x00080000,
157 CBF_SKIP_UNREGISTRATIONS = 0x00100000,
158 CBF_SKIP_DISCONNECTS = 0x00200000,
159 CBF_SKIP_ALLNOTIFICATIONS = 0x003c0000,
160 MF_HSZ_INFO = 0x01000000,
161 MF_SENDMSGS = 0x02000000,
162 MF_POSTMSGS = 0x04000000,
163 MF_CALLBACKS = 0x08000000,
164 MF_ERRORS = 0x10000000,
165 MF_LINKS = 0x20000000,
166 MF_CONV = 0x40000000,
167 MF_MASK = 0xFF000000;
168
169 enum : UINT {
170 EC_ENABLEALL = 0,
171 EC_ENABLEONE = ST_BLOCKNEXT,
172 EC_DISABLE = ST_BLOCKED,
173 EC_QUERYWAITING = 2
174 }
175
176 enum : UINT {
177 DNS_REGISTER = 1,
178 DNS_UNREGISTER = 2,
179 DNS_FILTERON = 4,
180 DNS_FILTEROFF = 8
181 }
182
183 /+
184 #define HDATA_APPOWNED 1
185 #define MAX_MONITORS 4
186 +/
187
188 enum : int {
189 MH_CREATE = 1,
190 MH_KEEP = 2,
191 MH_DELETE = 3,
192 MH_CLEANUP = 4
193 }
194
195 mixin DECLARE_HANDLE!("HCONVLIST");
196 mixin DECLARE_HANDLE!("HCONV");
197 mixin DECLARE_HANDLE!("HSZ");
198 mixin DECLARE_HANDLE!("HDDEDATA");
199
200 extern (Windows) alias HDDEDATA
201 function(UINT, UINT, HCONV, HSZ, HSZ, HDDEDATA, ULONG_PTR, ULONG_PTR) PFNCALLBACK;
202
203 struct HSZPAIR {
204 HSZ hszSvc;
205 HSZ hszTopic;
206 }
207 alias HSZPAIR* PHSZPAIR;
208
209 struct CONVCONTEXT {
210 UINT cb = CONVCONTEXT.sizeof;
211 UINT wFlags;
212 UINT wCountryID;
213 int iCodePage;
214 DWORD dwLangID;
215 DWORD dwSecurity;
216 SECURITY_QUALITY_OF_SERVICE qos;
217 }
218 alias CONVCONTEXT* PCONVCONTEXT;
219
220 struct CONVINFO {
221 DWORD cb = CONVINFO.sizeof;
222 DWORD_PTR hUser;
223 HCONV hConvPartner;
224 HSZ hszSvcPartner;
225 HSZ hszServiceReq;
226 HSZ hszTopic;
227 HSZ hszItem;
228 UINT wFmt;
229 UINT wType;
230 UINT wStatus;
231 UINT wConvst;
232 UINT wLastError;
233 HCONVLIST hConvList;
234 CONVCONTEXT ConvCtxt;
235 HWND hwnd;
236 HWND hwndPartner;
237 }
238 alias CONVINFO* PCONVINFO;
239
240 struct DDEML_MSG_HOOK_DATA {
241 UINT_PTR uiLo;
242 UINT_PTR uiHi;
243 DWORD cbData;
244 DWORD[8] Data;
245 }
246
247 struct MONHSZSTRUCT {
248 UINT cb = MONHSZSTRUCT.sizeof;
249 int fsAction;
250 DWORD dwTime;
251 HSZ hsz;
252 HANDLE hTask;
253 TCHAR[1] _str = 0;
254
255 TCHAR* str() return { return _str.ptr; }
256 }
257 alias MONHSZSTRUCT* PMONHSZSTRUCT;
258
259 struct MONLINKSTRUCT {
260 UINT cb = MONLINKSTRUCT.sizeof;
261 DWORD dwTime;
262 HANDLE hTask;
263 BOOL fEstablished;
264 BOOL fNoData;
265 HSZ hszSvc;
266 HSZ hszTopic;
267 HSZ hszItem;
268 UINT wFmt;
269 BOOL fServer;
270 HCONV hConvServer;
271 HCONV hConvClient;
272 }
273 alias MONLINKSTRUCT* PMONLINKSTRUCT;
274
275 struct MONCONVSTRUCT {
276 UINT cb = MONCONVSTRUCT.sizeof;
277 BOOL fConnect;
278 DWORD dwTime;
279 HANDLE hTask;
280 HSZ hszSvc;
281 HSZ hszTopic;
282 HCONV hConvClient;
283 HCONV hConvServer;
284 }
285 alias MONCONVSTRUCT* PMONCONVSTRUCT;
286
287 struct MONCBSTRUCT {
288 UINT cb = MONCBSTRUCT.sizeof;
289 DWORD dwTime;
290 HANDLE hTask;
291 DWORD dwRet;
292 UINT wType;
293 UINT wFmt;
294 HCONV hConv;
295 HSZ hsz1;
296 HSZ hsz2;
297 HDDEDATA hData;
298 ULONG_PTR dwData1;
299 ULONG_PTR dwData2;
300 CONVCONTEXT cc;
301 DWORD cbData;
302 DWORD[8] Data;
303 }
304 alias MONCBSTRUCT* PMONCBSTRUCT;
305
306 struct MONERRSTRUCT {
307 UINT cb = MONERRSTRUCT.sizeof;
308 UINT wLastError;
309 DWORD dwTime;
310 HANDLE hTask;
311 }
312 alias MONERRSTRUCT* PMONERRSTRUCT;
313
314 struct MONMSGSTRUCT {
315 UINT cb = MONMSGSTRUCT.sizeof;
316 HWND hwndTo;
317 DWORD dwTime;
318 HANDLE hTask;
319 UINT wMsg;
320 WPARAM wParam;
321 LPARAM lParam;
322 DDEML_MSG_HOOK_DATA dmhd;
323 }
324 alias MONMSGSTRUCT* PMONMSGSTRUCT;
325
326 extern (Windows) {
327 BOOL DdeAbandonTransaction(DWORD, HCONV, DWORD);
328 PBYTE DdeAccessData(HDDEDATA, PDWORD);
329 HDDEDATA DdeAddData(HDDEDATA, PBYTE, DWORD, DWORD);
330 HDDEDATA DdeClientTransaction(PBYTE, DWORD, HCONV, HSZ, UINT, UINT,
331 DWORD, PDWORD);
332 int DdeCmpStringHandles(HSZ, HSZ);
333 HCONV DdeConnect(DWORD, HSZ, HSZ, PCONVCONTEXT);
334 HCONVLIST DdeConnectList(DWORD, HSZ, HSZ, HCONVLIST, PCONVCONTEXT);
335 HDDEDATA DdeCreateDataHandle(DWORD, PBYTE, DWORD, DWORD, HSZ, UINT,
336 UINT);
337 HSZ DdeCreateStringHandleA(DWORD, LPSTR, int);
338 HSZ DdeCreateStringHandleW(DWORD, LPWSTR, int);
339 BOOL DdeDisconnect(HCONV);
340 BOOL DdeDisconnectList(HCONVLIST);
341 BOOL DdeEnableCallback(DWORD, HCONV, UINT);
342 BOOL DdeFreeDataHandle(HDDEDATA);
343 BOOL DdeFreeStringHandle(DWORD, HSZ);
344 DWORD DdeGetData(HDDEDATA, PBYTE, DWORD, DWORD);
345 UINT DdeGetLastError(DWORD);
346 BOOL DdeImpersonateClient(HCONV);
347 UINT DdeInitializeA(PDWORD, PFNCALLBACK, DWORD, DWORD);
348 UINT DdeInitializeW(PDWORD, PFNCALLBACK, DWORD, DWORD);
349 BOOL DdeKeepStringHandle(DWORD, HSZ);
350 HDDEDATA DdeNameService(DWORD, HSZ, HSZ, UINT);
351 BOOL DdePostAdvise(DWORD, HSZ, HSZ);
352 UINT DdeQueryConvInfo(HCONV, DWORD, PCONVINFO);
353 HCONV DdeQueryNextServer(HCONVLIST, HCONV);
354 DWORD DdeQueryStringA(DWORD, HSZ, LPSTR, DWORD, int);
355 DWORD DdeQueryStringW(DWORD, HSZ, LPWSTR, DWORD, int);
356 HCONV DdeReconnect(HCONV);
357 BOOL DdeSetUserHandle(HCONV, DWORD, DWORD_PTR);
358 BOOL DdeUnaccessData(HDDEDATA);
359 BOOL DdeUninitialize(DWORD);
360 }
361
362 const TCHAR[]
363 SZDDESYS_TOPIC = "System",
364 SZDDESYS_ITEM_TOPICS = "Topics",
365 SZDDESYS_ITEM_SYSITEMS = "SysItems",
366 SZDDESYS_ITEM_RTNMSG = "ReturnMessage",
367 SZDDESYS_ITEM_STATUS = "Status",
368 SZDDESYS_ITEM_FORMATS = "Formats",
369 SZDDESYS_ITEM_HELP = "Help",
370 SZDDE_ITEM_ITEMLIST = "TopicItemList";
371
372 version (Unicode) {
373 alias DdeCreateStringHandleW DdeCreateStringHandle;
374 alias DdeInitializeW DdeInitialize;
375 alias DdeQueryStringW DdeQueryString;
376 } else {
377 alias DdeCreateStringHandleA DdeCreateStringHandle;
378 alias DdeInitializeA DdeInitialize;
379 alias DdeQueryStringA DdeQueryString;
380 }
381