СообЧа > База Знаний > Программирование > Delphi

Вопрос

Как внедрить dll в другое приложение?

Ответ

procedure QryName(threadID: DWord; Caller: HWND); external 'lib0.dll';

procedure TForm1.WMCopydata(var msg: TMessage); // message WM_COPYDATA;
begin
    Caption := PChar(PCopyDataStruct(Pointer(msg.LParam)).lpData);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
    ahwnd: THandle;
begin
    {Ищем по заголовку}
    ahwnd := FindWindow(nil, PChar(Edit1.Text));
    if ahwnd <> 0 then
  QryName(GetWindowThreadProcessID(ahwnd, nil), Handle);
end;

— lib0.dpr —
library lib0;

uses
Messages, Windows;

function Answer( nCode: Integer; wprm: WParam; lprm: LParam): LResult; stdcall;
type
    PMsg = ^TMsg;
var
    buffer : array [0..MAX_PATH] of Char;
    cd : TCopyDataStruct;
    msg : PMsg;
    Caller : HWND;
    AHook: HHook;
begin
    Result := 0;
    msg := PMsg(lprm);
    if (msg.Message = 0) and (msg.LParam <> 0) then
        begin
      AHook := msg.lParam;
      Caller := msg.wParam;
 cd.cbData := GetModuleFileName(0, buffer, SizeOf(buffer))+1;
    cd.lpData := @buffer;
   cd.dwData := GetCurrentThreadID;
   SendMessage(Caller, WM_COPYDATA, 0, LParam(@cd));
    UnHookWindowsHookEx(AHook);
   PostThreadMessage(GetCurrentThreadID, 0, 0, 0);
        end;
end;

procedure QryName(tid: DWord; Caller: HWND);
var
      AHook : Hhook;
begin
AHook := SetWindowsHookEx(WH_GETMESSAGE, Answer, Hinstance, tid);
 if AHook <> 0 then PostThreadMessage(tid, 0, Caller, AHook);
end;

exports
    QryName;
begin
end.

Из конференции Delphi



Copyright © 2000-2004 Сообщество Чайников
Контактная информация