기능 SetForegroundWindow(HWND hWnD)
을 사용하려고합니다. 핸들이 있지만 위의 함수의 매개 변수로 작동하지 않습니다. 내 손잡이는 스레드이며 전경에서 실행하고 싶습니다.Windows API에서 HANDLE과 HWND의 차이점은 무엇입니까?
HWND와 HANDLE의 차이점은 무엇입니까?
기능 SetForegroundWindow(HWND hWnD)
을 사용하려고합니다. 핸들이 있지만 위의 함수의 매개 변수로 작동하지 않습니다. 내 손잡이는 스레드이며 전경에서 실행하고 싶습니다.Windows API에서 HANDLE과 HWND의 차이점은 무엇입니까?
HWND와 HANDLE의 차이점은 무엇입니까?
"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를 사용할 수
을 찾고그들은 단지 abstract data types입니다.
그래서하는 HWND
는 HANDLE
이지만, 모든 HANDLE
들 HWND
이다. 사실 : 당신은 당신이 무엇을하고 있는지 알지 못한다면
typedef void *PVOID;
typedef PVOID HANDLE;
typedef HANDLE HWND;
만 SetForegroundWindow
에 HWND
을 통과해야한다.
HWND hWnd = FindWindow(NULL, "Calculator");
SetForegroundWindow(hWnd);
이 첫 번째 FindWindow
에 "계산기"라는 제목의 창 핸들을 가져오고 가져 오는 전경 창.
이러한 typedef는 'STRICT'가 정의되지 않은 경우에만 사용됩니다. 존재한다면, HWND는 더 이상 HANDLE로 정의되지 않고, 유일하고 독립적 인 데이터 유형으로 정의됩니다. –
@RemyLebeau'typedef '부분은 [공식 문서] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa383751%28v=vs.85%29.aspx)에서 인용되었습니다. (하지만 머리글을 확인했는데 설명 된대로 정의되었습니다. 감사합니다.) – timothyqiu
HWND는 HANDLE이지만 글로벌 것입니다. 즉, 한 프로세스의 컨텍스트에서 유효한 HWND는 다른 프로세스의 컨텍스트에서도 유효합니다.
문서화되지 않은 정보가 http://forum.sysinternals.com/internal-wnd-structure-in-win7_topic24988.html입니다.
"하지만 글로벌 하나"는 내가 찾고있는 것입니다. 너 친구 야. – Pyjong
옙, tks !,하지만 핸들에서 hwnd로 변환 할 수 있습니까? – Thangnv
@ Thangnv 이것은 "void *에서 int *로 변환 할 수 있습니까?"라고 묻는 것과 같습니다. 그것은 달려있다. 네 손잡이가 뭐니? – timothyqiu
내 핸들이 스레드이며 전경에서 실행하고 싶지만 SetForegroundWindow (HWND hWnD) 함수에서 HWND가 아닙니다. – Thangnv