Új hozzászólás Aktív témák

  • Flashback

    addikt

    LOGOUT blog

    Sziasztok.

    Van két C# winformom akik szeretném ha üzzennének egymásnak egyszerű stringekkel: AApp BApp

    Mind a kettőnél ez a kód:
    private static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, ref COPYDATASTRUCT lParam);

    private const int WM_COPYDATA = 0x4A;

            [StructLayout(LayoutKind.Sequential)]
            struct COPYDATASTRUCT
            {
                public int dwData;
                public int cbData;
                public int lpData;
            }

    private void sendMessage(string message, string param)
            {
                string sepaChar = ";";
                message = message + sepaChar + param;
                COPYDATASTRUCT cds;
                cds.dwData = 0;
                cds.lpData = (int)Marshal.StringToHGlobalAnsi(message);
                cds.cbData = message.Length;
                Process currentProcess = Process.GetCurrentProcess();
                Process[] processCollection = Process.GetProcesses();
                foreach (Process p in processCollection)
                {
                  if (p.ProcessName == "AApp/BApp")
                    {
                        SendMessage(p.MainWindowHandle, (int)WM_COPYDATA, 0, ref cds);
                        AddDebugText("> OUT MSG: \t" + message);
                    }
                }
            }
            protected override void WndProc(ref Message m)
            {
                switch (m.Msg)
                {
                    case WM_COPYDATA:
                        COPYDATASTRUCT CD = (COPYDATASTRUCT)m.GetLParam(typeof(COPYDATASTRUCT));
                        byte[] B = new byte[CD.cbData];
                        IntPtr lpData = new IntPtr(CD.lpData);
                        Marshal.Copy(lpData, B, 0, CD.cbData);
                        string strData = Encoding.Default.GetString(B);
                        MessageProcessor(strData);
                        break;
                }
                base.WndProc(ref m);
            }

    Szóval úgy tűnik működik. Hogyha a B program indul előbb akkor szépen megvan a kérdés/válasz. Viszont fordított esetben már B programhoz nem érkezik meg a válasz.

    Mit rontok el?

Új hozzászólás Aktív témák