2013-10-28 5 views
2

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

private const int SW_HIDE = 0x00; 
private const int SW_SHOW = 0x05; 
private const int WS_EX_APPWINDOW = 0x40000; 
private const int GWL_EXSTYLE = -0x14; 
private const int WS_EX_TOOLWINDOW = 0x0080; 

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

[DllImport("user32.dll")] 
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); 
bool isShow = true; 
private void toggle(Process p) 
{ 
    if (isShow) 
    { 
     isShow = false; 
     SetWindowLong(p.MainWindowHandle, GWL_EXSTYLE, WS_EX_APPWINDOW); 
     ShowWindow(p.MainWindowHandle, SW_SHOW); 
     ShowWindow(p.MainWindowHandle, SW_HIDE); 
     //Hide: working 

    } 
    else 
    { 
     isShow = true; 
     SetWindowLong(p.MainWindowHandle, GWL_EXSTYLE, WS_EX_APPWINDOW); 
     ShowWindow(p.MainWindowHandle, SW_HIDE); 
     ShowWindow(p.MainWindowHandle, SW_SHOW); 
     //Show: not working 
    } 
} 

Но теперь я хочу, панель задач, чтобы показать свою программу еще раз - кто знает, как это сделать Это?

+0

Можем ли мы увидеть код, который вызывает метод переключения? – Baldrick

ответ

4

По телефону SetWindowLong с параметром WS_EX_APPWINDOW вы не устанавливаете или не удаляете флаг, вы полностью заменяете расширенный стиль WS_EX_APPWINDOW. Вы можете не заметить его, так как не используете другие расширенные стили.

Правильный способ добавления флага стиля с SetWindowLong является:

SetWindowLong(p.MainWindowHandle, GWL_EXSTYLE, 
    GetWindowLong(p.MainWindowHandle, GWL_EXSTYLE) | WS_EX_APPWINDOW); 

Правильный способ удаления флага является:

SetWindowLong(p.MainWindowHandle, GWL_EXSTYLE, 
    GetWindowLong(p.MainWindowHandle, GWL_EXSTYLE) & ~WS_EX_APPWINDOW); 

Читайте о битовые операции, чтобы понять, почему это правильный путь делать это.

В качестве побочного примечания, ваш способ скрытия окна с панели задач довольно плох. Прежде всего, WS_EX_APPWINDOW не только скрывает кнопку на панели задач, но также изменяет стиль рамки окна. Кроме того, вы скрываете и просматриваете окно без веских оснований.

Правильный способ спрятать кнопку на панели задач - с помощью ITaskbarList::DeleteTab method.

Смежные вопросы