WPF与Win32通信

         之前有写到通过WPF来调用Win32框架,通过继承hwndHost类,实现WPF中加载Win32框架,同时,实现WPF对Win32的消息处理。但今天被老大问到,如何在WPF下响应win32的消息。

         比如在win32中使用sendMessage()向WPF主框架MainWindow发送一个消息,WPF框架如何能够捕获到这个消息了?

         之前按照老大的思想,尝试在hwndHost的消息过程WndProc中捕获该消息。结果调试发现,该过程函数中捕获的全是该win32控件的消息。也就是说投递给WPF的消息是没有办法在这里获取到的。既然是给WPF主界面的消息,自然要到该框架界面下去解决。

         如之前文章中描述的,WPF是以数据驱动的。WPF也有消息循环,只不过是它自己在维护着消息循环,用户不会接触到。那么如何得到消息了,这时候很自然想到了HOOK。捕获WPF进程的所有消息。对消息进行过滤。

         这时候,其实该想到WPF与Win32交互的另外一个类HwndSource。既然是win32与WPF通信,那么肯定是要跟这个类脱不了关系。通过查看该类,发现该类中提供了AddHook的方法。简直是crazy呀!这么给力!

         这时候就好办了,在WPF启动时注册一个钩子,监听消息事件,添加一个消息过程处理所有的窗口消息。在win32的dll中添加一个sendMessage(hWPFWndHWND,0x1234)。然后在消息过程中接受该消息就ok了。

         程序清单如下:

public void OnLoaded(object sender, RoutedEventArgs args)
{
(PresentationSource.FromVisual(this) as System.Windows.Interop.HwndSource).AddHook(new System.Windows.Interop.HwndSourceHook(WndProc)); 
}
IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
if (msg == 0x1234)
{
System.Console.WriteLine("test");
}
return hwnd;
} 
     好了,这时候我们可以在WndProc中处理所有的由Win32端传来的消息了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: WPF是Windows Presentation Foundation的缩写,是一种用于创建Windows应用程序框架技术。它提供了丰富的图形和多媒体功能,支持数据绑定、动态样式和模板等特性,使开发人员能够轻松地创建各种交互式的用户界面。而欧姆龙则是一家知名的电子制造公司,专注于工业自动化和电气组件领域。 WPF与欧姆龙以太网通信指的是使用WPF框架开发的应用程序与欧姆龙以太网设备进行通信的一种方式。在实际应用中,可以通过WPF提供的网络通信协议和库,结合欧姆龙以太网设备的通信接口,实现数据的交互与通信WPF框架提供了多种网络通信协议的支持,例如TCP/IP、UDP等,这些协议可以与欧姆龙以太网设备进行通信。通过使用WPF提供的网络类库,开发人员可以轻松地建立网络连接、发送和接收数据,实现与欧姆龙以太网设备的通信。 在使用WPF进行与欧姆龙以太网设备的通信前,需要了解欧姆龙以太网设备的通信协议和接口规范。根据具体的需求和设备要求,开发人员可以选择合适的通信方式和协议,进行数据的读取、写入和处理。 总之,WPF与欧姆龙以太网设备的通信是通过WPF框架提供的网络通信协议和库,与欧姆龙以太网设备的通信接口相结合,实现数据的交互和通信。这种方式使得开发人员能够灵活、高效地开发与欧姆龙以太网设备通信的应用程序。 ### 回答2: WPF(Windows Presentation Foundation)是一个用于创建Windows应用程序界面的框架,而欧姆龙是一家工业自动化和电子组件制造商。WPF与欧姆龙以太网通信意味着在使用WPF框架来开发Windows应用程序时,可以使用以太网协议与欧姆龙设备进行通信。 在WPF应用程序中实现与欧姆龙以太网通信需要通过网络编程来实现。首先,需要使用WPF的网络类来建立一个连接,这个类通常是Socket类。通过Socket类,可以指定要连接的欧姆龙设备的IP地址和端口号,同时还可以设置一些通信参数,如传输协议和数据格式等。 一旦连接建立成功,就可以使用Socket类提供的方法来发送和接收数据。可以发送各种命令和指令到欧姆龙设备,如读取设备状态、读取传感器数据、控制设备动作等。欧姆龙设备将相应的数据以特定格式返回给WPF应用程序。 在WPF应用程序中,可以通过定义和使用自定义的用户控件来实现与欧姆龙设备的交互界面。这些用户控件可以显示欧姆龙设备返回的数据,以及向设备发送命令和指令。 总之,通过WPF与欧姆龙以太网通信,可以实现工业自动化和电子组件控制应用的开发。WPF提供了丰富的界面设计和交互功能,而欧姆龙以太网协议提供了可靠的数据传输和设备控制功能,二者结合可以为用户带来便捷和高效的工作体验。 ### 回答3: WPF(Windows Presentation Foundation)是微软公司开发的一个用于构建客户端应用程序的技术框架。它提供了丰富的用户界面元素,以及强大的数据绑定和动画特效等功能。而欧姆龙以太网通信指的是在WPF应用程序中与欧姆龙以太网设备进行通信。 要实现WPF与欧姆龙以太网通信,首先需要确保WPF应用程序拥有与网络进行通信的权限。可以通过在WPF应用程序中引入适当的网络库或使用.NET Framework中的网络类来实现。 其次,需要了解欧姆龙以太网设备的通信协议。欧姆龙以太网设备通常使用TCP/IP协议进行通信。在WPF应用程序中,可以使用Socket类或HttpClient类等.NET中的网络类来与欧姆龙以太网设备建立连接,并发送和接收数据。 在与欧姆龙以太网设备通信时,可以使用设备的IP地址和端口号来建立连接。一旦连接建立成功,就可以通过发送特定的命令或数据包来与设备进行通信接收到的数据可以通过解析和处理来获取需要的信息。 在WPF应用程序中,可以使用异步编程模型(Async/Await)来处理与欧姆龙以太网设备的通信。这样可以避免在界面线程上进行阻塞,提高应用程序的响应性能。 总之,要实现WPF与欧姆龙以太网通信,需要掌握网络编程知识,并使用适当的.NET网络类来与设备建立连接并发送和接收数据。同时,还需了解欧姆龙以太网设备的通信协议,并根据需要解析和处理通信数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值