DLL作成について


初心者  2009-02-14 00:36:22  No: 33352

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

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

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


Manbon  2009-02-14 00:50:37  No: 33353

ここなどが参考になるかもです。
http://delfusa.main.jp/delfusafloor/archive/VA009712_take/delphi/kabeapp.htm


Mr.XRAY  URL  2009-02-15 06:25:19  No: 33354

Mr.XRAYです.
不明な点があります.
私の場合,この仕様説明では,具体的なコードが作成できません.

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

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

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

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

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

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

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


  2009-02-15 17:30:36  No: 33355

当方も初級者。一応動くようだが。

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-16 08:03:31  No: 33356

>そのメモ帳上で右クリック
メモ帳が複数開いていても、クリックしたメモ帳にメッセージを送りたいなら

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

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

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

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加