2009-12-21 2 views
2

보조 모니터의 작업 표시 줄에서 작업하고 있습니다. 나는 그것을 꽤 잘 작동시킨다. 에어로 흐림 효과도 보입니다. 하지만 제 질문은 아마도 항공기와 관련이 없습니다.활성 창보기 유지

내가하고 싶은 일은 내 작업 표시 줄 창이 항상 집중된/활성화 된 것처럼 보이게하는 것입니다. 실제로 초점을 맞추거나 활성화 할 필요가 없습니다. 단지 그 방식으로 보길 원합니다. 당신은 app 유휴 상태에서 setforgroundwindow 호출을 넣음으로써 내가 지켜야 할 효과를 볼 수 있습니다. 그러나 나는 그런 식으로 초점을 맞추고 싶지 않기 때문에 그것을 사용할 수 없습니다. 나는 단지 초점이 맞았을 때와 같은 방식으로 항상보고 싶습니다.

모든 종류의 WM_XXX 메시지 호출 (트래핑과 보내기), setwindowpos 호출 시도, 계속해서 시도했습니다. 유일한 방법은 Mouse_Event를 호출하는 것입니다 (MOUSEEVENTF_LEFTDOWN 및 Mouse_Event (MOUSEEVENTF_LEFTUP.).이 솔루션은 마음에 들지 않습니다.하지만 실제로 Mouse_Event로 호출되는 것은 무엇이든지간에 나는 실제로 내 응용 프로그램을 클릭하거나 전화를 Mouse_Event 보내지 않고 일어날 수 있도록해야합니다.

+0

응용 프로그램은 작업 표시 줄처럼 보입니까? "진짜"작업 표시 줄에는 초점이 맞춰 지거나 보이지 않는 모양이 없기 때문에 물어 봅니다. 색상을 바꾸기위한 비 클라이언트 프레임이 없습니다. 나는 "초점을 맞춘"구절이 "unfocused"작업 표시 줄을 찾는 것이 무엇인지 이해하지 못한다고 생각합니다. –

+0

예, "aero"모드로 설정된 경우 win7 작업 표시 줄처럼 보입니다. blurbehind 코드를 구현해야했던 방식 때문에 내 작업 표시 줄을 클릭하면 활성화 된 것처럼 보였습니다. 그것을 클릭하면 비활성화 된 것처럼 보입니다. 아래 답변은 실제로 그것을 해결하는 데 도움이되었습니다. –

+0

여기 스크린 샷을보실 수 있습니다 : http://www.facebook.com/photo.php?pid=106932&l=8cf7240918&id=100000261298303 –

답변

3

당신은 당신이 또는이 관리 또는 관리되지 않는 코드 여부를 작업하는 어떤 언어로 말을하지 않습니다. C에 대한

++ 관리되지 않는 코드를 WM_NCACTIVATE 메시지를 처리하고 다음과 같이 항상 활성화 된 것처럼 보입니다 :

case WM_NCACTIVATE: 
    { 
    // wParam tells us whether we are active or inactive, but we are going to ignore 
    // that and always pass active down to DefWindowProc so it will draw us active. 
    DefWindowProc(hwnd, uMsg, TRUE, lParam); 
    //return FALSE; // returning false here prevents actual deactivation 
    return TRUE; // return true allows deactivation (even though we draw as active) 
    } 
    break; 

편집 : 델파이 코드의 솔루션 (더 읽기 쉽게 주석에서 옮겨 짐)

procedure TForm1.WndProc(var Message: TMessage); 
begin inherited; 
    if (Message.Msg = WM_NCACTIVATE) then 
    begin 
    DefWindowProc(handle, Message.Msg, 1, Message.LParam); 
    Message.Result := 1; 
    end; 
end; 
+0

감사합니다. 이 문제를 해결하기 위해 몇 시간을 보냈습니다. 나는 그것이 아마도 메시지 차단과 같은 간단한 것임을 알았지 만, 나는 원으로 가고 있었다. 그것은 델파이 코드입니다. 열쇠는 DefWindowProc 부분이었습니다. 고정 코드는 다음과 같습니다. procedure TForm1.WndProc (var Message : TMessage); begin 상속 된; if (Message.Msg = WM_NCACTIVATE) then begin DefWindowProc (handle, Message.Msg, 1, Message.LParam); Message.Result : = 1; 끝; 끝; –

+0

네, 당신은 정말로 자신의 비 클라이언트 영역을 그리는 사업에 들어가기를 정말로 원하지 않습니다. –