如果另一个实例试图打开,我使用 PostMessage 向我的应用程序发送消息:(CUSTOMTEXT
替换为我的应用名称(
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;
(隐藏我的应用程序时,我的应用程序停止接收该消息。
为什么?有什么解决方法吗?
找到了替代解决方案:我用SendMessage
(同步(替换了PostMessage
(异步(。由于某种原因,SendMessage通过,而PostMessage没有。
在此应用程序中,我使用哪一个并不重要,因为当发送消息时,应用程序只会退出。如果 Windows 处理此消息所需的时间很少,则不会造成任何伤害。点只是应用程序的较旧实例收到此消息。