忍者ブログ
Comments
[03/30 のん]
TrackBack
Counter
blogRank
忍者ブログ [PR]
http://lresult.blog.shinobi.jp/
Borland C++ Builderを用いたWindowsプログラミングメモブログ

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

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

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

 

PR
Comments
お名前
メールアドレス
パスワード
タイトル
コメント
TRACKBACK
TrackBack URL :
"LRESULT" WROTE ALL ARTICLES.
PRODUCED BY SHINOBI.JP @ SAMURAI FACTORY INC.