我正在创建一个C# WPF exe和一个C# DLL。DLL中有一个名为StartRecording的函数。exe 调用此函数。该功能在第三方应用程序(例如MS Word(上安装低级鼠标和键盘挂钩。在挂钩过程中,我收集与鼠标/键盘消息相关的详细信息,以及用户与之交互的控件的详细信息(使用 UI 自动化(。
我想从 DLL 向 exe 发送一条通知,告知已收集数据,并且在通知本身中,我想发送数据。最好的方法是什么?我能想到的一种选择是将WM_COPY_DATA消息从 dll 发送到 exe。但是有更好的方法吗?有没有办法将字典从 dll 发送到 exe?
以下是许多解决方案中的两个:
首先:你可以实现一个event handler
并在你的dll类中注册你的ViewModel
。如果需要,请查看此问题 - 以实现您自己的自定义事件。
第二:或者,如果你只有一个实例可以监听,你就用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
中,它的实现必须在视图库/应用程序中。