Я использую PostMessage, чтобы отправить сообщение с заявкой, если другой экземпляр пытается открыть: (CUSTOMTEXT
заменен моим APPNAME)PostMessage не получил, когда приложение скрыто от панели задач
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;
), мое приложение перестает получать это сообщение.
Почему? Есть ли обходной путь для этого?
Yuck, это изящество кувалды. Изменение свойства ShowInTaskbar одинаково слабее, слишком много побочных эффектов, способ, которым Winforms реализует его, сравнивается с ремоделированием вашей кухни, сначала срывая дом. Какой способ двигаться вперед не является очевидным из вопроса, подумайте, не * * скрывая кнопку панели задач. Он также невидим, когда вы скрываете окно. Используйте Hide(). –
Приложение представляет собой настраиваемую программу запуска, которая появляется без полей при нажатии на лоток/с помощью глобальной горячей клавиши/пытается запустить новый экземпляр из ярлыка панели задач. Поэтому ShowInTaskbar должен быть ложным. Я не знаю лучшего решения для этого. – darx