#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 struct Win32Message
{
public IntPtr dwData;
public int cbData;
[MarshalAs (UnmanagedType.LPStr)]
public string lpData;
} [DllImport("user32.dll")]
private static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, ref Win32Message lParam); /// <summary>
/// 返回wpf主窗体句柄
/// </summary>
/// <param name="processName">wpf进程名</param>
/// <returns></returns>
public static IntPtr GetWpfMainwindowHandel(string processName)
{
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,string message )
{
if (wpfWinHandel != IntPtr.Zero)
{
var param = new Win32Message
{
dwData = (IntPtr),
cbData = System.Text.Encoding.Default.GetBytes(message).Length,
lpData = message,
};
SendMessage(wpfWinHandel, WM_COPYDATA, , ref param);
}
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 = new WindowInteropHelper(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);
          }
         return IntPtr.Zero;
       });
     } #endregion

Wpf发送接收 win32消息的更多相关文章

  1. Spring使用MappingJackson2MessageConverter发送接收ActiveMQ消息

    一.Spring使用JmsTemplate简化对JMS的访问 在JAVA对JMS队列访问中,使用默认的JMS支持将存在大量的检查型异常.通过Spring的支持,可以将所有的JMS的检查型异常转换为运行 ...

  2. [3] MQTT,mosquitto,Eclipse Paho---怎样使用 Eclipse Paho MQTT工具来发送订阅MQTT消息?

    在上两节,笔者主要介绍了 MQTT,mosquitto,Eclipse Paho的基本概念已经怎样安装mosquitto. 在这个章节我们就来看看怎样用 Eclipse Paho MQTT工具来发送接 ...

  3. activemq安装与简单消息发送接收实例

    安装环境:Activemq5.11.1, jdk1.7(activemq5.11.1版本需要jdk升级到1.7),虚拟机: 192.168.147.131 [root@localhost softwa ...

  4. GCM 发送接收消息 Message Client Server 服务器端,客户端

    GCM 传递参数 最近用了很多时间做GCM,由于碰到很多问题,因此详细做一下记录,以方便各位网友,不用再走我的重复的路.不过我试了一下GCM在国内很不好用.假如开发国外的程序的话,用GCM倒是很不错的 ...

  5. 如何使用C#和VB发送和接收MSMQ消息

    在这篇博客中,我们将就如何实现System.Messaging类发送和接收的XML消息发送从MSMQ队列,你可能会遇到接收的XML消息的一些问题. 我们将首先加入参考System.Messaging ...

  6. 【Spring】使用Spring和AMQP发送接收消息(上)

    讲AMQP之前,先讲下传统的JMS的消息模型,JMS中主要有三个参与者:消息的生产者.消费者.传递消息的通道(队列或者主题),两种消息模型如下:通道是队列: 通道是队列: 通道是主题: 在JMS中,虽 ...

  7. Rabbitmq消息队列(二) Hello World! 模拟简单发送接收

    1.简介 RabbitMQ是消息代理:它接受和转发消息.你可以把它当作一个邮局:当你把你要邮寄的邮件放在信箱里时,你可以肯定Postman先生最终会把邮件送到你的收件人那里.在这个比喻中,Rabbit ...

  8. RabbitMQ:消息发送确认 与 消息接收确认(ACK)

    默认情况下如果一个 Message 被消费者所正确接收则会被从 Queue 中移除 如果一个 Queue 没被任何消费者订阅,那么这个 Queue 中的消息会被 Cache(缓存),当有消费者订阅时则 ...

  9. 2.技巧: 用 JAXM 发送和接收 SOAP 消息—Java API 使许多手工生成和发送消息方面必需的步骤自动化

    转自:https://www.cnblogs.com/chenying99/archive/2013/05/23/3094128.html 技巧: 用 JAXM 发送和接收 SOAP 消息—Java ...

随机推荐

  1. POJ - 2236Wireless Network-并查集

    id=11125" target="_blank" style="color:blue; text-decoration:none">POJ - ...

  2. RAC sysdate

    rac的sysdate可能不一致,这个需要注意.

  3. [Ramda] Count Words in a String with Ramda's countBy and invert

    You can really unlock the power of ramda (and functional programming in general) when you combine fu ...

  4. Dubbo服务框架解析(二)

    本节介绍dubbo-common,dubbo-common是公共逻辑模块,包含Util类.通用模型,是其他模块的基础. 扩展机制 SPI SPI是扩展点的注解.标注在类型上.全部的扩展点须要通过SPI ...

  5. Xcode7 不能使用http网络请求问题解决

    最近使用Xcode 7.0 写代码,发送网路请求提示:  App Transport Security has blocked a cleartext HTTP (http://) resource ...

  6. SignalR+AForge实现视频会话[WPF]

    原文:SignalR+AForge实现视频会话[WPF] 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/lordwish/article/detai ...

  7. Spring boot传统部署

    使用spring boot很方便,一个jar包就可以启动了,因为它里面内嵌了tomcat等服务器. 但是spring boot也提供了部署到独立服务器的方法. 如果你看文档的话,从jar转换为war包 ...

  8. javascript学习-创建json对象数据,遍历

    之前我已经有讲过后台返回json数据到前台,并在前台遍历json数据. 这里讲下直接在JS里创建JSON数据,然后遍历使用~ 创建代码例如以下:(创建的是JSON对象) var YearSelect ...

  9. vue axios拦截器加全局loading

    import axios from 'axios' import util from './util' import {showFullScreenLoading, tryHideFullScreen ...

  10. 给博客签上CC协议

    大家都知道开源软件.通过开放源代码的方式,允许用户学习.修改.增进提高这些软件质量.软件界的开源协议很多,比如常见的 Apache,BSD,GPL 等等.这是一种充分利用网络的便利性,鼓励分享和创新的 ...