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/_dde.d) 9 */ 10 module core.sys.windows.dde; 11 version (Windows): 12 @system: 13 pragma(lib, "user32"); 14 15 import core.sys.windows.windef; 16 17 enum : uint { 18 WM_DDE_FIRST = 0x03E0, 19 WM_DDE_INITIATE = WM_DDE_FIRST, 20 WM_DDE_TERMINATE, 21 WM_DDE_ADVISE, 22 WM_DDE_UNADVISE, 23 WM_DDE_ACK, 24 WM_DDE_DATA, 25 WM_DDE_REQUEST, 26 WM_DDE_POKE, 27 WM_DDE_EXECUTE, 28 WM_DDE_LAST = WM_DDE_EXECUTE 29 } 30 31 struct DDEACK { 32 ubyte bAppReturnCode; 33 ubyte _bf; 34 reserved()35 @property ubyte reserved() { return cast(ubyte) (_bf & 0x3F); } fBusy()36 @property bool fBusy() { return cast(bool) (_bf & 0x40); } fAck()37 @property bool fAck() { return cast(bool) (_bf & 0x80); } 38 reserved(ubyte r)39 @property ubyte reserved(ubyte r) { 40 _bf = cast(ubyte) ((_bf & ~0x3F) | (r & 0x3F)); 41 return cast(ubyte)(r & 0x3F); 42 } 43 fBusy(bool f)44 @property bool fBusy(bool f) { _bf = cast(ubyte) ((_bf & ~0x40) | (f << 6)); return f; } fAck(bool f)45 @property bool fAck(bool f) { _bf = cast(ubyte) ((_bf & ~0x80) | (f << 7)); return f; } 46 } 47 48 struct DDEADVISE { 49 ushort _bf; 50 short cfFormat; 51 reservedDDEADVISE52 @property ushort reserved() { return cast(ushort) (_bf & 0x3FFF); } fDeferUpdDDEADVISE53 @property bool fDeferUpd() { return cast(bool) (_bf & 0x4000); } fAckReqDDEADVISE54 @property bool fAckReq() { return cast(bool) (_bf & 0x8000); } 55 reservedDDEADVISE56 @property ushort reserved(ushort r) { 57 _bf = cast(ushort) ((_bf & ~0x3FFF) | (r & 0x3FFF)); 58 return cast(ushort)(r & 0x3FFF); 59 } 60 fDeferUpdDDEADVISE61 @property bool fDeferUpd(bool f) { _bf = cast(ushort) ((_bf & ~0x4000) | (f << 14)); return f; } fAckReqDDEADVISE62 @property bool fAckReq(bool f) { _bf = cast(ushort) ((_bf & ~0x8000) | (f << 15)); return f; } 63 } 64 65 struct DDEDATA { 66 ushort _bf; 67 short cfFormat; 68 byte _Value; 69 unused()70 @property ushort unused() { return cast(ushort) (_bf & 0x0FFF); } fResponse()71 @property bool fResponse() { return cast(bool) (_bf & 0x1000); } fRelease()72 @property bool fRelease() { return cast(bool) (_bf & 0x2000); } reserved()73 @property bool reserved() { return cast(bool) (_bf & 0x4000); } fAckReq()74 @property bool fAckReq() { return cast(bool) (_bf & 0x8000); } 75 76 @property byte* Value() return { return &_Value; } 77 78 @property ushort unused(ushort r) { 79 _bf = cast(ushort) ((_bf & ~0x0FFF) | (r & 0x0FFF)); 80 return cast(ushort)(r & 0x0FFF); 81 } 82 83 @property bool fResponse(bool f) { _bf = cast(ushort) ((_bf & ~0x1000) | (f << 12)); return f; } 84 @property bool fRelease(bool f) { _bf = cast(ushort) ((_bf & ~0x2000) | (f << 13)); return f; } 85 @property bool reserved(bool f) { _bf = cast(ushort) ((_bf & ~0x4000) | (f << 14)); return f; } 86 @property bool fAckReq(bool f) { _bf = cast(ushort) ((_bf & ~0x8000) | (f << 15)); return f; } 87 } 88 89 struct DDEPOKE { 90 ushort _bf; 91 short cfFormat; 92 byte _Value; 93 94 @property ushort unused() { return cast(ushort) (_bf & 0x1FFF); } 95 @property bool fRelease() { return cast(bool) (_bf & 0x2000); } 96 @property ubyte fReserved() { return cast(ubyte) ((_bf & 0xC000) >>> 14); } 97 98 @property byte* Value() return { return &_Value; } 99 100 @property ushort unused(ushort u) { 101 _bf = cast(ushort) ((_bf & ~0x1FFF) | (u & 0x1FFF)); 102 return cast(ushort)(u & 0x1FFF); 103 } 104 105 @property bool fRelease(bool f) { _bf = cast(ushort) ((_bf & ~0x2000) | (f << 13)); return f; } 106 @property ubyte fReserved(ubyte r) { _bf = cast(ushort) ((_bf & ~0xC000) | (r << 14)); return r; } 107 } 108 109 deprecated struct DDELN { 110 ushort _bf; 111 short cfFormat; 112 113 @property ushort unused() { return cast(ushort) (_bf & 0x1FFF); } 114 @property bool fRelease() { return cast(bool) (_bf & 0x2000); } 115 @property bool fDeferUpd() { return cast(bool) (_bf & 0x4000); } 116 @property bool fAckReq() { return cast(bool) (_bf & 0x8000); } 117 118 @property ushort unused(ushort u) { 119 _bf = cast(ushort)((_bf & ~0x1FFF) | (u & 0x1FFF)); 120 return cast(ushort)(u & 0x1FFF); 121 } 122 123 @property bool fRelease(bool f) { _bf = cast(ushort) ((_bf & ~0x2000) | (f << 13)); return f; } 124 @property bool fDeferUpd(bool f) { _bf = cast(ushort) ((_bf & ~0x4000) | (f << 14)); return f; } 125 @property bool fAckReq(bool f) { _bf = cast(ushort) ((_bf & ~0x8000) | (f << 15)); return f; } 126 } 127 128 deprecated struct DDEUP { 129 ushort _bf; 130 short cfFormat; 131 byte _rgb; 132 133 @property ushort unused() { return cast(ushort) (_bf & 0x0FFF); } 134 @property bool fAck() { return cast(bool) (_bf & 0x1000); } 135 @property bool fRelease() { return cast(bool) (_bf & 0x2000); } 136 @property bool fReserved() { return cast(bool) (_bf & 0x4000); } 137 @property bool fAckReq() { return cast(bool) (_bf & 0x8000); } 138 139 @property byte* rgb() return { return &_rgb; } 140 141 @property ushort unused(ushort r) { 142 _bf = cast(ushort) ((_bf & ~0x0FFF) | (r & 0x0FFF)); 143 return cast(ushort)(r & 0x0FFF); 144 } 145 146 @property bool fAck(bool f) { _bf = cast(ushort) ((_bf & ~0x1000) | (f << 12)); return f; } 147 @property bool fRelease(bool f) { _bf = cast(ushort) ((_bf & ~0x2000) | (f << 13)); return f; } 148 @property bool fReserved(bool f) { _bf = cast(ushort) ((_bf & ~0x4000) | (f << 14)); return f; } 149 @property bool fAckReq(bool f) { _bf = cast(ushort) ((_bf & ~0x8000) | (f << 15)); return f; } 150 } 151 152 extern (Windows) { 153 BOOL DdeSetQualityOfService(HWND, const(SECURITY_QUALITY_OF_SERVICE)*, 154 PSECURITY_QUALITY_OF_SERVICE); 155 BOOL ImpersonateDdeClientWindow(HWND, HWND); 156 LPARAM PackDDElParam(UINT, UINT_PTR, UINT_PTR); 157 BOOL UnpackDDElParam(UINT, LPARAM, PUINT_PTR, PUINT_PTR); 158 BOOL FreeDDElParam(UINT, LPARAM); 159 LPARAM ReuseDDElParam(LPARAM, UINT, UINT, UINT_PTR, UINT_PTR); 160 } 161 162 debug (WindowsUnitTest) { 163 unittest { 164 DDEACK ddeack; 165 166 with (ddeack) { 167 reserved = 10; 168 assert (_bf == 0x0A); 169 fBusy = true; 170 assert (_bf == 0x4A); 171 fAck = true; 172 assert (_bf == 0xCA); 173 174 assert (reserved == 10); 175 assert (fBusy == true); 176 assert (fAck == true); 177 178 reserved = 43; 179 assert (_bf == 0xEB); 180 fBusy = false; 181 assert (_bf == 0xAB); 182 fAck = false; 183 assert (_bf == 0x2B); 184 185 assert (reserved == 43); 186 assert (fBusy == false); 187 assert (fAck == false); 188 } 189 190 DDEPOKE ddepoke; 191 192 with (ddepoke) { 193 unused = 3456; 194 assert (_bf == 0x0D80); 195 fRelease = true; 196 assert (_bf == 0x2D80); 197 fReserved = 2; 198 assert (_bf == 0xAD80); 199 200 assert (unused == 3456); 201 assert (fRelease == true); 202 assert (fReserved == 2); 203 204 unused = 2109; 205 assert (_bf == 0xa83d); 206 fRelease = false; 207 assert (_bf == 0x883d); 208 fReserved = 1; 209 assert (_bf == 0x483d); 210 211 assert (unused == 2109); 212 assert (fRelease == false); 213 assert (fReserved == 1); 214 } 215 } 216 } 217