Я уже некоторое время осматриваюсь и не могу найти хороший способ сделать это.
В основном у меня есть процесс на C # с использованием WPF (у которого нет видимого окна),что мне нужно обрабатывать события WM_ (например, WM_CLOSE
или WM_DESTROY
; чтобы я мог элегантно завершить работу, когда пользователь решит выйти из системы или перезагрузить компьютер).
Существует рядрешений, которые я видел там, которые предлагают использовать System.Windows.InteropServices
для вызова AddHook
и предоставить ему указатель на функцию, которая затем становится WndProc
.Проблема в том, что, насколько я могу судить, это зависит от того, действительно ли окно является видимым (и в этом случае нет окна).
Другой способ, который предлагается, но не работает, - переопределениеWndProc
метод WinForm, но этот процесс не имеет видимых форм или окон.
Я также нашел вещи, относящиеся к окну только для сообщений.Какое-то невидимое окно, которое все еще принимает события WM_.Из того, что я видел, это доступно только в Microsoft.WindowsCE.Forms
сборке.Я добавил ссылку на эту сборку в свой проект и поместил в подкласс MessageWindow, как указано по адресу: http://msdn.microsoft.com/en-us/library/microsoft.windowsce.forms.messagewindow.aspx, но он все еще не работает.Точки останова внутри WndProc не подвергаются ударам.
Любая подсказка?