Приложение Windows не отображается на панели задач на Vista - PullRequest
1 голос
/ 02 марта 2010

У нас есть приложение на C #, которое отлично работает на Windows XP и Windows Vista, НО не показывает панель задач (только в Vista). В Windows Vista у приложения нет значка на нижней панели инструментов, т. Е. Если у меня открыто приложение, а затем я перехожу к другому приложению, единственный способ вернуться к нему - через alt + tab, я не могу щелкнуть значок внизу.

Другие функции приложения работают одинаково в XP и Vista. Посоветуйте, пожалуйста, как вернуть это на Vista?

С уважением,

Ответы [ 2 ]

1 голос
/ 03 марта 2010

Мы исправили это, установив для свойства showintaskbar свойства true значение.

Странно, что все ОС Windows не запускают приложения одинаково!

1 голос
/ 02 марта 2010

Windows использует биты расширенного стиля, чтобы решить, должно ли окно иметь значок на панели задач. Эти стили не доступны напрямую в C #, но должны быть установлены правильно, если ваша форма является обычной формой приложения.

Флаг, управляющий этим, - WS_EX_APPWINDOW, установленный в расширенных стилях окна формы верхнего уровня. Из CreateWindowEx документации

WS_EX_APPWINDOW Вызывает окно верхнего уровня на панель задач, когда окно видно.

Вы можете использовать Spy ++, чтобы увидеть, установлен ли этот флаг для вашего окна или нет. Единственный способ, которым я точно знаю, это установить - использовать interop.

[DllImport("user32.dll")]
static extern int SetWindowLong(IntPtr hWnd, int nIndex, IntPtr dwNewLong);

[DllImport("user32.dll", SetLastError = true)]
static extern int GetWindowLong(IntPtr hWnd, int nIndex);

const int GWL_EXSTYLE = -20;
const int WS_EX_APPWINDOW = 0x00040000;

int ExStyle = GetWindowLong(form.Handle, GWL_EXSTYLE);
SetWindowLong(form.Handle, GWL_EXSTYLE, new IntPtr(ExStyle | WS_EX_APPWINDOW));
...