■ DLL作成について

[Delphi Q & A 掲示板] [過去ログの一覧]


初心者 2009/02/13(金) 15:36:22
書き込み失礼します、dllでグローバルフックの勉強をしようと頑張っておりまして
現在メモ帳を開いて、そのメモ帳上で右クリックしたら「ABC」を送るような事を考えております。

case Msg.wParam of
 WM_RBUTTONDOWN:
 BEGIN
★ //ここでメモ帳にABCのキーをPostMessage
 END;

★の行にどのように書けばいいのか戸惑っております、PostMessageするにもハンドルはどのようにして取得すればいいのか等
何か参考になるサイトがありましたらお教え願います

Manbon 2009/02/13(金) 15:50:37 <初心者>
ここなどが参考になるかもです。
http://delfusa.main.jp/delfusafloor/archive/VA009712_take/delphi/kabeapp.htm

Mr.XRAY [HomePage] 2009/02/14(土) 21:25:19
Mr.XRAYです.
不明な点があります.
私の場合,この仕様説明では,具体的なコードが作成できません.

>現在メモ帳を開いて、そのメモ帳上で右クリックしたら「ABC」を送るような事を考えております。

1. メモ帳を開く(スタートメニューから?)
2. そのメモ帳で右クリックしたら,自分のアプリのどこかに「ABC」を表示する

ということでしょうか.どこに送るのでしょうか?
「送る」というのは,どこかの表示用コントロールに,その文字列を表示することと
解釈していいのでしょうか?

> WM_RBUTTONDOWN:
> BEGIN
>★ //ここでメモ帳にABCのキーをPostMessage
> END;

こちらはメモ帳にABCのキーをPostMessageとありますが.

この場合のWM_RBUTTNDOWNはどこで右ボタンなのでしょう?
自分(Delphi)のアプリ? それともメモ帳自身?
キーを,とありますが,文字列ではダメなのでしょうか.
キーとは具体的に何を意味するのでしょうか?
またPostMessageじゃないといけないのでしょうか.

更に,DLLとありますが,DLLでないとダメなのでしょうか.

2009/02/15(日) 08:30:36
当方も初級者。一応動くようだが。

procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  i := FindWindow(PChar('Notepad'), nil);
  if i = 0 then exit;
  i := Findwindowex(i, 0, 'Edit', nil);
  SendMessage(i, WM_SetText, 0, LParam(PChar('ABC')));
end;

みんみん 2009/02/15(日) 23:03:31
>そのメモ帳上で右クリック
メモ帳が複数開いていても、クリックしたメモ帳にメッセージを送りたいなら

1.WindowFromPointでカーソル位置のコントロールのハンドルを取得。

2.そのハンドルから、GetParentを使って、そのコントロールが属するトップレベルウィンドウ(クラス名'Notepad')のハンドルを取得。

3.FindWindowExでクラス名'Edit'の子コントロールのハンドルを取得

4.PostMessageでメッセージを送る。

このような順で処理することでメモ帳が複数開いている場合にも
目的のウィンドウへメッセージが送られると思います。

毎週金曜日はポイント最大3倍!さらに4倍のチャンスも!

Programming Library