|
#1
|
||||
|
||||
dll
салам всем, кто знает как написать dll (в этом я не силен), и программу, которая, без именно этой библиотеки в корне своей папки не будет запускаться(проверять подлинность dll) - это первая проблема, вторая - сама dll - некий хук, которая отрубает зараннее в нее записанный список процессов.(И возможно ли отрубать процессы не по имени окна, а еще как нить). Помогите хотябы в чем нибудь.
|
#2
|
|||
|
|||
Насчет dll не знаю, не работал. Могу только сказать, что если программе нужна dll и её, то Windows выдаст об этом сообщение, и программа не загрузиться
|
#3
|
||||
|
||||
ну а если подмена dll хотя да, туплю я чет, ну а насчет процессов?
|
#4
|
||||
|
||||
Код:
library ProjectDll1; function Test: Boolean; begin Result:=True; end; exports Test; begin end. Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; function Test: Boolean; external 'ProjectDll1.dll'; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin Test; end; end. http://data.cod.ru/71911 Пишу программы за еду. __________________ |
#5
|
||||
|
||||
пасиб понятно теперь, еще бы функцию в ней для убийства процессов=)
|
#6
|
||||
|
||||
кстати заменив функцию в dll и запустив программу пишет, что точка входа в процедуру Test не найдена в dll, то бишь палит всю кантору, можно как нить повесить перехватчик ошибки, что бы без правильной dll не только не запускалась программа но и не писала ошибку и почему она происходит?
|
#7
|
||||
|
||||
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; TTest = function: Boolean; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var h: Cardinal; p: Pointer; begin try h:=LoadLibrary('ProjectDll1.dll'); if h=0 then raise Exception.Create('ProjectDll1.dll not found'); try p:=GetProcAddress(h, 'Test'); if p=nil then raise Exception.Create('Test not found'); TTest(p); finally FreeLibrary(h); end; except PostMessage(Handle, WM_CLOSE, 0, 0); end; end; end. а лучше все это вставить в файл проекта. Пишу программы за еду. __________________ |
#8
|
|||
|
|||
winexec('taskkill /F /IM "notepad.exe" /T', 0)
- один из самых простых способов или // s - имя процесса procedure KilProc(s:string); begin winexec(pchar(taskkill /F /IM "+s+" /T), 0) // ноль - чтобы не отображалось консольное окошко end; вообщето для того чтобы убить процесс dll как бы не нужна... |