ポストメッセージの送信を試してみる。
←こんな感じでフォームを作ってみた。
TEdit名 HandleEdit, MsgEdit, wParamEdit, lParamEdit
TButton名 PostMessageBtnとしました。
さっそく、メッセージのWM_CLOSE(0x0010)をアプリに送信して
そのメッセージが送信されたアプリを終了させてみる。
試しにメモ帳を起動します。
今回はメモ帳のハンドルを見つける為にツールを使用します。
VCに付いているツール、「spy++」や
BCBに付いてくる「WinSight32」
フリーだと「Winspector Spy」が有名らしいです。
あいにく、、BCBに付いている「WinSight32」は非常に使い難いやら重いやら。。
まぁなんだかんだで、メモ帳のハンドルが分かれば、その値をHandleEditにコピペします
次にMsgEditにWM_CLOSE、つまり「10」を入力
lParamとwParamは使わない為、「0」を入力しておきます。
PostMessageBtnを押すと、ポストメッセージが送信され
メモ帳が終了します。
最初に試したときは感動しましたよ、コレ。
補足:StrToInt("$" + StrHex)というように
先頭に"$"を付けてStrToIntを使うと
16進数表記の文字列を10進数のint型にキャスト出来ます。便利便利。
<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 *HandleLabel;
TLabel *MsgLabel;
TLabel *wParamLabel;
TLabel *lParamLabel;
TEdit *HandleEdit;
TEdit *MsgEdit;
TEdit *wParamEdit;
TEdit *lParamEdit;
TButton *PostMessageBtn;
void __fastcall PostMessageBtnClick(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::PostMessageBtnClick(TObject *Sender)
{
// ハンドル, メッセージ, wPram, lPramをそれぞれ宣言してやります
HWND hWnd;
UINT msg, wParam;
LONG lParam;
// それぞれの値を設定します
hWnd = (HWND)StrToInt("$" + HandleEdit->Text);
msg = (UINT)StrToInt("$" + MsgEdit->Text);
wParam = (UINT)StrToInt("$" + wParamEdit->Text);
lParam = (LONG)StrToInt("$" + lParamEdit->Text);
// ポストメッセージ送信
PostMessage(hWnd, msg, wParam, lParam);
}
//---------------------------------------------------------------------------