ホームページ  >  記事  >  コンピューターのチュートリアル  >  スクリーンウィンドウハンドルとは何を意味しますか?

スクリーンウィンドウハンドルとは何を意味しますか?

WBOY
WBOY転載
2024-01-23 21:24:15736ブラウズ

スクリーンウィンドウハンドルとは何を意味しますか?

画面のウィンドウ ハンドルを取得するとはどういう意味ですか

ハンドルとは何かを知っておくと理解しやすいです

このウィンドウの識別コードを取得します

ハンドルは、さまざまなメモリ オブジェクトを区別するために使用される一意の識別子であり、32 ビットの整数です。

システム全体に固有のもの (ウィンドウ ハンドルなど) もあれば、現在のプロセスまたはスレッドに固有のものもあります

(スレッドハンドルなど、グローバルなものには別の識別子があります)。

細かく分けるとHから始まるたくさんの種類に分かれます。 VB で使用する場合はすべて Long を使用します。

一般的なものには、ウィンドウ ハンドル (HWND)、デバイス記述テーブル ハンドル (HDC)、メモリ ハンドル (HMEM) などがあります。

ファイルハンドル、プロセスハンドル、スレッドハンドル、ペンタイプハンドル(HPEN)、フォントハンドル(HFONT)、

領域ハンドル (HRGN) など。

ハンドルを申請すると、SYSTEM、USER、GDI の 3 つのカテゴリに分けられるリソースが占有されます。

WINDOWSのリソースは固定されており、メモリの拡張に伴って拡張されないため、使用後は解放する必要があります

###置く。

#>>

VB 独自のコードのみを使用する場合、通常はハンドルを使用しませんが、API 関数を使用する場合は、

ほとんどの人がそれを使用します。

Windows システムでは、ハンドル (この言葉は特に訳しにくいと常々感じています) は 3 つのカテゴリに分類されます。 カーネル

ハンドル、ユーザーハンドル、およびアプリケーション定義のハンドル。

KernelHandle は、実際にはプロセス内のカーネル オブジェクトのポインタ テーブル インデックスです。カーネル オブジェクトにはプロセスとファイルが含まれます

ピース、シグナルなどただし、その事実を隠すために、MS はシステムの起動時にいわゆる Obsfucator 値を生成しました。

(実際には、Obfuscator、MicrosoftBugs(R) である必要があります:) ハンドルを生成した後、ハンドルとこの値を区別します

または がアプリケーションに返されるため、表示されるハンドルはすべて大きな意味のない数字になります。これら###

ハンドル オブジェクトとインデックス オブジェクトは KRNL32.DLL と VMM32.VXD によって共同管理されるため、カーネルと呼ばれます

###ハンドル。

UserHandle は、ウィンドウや DC などのオブジェクトをマークするために使用されます。これらは実際のポインタですが、オブジェクトをポイントするものではありません

の先頭にオフセットがあります。繰り返しますが、これらのオブジェクトは USER32.DLL によって管理されます。

3 番目のタイプのハンドルは、アプリケーションによってカスタマイズされたインデックスの一部です。具体的な意味はアプリケーションに関連しています

コンソール ウィンドウ ハンドルを取得する方法

1. GetConsoleTitle() を呼び出して、現在のコンソール ウィンドウのタイトルを保存します。

2. SetConsoleTitle() を呼び出して、コンソールのタイトルを一意のタイトルに変更します。

3. Sleep(40) を呼び出して、ウィンドウのタイトルが更新されたことを確認します。

4. FindWindow(NULL, uniquetitle) を呼び出して HWND を取得します。この呼び出しは HWND を返します。操作が失敗した場合は、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);

return(hwndFound);

}

50 ポイント デスクトップ上のすべてのウィンドウのハンドルを取得する方法

####含む ###### ####含む ######

名前空間 std を使用します;

//EnumWindows のコールバック関数

BOOL コールバック EnumProc(HWND hwnd,LPARAM lparam)

{

vector

*pvec = (vector

*)lparam;

pvec->push_back(hwnd);

TRUEを返す;

}

void main()

{

ベクトル vec;

EnumWindows(EnumProc,(LPARAM)&vec);

}

これは win32 コンソール プログラム プロジェクトで書かれています。MFC で使用したい場合は、

#include

をインクルードし、名前空間 std;

を使用するだけです。

EnumProc は前に定義したもので、main 関数の 2 つの文をボタン応答関数に追加するだけです。

ここでテストしたところ、407 個のハンドルが得られました

以上がスクリーンウィンドウハンドルとは何を意味しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はdocexcel.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。