Win32: Come hide le windows di terze parti nella barra delle applicazioni di hWnd

Devo hide le windows popup nella libreria di terze parti.

Ho implementato roba di windows hook con SetWindowsHookEx e conosco tutti gli hWnd (i) appena creati. HSHELL_WINDOWCREATED callback HSHELL_WINDOWCREATED e faccio quanto segue:

 long style= GetWindowLong(hWnd, GWL_STYLE); style &= ~(WS_VISIBLE); // this works - window become invisible style |= WS_EX_TOOLWINDOW; // flags don't work - windows remains in taskbar style &= ~(WS_EX_APPWINDOW); SetWindowLong(hWnd, GWL_STYLE, style); 

Cosa faccio di sbagliato qui per hide windows appena create nella barra delle applicazioni?

Prima di utilizzare SetWindowLong , chiamare ShowWindow(hWnd, SW_HIDE) , quindi chiamare SetWindowLong , quindi richiamare nuovamente ShowWindow(hWnd, SW_SHOW) come ShowWindow(hWnd, SW_SHOW) . Quindi il tuo codice sarà simile a questo:

 long style= GetWindowLong(hWnd, GWL_STYLE); style &= ~(WS_VISIBLE); // this works - window become invisible style |= WS_EX_TOOLWINDOW; // flags don't work - windows remains in taskbar style &= ~(WS_EX_APPWINDOW); ShowWindow(hWnd, SW_HIDE); // hide the window SetWindowLong(hWnd, GWL_STYLE, style); // set the style ShowWindow(hWnd, SW_SHOW); // show the window for the new style to come into effect ShowWindow(hWnd, SW_HIDE); // hide the window so we can't see it 

Ecco una citazione pertinente dal sito Web di Microsoft :

Per impedire che il pulsante della finestra venga posizionato sulla barra delle applicazioni, creare la finestra sconosciuta con lo stile esteso WS_EX_TOOLWINDOW. In alternativa, puoi creare una finestra nascosta e rendere questa finestra nascosta il proprietario della tua finestra visibile.

Shell rimuoverà il pulsante di una finestra dalla barra delle applicazioni solo se lo stile della finestra supporta i pulsanti visibili della barra delle applicazioni. Se si desidera modificare dynamicmente lo stile di una finestra in uno che non supporta i pulsanti visibili della barra delle applicazioni, è necessario prima hide la finestra (chiamando ShowWindow con SW_HIDE), modificare lo stile della finestra e quindi visualizzare la finestra.

È necessario utilizzare GWL_EXSTYLE per ottenere / impostare i flag EX, GWL_STYLE non funzionerà con i flag EX.