Heim  >  Artikel  >  Computer-Tutorials  >  Was bedeutet ein Bildschirmfenstergriff?

Was bedeutet ein Bildschirmfenstergriff?

WBOY
WBOYnach vorne
2024-01-23 21:24:15732Durchsuche

Was bedeutet ein Bildschirmfenstergriff?

Was bedeutet es, den Fenstergriff des Bildschirms zu erhalten

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

1. Rufen Sie GetConsoleTitle() auf, um den aktuellen Titel des Konsolenfensters zu speichern.

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

#include

#include

using namespace std;

//Rückruffunktion für EnumWindows

BOOL CALLBACK EnumProc(HWND hwnd,LPARAM lparam)

{

vector

*pvec = (vector*)lparam;

pvec->push_back(hwnd);

true zurückgeben;

}

void main()

{

vector

vec;

EnumWindows(EnumProc,(LPARAM)&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;

EnumProc sowie die Schaltflächenantwortfunktion verwenden wird in der Hauptfunktion hinzugefügt. Diese beiden Sätze reichen aus.

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:docexcel.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen