書き込み失礼します、dllでグローバルフックの勉強をしようと頑張っておりまして
現在メモ帳を開いて、そのメモ帳上で右クリックしたら「ABC」を送るような事を考えております。
case Msg.wParam of
WM_RBUTTONDOWN:
BEGIN
★ //ここでメモ帳にABCのキーをPostMessage
END;
★の行にどのように書けばいいのか戸惑っております、PostMessageするにもハンドルはどのようにして取得すればいいのか等
何か参考になるサイトがありましたらお教え願います
ここなどが参考になるかもです。
http://delfusa.main.jp/delfusafloor/archive/VA009712_take/delphi/kabeapp.htm
Mr.XRAYです.
不明な点があります.
私の場合,この仕様説明では,具体的なコードが作成できません.
>現在メモ帳を開いて、そのメモ帳上で右クリックしたら「ABC」を送るような事を考えております。
1. メモ帳を開く(スタートメニューから?)
2. そのメモ帳で右クリックしたら,自分のアプリのどこかに「ABC」を表示する
ということでしょうか.どこに送るのでしょうか?
「送る」というのは,どこかの表示用コントロールに,その文字列を表示することと
解釈していいのでしょうか?
> WM_RBUTTONDOWN:
> BEGIN
>★ //ここでメモ帳にABCのキーをPostMessage
> END;
こちらはメモ帳にABCのキーをPostMessageとありますが.
この場合のWM_RBUTTNDOWNはどこで右ボタンなのでしょう?
自分(Delphi)のアプリ? それともメモ帳自身?
キーを,とありますが,文字列ではダメなのでしょうか.
キーとは具体的に何を意味するのでしょうか?
またPostMessageじゃないといけないのでしょうか.
更に,DLLとありますが,DLLでないとダメなのでしょうか.
当方も初級者。一応動くようだが。
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;
>そのメモ帳上で右クリック
メモ帳が複数開いていても、クリックしたメモ帳にメッセージを送りたいなら
1.WindowFromPointでカーソル位置のコントロールのハンドルを取得。
2.そのハンドルから、GetParentを使って、そのコントロールが属するトップレベルウィンドウ(クラス名'Notepad')のハンドルを取得。
3.FindWindowExでクラス名'Edit'の子コントロールのハンドルを取得
4.PostMessageでメッセージを送る。
このような順で処理することでメモ帳が複数開いている場合にも
目的のウィンドウへメッセージが送られると思います。
ツイート | ![]() |