使用Mono发送Windows消息

时间:2011-03-23 19:59:45

标签: .net windows mono message-queue sendmessage

是否可以使用Mono将Windows消息(WM _...)发送到其他应用程序(假设我的应用程序在Windows上运行)?另一个相关的问题是,是否有任何方法可以在Mono应用程序中使用DDE?

谢谢!

2 个答案:

答案 0 :(得分:2)

好吧,如果我是你,我会偏离

  • mono to winapi32
  • 使用winapi32发送赢取消息

所以只需尝试任何“hello_world”样本。 (我现在没有单声道,对不起)

例如,您可以编译以下代码:

(从http://boycook.wordpress.com/2008/07/29/c-win32-messaging-with-sendmessage-and-wm_copydata/被盗)

using System.Runtime.InteropServices;
public class MessageHelper
{

[DllImport("User32.dll")]
public static extern int SendMessage(int hWnd, int Msg, int wParam, 
ref COPYDATASTRUCT lParam);
}

//Used for WM_COPYDATA for string messages
public struct COPYDATASTRUCT
{
   public IntPtr dwData;
   public int cbData;
   [MarshalAs(UnmanagedType.LPStr)]
   public string lpData;
}

我想它会编译,当你调用

时它不会出现DllNotFoundException或EntryPointNotFoundException
MessageHelper.SendMessage(100, 100, new COPYDATASTRUCT());

如果您对此有一些问题...嗯..您可以托盘在运行时加载mscorlib.dll。 但这种方式有难闻的气味。

此外,您可以在http://www.mono-project.com/Interop_with_Native_Libraries

找到一些详细信息

答案 1 :(得分:2)

是的,您应该能够在Windows应用程序上向Mono发送WM_ *消息,就像任何其他Windows应用程序一样。

在Windows上运行时,Mono Winforms会模仿并集成常规Windows消息泵。