Heim > Artikel > Computer-Tutorials > Was bedeutet ein Bildschirmfenstergriff?
Es ist leicht zu verstehen, wenn Sie wissen, was ein Griff ist
Besorgen Sie sich einfach den Identifikationscode dieses Fensters
Ein Handle ist eine eindeutige Kennung, die zur Unterscheidung verschiedener Speicherobjekte verwendet wird. Es handelt sich um eine 32-Bit-Ganzzahl.
Einige gelten nur für das gesamte System (z. B. Fenstergriffe), andere gelten nur für den aktuellen Prozess oder Thread
(z. B. Thread-Handle, das globale Handle hat eine andere Kennung).
Details können in viele Typen unterteilt werden, die alle mit H beginnen. Wenn Sie es in VB verwenden, verwenden Sie alle Long.
Zu den häufigsten gehören Fensterhandle (HWND), Gerätekontexthandle (HDC) und Speicherhandle (HMEM)
Dateihandle, Prozesshandle, Threadhandle, Stifttyphandle (HPEN), Schriftarthandle (HFONT),
Regionshandle (HRGN) und mehr.
Bei der Beantragung eines Handles werden Ressourcen belegt, die in drei Kategorien unterteilt sind: SYSTEM, USER und GDI.
Die Ressourcen von WINDOWS sind fest und erweitern sich nicht mit der Speichererweiterung, daher müssen Sie sie nach der Verwendung freigeben
Leg es weg.
>
Wenn Sie nur VBs eigenen Code verwenden, werden Sie im Allgemeinen keine Handles verwenden, wenn Sie jedoch API-Funktionen verwenden,
Die meisten Leute werden es benutzen.
In Windows-Systemen werden Handles (ich finde immer, dass dieses Wort sehr umständlich übersetzt wird) in drei Kategorien unterteilt: Kernel
Handle, UserHandle und anwendungsdefiniertes Handle.
KernelHandle ist eigentlich der Zeigertabellenindex des Kernel-Objekts im Prozess. Kernel-Objekte umfassen Prozesse und Dateien
Teile, Signale usw. Doch um diesen Sachverhalt zu verschleiern, hat MS beim Systemstart einen sogenannten Obsfucator-Wert generiert
(eigentlich sollte es Obfuscator, MicrosoftBugs(R): sein), unterscheiden Sie nach dem Generieren des Handles das Handle von diesem Wert
Oder kehren Sie zur Anwendung zurück, sodass der Handle, den Sie sehen, einige große und bedeutungslose Zahlen sind. Diese
Handle- und Indexobjekte werden gemeinsam von KRNL32.DLL und VMM32.VXD verwaltet, daher werden sie Kernel genannt
Griff.
UserHandle wird zum Markieren von Objekten wie Fenstern und DCs verwendet. Sie sind echte Zeiger, zeigen jedoch nicht auf Objekte Am Anfang von
gibt es einen Offset. Auch diese Objekte werden von USER32.DLL verwaltet.Bei der dritten Art von Handle handelt es sich lediglich um einige von der Anwendung angepasste Indizes. Die spezifische Bedeutung hängt von der Anwendung ab.
So erhalten Sie den Griff für das Konsolenfenster
2. Rufen Sie SetConsoleTitle() auf, um den Konsolentitel in einen eindeutigen Titel zu ändern.
3. Rufen Sie Sleep(40) auf, um sicherzustellen, dass der Fenstertitel aktualisiert wurde.
4. Rufen Sie FindWindow(NULL, uniquetitle) auf, um HWND zu erhalten. Wenn der Vorgang fehlschlägt, wird NULL zurückgegeben.
5. Um den ursprünglichen Fenstertitel wiederherzustellen, rufen Sie ab Schritt 1 den Wert SetConsoleTitle() auf.
Der HWND des Ergebnisses sollte getestet werden. Sie können beispielsweise testen, ob der zurückgegebene HWND dem aktuellen Prozess entspricht, der GetWindowText() auf dem HWND aufruft, und das Ergebnis mit GetConsoleTitle() vergleichen.
Beispielcode
Die folgende Funktion ruft das aktuelle Fensterhandle (HWND) der Konsolenanwendung ab. Wenn diese Funktion erfolgreich ist, ist der Rückgabewert ein Handle für das Konsolenfenster. Wenn diese Funktion fehlschlägt, ist der Rückgabewert NULL. Der Kürze halber wird auf einige Fehlerprüfungen verzichtet.
HWND GetConsoleHwnd(void)
{
#define MY_BUFSIZE 1024 // Puffergröße für Konsolenfenstertitel.
HWND hwndFound; // Dies wird an den Anrufer zurückgegeben.
char pszNewWindowTitle[MY_BUFSIZE] // Enthält erfunden
// WindowTitle.
char pszOldWindowTitle[MY_BUFSIZE] // Enthält Original
// WindowTitle.
// Aktuellen Fenstertitel abrufen.
GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE);
// Formatieren Sie einen „eindeutigen“ NewWindowTitle.
wsprintf(pszNewWindowTitle,"%d/%d",
GetTickCount(),
GetCurrentProcessId());
// Aktuellen Fenstertitel ändern.
SetConsoleTitle(pszNewWindowTitle);
// Stellen Sie sicher, dass der Fenstertitel aktualisiert wurde.
Schlaf(40);
// Suchen Sie nach NewWindowTitle.
hwndFound=FindWindow(NULL, pszNewWindowTitle);
// Ursprünglichen Fenstertitel wiederherstellen.
SetConsoleTitle(pszOldWindowTitle);
return(hwndFound);
}
So erhalten Sie in 50 Minuten die Griffe aller Fenster auf dem Desktop
//Rückruffunktion für EnumWindows
BOOL CALLBACK EnumProc(HWND hwnd,LPARAM lparam)
{
vector
*pvec = (vector
true zurückgeben;
}
void main()
{
vector
vec;
}
Dies ist in einem Win32-Konsolenprogrammprojekt geschrieben. Wenn Sie es unter MFC verwenden möchten, müssen Sie nur
#include
einschließen und den Namespace std;
Ich habe hier getestet und 407 Griffe erhalten
Das obige ist der detaillierte Inhalt vonWas bedeutet ein Bildschirmfenstergriff?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!