>  기사  >  컴퓨터 튜토리얼  >  화면 창 핸들은 무엇을 의미합니까?

화면 창 핸들은 무엇을 의미합니까?

WBOY
WBOY앞으로
2024-01-23 21:24:15733검색

화면 창 핸들은 무엇을 의미합니까?

화면의 창 핸들을 얻는다는 것은 무엇을 의미합니까

손잡이가 무엇인지 알면 이해하기 쉽습니다

이 창의 식별 코드를 받으시면 됩니다

핸들은 다양한 메모리 객체를 구별하는 데 사용되는 고유 식별자이며 32비트 정수입니다.

일부는 전체 시스템(예: 창 핸들)에 고유하고 일부는 현재 프로세스 또는 스레드에 고유합니다

(예: 스레드 핸들, 전역 핸들에는 다른 식별자가 있습니다).

디테일은 ​​H로 시작하는 다양한 유형으로 나눌 수 있습니다. VB에서 사용할 때는 모두 Long을 사용합니다.

일반적인 핸들에는 창 핸들(HWND), 장치 컨텍스트 핸들(HDC), 메모리 핸들(HMEM)이 포함됩니다.

파일 핸들, 프로세스 핸들, 스레드 핸들, 펜형 핸들(HPEN), 글꼴 핸들(HFONT),

지역 핸들(HRGN) 등.

핸들을 신청하면 리소스가 점유되는데, 이는 SYSTEM, USER, GDI의 세 가지 범주로 나뉩니다.

WINDOWS의 리소스는 고정되어 있으며 메모리 확장에 따라 확장되지 않으므로 사용 후 반드시 해제해야 합니다

치워두세요.

>

VB 자체 코드만 사용한다면 일반적으로 핸들을 사용하지 않으나, API 함수를 사용한다면

대부분의 사람들이 사용하게 될 것입니다.

Windows 시스템에서 핸들(항상 이 단어가 매우 어색하게 번역되는 것을 발견했습니다)은 세 가지 범주로 나뉩니다. 커널

Handle, UserHandle 및 애플리케이션 정의 핸들.

KernelHandle은 실제로 프로세스에 있는 커널 객체의 포인터 테이블 인덱스입니다. 커널 객체에는 프로세스와 파일이 포함됩니다

부품, 신호 등 하지만 MS는 이 사실을 숨기기 위해 시스템 시작 시 소위 Obsfucator 값을 생성했습니다

(실제로는 Obfuscator, MicrosoftBugs(R)여야 합니다.) 핸들을 생성한 후 핸들을 이 값과 구별합니다

또는 애플리케이션으로 돌아가면 표시되는 핸들은 모두 크고 의미 없는 숫자입니다. 이것들

핸들과 인덱스 개체는 KRNL32.DLL과 VMM32.VXD에서 공동으로 관리하므로 커널이라고 합니다

손잡이.

UserHandle은 창 및 DC와 같은 개체를 표시하는 데 사용됩니다. 실제 포인터이지만 개체를 ​​가리키지는 않습니다.

시작 부분에 오프셋이 있습니다. 다시 말하지만, 이러한 개체는 USER32.DLL에 의해 관리됩니다.

세 번째 유형의 핸들은 애플리케이션에서 사용자 정의한 일부 인덱스일 뿐입니다. 구체적인 의미는 애플리케이션과 관련이 있습니다.

콘솔 창 핸들을 얻는 방법

1. 현재 콘솔 창 제목을 저장하려면 GetConsoleTitle()을 호출하세요.

2. SetConsoleTitle()을 호출하여 콘솔 제목을 고유한 제목으로 변경합니다.

3. Sleep(40)을 호출하여 창 제목이 업데이트되었는지 확인하세요.

4. HWND를 얻으려면 FindWindow(NULL, Uniquetitle)를 호출하세요. 이 호출은 작업이 실패하면 NULL을 반환합니다.

5. 1단계에서 원래 창 제목을 복원하려면 SetConsoleTitle()을 호출하여 값을 검색하세요.

결과의 HWND를 테스트해야 합니다. 예를 들어 반환된 HWND가 HWND에서 GetWindowText()를 호출하는 현재 프로세스에 해당하는지 테스트하고 결과를 GetConsoleTitle()과 비교할 수 있습니다.

샘플 코드

다음 함수는 현재 콘솔 애플리케이션 창 핸들(HWND)을 검색합니다. 이 함수가 성공하면 반환 값은 콘솔 창에 대한 핸들입니다. 이 함수가 실패하면 반환 값은 NULL입니다. 간결성을 위해 일부 오류 검사는 생략되었습니다.

HWND GetConsoleHwnd(void)

{

#define MY_BUFSIZE 1024 // 콘솔 창 제목의 버퍼 크기.

HWND hwndFound; // 호출자에게 반환되는 내용입니다.

char pszNewWindowTitle[MY_BUFSIZE]; // 조작된 내용을 포함합니다

// 창제목.

char pszOldWindowTitle[MY_BUFSIZE] // 원본 포함

// 창제목.

// 현재 창 제목을 가져옵니다.

GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE);

// "고유" NewWindowTitle 형식을 지정하세요.

wsprintf(pszNewWindowTitle,"%d/%d",

GetTickCount(),

GetCurrentProcessId());

// 현재 창 제목을 변경합니다.

SetConsoleTitle(pszNewWindowTitle);

// 창 제목이 업데이트되었는지 확인하세요.

수면(40);

// NewWindowTitle을 찾아보세요.

hwndFound=FindWindow(NULL, pszNewWindowTitle);

// 원래 창 제목을 복원합니다.

SetConsoleTitle(pszOldWindowTitle);

반환(hwndFound);

}

50분 안에 데스크탑의 모든 창 핸들을 가져오는 방법

#포함

#포함

네임스페이스 표준 사용;

//EnumWindows용 콜백 함수

BOOL 콜백 EnumProc(HWND hwnd,LPARAM lparam)

{

벡터

*pvec = (벡터*)lparam;

pvec->push_back(hwnd);

TRUE를 반환합니다.

}

void main()

{

벡터

vec;

EnumWindows(EnumProc,(LPARAM)&vec);

}

win32 콘솔 프로그램 프로젝트에서 작성한 내용입니다. MFC에서 사용하려면

#include

만 포함하고 네임스페이스 std;를 사용하면 됩니다.

EnumProc가 앞에 정의되어 있고 버튼 응답 기능이 있습니다. 이 두 문장이 메인 함수에 추가됩니다.

여기에서 테스트한 결과 핸들이 407개 나왔습니다

위 내용은 화면 창 핸들은 무엇을 의미합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 docexcel.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제