Пример #1
0
        protected override void WndProc(ref Message m)
        {
            if ((int)Lib.Win.Document.Win32.Msgs.WM_SYSCOMMAND == m.Msg && (int)m.WParam == Lib.Win.Document.Win32.User32.SC_CLOSE)
            {
                _closeClick = true;
            }
            if ((int)Lib.Win.Document.Win32.Msgs.WM_COPYDATA == m.Msg && m.LParam != null)
            {
                try
                {
                    string text = string.Empty;
                    var    cd   = new Lib.Win.Document.Win32.User32.COPYDATASTRUCT();
                    cd = (Lib.Win.Document.Win32.User32.COPYDATASTRUCT)Marshal.PtrToStructure(m.LParam, typeof(Lib.Win.Document.Win32.User32.COPYDATASTRUCT));
                    if (cd.dwData == 1024)
                    {
                        if (cd.cbData > 0)
                        {
                            var    B      = new byte[cd.cbData];
                            IntPtr lpData = cd.lpData;
                            Marshal.Copy(lpData, B, 0, cd.cbData);
                            text = Encoding.UTF8.GetString(B);

                            Console.WriteLine("{0}: Message: {1}", DateTime.Now.ToString("HH:mm:ss fff"), text);
                        }
                    }
                    text = text.Trim();
                    try
                    {
                        AnalyzeArgs(text);
                    }
                    catch (Exception ex)
                    {
                        Lib.Win.Data.Env.WriteToLog(ex);
                        Kesco.Lib.Win.Error.ErrorShower.OnShowError(this, ex.Message,
                                                                    Environment.StringResources.GetString("Error"));
                    }
                    m.Result = new IntPtr(1);
                    return;
                }
                catch (Exception ex)
                {
                    Lib.Win.Data.Env.WriteToLog(ex);
                }
            }

            if (m.Msg == (int)Lib.Win.Document.Win32.Msgs.WM_HOTKEY && ActiveForm != null)
            {
                HotKeys.DoWork(m.WParam);
            }

            base.WndProc(ref m);
        }
Пример #2
0
        public static int SendMessage(IntPtr wndHandle, string sendText, bool send)
        {
            Console.WriteLine("{0}: Send message: {1}", DateTime.Now.ToString("HH:mm:ss fff"), sendText);
            int    result      = 0;
            IntPtr lpB         = IntPtr.Zero;
            IntPtr textPointer = IntPtr.Zero;

            try
            {
                Lib.Win.Document.Win32.User32.ShowWindow(wndHandle, 8);
                if (send)
                {
                    byte[] B = Encoding.UTF8.GetBytes(sendText);
                    lpB = Marshal.AllocHGlobal(B.Length);
                    Marshal.Copy(B, 0, lpB, B.Length);
                    var cdt = new Lib.Win.Document.Win32.User32.COPYDATASTRUCT {
                        dwData = 1024, lpData = lpB, cbData = B.Length
                    };
                    textPointer = Marshal.AllocHGlobal(Marshal.SizeOf(cdt));
                    Marshal.StructureToPtr(cdt, textPointer, false);
                }
                if (wndHandle != IntPtr.Zero)
                {
                    result = Lib.Win.Document.Win32.User32.SendMessage(wndHandle, (int)Lib.Win.Document.Win32.Msgs.WM_COPYDATA,
                                                                       (send && Program.MainFormDialog != null) ? Program.MainFormDialog.Handle : IntPtr.Zero, textPointer).ToInt32();
#if (DEBUG)
                    if (result > 0)
                    {
                        Console.WriteLine("{0}: true {1}", DateTime.Now.ToString("HH:mm:ss fff"), result);
                    }
                    else
                    {
                        Console.WriteLine("{0}: false {1}", DateTime.Now.ToString("HH:mm:ss fff"), result);
                    }
#endif
                }
                if (send)
                {
                    Marshal.FreeHGlobal(lpB);
                    Marshal.FreeHGlobal(textPointer);
                }
            }
            catch (Exception ex)
            {
                result = 0;
                Kesco.Lib.Win.Error.ErrorShower.OnShowError(null, ex.Message, Environment.StringResources.GetString("Error"));
                Lib.Win.Data.Env.WriteToLog(ex);
            }

            return(result);
        }