ウィンドウのタイトルからウィンドウハンドルを取得してみる。
←こんな感じでフォームを作ってみた
TEdit名 TitleEdit, HandleEdit
TButton名 FindhandleBtnとしました。
前回のようにSpy++や、Winspector Spyというツールを使用すれば
楽にハンドルが分かりますが、やはり自前で取得しないと、なかなか使い道が無いです。
試しに今回もメモ帳を起動します。
上側のタイトルバーに表示されている文字「無題 - メモ帳」を
TitleEditに入力します。
で、FindHandleBtnを押せば、ウィンドウハンドルが表示されます。
←結果はこんな感じ
こいつと、前回作成したアプリを終了させるコードを組み合わせると
タイトルを入力すればアプリを終了させれるツールが作れるわけです。
補足:IntToHex((int)hWnd, 8)について
第1引数は16進数にしたいint型、第2引数は何桁表示にしたいかです。
今回は8桁に指定している為、上位2桁は"00"と表示されています。
<Unit1.h>
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE 管理のコンポーネント
TLabel *TitleLabel;
TEdit *TitleEdit;
TButton *FindHandleBtn;
TEdit *HandleEdit;
TLabel *HandleLabel;
void __fastcall FindHandleBtnClick(TObject *Sender);
private: // ユーザー宣言
public: // ユーザー宣言
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
<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::FindHandleBtnClick(TObject *Sender)
{
// タイトルを取得します
AnsiString sTitle = TitleEdit->Text;
// ウィンドウのタイトルからハンドルを取得します
HWND hWnd = FindWindow(NULL, sTitle.c_str());
// ハンドルをEditBoxへ表示
HandleEdit->Text = IntToHex((int)hWnd, 8);
}
//---------------------------------------------------------------------------