Отслеживание из DLL ее присоединение к процессу и отсоединение

Советы » DLL » Отслеживание из DLL ее присоединение к процессу и отсоединение

library

DLLEntryLib; uses

SysUtils, Windows, Dialogs, Classes; procedure

DLLEntryPoint(dwReason: DWord); begin

case

dwReason of

DLL_PROCESS_ATTACH: ShowMessage('Attaching to process'); DLL_PROCESS_DETACH: ShowMessage('Detaching from process'); DLL_THREAD_ATTACH: MessageBeep(0); DLL_THREAD_DETACH: MessageBeep(0); end

; end

; begin

{ First, assign the procedure to the DLLProc variable } DllProc := @DLLEntryPoint; { Now invoke the procedure to reflect that the DLL is attaching to the process } DLLEntryPoint(DLL_PROCESS_ATTACH); end

.

{
Copyright © 1999 by Delphi 5 Developer's Guide - Xavier Pacheco and Steve Teixeira
}

unit

MainFrm; interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, Gauges; type

{ Define a TThread descendant } TTestThread = class

(TThread) procedure

Execute; override

; procedure

SetCaptionData; end

; TMainForm = class

(TForm) btnLoadLib: TButton; btnFreeLib: TButton; btnCreateThread: TButton; btnFreeThread: TButton; lblCount: TLabel; procedure

btnLoadLibClick(Sender: TObject); procedure

btnFreeLibClick(Sender: TObject); procedure

btnCreateThreadClick(Sender: TObject); procedure

btnFreeThreadClick(Sender: TObject); procedure

FormCreate(Sender: TObject); private

LibHandle: THandle; TestThread: TTestThread; Counter: Integer; GoThread: Boolean; end

; var

MainForm: TMainForm; implementation

{$R *.DFM} procedure

TTestThread.Execute; begin

while

MainForm.GoThread do

begin

Synchronize(SetCaptionData); Inc(MainForm.Counter); end

; end

; procedure

TTestThread.SetCaptionData; begin

MainForm.lblCount.Caption := IntToStr(MainForm.Counter); end

; procedure

TMainForm.btnLoadLibClick(Sender: TObject); { This procedure loads the library DllEntryLib.DLL } begin

if

LibHandle = 0 then

begin

LibHandle := LoadLibrary('DLLENTRYLIB.DLL'); if

LibHandle = 0 then

raise

Exception.Create('Unable to Load DLL'); end

else

MessageDlg('Library already loaded', mtWarning, [mbok], 0); end

; procedure

TMainForm.btnFreeLibClick(Sender: TObject); { This procedure frees the library } begin

if

not

(LibHandle = 0) then

begin

FreeLibrary(LibHandle); LibHandle := 0; end

; end

; procedure

TMainForm.btnCreateThreadClick(Sender: TObject); { This procedure creates the TThread instance. If the DLL is loaded a message beep will occur. } begin

if

TestThread = nil

then

begin

GoThread := True; TestThread := TTestThread.Create(False); end

; end

; procedure

TMainForm.btnFreeThreadClick(Sender: TObject); { In freeing the TThread a message beep will occur if the DLL is loaded. } begin

if

not

(TestThread = nil

) then

begin

GoThread := False; TestThread.Free; TestThread := nil

; Counter := 0; end

; end

; procedure

TMainForm.FormCreate(Sender: TObject); begin

LibHandle := 0; TestThread := nil

; end

; end

.

Другое по теме:

Категории

Статьи

Советы

Copyright © 2022 - All Rights Reserved - www.delphirus.com