我正在创建一个C#WPF exe和一个C#DLL。在DLL中有一个名为StartRecording的函数。 exe调用此函数。该功能在第三方应用程序(例如MS Word)上安装低级鼠标和键盘挂钩。在钩子程序中,我收集与鼠标/键盘消息相关的详细信息以及用户与之交互的控件(使用UI自动化)的详细信息。
我想从DLL向exe发送已收集数据的通知,并且在通知本身中,我想发送数据。做这个的最好方式是什么?我能想到的一个选择是从dll向exe发送WM_COPY_DATA消息。但还有更好的方法吗?有没有办法可以将字典从dll发送到exe?
答案 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
中,其实现必须位于视图库/应用程序中。