Я довольно долго осматривался и, кажется, не могу найти хороший способ сделать это.
В основном у меня есть процесс 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 не достигаются.
Есть подсказка?