손잡이가 무엇인지 알면 이해하기 쉽습니다
이 창의 식별 코드를 받으시면 됩니다
핸들은 다양한 메모리 객체를 구별하는 데 사용되는 고유 식별자이며 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에 의해 관리됩니다.
세 번째 유형의 핸들은 애플리케이션에서 사용자 정의한 일부 인덱스일 뿐입니다. 구체적인 의미는 애플리케이션과 관련이 있습니다.
콘솔 창 핸들을 얻는 방법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 = (벡터
TRUE를 반환합니다.
}
void main()
{
벡터
vec;
}
win32 콘솔 프로그램 프로젝트에서 작성한 내용입니다. MFC에서 사용하려면
#include
만 포함하고 네임스페이스 std;
여기에서 테스트한 결과 핸들이 407개 나왔습니다
위 내용은 화면 창 핸들은 무엇을 의미합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!