root/trunk/win32/ddeml.d

Revision 155, 10.1 kB (checked in by Don Clugston, 2 years ago)

Committed on behalf of Stewart.

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