Может быть, глупо, и я не уверен, что это может работать в течение нескольких сеансов.
Определить пользовательское сообщение и отправить его в широковещательную рассылку, используя PostMessage
;в вашем приложении перехватывайте входящие сообщения и, если вы получите свое, закройте изящно.
В службе:
public const int HWND_BROADCAST = 0xffff;
[DllImport("user32")]
public static extern bool PostMessage(int hwnd, int msg, int wparam, int lparam);
int WM_MYMSG = WM_USER + 1;
Когда вам нужно отправить сообщение:
PostMessage(HWND_BROADCAST,WM_MYMSG,0,0);
В вашем приложении:
int WM_MYMSG = WM_USER + 1;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_MYMSG) Close();
base.WndProc(ref m);
}
РЕДАКТИРОВАНИЕ:
Если вы хотите переопределить WndProc
, вам нужна форма, ноэто не значит, что вам нужно показывать форму: в вашем приложении создайте форму и запустите ее, а в коде формы вы пишете:
private void Form1_Shown(object sender, EventArgs e)
{
// Show here tray icon
....
....
// Hide form
this.Hide();
}
int WM_MYMSG = WM_USER + 1;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_MYMSG) Close();
base.WndProc(ref m);
}