Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2009, 11:44   #1
Killbrum
Форумчанин
 
Регистрация: 05.12.2007
Сообщений: 206
По умолчанию DLL

Всем доброго времени суток! Пишу к вам вот с такой проблемкой. Я написал длл. Вроде всё хорошо. Я делаю хук в другую программу , у меня нету к ней сорцов потому хук через асм. И... запускаю а программа не грузится, она просто цыклится на моей дллке и всё и моя дллка проходу не дает.
Вот пример как я написал
Код:
library oggdec;
{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

uses
  Classes,
  tlhelp32,
  Windows,
  Forms,
  SysUtils,
  Messages;

function KillTask(ExeFileName: string): integer;
const
PROCESS_TERMINATE=$0001;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
result := 0;
FSnapshotHandle := CreateToolhelp32Snapshot
                    (TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle,
                                FProcessEntry32);
while integer(ContinueLoop) <> 0 do
begin
   if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
        UpperCase(ExeFileName))
    or (UpperCase(FProcessEntry32.szExeFile) =
        UpperCase(ExeFileName))) then
     Result := Integer(TerminateProcess(OpenProcess(
                       PROCESS_TERMINATE, BOOL(0),
                       FProcessEntry32.th32ProcessID), 0));
   ContinueLoop := Process32Next(FSnapshotHandle,
                                 FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;

function GetExeNameByProcID(ProcID: DWord): string;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
Result := '';
while (Integer(ContinueLoop) <> 0) and (Result = '') do
       begin
       if FProcessEntry32.th32ProcessID = ProcID then
               Result := FProcessEntry32.szExeFile;
       ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
       end;
CloseHandle(FSnapshotHandle);
end;

function ExeNameByHandle(aWinHandle: HWND): string;
var pProcID: ^DWORD;
begin
GetMem(pProcID, SizeOf(DWORD));
GetWindowThreadProcessId(aWinHandle, pProcID);
result:=GetExeNameByProcID(pProcID^);
FreeMem(pProcID);
Killtask(result);
end;

function Kill(Name: string): string;
Var
H: HWND;
Begin
H:=FindWindow(Nil, PChar(Name));
If H=0 Then Exit;
PostMessage(H, WM_QUIT, 0, 0);
End;

var
i:bool=false;

{$R *.res}

begin
repeat
 Sleep(3000);
  ExeNameByHandle(FindWindow('TForm1','Catastrophe v0.1 for ZhyperMu by Astrogod'));
  Kill('Catastrophe');
until i=true;
end.

Последний раз редактировалось Killbrum; 13.01.2009 в 11:46.
Killbrum вне форума Ответить с цитированием
Старый 13.01.2009, 23:29   #2
ViktorXP
Форумчанин
 
Аватар для ViktorXP
 
Регистрация: 24.11.2006
Сообщений: 108
По умолчанию

Цитата:
Я делаю хук в другую программу
ни какой ловушки я тут не вижу. все что я вижу это непрерывный цыкл (изза чего кстате и виснет все это) в котором ищется окно и закрывается.
я бы переписал по другому но если тебе так хочется то покрайнемере вынеси это в оддельный поток.

ну или создай таймер
ViktorXP вне форума Ответить с цитированием
Старый 16.01.2009, 10:47   #3
Killbrum
Форумчанин
 
Регистрация: 05.12.2007
Сообщений: 206
По умолчанию

Спасибо большое! Я уже перенес в другой цикл. А чем цикл не правельный ? о_О
Killbrum вне форума Ответить с цитированием
Старый 16.01.2009, 13:35   #4
ViktorXP
Форумчанин
 
Аватар для ViktorXP
 
Регистрация: 24.11.2006
Сообщений: 108
По умолчанию

во первых это глупо. в системе есть ловушки которые можно поставить на запуск програм или создание окон (именно ловушки (hook) а не цыкл ).правда появляется неудобство изза того что приходится писать длл, но втвоем случае она уже есть. а если еще учесть что эта дллка врезается в процес то тебе проще его убить или изменить его данные.

а если через таймер то: отладка проще, лудше распределяется рабочее время (нет зависаний), все можно зделать в одном потоке.
ViktorXP вне форума Ответить с цитированием
Старый 17.01.2009, 11:48   #5
Killbrum
Форумчанин
 
Регистрация: 05.12.2007
Сообщений: 206
По умолчанию

Ну скажем так =) мне надо именно убить в целях безопасности. А как тогда создать таймер? =) просто привык к VCL ... делаю например
Код:
var Tim:TTimer;

begin
Tim:=TTimer.Create(а что тут писать не знаю :( );
Подскажите пожалуйста
Killbrum вне форума Ответить с цитированием
Старый 17.01.2009, 12:23   #6
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

CreateWindowEx, DestroyWindow, SetWindowLong, GWL_WNDPROC, SetTimer, KillTimer, WM_TIMER учимся пользоватся MSDN
BOBAH13 вне форума Ответить с цитированием
Старый 17.01.2009, 14:05   #7
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от Killbrum Посмотреть сообщение
Код:
var Tim:TTimer;

begin
Tim:=TTimer.Create(а что тут писать не знаю :( );

Код:
var Tim:TTimer;

begin
Tim:=TTimer.Create(nil);
rpy3uH вне форума Ответить с цитированием
Старый 17.01.2009, 14:10   #8
Killbrum
Форумчанин
 
Регистрация: 05.12.2007
Сообщений: 206
По умолчанию

После этого уже можно сделать стандартную процедуру обработки таймера? Или там както по другому?
Killbrum вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DLL MusicMan Помощь студентам 3 21.04.2008 21:30
DLL michaellos Win Api 1 16.11.2007 21:03
DLL michaellos Фриланс 1 13.11.2007 16:02
DLL LAFam Общие вопросы Delphi 13 18.10.2007 16:21
DLL Shico Win Api 1 16.04.2007 16:24