Rumah  >  Artikel  >  tutorial komputer  >  Apakah maksud pemegang tetingkap skrin?

Apakah maksud pemegang tetingkap skrin?

WBOY
WBOYke hadapan
2024-01-23 21:24:15733semak imbas

Apakah maksud pemegang tetingkap skrin?

Apakah maksud mendapatkan pemegang tingkap skrin

Ianya mudah difahami apabila anda tahu apa itu pegangan

Hanya dapatkan kod pengenalan tetingkap ini

Pemegang ialah pengecam unik yang digunakan untuk membezakan pelbagai objek memori Ia adalah integer 32-bit.

Sesetengahnya unik untuk keseluruhan sistem (seperti pemegang tetingkap), dan ada yang unik untuk proses atau benang semasa

(seperti pemegang benang, yang global mempunyai pengecam lain).

Perincian boleh dibahagikan kepada banyak jenis, semuanya bermula dengan H. Apabila menggunakannya dalam VB, semua menggunakan Long.

Yang biasa termasuk pemegang tetingkap (HWND), pemegang konteks peranti (HDC), pemegang memori (HMEM),

Pemegang fail, pemegang proses, pemegang benang, pemegang jenis pen (HPEN), pemegang fon (HFONT),

Pengendali wilayah (HRGN) dan banyak lagi.

Apabila memohon pemegang, sumber diduduki, yang dibahagikan kepada tiga kategori: SISTEM, PENGGUNA dan GDI.

Sumber WINDOWS adalah tetap dan tidak berkembang dengan pengembangan memori, jadi anda mesti melepaskannya selepas digunakan

Letakkan.

>

Jika anda hanya menggunakan kod VB sendiri, anda biasanya tidak akan menggunakan pemegang, tetapi jika anda menggunakan fungsi API,

Kebanyakan orang akan menggunakannya.

Dalam sistem Windows, pemegang (saya selalu rasa perkataan ini diterjemahkan dengan sangat janggal) dibahagikan kepada tiga kategori: Kernel

Pemegang, UserHandle dan Handle yang ditakrifkan oleh aplikasi.

KernelHandle sebenarnya ialah indeks jadual penunjuk objek Kernel dalam proses objek kernel termasuk proses dan fail

Bahagian, isyarat, dsb. Tetapi untuk menyembunyikan fakta, MS menghasilkan nilai Obsfucator yang dipanggil apabila sistem bermula

(sebenarnya ia sepatutnya Obfuscator, MicrosoftBugs(R):), selepas menghasilkan Handle, bezakan Handle daripada nilai ini

atau kembali ke aplikasi, jadi Pemegang yang anda lihat semuanya adalah nombor yang besar dan tidak bermakna. Ini

Benda pemegang dan indeks diuruskan bersama oleh KRNL32.DLL dan VMM32.VXD, jadi ia dipanggil Kernel

Penangan.

UserHandle digunakan untuk menanda objek seperti tingkap dan DC Ia adalah penunjuk sebenar, tetapi ia tidak menghala ke objek

Pada awal

, terdapat offset. Sekali lagi, objek ini diuruskan oleh USER32.DLL.

Jenis Pemegang ketiga hanyalah beberapa indeks yang disesuaikan oleh aplikasi. Maksud khusus adalah berkaitan dengan aplikasi

Bagaimana untuk mendapatkan pemegang tetingkap konsol

1. Panggil GetConsoleTitle() untuk menyimpan tajuk tetingkap konsol semasa.

2. Panggil SetConsoleTitle() untuk menukar tajuk konsol kepada tajuk yang unik.

3 Call Sleep(40) untuk memastikan tajuk tetingkap telah dikemas kini.

4. Panggil FindWindow(NULL, uniquetitle) untuk mendapatkan HWND Panggilan ini akan mengembalikan HWND Jika operasi gagal, NULL akan dikembalikan.

5 Dari langkah 1, untuk memulihkan tajuk tetingkap asal dapatkan semula panggilan nilai SetConsoleTitle().

HWND keputusan harus diuji. Sebagai contoh, anda boleh menguji sama ada HWND yang dikembalikan sepadan dengan proses semasa memanggil GetWindowText() pada HWND dan membandingkan hasilnya dengan GetConsoleTitle().

Contoh kod

Fungsi berikut mendapatkan semula pemegang tetingkap aplikasi konsol semasa (HWND). Jika fungsi ini berjaya, nilai pulangan ialah pemegang kepada tetingkap konsol. Jika fungsi ini gagal, nilai pulangan ialah NULL. Beberapa semakan ralat diketepikan untuk ringkasnya.

HWND GetConsoleHwnd(kosong)

{

#define MY_BUFSIZE 1024 // Saiz penimbal untuk tajuk tetingkap konsol.

HWND hwndFound; // Inilah yang dikembalikan kepada pemanggil.

char pszNewWindowTitle[MY_BUFSIZE]; // Mengandungi rekaan

// Tajuk Tetingkap.

char pszOldWindowTitle[MY_BUFSIZE]; // Mengandungi asal

// Tajuk Tetingkap.

// Ambil tajuk tetingkap semasa.

GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE);

// Formatkan "unik" NewWindowTitle.

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

GetTickCount(),

GetCurrentProcessId());

// Tukar tajuk tetingkap semasa.

SetConsoleTitle(pszNewWindowTitle);

// Pastikan tajuk tetingkap telah dikemas kini.

Tidur(40);

// Cari NewWindowTitle.

hwndFound=FindWindow(NULL, pszNewWindowTitle);

// Pulihkan tajuk tetingkap asal.

SetConsoleTitle(pszOldWindowTitle);

return(hwndFound);

}

Bagaimana untuk mendapatkan pemegang semua tingkap pada desktop dalam masa 50 minit

#include

#include

menggunakan ruang nama std;

// Fungsi panggil balik untuk EnumWindows

BOOL CALLBACK EnumProc(HWND hwnd,LPARAM lparam)

{

vektor *pvec = (vektor*)lparam;

pvec->tolak_belakang(hwnd);

kembali BENAR;

}

void main()

{

vektorvec;

EnumWindows(EnumProc,(LPARAM)&vec);

}

Ini ditulis dalam projek program konsol win32 Jika anda ingin menggunakannya di bawah MFC, anda hanya perlu memasukkan

#include dan menggunakan namespace std;

EnumProc ditakrifkan di hadapan, dan fungsi respons butang. ditambah dalam fungsi utama kedua-dua ayat itu akan dilakukan.

Saya menguji di sini dan mendapat 407 pemegang

Atas ialah kandungan terperinci Apakah maksud pemegang tetingkap skrin?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:docexcel.net. Jika ada pelanggaran, sila hubungi admin@php.cn Padam