c ++ - Win32: Sådan skjuler du 3rd party windows i proceslinjen ved hWnd

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg skal skjule popup-vinduer i tredjepartsbibliotek.


Jeg har implementeret Windows krogfiler med SetWindowsHookEx og kender alle de nyligt oprettede hWnd (s). Jeg lytter til HSHELL\_WINDOWCREATED tilbagekald og gør følgende: [9]


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);      


Hvad gør jeg forkert her for at skjule nyligt oprettede vinduer i proceslinjen?

Bedste reference


Inden du bruger SetWindowLong, skal du ringe ShowWindow(hWnd, SW\_HIDE) og derefter ringe til SetWindowLong og derefter ringe ShowWindow igen som ShowWindow(hWnd, SW\_SHOW). Så din kode vil se sådan ud:


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


Her er et relevant citat fra Microsofts hjemmeside: [10]



  For at forhindre, at vindueknappen bliver placeret på proceslinjen, skal du oprette
  det uanmeldte vindue med WS\_EX\_TOOLWINDOW udvidet stil. Som en
  Alternativt kan du oprette et skjult vindue og gøre det skjult
  vindue ejeren af ​​dit synlige vindue.

  
  Skallen fjerner kun et vindues knapper fra proceslinjen, hvis
  Vinduets stil understøtter synlige proceslinjeknapper. Hvis du vil
  dynamisk ændre et vindues stil til en, der ikke understøtter
  Synlige proceslinjeknapper, du skal skjule vinduet først (ved at ringe
  ShowWindow med SW\_HIDE), ændrer vinduestilstanden, og viser derefter
  vindue.


Andre referencer 1


Du skal bruge GWL\_EXSTYLE for at få/indstille EX-flag, GWL\_STYLE fungerer ikke for EX-flag.