如果另一个实例尝试打开,我使用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;
)隐藏我的应用程序时,我的应用程序停止接收该消息。
为什么呢?有没有解决方法呢?
答案 0 :(得分:1)
找到替代解决方案:我将PostMessage
(asyncronous)替换为SendMessage
(同步)。出于某种原因,SendMessage通过而PostMessage没有。
在这个应用程序中,我使用哪一个并不重要,因为在发送消息时,应用程序就会退出。如果Windows只需要很少的时间来处理此消息,则不会造成任何损害。 Point仅是较旧的应用程序实例接收此消息。