如何使用 mouse/key 挂钩数据从 C# dll 发送通知到 wpf exe

How to send notification with mouse/key hook data from C# dll to wpf exe

我正在创建一个 C# WPF exe 和一个 C# DLL。 DLL中有一个叫做StartRecording的函数。 exe调用这个函数。该函数在第三方应用程序(例如 MS Word)上安装低级鼠标和键盘挂钩。在挂钩过程中,我收集了与 mouse/keyboard 消息相关的详细信息以及与用户交互的控件(使用 UI Automation)的详细信息。

我想从 DLL 向 exe 发送通知,告知数据已收集,在通知本身中,我想发送数据。做这个的最好方式是什么?我能想到的一种选择是将 WM_COPY_DATA 消息从 dll 发送到 exe。但是有没有更好的办法呢?有什么方法可以将字典从 dll 发送到 exe 吗?

这里有两个解决方案:

第一个: 您可以实施 event handler 并在您的 dll-class 中注册您的 ViewModel。看看这个 question - 实现您自己的自定义事件 - 如果需要的话。

第二个: 或者,如果您只有一个要收听的实例,则使用 interface

public interface IListen
{
    void SendMessage(string msg);

    void SendDictonary(IDictionary<object, object> dic);
}


public class MyDllClass
{
    public IListen Listener
    {
        get;
        set;
    }

    public void SomeMouseInputAppears()
    {
        if(Listener != null) Listener.SendMessage("sample");
    }

    public void SomeKeyboardInputAppears()
    {
        if (Listener != null) Listener.SendDictonary(new Dictionary<object,object>());
    }
}

当然 interface 在您的 dll 中,它的实现必须在视图库/应用程序中。