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