2011-08-28 3 views
15

제 3 자 라이브러리에서 팝업 창을 숨겨야합니다.Win32 : hWnd로 작업 표시 줄의 타사 창을 숨기는 방법

나는 SetWindowsHookEx으로 윈도우 훅을 구현했으며 새로 생성 된 hWnd (s)를 모두 알고있다. 나는 HSHELL_WINDOWCREATED 콜백을 듣고 다음을 수행하십시오

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

내가 잘못 여기에 작업 표시 줄에 newely 생성 창을 숨길합니까? 당신이 SetWindowLong를 사용하기 전에

+1

WS_EX_ *는 GWL_STYLE이 아닌 GWL_EXSTYLE로 가져 오거나 설정해야합니다. (WS_EX_TOOLWINDOW는 값 0x00000080을 가지고 있습니다.이 값을 _EXSTYLE 대신 GWL_STYLE로 사용하면 일반적으로 응용 프로그램 창에 사용되지 않는 Windows 스타일의 일부가 수정되므로 결국 아무 작업도 수행되지 않습니다. 윈도우 스타일은 일반적으로 컨트롤 관련 스타일 비트에 사용됩니다 (예 : 버튼의 경우 BS_BITMAP과 같은 값입니다). – BrendanMcK

답변

20

, 다음 ShowWindow(hWnd, SW_SHOW)처럼 다시 ShowWindow 전화, SetWindowLong를 호출 한 후, ShowWindow(hWnd, SW_HIDE)를 호출합니다. 그래서 코드는 다음과 같이 표시됩니다 여기에

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 

Microsoft's Website에서 관련 인용입니다 :

작업 표시 줄에 배치되는 윈도우 버튼을 방지하기 위해, 확장 WS_EX_TOOLWINDOW로 소유되지 않은 창을 만들 스타일. 대체 방법으로 숨겨진 창을 만들고 숨겨진 창 창을 보이는 창 소유자로 만들 수 있습니다.

셸에서는 창의 스타일이 표시되는 작업 표시 줄 단추를 지원하는 경우에만 작업 표시 줄에서 창 단추를 제거합니다. 동적으로 창 스타일을 표시 작업 표시 줄 단추를 지원하지 않는 스타일로 변경하려면 먼저 ShowWindow with SW_HIDE를 호출하여 창을 숨기고 창 스타일을 변경 한 다음 창을 표시해야합니다.

+0

죄송합니다. 이전에 성공적으로 숨긴 창은 이제 작업 표시 줄에 표시되고 표시됩니다. –

+0

@ 앤드류 아주 이상합니다. 그것은 작동하지 않을 수도 있지만 호기심을 위해서'ShowWindow (hWnd, SW_SHOW);를 호출 한 후에'SetWindowLong'을 시도해보십시오. 그래서 코드는'ShowWindow (hWnd, SW_HIDE); SetWindowLong (hWnd, GWL_STYLE, style); ShowWindow (hWnd, SW_SHOW); SetWindowLong (hWnd, GWL_STYLE, style);' –

+0

@Andrew 또한 SetWindowsHookEx에 대한 첫 번째 매개 변수로 어떤 플래그를 사용하고 있습니까? –

0

EX 플래그를 가져 오거나 설정하려면 GWL_EXSTYLE을 사용해야하며 EX 플래그에는 GWL_STYLE이 작동하지 않습니다.

관련 문제