0

I am creating a C# WPF exe and a C# DLL. There is a function called StartRecording in DLL. The exe calls this function. The function installs Low-level mouse and keyboard hooks on a third party application (e.g. MS Word). Inside the hook procedures, I collect details related to the mouse/keyboard message and also the details of the control (using UI Automation) with which the user interacts.

I want to send a notification from the DLL to the exe that data have been collected and in the notification itself, I want to send the data. What is the best way to do this? One option, I can think of is to send WM_COPY_DATA message from the dll to the exe. But is there any better way? Is there a way by which I can send a Dictionary from the dll to the exe?

Avinash
  • 385
  • 3
  • 11
  • 26

1 Answers1

1

Here are two of many solutions to this:

First: You could implement an event handler and register your ViewModel at your dll-class. Check out this question - to implement your own custom event - if even needed.

Second: Or you go with an interface if you only have one instance to listen.

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>());
    }
}

Of course the interface is in your dll and the implementation of it has to be in the view library / application.

Peter
  • 1,655
  • 22
  • 44