You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
481 lines
20 KiB
481 lines
20 KiB
using System;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace DDEDriver
|
|
{
|
|
public delegate IntPtr DdeCallback(
|
|
int uType, ConversionFormat uFmt, IntPtr hConv, IntPtr hsz1, IntPtr hsz2, IntPtr hData, uint dwData1, uint dwData2);
|
|
|
|
public static class Ddeml
|
|
{
|
|
public const int MAX_STRING_SIZE = 255;
|
|
|
|
public const int APPCMD_CLIENTONLY = unchecked((int)0x00000010);
|
|
public const int APPCMD_FILTERINITS = unchecked((int)0x00000020);
|
|
public const int APPCMD_MASK = unchecked((int)0x00000FF0);
|
|
public const int APPCLASS_STANDARD = unchecked((int)0x00000000);
|
|
public const int APPCLASS_MONITOR = unchecked((int)0x00000001);
|
|
public const int APPCLASS_MASK = unchecked((int)0x0000000F);
|
|
|
|
public const int CBR_BLOCK = unchecked((int)0xFFFFFFFF);
|
|
|
|
public const int CBF_FAIL_SELFCONNECTIONS = unchecked((int)0x00001000);
|
|
public const int CBF_FAIL_CONNECTIONS = unchecked((int)0x00002000);
|
|
public const int CBF_FAIL_ADVISES = unchecked((int)0x00004000);
|
|
public const int CBF_FAIL_EXECUTES = unchecked((int)0x00008000);
|
|
public const int CBF_FAIL_POKES = unchecked((int)0x00010000);
|
|
public const int CBF_FAIL_REQUESTS = unchecked((int)0x00020000);
|
|
public const int CBF_FAIL_ALLSVRXACTIONS = unchecked((int)0x0003f000);
|
|
public const int CBF_SKIP_CONNECT_CONFIRMS = unchecked((int)0x00040000);
|
|
public const int CBF_SKIP_REGISTRATIONS = unchecked((int)0x00080000);
|
|
public const int CBF_SKIP_UNREGISTRATIONS = unchecked((int)0x00100000);
|
|
public const int CBF_SKIP_DISCONNECTS = unchecked((int)0x00200000);
|
|
public const int CBF_SKIP_ALLNOTIFICATIONS = unchecked((int)0x003c0000);
|
|
|
|
public const int CF_TEXT = 1;
|
|
|
|
public const int CP_WINANSI = 1004;
|
|
public const int CP_WINUNICODE = 1200;
|
|
|
|
public const int DDE_FACK = unchecked((int)0x8000);
|
|
public const int DDE_FBUSY = unchecked((int)0x4000);
|
|
public const int DDE_FDEFERUPD = unchecked((int)0x4000);
|
|
public const int DDE_FACKREQ = unchecked((int)0x8000);
|
|
public const int DDE_FRELEASE = unchecked((int)0x2000);
|
|
public const int DDE_FREQUESTED = unchecked((int)0x1000);
|
|
public const int DDE_FAPPSTATUS = unchecked((int)0x00ff);
|
|
public const int DDE_FNOTPROCESSED = unchecked((int)0x0000);
|
|
|
|
public const int DMLERR_NO_ERROR = unchecked((int)0x0000);
|
|
public const int DMLERR_FIRST = unchecked((int)0x4000);
|
|
public const int DMLERR_ADVACKTIMEOUT = unchecked((int)0x4000);
|
|
public const int DMLERR_BUSY = unchecked((int)0x4001);
|
|
public const int DMLERR_DATAACKTIMEOUT = unchecked((int)0x4002);
|
|
public const int DMLERR_DLL_NOT_INITIALIZED = unchecked((int)0x4003);
|
|
public const int DMLERR_DLL_USAGE = unchecked((int)0x4004);
|
|
public const int DMLERR_EXECACKTIMEOUT = unchecked((int)0x4005);
|
|
public const int DMLERR_INVALIDPARAMETER = unchecked((int)0x4006);
|
|
public const int DMLERR_LOW_MEMORY = unchecked((int)0x4007);
|
|
public const int DMLERR_MEMORY_ERROR = unchecked((int)0x4008);
|
|
public const int DMLERR_NOTPROCESSED = unchecked((int)0x4009);
|
|
public const int DMLERR_NO_CONV_ESTABLISHED = unchecked((int)0x400A);
|
|
public const int DMLERR_POKEACKTIMEOUT = unchecked((int)0x400B);
|
|
public const int DMLERR_POSTMSG_FAILED = unchecked((int)0x400C);
|
|
public const int DMLERR_REENTRANCY = unchecked((int)0x400D);
|
|
public const int DMLERR_SERVER_DIED = unchecked((int)0x400E);
|
|
public const int DMLERR_SYS_ERROR = unchecked((int)0x400F);
|
|
public const int DMLERR_UNADVACKTIMEOUT = unchecked((int)0x4010);
|
|
public const int DMLERR_UNFOUND_QUEUE_ID = unchecked((int)0x4011);
|
|
public const int DMLERR_LAST = unchecked((int)0x4011);
|
|
|
|
public const int DNS_REGISTER = unchecked((int)0x0001);
|
|
public const int DNS_UNREGISTER = unchecked((int)0x0002);
|
|
public const int DNS_FILTERON = unchecked((int)0x0004);
|
|
public const int DNS_FILTEROFF = unchecked((int)0x0008);
|
|
|
|
public const int EC_ENABLEALL = unchecked((int)0x0000);
|
|
public const int EC_ENABLEONE = unchecked((int)0x0080);
|
|
public const int EC_DISABLE = unchecked((int)0x0008);
|
|
public const int EC_QUERYWAITING = unchecked((int)0x0002);
|
|
|
|
public const int HDATA_APPOWNED = unchecked((int)0x0001);
|
|
|
|
public const int MF_HSZ_INFO = unchecked((int)0x01000000);
|
|
public const int MF_SENDMSGS = unchecked((int)0x02000000);
|
|
public const int MF_POSTMSGS = unchecked((int)0x04000000);
|
|
public const int MF_CALLBACKS = unchecked((int)0x08000000);
|
|
public const int MF_ERRORS = unchecked((int)0x10000000);
|
|
public const int MF_LINKS = unchecked((int)0x20000000);
|
|
public const int MF_CONV = unchecked((int)0x40000000);
|
|
|
|
public const int MH_CREATE = 1;
|
|
public const int MH_KEEP = 2;
|
|
public const int MH_DELETE = 3;
|
|
public const int MH_CLEANUP = 4;
|
|
|
|
public const int QID_SYNC = unchecked((int)0xFFFFFFFF);
|
|
public const int TIMEOUT_ASYNC = unchecked((int)0xFFFFFFFF);
|
|
|
|
public const int XTYPF_NOBLOCK = unchecked((int)0x0002);
|
|
public const int XTYPF_NODATA = unchecked((int)0x0004);
|
|
public const int XTYPF_ACKREQ = unchecked((int)0x0008);
|
|
public const int XCLASS_MASK = unchecked((int)0xFC00);
|
|
public const int XCLASS_BOOL = unchecked((int)0x1000);
|
|
public const int XCLASS_DATA = unchecked((int)0x2000);
|
|
public const int XCLASS_FLAGS = unchecked((int)0x4000);
|
|
public const int XCLASS_NOTIFICATION = unchecked((int)0x8000);
|
|
public const int XTYP_ERROR = unchecked((int)(0x0000 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK));
|
|
public const int XTYP_ADVDATA = unchecked((int)(0x0010 | XCLASS_FLAGS));
|
|
public const int XTYP_ADVREQ = unchecked((int)(0x0020 | XCLASS_DATA | XTYPF_NOBLOCK));
|
|
public const int XTYP_ADVSTART = unchecked((int)(0x0030 | XCLASS_BOOL));
|
|
public const int XTYP_ADVSTOP = unchecked((int)(0x0040 | XCLASS_NOTIFICATION));
|
|
public const int XTYP_EXECUTE = unchecked((int)(0x0050 | XCLASS_FLAGS));
|
|
public const int XTYP_CONNECT = unchecked((int)(0x0060 | XCLASS_BOOL | XTYPF_NOBLOCK));
|
|
public const int XTYP_CONNECT_CONFIRM = unchecked((int)(0x0070 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK));
|
|
public const int XTYP_XACT_COMPLETE = unchecked((int)(0x0080 | XCLASS_NOTIFICATION));
|
|
public const int XTYP_POKE = unchecked((int)(0x0090 | XCLASS_FLAGS));
|
|
public const int XTYP_REGISTER = unchecked((int)(0x00A0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK));
|
|
public const int XTYP_REQUEST = unchecked((int)(0x00B0 | XCLASS_DATA));
|
|
public const int XTYP_DISCONNECT = unchecked((int)(0x00C0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK));
|
|
public const int XTYP_UNREGISTER = unchecked((int)(0x00D0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK));
|
|
public const int XTYP_WILDCONNECT = unchecked((int)(0x00E0 | XCLASS_DATA | XTYPF_NOBLOCK));
|
|
public const int XTYP_MONITOR = unchecked((int)(0x00F0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK));
|
|
public const int XTYP_ADVSTARTNODATA = unchecked(XTYP_ADVSTART | XTYPF_NODATA);
|
|
public const int XTYP_ADVSTARTACKREQ = unchecked(XTYP_ADVSTART | XTYPF_ACKREQ);
|
|
public const int XTYP_MASK = unchecked((int)0x00F0);
|
|
public const int XTYP_SHIFT = unchecked((int)0x0004);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "DdeAbandonTransaction", CharSet = CharSet.Ansi)]
|
|
public static extern bool DdeAbandonTransaction(int idInst, IntPtr hConv, int idTransaction);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "DdeAccessData", CharSet = CharSet.Ansi)]
|
|
public static extern IntPtr DdeAccessData(IntPtr hData, ref int pcbDataSize);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "DdeAddData", CharSet = CharSet.Ansi)]
|
|
public static extern IntPtr DdeAddData(IntPtr hData, byte[] pSrc, int cb, int cbOff);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "DdeClientTransaction", CharSet = CharSet.Ansi)]
|
|
public static extern IntPtr DdeClientTransaction(
|
|
byte[] pData, int cbData, IntPtr hConv, IntPtr hszItem, ConversionFormat wFmt, int wType, int dwTimeout, ref int pdwResult);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "DdeCmpStringHandles", CharSet = CharSet.Ansi)]
|
|
public static extern int DdeCmpStringHandles(IntPtr hsz1, IntPtr hsz2);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "DdeConnect", CharSet = CharSet.Ansi)]
|
|
public static extern IntPtr DdeConnect(int idInst, IntPtr hszService, IntPtr hszTopic, ref CONVCONTEXT pCC);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "DdeConnectList", CharSet = CharSet.Ansi)]
|
|
public static extern IntPtr DdeConnectList(int idInst, IntPtr hszService, IntPtr hszTopic, IntPtr hConvList, ref CONVCONTEXT pCC);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "DdeCreateDataHandle", CharSet = CharSet.Ansi)]
|
|
public static extern IntPtr DdeCreateDataHandle(int idInst, byte[] pSrc, int cb, int cbOff, IntPtr hszItem, ConversionFormat wFmt, int afCmd);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "DdeCreateStringHandle", CharSet = CharSet.Ansi)]
|
|
public static extern IntPtr DdeCreateStringHandle(int idInst, string psz, int iCodePage);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "DdeDisconnect", CharSet = CharSet.Ansi)]
|
|
public static extern bool DdeDisconnect(IntPtr hConv);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "DdeDisconnectList", CharSet = CharSet.Ansi)]
|
|
public static extern bool DdeDisconnectList(IntPtr hConvList);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "DdeEnableCallback", CharSet = CharSet.Ansi)]
|
|
public static extern bool DdeEnableCallback(int idInst, IntPtr hConv, int wCmd);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "DdeFreeDataHandle", CharSet = CharSet.Ansi)]
|
|
public static extern bool DdeFreeDataHandle(IntPtr hData);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "DdeFreeStringHandle", CharSet = CharSet.Ansi)]
|
|
public static extern bool DdeFreeStringHandle(int idInst, IntPtr hsz);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "DdeGetData", CharSet = CharSet.Ansi)]
|
|
public unsafe static extern int DdeGetData(IntPtr hData, [Out] byte* pDst, int cbMax, int cbOff);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "DdeGetLastError", CharSet = CharSet.Ansi)]
|
|
public static extern int DdeGetLastError(int idInst);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "DdeImpersonateClient", CharSet = CharSet.Ansi)]
|
|
public static extern bool DdeImpersonateClient(IntPtr hConv);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "DdeInitialize", CharSet = CharSet.Ansi)]
|
|
public static extern int DdeInitialize(ref int pidInst, DdeCallback pfnCallback, int afCmd, int ulRes);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "DdeKeepStringHandle", CharSet = CharSet.Ansi)]
|
|
public static extern bool DdeKeepStringHandle(int idInst, IntPtr hsz);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "DdeNameService", CharSet = CharSet.Ansi)]
|
|
public static extern IntPtr DdeNameService(int idInst, IntPtr hsz1, IntPtr hsz2, int afCmd);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "DdePostAdvise", CharSet = CharSet.Ansi)]
|
|
public static extern bool DdePostAdvise(int idInst, IntPtr hszTopic, IntPtr hszItem);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "DdeQueryConvInfo", CharSet = CharSet.Ansi)]
|
|
public static extern int DdeQueryConvInfo(IntPtr hConv, int idTransaction, IntPtr pConvInfo);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "DdeQueryNextServer", CharSet = CharSet.Ansi)]
|
|
public static extern IntPtr DdeQueryNextServer(IntPtr hConvList, IntPtr hConvPrev);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "DdeQueryString", CharSet = CharSet.Ansi)]
|
|
public unsafe static extern int DdeQueryString(int idInst, IntPtr hsz, sbyte* psz, int cchMax, int iCodePage);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "DdeReconnect", CharSet = CharSet.Ansi)]
|
|
public static extern IntPtr DdeReconnect(IntPtr hConv);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "DdeSetUserHandle", CharSet = CharSet.Ansi)]
|
|
public static extern bool DdeSetUserHandle(IntPtr hConv, int id, IntPtr hUser);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "DdeUnaccessData", CharSet = CharSet.Ansi)]
|
|
public static extern bool DdeUnaccessData(IntPtr hData);
|
|
|
|
[DllImport("user32.dll", EntryPoint = "DdeUninitialize", CharSet = CharSet.Ansi)]
|
|
public static extern bool DdeUninitialize(int idInst);
|
|
|
|
public static String DDEGetErrorMsg(int error)
|
|
{
|
|
switch (error)
|
|
{
|
|
case DMLERR_NO_ERROR:
|
|
return "no DDE error.";
|
|
case DMLERR_ADVACKTIMEOUT:
|
|
return "a request for a synchronous advise transaction has timed out.";
|
|
|
|
case DMLERR_BUSY:
|
|
return "the response to the transaction caused the DDE_FBUSY bit to be set.";
|
|
|
|
case DMLERR_DATAACKTIMEOUT:
|
|
return "a request for a synchronous data transaction has timed out.";
|
|
|
|
case DMLERR_DLL_NOT_INITIALIZED:
|
|
return "a DDEML function was called without first calling the DdeInitialize function,\nor an invalid instance identifier\nwas passed to a DDEML function.";
|
|
|
|
case DMLERR_DLL_USAGE:
|
|
return "an application initialized as APPCLASS_MONITOR has\nattempted to perform a DDE transaction,\nor an application initialized as APPCMD_CLIENTONLY has \nattempted to perform server transactions.";
|
|
|
|
case DMLERR_EXECACKTIMEOUT:
|
|
return "a request for a synchronous execute transaction has timed out.";
|
|
|
|
case DMLERR_INVALIDPARAMETER:
|
|
return "a parameter failed to be validated by the DDEML.";
|
|
|
|
case DMLERR_LOW_MEMORY:
|
|
return "a DDEML application has created a prolonged race condition.";
|
|
|
|
case DMLERR_MEMORY_ERROR:
|
|
return "a memory allocation failed.";
|
|
|
|
case DMLERR_NO_CONV_ESTABLISHED:
|
|
return "a client's attempt to establish a conversation has failed.";
|
|
|
|
case DMLERR_NOTPROCESSED:
|
|
return "a transaction failed.";
|
|
|
|
case DMLERR_POKEACKTIMEOUT:
|
|
return "a request for a synchronous poke transaction has timed out.";
|
|
|
|
case DMLERR_POSTMSG_FAILED:
|
|
return "an internal call to the PostMessage function has failed. ";
|
|
|
|
case DMLERR_REENTRANCY:
|
|
return "reentrancy problem.";
|
|
|
|
case DMLERR_SERVER_DIED:
|
|
return "a server-side transaction was attempted on a conversation\nthat was terminated by the client, or the server\nterminated before completing a transaction.";
|
|
|
|
case DMLERR_SYS_ERROR:
|
|
return "an internal error has occurred in the DDEML.";
|
|
|
|
case DMLERR_UNADVACKTIMEOUT:
|
|
return "a request to end an advise transaction has timed out.";
|
|
|
|
case DMLERR_UNFOUND_QUEUE_ID:
|
|
return "an invalid transaction identifier was passed to a DDEML function.\nOnce the application has returned from an XTYP_XACT_COMPLETE callback,\nthe transaction identifier for that callback is no longer valid.";
|
|
|
|
default:
|
|
return "Unknown DDE error %08x";
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct HSZPAIR
|
|
{
|
|
public IntPtr hszSvc;
|
|
public IntPtr hszTopic;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct SECURITY_QUALITY_OF_SERVICE
|
|
{ // sqos
|
|
public ushort Length;
|
|
public int ImpersonationLevel; //SECURITY_IMPERSONATION_LEVEL
|
|
public int ContextTrackingMode; //SECURITY_CONTEXT_TRACKING_MODE
|
|
public bool EffectiveOnly;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct CONVINFO
|
|
{
|
|
public int cb;
|
|
public IntPtr hUser;
|
|
public IntPtr hConvPartner;
|
|
public IntPtr hszSvcPartner;
|
|
public IntPtr hszServiceReq;
|
|
public IntPtr hszTopic;
|
|
public IntPtr hszItem;
|
|
public int wFmt;
|
|
public int wType;
|
|
public int wStatus;
|
|
public int wConvst;
|
|
public int wLastError;
|
|
public IntPtr hConvList;
|
|
public CONVCONTEXT ConvCtxt;
|
|
public IntPtr hwnd;
|
|
public IntPtr hwndPartner;
|
|
|
|
} // struct
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct CONVCONTEXT
|
|
{
|
|
public int cb;
|
|
public int wFlags;
|
|
public int wCountryID;
|
|
public int iCodePage;
|
|
public int dwLangID;
|
|
public int dwSecurity;
|
|
public SECURITY_QUALITY_OF_SERVICE qos;
|
|
|
|
} // struct
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct MONCBSTRUCT
|
|
{
|
|
public int cb;
|
|
public int dwTime;
|
|
public IntPtr hTask;
|
|
public IntPtr dwRet;
|
|
public int wType;
|
|
public int wFmt;
|
|
public IntPtr hConv;
|
|
public IntPtr hsz1;
|
|
public IntPtr hsz2;
|
|
public IntPtr hData;
|
|
public uint dwData1;
|
|
public uint dwData2;
|
|
public CONVCONTEXT cc;
|
|
public int cbData;
|
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
|
|
public byte[] Data;
|
|
|
|
} // struct
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct MONCONVSTRUCT
|
|
{
|
|
public int cb;
|
|
public bool fConnect;
|
|
public int dwTime;
|
|
public IntPtr hTask;
|
|
public IntPtr hszSvc;
|
|
public IntPtr hszTopic;
|
|
public IntPtr hConvClient;
|
|
public IntPtr hConvServer;
|
|
|
|
} // struct
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct MONERRSTRUCT
|
|
{
|
|
public int cb;
|
|
public int wLastError;
|
|
public int dwTime;
|
|
public IntPtr hTask;
|
|
|
|
} // struct
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct MONHSZSTRUCT
|
|
{
|
|
public int cb;
|
|
public int fsAction;
|
|
public int dwTime;
|
|
public IntPtr hsz;
|
|
public IntPtr hTask;
|
|
public IntPtr str;
|
|
|
|
} // struct
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct MONLINKSTRUCT
|
|
{
|
|
public int cb;
|
|
public int dwTime;
|
|
public IntPtr hTask;
|
|
public bool fEstablished;
|
|
public bool fNoData;
|
|
public IntPtr hszSvc;
|
|
public IntPtr hszTopic;
|
|
public IntPtr hszItem;
|
|
public int wFmt;
|
|
public bool fServer;
|
|
public IntPtr hConvClient;
|
|
public IntPtr hConvServer;
|
|
|
|
} // struct
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct MONMSGSTRUCT
|
|
{
|
|
public int cb;
|
|
public IntPtr hwndTo;
|
|
public int dwTime;
|
|
public IntPtr hTask;
|
|
public int wMsg;
|
|
public IntPtr wParam;
|
|
public IntPtr lParam;
|
|
public DDEML_MSG_HOOK_DATA dmhd;
|
|
|
|
} // struct
|
|
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct DDEML_MSG_HOOK_DATA
|
|
{
|
|
public IntPtr uiLo;
|
|
public IntPtr uiHi;
|
|
public int cbData;
|
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
|
|
public byte[] Data;
|
|
|
|
} // struct
|
|
|
|
public enum ConversionFormat : uint
|
|
{
|
|
NONE = 0,
|
|
TEXT = 1,
|
|
BITMAP = 2,
|
|
METAFILEPICT = 3,
|
|
SYLK = 4,
|
|
DIF = 5,
|
|
TIFF = 6,
|
|
OEMTEXT = 7,
|
|
DIB = 8,
|
|
PALETTE = 9,
|
|
PENDATA = 10,
|
|
RIFF = 11,
|
|
WAVE = 12,
|
|
UNICODETEXT = 13,
|
|
ENHMETAFILE = 14,
|
|
HDROP = 15,
|
|
LOCALE = 16,
|
|
DIBV5 = 17,
|
|
OWNERDISPLAY = 0x0080,
|
|
DSPTEXT = 0x0081,
|
|
DSPBITMAP = 0x0082,
|
|
DSPMETAFILEPICT = 0x0083,
|
|
DSPENHMETAFILE = 0x008E,
|
|
// "Private" formats don't get GlobalFree()'d
|
|
PRIVATEFIRST = 0x0200,
|
|
PRIVATELAST = 0x02FF,
|
|
// "GDIOBJ" formats do get DeleteObject()'d
|
|
GDIOBJFIRST = 0x0300,
|
|
GDIOBJLAST = 0x03FF
|
|
}
|
|
|
|
[Flags]
|
|
public enum DDEResult : uint
|
|
{
|
|
FACK = 0x8000U,
|
|
FBUSY = 0x4000U,
|
|
FDEFERUPD = 0x4000,
|
|
FACKREQ = 0x8000,
|
|
FRELEASE = 0x2000,
|
|
FREQUESTED = 0x1000,
|
|
FAPPSTATUS = 0x00ff,
|
|
FNOTPROCESSED = 0x0,
|
|
FACKRESERVED = (~(FACK | FBUSY | FAPPSTATUS)),
|
|
FADVRESERVED = (~(FACKREQ | FDEFERUPD)),
|
|
FDATRESERVED = (~(FACKREQ | FRELEASE | FREQUESTED)),
|
|
FPOKRESERVED = (~(FRELEASE))
|
|
}
|
|
}
|
|
|