如何使用C#dll中的鼠标/键钩数据向wpf exe发送通知

时间:2017-06-30 08:01:48

标签: c# wpf dll keyboard-hook mouse-hook

我正在创建一个C#WPF exe和一个C#DLL。在DLL中有一个名为StartRecording的函数。 exe调用此函数。该功能在第三方应用程序(例如MS Word)上安装低级鼠标和键盘挂钩。在钩子程序中,我收集与鼠标/键盘消息相关的详细信息以及用户与之交互的控件(使用UI自动化)的详细信息。

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

1 个答案:

答案 0 :(得分:1)

以下是其中两个解决方案:

<强>首先: 您可以实施event handler并在您的dll级别注册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中,其实现必须位于视图库/应用程序中。