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