Wpf发送接收 win32消息
#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消息的更多相关文章
- Spring使用MappingJackson2MessageConverter发送接收ActiveMQ消息
一.Spring使用JmsTemplate简化对JMS的访问 在JAVA对JMS队列访问中,使用默认的JMS支持将存在大量的检查型异常.通过Spring的支持,可以将所有的JMS的检查型异常转换为运行 ...
- [3] MQTT,mosquitto,Eclipse Paho---怎样使用 Eclipse Paho MQTT工具来发送订阅MQTT消息?
在上两节,笔者主要介绍了 MQTT,mosquitto,Eclipse Paho的基本概念已经怎样安装mosquitto. 在这个章节我们就来看看怎样用 Eclipse Paho MQTT工具来发送接 ...
- activemq安装与简单消息发送接收实例
安装环境:Activemq5.11.1, jdk1.7(activemq5.11.1版本需要jdk升级到1.7),虚拟机: 192.168.147.131 [root@localhost softwa ...
- GCM 发送接收消息 Message Client Server 服务器端,客户端
GCM 传递参数 最近用了很多时间做GCM,由于碰到很多问题,因此详细做一下记录,以方便各位网友,不用再走我的重复的路.不过我试了一下GCM在国内很不好用.假如开发国外的程序的话,用GCM倒是很不错的 ...
- 如何使用C#和VB发送和接收MSMQ消息
在这篇博客中,我们将就如何实现System.Messaging类发送和接收的XML消息发送从MSMQ队列,你可能会遇到接收的XML消息的一些问题. 我们将首先加入参考System.Messaging ...
- 【Spring】使用Spring和AMQP发送接收消息(上)
讲AMQP之前,先讲下传统的JMS的消息模型,JMS中主要有三个参与者:消息的生产者.消费者.传递消息的通道(队列或者主题),两种消息模型如下:通道是队列: 通道是队列: 通道是主题: 在JMS中,虽 ...
- Rabbitmq消息队列(二) Hello World! 模拟简单发送接收
1.简介 RabbitMQ是消息代理:它接受和转发消息.你可以把它当作一个邮局:当你把你要邮寄的邮件放在信箱里时,你可以肯定Postman先生最终会把邮件送到你的收件人那里.在这个比喻中,Rabbit ...
- RabbitMQ:消息发送确认 与 消息接收确认(ACK)
默认情况下如果一个 Message 被消费者所正确接收则会被从 Queue 中移除 如果一个 Queue 没被任何消费者订阅,那么这个 Queue 中的消息会被 Cache(缓存),当有消费者订阅时则 ...
- 2.技巧: 用 JAXM 发送和接收 SOAP 消息—Java API 使许多手工生成和发送消息方面必需的步骤自动化
转自:https://www.cnblogs.com/chenying99/archive/2013/05/23/3094128.html 技巧: 用 JAXM 发送和接收 SOAP 消息—Java ...
随机推荐
- Matlab图像处理系列4———图像傅立叶变换与反变换
注:本系列来自于图像处理课程实验.用Matlab实现最主要的图像处理算法 1.Fourier变换 (1)频域增强 除了在空间域内能够加工处理图像以外.我们还能够将图像变换到其它空间后进行处理.这些方法 ...
- Sift算子特征点提取、描述及匹配全流程解析
Sift之前的江湖 在Sift横空出世之前,特征点检测与匹配江湖上占据霸主地位的是角点检测家族.先来探究一下角点家族不为人知的恩怨情仇. 角点家族的族长是Moravec在1977年提出的Moravec ...
- AndroidStudio如何配置NDK/JNI开发环境
参考文章: http://www.th7.cn/Program/Android/201509/550864.shtml http://www.open-open.com/lib/view/open14 ...
- 【hdu 4315】Climbing the Hill
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...
- 《写给大忙人看的Java SE 8》——Java8新特性总结
阅读目录 接口中的默认方法和静态方法 函数式接口和Lambda表达式 Stream API 新的日期和时间 API 杂项改进 参考资料 回到顶部 接口中的默认方法和静态方法 先考虑一个问题,如何向Ja ...
- boost1.59编译安装(可以完全安装,也可定制安装--buildtype=complete,link=static)
1.下载: 网址:http://sourceforge.net/projects/boost/files/boost/1.59.0/ 选择:boost_1_59_0.7z或者boost_1_59_0. ...
- 【codeforces 782B】The Meeting Place Cannot Be Changed
[题目链接]:http://codeforces.com/contest/782/problem/B [题意] 每个人都有一个速度,只能往上走或往下走; 然后让你找一个地方,所有人都能够在t时间内到达 ...
- 解决gdb 调试 core 文件函数名显示为问号的问题
关于gdb调试core文件总是一堆问号的问题 问题描写叙述:已经在编译选项中增加了-g,可是查看core文件时.还是一堆问号,使用的命令为:gdb -c core 解决方式:因为gdb -c core ...
- Docker Redis 安装
原文:Docker Redis 安装 拉取官方的镜像 docker pull redis:3.2 查看 docker images redis 运行容器 docker run -p 6379:6379 ...
- 【29.89%】【codeforces 734D】Anton and Chess
time limit per test4 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...