2012-02-10 2 views

답변

2

완전히 다른 값을 반환하므로 서로 바꿔 사용할 수 없습니다.

GetDesktopWindowHWND를 반환, 윈도우에 대한 핸들입니다 :

HWND WINAPI GetDesktopWindow(void); 

OpenInputDesktop 동안 다시 표시 HDESK, 핸들이하는 것입니다 당신은 문서에 그 기능 서명을 보면 알 수 있습니다 바탕 화면 :

HDESK WINAPI OpenInputDesktop(
    __in DWORD dwFlags, 
    __in BOOL fInherit, 
    __in ACCESS_MASK dwDesiredAccess 
); 

따라서 사용하는 값은 분명히 필요한 값 유형에 따라 다릅니다. Desktop functions에는 모두 HDESK의 매개 변수가 필요합니다. 모든 창 조작 함수는 창 (HWND)에 대한 핸들을 요구합니다.

GetDesktopWindow 함수에 의해 반환 된 것과 같이 데스크톱 창을 남용하는 것에 대해 사용자에게주의를주지 않으면 나는 좌절 할 것입니다. 그들이 무엇에 관해서는 The desktop window is very special.

16

:

GetDesktopWindow()은 '루트'호출 스레드가 현재와 관련된 중 바탕 화면의 HWND을 반환 "뿌리를 얻으십시오 HWND"로 생각하는 것이 좋습니다. 다른 모든 windows/HWND은 바탕 화면에 있습니다. 어떻게 든이 자손입니다. 최상위 창은 직접적인 자식입니다. (메시지 전용 창은 특수한 경우로, HWND 트리에 나타나지 않지만 여전히 바탕 화면에 속합니다.) 모든 파일과 아이콘이있는 배경의 창과 같지 않습니다. 그것, 아마도 적절하게 "쉘 데스크톱"창이라고 부르면, GetShellWindow()을 사용하여 그것을 얻을 수 있습니다 - 그것은 특별한 유형의 최상위 창인 것 같습니다.

OpenInputDesktop()은 현재 활성화되어 있고 사용자 입력을받는 데스크톱 중 HDESK을 반환합니다. 각 바탕 화면에는 루트 창 또는 '바탕 화면'창을 뿌리로하는 HWND의 자체 트리가 있습니다.

이러한 것들이 어떻게 관련되어 있느냐에 따라 일단 HDESK가 있으면 SetThreadDesktop을 사용하여 해당 데스크탑을 스레드의 기본 데스크탑으로 설정할 수 있습니다. GetDesktopWindow를 호출하면 해당 데스크톱의 루트 HWND가 반환됩니다. 입력 데스크톱이 잠긴 데스크톱 인 경우 일반적으로 해당 HDESK를 사용할 수있는 권한이 있어야합니다. GetThreadDesktop()을 사용하여 현재 스레드에 대해 HDESK을 가져올 수도 있습니다. 응용 프로그램이 루트 창을 얻기 위해 이것을 사용하고 거기에 아마 GetWindow() 또는 유사한을 사용하는 통과 할 수 타입 - 스파이 ++ - 당신이 당신의 응용 프로그램에 바탕 화면의 HWND 트리를 탐색하기를 원한다면 당신은 GetDesktopWindow()을 사용할 수 있습니다

. 하지만 대부분의 앱은 자신을 행복하게 지켜주고 있으므로 다른 창문이 무엇인지 알 필요가 없습니다. 아마도 한 가지 일반적인 사용은 임의의 창이 최상위 수준인지 확인하는 것입니다. GetAncestor(hwnd, GA_PARENT)을 사용하고 반환 값이 GetDesktopWindow()과 일치하는지 확인하십시오.

OpenInputDesktop()은 아마도 거의 사용되지 않습니다. 대부분의 앱은 시작된 데스크톱에 앉아서 거기에 머물러 있습니다.아마도 사용자가 전환 할 수있는 여러 데스크톱을 만든 데스크톱 전환 유틸리티를 작성한 경우 해당 앱 또는 다른 앱에서 UI를 표시하기 전에 현재 사용중인 앱인지 확인할 수 있습니다.하지만 그다지 일반적인 시나리오는 아닙니다. 조금도. 한 단계에서 돋보기 나 스크린 리더 또는 데스크톱을 전환 할 때 "사용자를 따르기"를 원하는 UI가있는 다른 앱을 작성할 수는 있지만 보안이 유지 된 잠긴 데스크톱에서는 작동하지 않을 수 있습니다. 이러한 유형의 앱은 다른 방법으로 대신 해당 사례를 사용해야합니다.

+0

정확히 내가 원하는 내용. 나는 그들이 서로 어떻게 관련되어 있는지 알고 싶어했다. 고마워 친구! – Quest

관련 문제