【问题标题】:Send windows messages with Mono使用 Mono 发送 windows 消息
【发布时间】:2011-07-21 14:54:39
【问题描述】:

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

谢谢!

【问题讨论】:

    标签: .net windows mono message-queue sendmessage


    【解决方案1】:

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

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

    【讨论】:

    • @brian ...不确定,但我怀疑为 GTK# 工具包编写的应用程序可以在 Windows 上运行。
    • 谢谢。我认为 GTK# 是跨平台的,因为上面写了 monodevelop。
    • 我假设 Gtk+ 在某种程度上必须与 Windows 消息泵进行交互,但我不知道它对您的自定义消息的接受程度如何。
    【解决方案2】:

    好吧,如果我是你,我会从

    • 单声道到 winapi32
    • 使用winapi32发送win消息

    所以只需尝试任何“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

    【讨论】:

    • 这个问题有点模糊。我不知道你已经拥有什么以及你真正需要什么。例如,您应该在将接收您的消息的窗口上接收处理程序。也许您还想注册自己的窗口消息。或者如果你很确定你的程序只能在 WinXp 或更高版本上使用,你可以尝试使用 mscorlib.dll [](msdn.microsoft.com/en-us/library/…) 等等)))
    • 谢谢。即使我使用 GTK# 工具包,这似乎也有效,对吧? (对不起,我是新手)。谢谢!
    • 正确。 GTK# 只是一个框架。有时我将单声道程序集与 MS.NET 程序集混合在一起。那工作得很好。另一方面,由于您使用 GTK#,您似乎想要跨平台应用程序。在这种情况下,您可能必须使用动态加载之类的东西。我不确定您的应用在 linux 上是否具有 p/invoke 行为。
    • 非常感谢!我有一个附带问题,Linux/Mac 是否有类似的机制?基本上,我想将按键事件发送到其他应用程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 2011-03-09
    • 2010-12-02
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    相关资源
    最近更新 更多