BCB Client

- C++ Builderを用いたWindowsプログラミングメモ -

FindWindow [ウィンドウのタイトルからハンドルを取得する]

ウィンドウのタイトルからウィンドウハンドルを取得してみる。

findhandle.png


 ←こんな感じでフォームを作ってみた







TEdit名   TitleEdit, HandleEdit
TButton名 FindhandleBtnとしました。

前回のようにSpy++や、Winspector Spyというツールを使用すれば
楽にハンドルが分かりますが、やはり自前で取得しないと、なかなか使い道が無いです。

試しに今回もメモ帳を起動します。
上側のタイトルバーに表示されている文字「無題 - メモ帳」を
TitleEditに入力します。
で、FindHandleBtnを押せば、ウィンドウハンドルが表示されます。

findhandle_result.png



 ←結果はこんな感じ






こいつと、前回作成したアプリを終了させるコードを組み合わせると
タイトルを入力すればアプリを終了させれるツールが作れるわけです。

補足: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);
}
//---------------------------------------------------------------------------

[ トップ | 一覧 | 前へ | 次へ ]

  • トップ
  • 一覧
  • リンク
  • 掲示板

Copyright © BCB Client. All Rights Reserved. Template by ネットマニア