Как я могу слушать сообщения из DLL в C # - PullRequest
0 голосов
/ 05 июля 2011

У меня есть устройство, которое управляется стандартными Win32 DLL.Ответы устройства отправляются обратно через дескриптор окна приложения (требуется при подключении).Прямо сейчас, единственный способ посмотреть на сообщения - переопределить WndProc внутри формы, что весьма ограничивает.

Мое первоначальное намерение состояло в том, чтобы максимально изолировать обработку устройства без приложения от приложения.помещая все в dll, но эта зависимость мешает мне достичь этого.

Мне нужен какой-то хук, который позволит мне взглянуть на сообщения, получаемые формой (а-ля WndProc), но отмоя длл.Все, что я видел, показывает хуки из одной и той же формы, а не из dll.

О, кстати, я понимаю, что хуки также совместимы с WPF, и это также является обязательным требованием.

Любые мысли очень ценятся!

Ответы [ 2 ]

1 голос
/ 05 июля 2011

IMessageFilter дает только отправленные сообщения, а не отправленные сообщения. Конечно, мало что можно сделать, если код устройства настаивает на использовании главного окна приложения. Вам нужно будет добавить публичный метод, чтобы позволить основному приложению сообщить вам значение Handle его главного окна. Затем вы можете получить свой собственный класс из NativeWindow, чтобы создать подкласс этого главного окна и следить за его сообщениями. Используйте метод AssignHandle () и переопределите WndProc () для отслеживания. Обязательно вызовите DefWndProc () для любых сообщений, не связанных с устройством. Вам также необходимо обнаружить WM_CLOSE, чтобы вы могли отменить подкласс окна, вызвать ReleaseHandle ().

0 голосов
/ 05 июля 2011

Почему бы просто не добавить метод в DLL, которую вы вызываете из WndProc?

//In the DLL
public bool HandleMessage(/*args go here that I forget*/) {
    if(/*message is for me*/) {
        //handle it
        return true;
    }
    return false;
}

//in WndProc
if(MyObject.HandleMessage(/*args*/)) {
    return true;
}
//do whatever else
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...