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 }