Wpf发送接收 win32消息

摘要:
IntPtr.Zero;}//////发送win32消息给wpf窗口//////窗口句柄///字符串消息publicstaticvoidSendWin32MessageToWpfWindow{if(wpfWinHandel!
#region WPF发送和接收win32消息
        public const int WM_GETTEXT = 0x0D;
        public const int WM_SETTEXT = 0x0C;
        public const int WM_SIZEING = 0x0214;
        public const int WM_COPYDATA = 0x004A;
        public const int WM_LBUTTONDBLCLK = 0x0203;

        public structWin32Message
        {
            publicIntPtr dwData;
            public intcbData;
            [MarshalAs (UnmanagedType.LPStr)]
            public stringlpData;
        }

        [DllImport("user32.dll")]
        private static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, refWin32Message lParam);

        /// <summary>
        ///返回wpf主窗体句柄
        /// </summary>
        /// <param name="processName">wpf进程名</param>
        /// <returns></returns>
        public static IntPtr  GetWpfMainwindowHandel(stringprocessName)
        {            
            return Process.GetProcesses().FirstOrDefault(t => t.ProcessName.Contains(processName))?.MainWindowHandle??IntPtr.Zero;
        }
        /// <summary>
        ///发送win32消息给wpf窗口
        /// </summary>
        /// <param name="wpfWinHandel">窗口句柄</param>
        /// <param name="message">字符串消息</param>
        public static void SendWin32MessageToWpfWindow(IntPtr wpfWinHandel,stringmessage )
        {
            if (wpfWinHandel !=IntPtr.Zero)
            {
                var param = newWin32Message
                {
                    dwData = (IntPtr)100,
                    cbData =System.Text.Encoding.Default.GetBytes(message).Length,
                    lpData =message,
                };
                SendMessage(wpfWinHandel, WM_COPYDATA, 0, refparam);
            }
            else{
                Console.WriteLine("wpf窗口句柄为zero");
            }
        }

        /// <summary>
        ///wpf窗口订阅win32消息
        /// </summary>
        /// <param name="window">wpf窗口</param>
        /// <param name="action">接收到win32消息时要处理的action</param>
        public static void SubWin32Message(System.Windows.Window window,Action<string>action)
        {
            WindowInteropHelper win = newWindowInteropHelper(window);
            HwndSource hwndSource =HwndSource.FromHwnd(win.Handle);
            hwndSource.AddHook((IntPtr hwnd,int msg,IntPtr wparam,IntPtr iparam,ref bool handel)=>{
if ( msg ==
WM_COPYDATA )
{
Win32Message m = (Win32Message)Marshal.PtrToStructure(iparam, typeof(Win32Message));
action
?.Invoke(m.lpData);
}
returnIntPtr.Zero;
});
}
#endregion

免责声明:文章转载自《Wpf发送接收 win32消息》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇进阶:使用 EntityManagerOAuth2.0 四种授权方式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

基于Abp VNext框架设计

abp 通过IDistributedEventBus接口集成自IEventBus实现分布式事件消息的发布订阅。 IEventBus在什么时机触发PublishAsync? 当前UnitOfWork完成时,触发IEventBus的PublishAsync 在没有事务环境下,同步调用IEventBus的PublishAsync abp 默认实现基于Ra...

UVM基础之---------Reporting Classes

Reporting 类提供了一组工具用于格式化报告输出 report机制大概包括四个主要的类uvm_report_object,uvm_report_handler, uvm_report_server,uvm_report_catcher,UVM reporting主要的接口是uvm_report_object(这是一个接口类),这是uvm_compo...

web中打开word为什么老是提示无法打开宏储存?

是因为用户没有在服务器端运行Word的权限,应在服务器端做如下操作:1.开始--运行--dcomcnfg--Microsoft Word 文档--属性--身份标识--交互式用户否则会出现“消息筛选器显示应用程序正在使用中”的错误2.开始--运行--dcomcnfg--Microsoft Word 文档--属性--安全性--使用自定义访问权限--添加Ever...

Cocos2dx-3.0版本 从开发环境搭建(Win32)到项目移植Android平台过程详解

作为重量级的跨平台开发的游戏引擎,Cocos2d-x在现今的手游开发领域占有重要地位。那么问题来了,作为Cocos2dx的学习者,它的可移植特性我们就需要掌握,要不然总觉得少一门技能。然而这个时候各种各样的问题也就来了,之前网上一直有零零碎碎的移植教程,但是都不完整,或是有这样或者那样的问题。今天刚刚研究成功了Cocos2dx-3.0版本项目的安卓平台移植...

WPF入门(2)——数据绑定与INotifyPropertyChanged(INPC)

接上篇,我们在MainViewModel类中创建个属性: public string Name { get; set; } 然后去UI的xaml文件中binding一下: 此时运行程序是不会得到我们想要的结果的,因为还没有设置DataContext。 我们去设置下DataContext: debug下,按理说UI的button会找到DataContex...

WPF委托实现方法回调(刷新父窗体)

MainWindow.xaml(父窗体) <StackPanel> <Label Content="{Binding Message}"/> <Button Content="Input User Name" Command="{Binding OpenSubWindowCommand}"/> </...