アクティブウィンドウハンドルの取得と
次のZ順位のウィンドウハンドルを取得を試してみる。
GetActiveWindow アクティブウィンドウのハンドルを取得
GetNextWindow 指定されたハンドルの次の順位のウィンドウハンドルを取得
←こんな感じでフォームを作ってみた
TEdit名 ActiveHandleEdit, NextHandleEdit, ActiveTitleEdit, NextTitleEdit
TButton名 GetHandleBtnとしました。
GetHandleBtnを押すと、アクティブウィンドウのハンドルとタイトル、
及び次の順位となるハンドルとタイトルを表示してくれます。
ボタンを押すときは常に自アプリがアクティブウィンドウとなる為
表示されるハンドルとタイトルは自アプリのものです。
また、次のハンドルはspy++などで見ると、確かに次のハンドルが表示されています。
作ってはみたものの、、これはあんまし使えない?
<Unit1.cpp>
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::GetHandleBtnClick(TObject *Sender)
{
// アクティブウィンドウのハンドルを取得
HWND acthWnd = GetActiveWindow();
// アクティブウィンドウの次の順位のウィンドウハンドルを取得
HWND nexthWnd = GetNextWindow(acthWnd, GW_HWNDNEXT);
// 確認の為、ハンドルからタイトルを取得します
// 前回と同様にタイトル長を取得
int actLen = GetWindowTextLength(acthWnd) + 2;
int nextLen = GetWindowTextLength(nexthWnd) + 2;
// タイトル格納用に確保
char *actTitle = (char *)malloc(actLen);
char *nextTitle = (char *)malloc(nextLen);
// それぞれのタイトル取得
GetWindowText(acthWnd, actTitle, actLen);
GetWindowText(nexthWnd, nextTitle, nextLen);
// Editコンポーネントへ表示
ActiveHandleEdit->Text = IntToHex((int)acthWnd, 8);
NextHandleEdit->Text = IntToHex((int)nexthWnd,8);
ActiveTitleEdit->Text = actTitle;
NextTitleEdit->Text = nextTitle;
// 領域解放
free(actTitle);
free(nextTitle);
}
//---------------------------------------------------------------------------