defwndproc间歇性接收不到WM_COPYDATA消息

时间:2019-12-19 06:34:16

标签: c# wpf windows winapi sendmessage

它的WPF窗口应用程序。我要实现的目标是将命令行参数传递给该应用程序,一旦收到命令行参数,就必须将WM_COPYDATA消息传递给DefWndProc,在其中编写了函数来处理命令行参数。但是我的主要问题是仅在一台机器上,DefWndProc中未接收到WM_COPYDATA消息,因此它不处理命令行消息是使用以下方式发送的:

   int len = arr.Length; COPYDATASTRUCT CopyDataStruct; 
    CopyDataStruct.dwData = (IntPtr)100; 
    CopyDataStruct.cbData = (len + 1)*2; 
    CopyDataStruct.lpData = args
    SendMessage(Wnd, WM_COPYDATA, 0, ref CopyDataStruct)
//Receiving side for working scenario
protected override void DefWndProc(ref Message m)
m.MSG=74 m.LParam=9430768 m.WParam=0 

这种异常行为背后的原因可能是什么,任何其他进程都阻止了邮件?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
{
    class Program
    {
        public const int WM_COPYDATA = 0x4A;
        public const UInt32 WM_COMMAND = 0x0111;
        public const UInt32 IDM_MENU_SECUREDISCONNECT = 305;
        public const UInt32 PROCESS_QUERY_LIMITED_INFORMATION = 0x1000;
        [StructLayout(LayoutKind.Sequential)]
        public struct COPYDATASTRUCT
        {
            public IntPtr dwData;
            public int cbData;
            [MarshalAs(UnmanagedType.LPWStr)]
            public string lpData;
        }
        [DllImport("User32.dll", EntryPoint = "SendMessage", SetLastError = true)]
        public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, ref COPYDATASTRUCT lParam);
        private const string MARKER = "MARKER\n";
        static void Main(string[] args)
        {
            IntPtr destWnd = (IntPtr)int.Parse(args[0]);
          string packedargs = DAZZLE_MARKER + String.Join("\n", args[1]);
            /
            byte[] sarr = System.Text.Encoding.Unicode.GetBytes(packedargs);
            int len = sarr.Length;
            COPYDATASTRUCT CopyDataStruct;
            CopyDataStruct.dwData = (IntPtr)100;
            CopyDataStruct.cbData = (len + 1) * 2;
            CopyDataStruct.lpData = packedargs;
            int result = SendMessage(destWnd, WM_COPYDATA, 0, ref CopyDataStruct);
        }
    }
}

我提供了示例应用程序,该应用程序已成功向我的应用程序DefWndProc发送消息 但是,如果我将示例应用程序重命名为我的应用程序,则不会在主实例的DefWndProc中收到消息

0 个答案:

没有答案