/** * Windows API header module * * Translated from MinGW Windows headers * * Authors: Stewart Gordon * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) * Source: $(DRUNTIMESRC core/sys/windows/_dde.d) */ module core.sys.windows.dde; version (Windows): @system: pragma(lib, "user32"); import core.sys.windows.windef; enum : uint { WM_DDE_FIRST = 0x03E0, WM_DDE_INITIATE = WM_DDE_FIRST, WM_DDE_TERMINATE, WM_DDE_ADVISE, WM_DDE_UNADVISE, WM_DDE_ACK, WM_DDE_DATA, WM_DDE_REQUEST, WM_DDE_POKE, WM_DDE_EXECUTE, WM_DDE_LAST = WM_DDE_EXECUTE } struct DDEACK { ubyte bAppReturnCode; ubyte _bf; @property ubyte reserved() { return cast(ubyte) (_bf & 0x3F); } @property bool fBusy() { return cast(bool) (_bf & 0x40); } @property bool fAck() { return cast(bool) (_bf & 0x80); } @property ubyte reserved(ubyte r) { _bf = cast(ubyte) ((_bf & ~0x3F) | (r & 0x3F)); return cast(ubyte)(r & 0x3F); } @property bool fBusy(bool f) { _bf = cast(ubyte) ((_bf & ~0x40) | (f << 6)); return f; } @property bool fAck(bool f) { _bf = cast(ubyte) ((_bf & ~0x80) | (f << 7)); return f; } } struct DDEADVISE { ushort _bf; short cfFormat; @property ushort reserved() { return cast(ushort) (_bf & 0x3FFF); } @property bool fDeferUpd() { return cast(bool) (_bf & 0x4000); } @property bool fAckReq() { return cast(bool) (_bf & 0x8000); } @property ushort reserved(ushort r) { _bf = cast(ushort) ((_bf & ~0x3FFF) | (r & 0x3FFF)); return cast(ushort)(r & 0x3FFF); } @property bool fDeferUpd(bool f) { _bf = cast(ushort) ((_bf & ~0x4000) | (f << 14)); return f; } @property bool fAckReq(bool f) { _bf = cast(ushort) ((_bf & ~0x8000) | (f << 15)); return f; } } struct DDEDATA { ushort _bf; short cfFormat; byte _Value; @property ushort unused() { return cast(ushort) (_bf & 0x0FFF); } @property bool fResponse() { return cast(bool) (_bf & 0x1000); } @property bool fRelease() { return cast(bool) (_bf & 0x2000); } @property bool reserved() { return cast(bool) (_bf & 0x4000); } @property bool fAckReq() { return cast(bool) (_bf & 0x8000); } @property byte* Value() return { return &_Value; } @property ushort unused(ushort r) { _bf = cast(ushort) ((_bf & ~0x0FFF) | (r & 0x0FFF)); return cast(ushort)(r & 0x0FFF); } @property bool fResponse(bool f) { _bf = cast(ushort) ((_bf & ~0x1000) | (f << 12)); return f; } @property bool fRelease(bool f) { _bf = cast(ushort) ((_bf & ~0x2000) | (f << 13)); return f; } @property bool reserved(bool f) { _bf = cast(ushort) ((_bf & ~0x4000) | (f << 14)); return f; } @property bool fAckReq(bool f) { _bf = cast(ushort) ((_bf & ~0x8000) | (f << 15)); return f; } } struct DDEPOKE { ushort _bf; short cfFormat; byte _Value; @property ushort unused() { return cast(ushort) (_bf & 0x1FFF); } @property bool fRelease() { return cast(bool) (_bf & 0x2000); } @property ubyte fReserved() { return cast(ubyte) ((_bf & 0xC000) >>> 14); } @property byte* Value() return { return &_Value; } @property ushort unused(ushort u) { _bf = cast(ushort) ((_bf & ~0x1FFF) | (u & 0x1FFF)); return cast(ushort)(u & 0x1FFF); } @property bool fRelease(bool f) { _bf = cast(ushort) ((_bf & ~0x2000) | (f << 13)); return f; } @property ubyte fReserved(ubyte r) { _bf = cast(ushort) ((_bf & ~0xC000) | (r << 14)); return r; } } deprecated struct DDELN { ushort _bf; short cfFormat; @property ushort unused() { return cast(ushort) (_bf & 0x1FFF); } @property bool fRelease() { return cast(bool) (_bf & 0x2000); } @property bool fDeferUpd() { return cast(bool) (_bf & 0x4000); } @property bool fAckReq() { return cast(bool) (_bf & 0x8000); } @property ushort unused(ushort u) { _bf = cast(ushort)((_bf & ~0x1FFF) | (u & 0x1FFF)); return cast(ushort)(u & 0x1FFF); } @property bool fRelease(bool f) { _bf = cast(ushort) ((_bf & ~0x2000) | (f << 13)); return f; } @property bool fDeferUpd(bool f) { _bf = cast(ushort) ((_bf & ~0x4000) | (f << 14)); return f; } @property bool fAckReq(bool f) { _bf = cast(ushort) ((_bf & ~0x8000) | (f << 15)); return f; } } deprecated struct DDEUP { ushort _bf; short cfFormat; byte _rgb; @property ushort unused() { return cast(ushort) (_bf & 0x0FFF); } @property bool fAck() { return cast(bool) (_bf & 0x1000); } @property bool fRelease() { return cast(bool) (_bf & 0x2000); } @property bool fReserved() { return cast(bool) (_bf & 0x4000); } @property bool fAckReq() { return cast(bool) (_bf & 0x8000); } @property byte* rgb() return { return &_rgb; } @property ushort unused(ushort r) { _bf = cast(ushort) ((_bf & ~0x0FFF) | (r & 0x0FFF)); return cast(ushort)(r & 0x0FFF); } @property bool fAck(bool f) { _bf = cast(ushort) ((_bf & ~0x1000) | (f << 12)); return f; } @property bool fRelease(bool f) { _bf = cast(ushort) ((_bf & ~0x2000) | (f << 13)); return f; } @property bool fReserved(bool f) { _bf = cast(ushort) ((_bf & ~0x4000) | (f << 14)); return f; } @property bool fAckReq(bool f) { _bf = cast(ushort) ((_bf & ~0x8000) | (f << 15)); return f; } } extern (Windows) { BOOL DdeSetQualityOfService(HWND, const(SECURITY_QUALITY_OF_SERVICE)*, PSECURITY_QUALITY_OF_SERVICE); BOOL ImpersonateDdeClientWindow(HWND, HWND); LPARAM PackDDElParam(UINT, UINT_PTR, UINT_PTR); BOOL UnpackDDElParam(UINT, LPARAM, PUINT_PTR, PUINT_PTR); BOOL FreeDDElParam(UINT, LPARAM); LPARAM ReuseDDElParam(LPARAM, UINT, UINT, UINT_PTR, UINT_PTR); } debug (WindowsUnitTest) { unittest { DDEACK ddeack; with (ddeack) { reserved = 10; assert (_bf == 0x0A); fBusy = true; assert (_bf == 0x4A); fAck = true; assert (_bf == 0xCA); assert (reserved == 10); assert (fBusy == true); assert (fAck == true); reserved = 43; assert (_bf == 0xEB); fBusy = false; assert (_bf == 0xAB); fAck = false; assert (_bf == 0x2B); assert (reserved == 43); assert (fBusy == false); assert (fAck == false); } DDEPOKE ddepoke; with (ddepoke) { unused = 3456; assert (_bf == 0x0D80); fRelease = true; assert (_bf == 0x2D80); fReserved = 2; assert (_bf == 0xAD80); assert (unused == 3456); assert (fRelease == true); assert (fReserved == 2); unused = 2109; assert (_bf == 0xa83d); fRelease = false; assert (_bf == 0x883d); fReserved = 1; assert (_bf == 0x483d); assert (unused == 2109); assert (fRelease == false); assert (fReserved == 1); } } }