当应用程序从任务栏隐藏时,未收到PostMessage

时间:2017-02-04 09:41:50

标签: c# winforms taskbar

如果另一个实例尝试打开,我使用PostMessage向我的应用程序发送消息: (CUSTOMTEXT替换为我的appname)

NativeMethods.PostMessage((IntPtr)NativeMethods.HWND_BROADCAST, NativeMethods.WM_CUSTOMTEXT_SHOWME, IntPtr.Zero, IntPtr.Zero);

在WndProc中,我收到了消息:

protected override void WndProc(ref Message m)
{
    if (m.Msg == NativeMethods.WM_CUSTOMTEXT_SHOWME)
    {
        MessageBox.Show("Message received");
    }

    base.WndProc(ref m);
}

和NativeMethods类:

class NativeMethods
{
    public const int HWND_BROADCAST = 0xffff;
    public static readonly int WM_CUSTOMTEXT_SHOWME = RegisterWindowMessage("WM_CUSTOMTEXT_SHOWME");

    [DllImport("user32")]
    public static extern bool PostMessage(IntPtr hwnd, int msg, IntPtr wparam, IntPtr lparam);

    [DllImport("user32")]
    public static extern int RegisterWindowMessage(string message);
}

一切正常,但当我从任务栏(this.ShowInTaskbar = false;)隐藏我的应用程序时,我的应用程序停止接收该消息。

为什么呢?有没有解决方法呢?

1 个答案:

答案 0 :(得分:1)

找到替代解决方案:我将PostMessage(asyncronous)替换为SendMessage(同步)。出于某种原因,SendMessage通过而PostMessage没有。

在这个应用程序中,我使用哪一个并不重要,因为在发送消息时,应用程序就会退出。如果Windows只需要很少的时间来处理此消息,则不会造成任何损害。 Point仅是较旧的应用程序实例接收此消息。