2013-08-04 2 views

답변

8

"handle"은 시스템의 리소스 (메뉴, DLL 모듈, 메모리 블록 등)를 식별하는 토큰을 지칭하는 데 사용되는 일반적인 용어입니다. 일반적으로 "마법 쿠키"라고 불리는이 쿠키는 일반적으로 리소스를 처음 만들 때 반환됩니다. 그 핸들을 리소스 처리를 담당하는 API의 다른 함수에 전달합니다. 그러나 일반적으로 손잡이가 무엇인지 알 필요가 없습니다. 때로는 포인터 일 수도 있고, 다른 숫자 일 수도 있고, 구조 일 수도 있습니다. 그래서 HWND와 같은 이름을 사용하여 숨길 수 있습니다. HWND는 API 함수 "CreateWindow()"가 반환 한 창을 식별하는 데 사용되는 핸들입니다. 따라서 HWND는 이미 "핸들"(사용자가 만든 창을 식별하는 핸들)이기 때문에 "핸들"을 HWND로 변환하지 않습니다.

는 여기 http://forums.codeguru.com/showthread.php?135438-Handle-and-HWND

당신이 당신에 HWND는 핸들을 만 있으면 얻을 수 있도록해야한다 http://msdn.microsoft.com/en-us/library/windows/desktop/ms633499(v=vs.85).aspx

응용 프로그램에서 HWND를 얻을 수를 FindWindow를 사용할 수

당신이 C++ Handle as HWND?

을 찾고
+0

옙, tks !,하지만 핸들에서 hwnd로 변환 할 수 있습니까? – Thangnv

+1

@ Thangnv 이것은 "void *에서 int *로 변환 할 수 있습니까?"라고 묻는 것과 같습니다. 그것은 달려있다. 네 손잡이가 뭐니? – timothyqiu

+0

내 핸들이 스레드이며 전경에서 실행하고 싶지만 SetForegroundWindow (HWND hWnD) 함수에서 HWND가 아닙니다. – Thangnv

27

그들은 단지 abstract data types입니다.

  • HANDLE 개체에 handle이다으로 MSDN, HANDLEHWND 따르면

    정의된다.

  • HWND은 창에 대한 핸들입니다.

그래서하는 HWNDHANDLE이지만, 모든 HANDLEHWND이다. 사실 : 당신은 당신이 무엇을하고 있는지 알지 못한다면

typedef void *PVOID; 
typedef PVOID HANDLE; 
typedef HANDLE HWND; 

SetForegroundWindowHWND을 통과해야한다.

HWND hWnd = FindWindow(NULL, "Calculator"); 
SetForegroundWindow(hWnd); 

이 첫 번째 FindWindow에 "계산기"라는 제목의 창 핸들을 가져오고 가져 오는 전경 창.

+4

이러한 typedef는 'STRICT'가 정의되지 않은 경우에만 사용됩니다. 존재한다면, HWND는 더 이상 HANDLE로 정의되지 않고, 유일하고 독립적 인 데이터 유형으로 정의됩니다. –

+3

@RemyLebeau'typedef '부분은 [공식 문서] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751%28v=vs.85%29.aspx)에서 인용되었습니다. (하지만 머리글을 확인했는데 설명 된대로 정의되었습니다. 감사합니다.) – timothyqiu

관련 문제