Ejemplo n.º 1
0
        // https://msdn.microsoft.com/en-us/library/ms648742%28v=VS.85%29.aspx?f=255&MSPPError=-2147217396
        private IntPtr DdeCallback(uint uType, uint uFmt, IntPtr hconv, IntPtr hsz1, IntPtr hsz2, IntPtr hdata, UIntPtr dwData1, UIntPtr dwData2)
        {
            DDEMsgType type = (DDEMsgType)uType;

            switch (type)
            {
            case DDEMsgType.XTYP_REGISTER:
                System.Diagnostics.Debug.WriteLine("DDE Register");
                break;

            case DDEMsgType.XTYP_CONNECT:
            {
                foreach (var t in TopicHandles)
                {
                    bool isValid = (NativeMethods.DdeCmpStringHandles(hsz1, t) == 0 &&
                                    NativeMethods.DdeCmpStringHandles(hsz2, ServerNameHandle) == 0);

                    if (isValid)
                    {
                        return(new IntPtr(1));
                    }
                }

                return(new IntPtr(0));
            }

            case DDEMsgType.XTYP_CONNECT_CONFIRM:
                System.Diagnostics.Debug.WriteLine("DDE Connect confirm");
                break;

            case DDEMsgType.XTYP_EXECUTE:
            {
                for (int i = 0; i < TopicHandles.Count; i++)
                {
                    if (hsz1 == TopicHandles[i])
                    {
                        System.Diagnostics.Debug.WriteLine("DDE Execute");
                        TopicActions[i].Invoke(hdata);              // only hdata is of interest https://docs.microsoft.com/en-us/windows/win32/dataxchg/xtyp-execute
                        break;
                    }
                }

                return(new IntPtr((int)DdeResult.DDE_FACK));
            }

            case DDEMsgType.XTYP_DISCONNECT:
                System.Diagnostics.Debug.WriteLine("DDE Disconnect");
                break;

            default:
                System.Diagnostics.Debug.WriteLine($"DDE Unknown {uType:X}");
                break;
            }
            return(IntPtr.Zero);
        }
Ejemplo n.º 2
0
        // https://msdn.microsoft.com/en-us/library/ms648742%28v=VS.85%29.aspx?f=255&MSPPError=-2147217396
        private IntPtr DdeCallback(uint uType, uint uFmt, IntPtr hconv, IntPtr hsz1, IntPtr hsz2, IntPtr hdata, UIntPtr dwData1, UIntPtr dwData2)
        {
            DDEMsgType type = (DDEMsgType)uType;

            switch (type)
            {
            case DDEMsgType.XTYP_CONNECT:
                bool isValid = (NativeMethods.DdeCmpStringHandles(hsz1, TopicHandle) == 0 &&
                                NativeMethods.DdeCmpStringHandles(hsz2, ServerNameHandle) == 0);
                return(new IntPtr(isValid ? 1 : 0));

            case DDEMsgType.XTYP_EXECUTE:
                string url = FromDdeStringHandle(hdata);
                urlHandler?.Invoke(url);
                return(new IntPtr((int)DdeResult.DDE_FACK));

            default:
                break;
            }
            return(IntPtr.Zero);
        }