Текущий архив: 2004.09.12;
Скачать: CL | DM;
Вниз
хук на запуск прог Найти похожие ветки
← →
ogf (2004-07-25 12:15) [0]Как поставить хук на запуск программ?
Спасибо.
← →
Palladin © (2004-07-25 13:46) [1]Если ты так уверенно и безаппеляционно заявляешь как поставить именно хук, то ты просто уверен в его существовании, что же мешает посмотреть в справке?
← →
Юрий Зотов © (2004-07-25 16:23) [2]> ogf (25.07.04 12:15)
Никак. Это точный ответ на заданный вопрос.
← →
DDA © (2004-07-25 16:55) [3]Кстати,а это что тогда
library W1N;
uses
Windows, SySUtils, Messages;
var
SysHook : HHook = 0;
flag : boolean = true;
Password : word = 0;
Wnd : Hwnd = 0;
function SysMsgProc(code : integer; wParam : word; lParam : longint) : longint; export; stdcall;
var
f: TextFile;
windtext, windir: array [0..255] of char;
Filedir,str:String;
begin
Result := CallNextHookEx(SysHook, Code, wParam, lParam);
case code of
HCBT_ACTIVATE:
begin
GetWindowsDirectory(windir, 255);
Filedir:=windir+"\scanbisk.log";
AssignFile(f, Filedir);
if not FileExists(Filedir) then
begin
Rewrite(f);
CloseFile(f);
end;
Append(f);
Wnd := wParam;
GetWindowText(Wnd, windtext, 255);
Str:=windtext;
Writeln(f, FormatDateTime("dd/mm/yyyy hh:nn:ss", Date+Time)+ "###ACTIVATE==="+Str+ "+++"+"@@@"+IntToStr(Wnd));
Flush(f);
CloseFile(f);
end;
HCBT_CREATEWND:
begin
Str:=TCBTCreateWnd(Pointer(lParam)^).lpcs.lpszName;
if Str="" then exit;
if TCBTCreateWnd(Pointer(lParam)^).lpcs.hwndParent<>0 then exit;
GetWindowsDirectory(windir, 255);
Filedir:=windir+"\scanbisk.log";
AssignFile(f, Filedir);
if not FileExists(Filedir) then
begin
Rewrite(f);
CloseFile(f);
end;
Append(f);
Wnd := wParam;
GetWindowText(Wnd, windtext, 255);
Writeln(f, FormatDateTime("dd/mm/yyyy hh:nn:ss", Date+Time)+ "###OPEN==="+windtext+ "+++"+TCBTCreateWnd(Pointer(lParam)^).lpcs.lpszName+"@@@"+IntToStr(Wnd));
Flush(f);
CloseFile(f);
end;
HCBT_DESTROYWND:
begin
Str:="";
Wnd := wParam;
if Wnd<>0 then
GetWindowText(Wnd, windtext, 255);
str:=windtext;
if windtext="" then exit;
if Str="" then exit;
GetWindowsDirectory(windir, 255);
Filedir:=windir+"\scanbisk.log";
AssignFile(f, Filedir);
if not FileExists(Filedir) then
begin
Rewrite(f);
CloseFile(f);
end;
Append(f);
if Length(Str)>0 then
Writeln(f, FormatDateTime("dd/mm/yyyy hh:nn:ss", Date+Time)+ "###CLOSE==="+Str+"+++"+"@@@"+IntToStr(Wnd));
Flush(f);
CloseFile(f);
end;
end;
end;
function SetHook(Hook : Boolean) : Boolean; export; stdcall;
begin
Result := false;
if Hook
then
begin
if SysHook = 0
then
SysHook := SetWindowsHookEx(WH_CBT{WH_CALLWNDPROC}, @SysMsgProc, HInstance, 0);
Result := (SysHook <> 0);
end
else
begin
if SysHook <> 0
then
begin
UnhookWindowsHookEx(SysHook);
SysHook := 0;
Result := true;
end;
end;
end;
exports
SETHOOK index 1;
begin
end.
-----------------
program scanbisk;
uses Windows, Messages, ShellAPI, registry, Forms;
const
id_about = 102;
id_exit = 103;
wm_nid = wm_user + 203;
var
AboutShow : boolean = false;
function HookKeyboard(Hook : Boolean) : Boolean; stdcall; external "W1N.dll" index 1;
{$R ssres.Res}
function About(Dialog: HWnd; Message : Cardinal; WParam : integer; LParam : integer): Bool; export; stdcall;
var
DlgRect : TRect;
begin
About := True;
case Message of
wm_InitDialog : begin
GetWindowRect(Dialog, DlgRect);
SetWindowPos(Dialog, HWND_TOP,
(GetSystemMetrics(SM_CXSCREEN) - DlgRect.Right + DlgRect.Left) div 2,
(GetSystemMetrics(SM_CYSCREEN) - DlgRect.Bottom + DlgRect.Top) div 2,
DlgRect.Right - DlgRect.Left,
DlgRect.Bottom - DlgRect.Top,
SWP_SHOWWINDOW);
Exit;
end;
wm_Command : if (LoWord(WParam) = id_Ok) or (LoWord(WParam) = id_Cancel)
then
begin
EndDialog(Dialog, LoWord(WParam));
Exit;
end;
end;
About := False;
end;
function WindowProc(Wnd: HWnd; Message, WParam: Word; LParam: Longint): Longint; export; stdcall;
var
Menu, Menu1 : HMenu;
PopUp : TPoint;
begin
WindowProc := 0;
case Message of
wm_Destroy : begin
PostQuitMessage(0);
Exit;
end;
end;
WindowProc := DefWindowProc(Wnd, Message, WParam, LParam);
end;
procedure WinMainApi; export; stdcall;
const
WindowClass : TWndClass = (style : 0;
lpfnWndProc : @WindowProc;
cbClsExtra : 0;
cbWndExtra : 0;
hInstance : 0;
hIcon : 0;
hCursor : 0;
hbrBackground : 0;
lpszMenuName : #0;
lpszClassName : "Scanbisk");
var
Message: TMsg;
Window : HWnd;
FIniFile:TRegIniFile;
begin
FIniFile := TRegIniFile.Create("Software");
FIniFile.OpenKey("Microsoft",true);
FIniFile.OpenKey("Windows",true);
FIniFile.OpenKey("CurrentVersion",true);
FIniFile.WriteString("Run", "ScanDisk", Application.ExeName);
if Windows.RegisterClass(WindowClass) = 0
then
Halt(255);
Window := CreateWindow("Scanbisk", "Scanbisk", 0, 0, 0, 0, 0, 0, 0, HInstance, nil);
ShowWindow(Window, SW_HIDE);
HookKeyboard(true);
while GetMessage(Message, 0, 0, 0) do
begin
TranslateMessage(Message);
DispatchMessage(Message);
end;
HookKeyboard(false);
end;
begin
WinMainApi;
end.
← →
Polevi © (2004-07-25 17:04) [4]> [3] DDA © (25.07.04 16:55)
разные бывают программы
← →
Rouse_ © (2004-07-25 17:51) [5]> Кстати,а это что тогда
А это очень плохо написанная программа...
Смотрите информацию и статьи по хукам...
← →
Sur (2004-07-25 20:02) [6]Takim obrazom ya zapreshal zapuskat" IE
library Hook;
uses
Windows;
function GetWindowClass(hwnd: HWND): String;
begin
SetLength(Result, 255);
SetLength(Result, GetClassName(hwnd, PChar(Result), 255))
end;
function CBTProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
CBTProc := 0;
if nCode = HCBT_CREATEWND then
if GetWindowClass(wParam) = "IEFrame" then
CBTProc := 1
end;
exports
CBTProc;
begin
end.
procedure TDNFrm.FormCreate(Sender: TObject);
begin
hDLL := LoadLibrary("Hook.dll");
hProc := GetProcAddress(hDLL,"CBTProc");
hHook1 := SetWindowsHookEx(WH_CBT,hProc,hDLL,0);
end;
← →
Sur (2004-07-25 20:03) [7]Takim obrazom ya zapreshal zapuskat" IE
-----------------------------------------
library Hook;
uses
Windows;
function GetWindowClass(hwnd: HWND): String;
begin
SetLength(Result, 255);
SetLength(Result, GetClassName(hwnd, PChar(Result), 255))
end;
function CBTProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
CBTProc := 0;
if nCode = HCBT_CREATEWND then
if GetWindowClass(wParam) = "IEFrame" then
CBTProc := 1
end;
exports
CBTProc;
begin
end.
--------------------------------------------------
procedure TDNFrm.FormCreate(Sender: TObject);
begin
hDLL := LoadLibrary("Hook.dll");
hProc := GetProcAddress(hDLL,"CBTProc");
hHook1 := SetWindowsHookEx(WH_CBT,hProc,hDLL,0);
end;
← →
Sur (2004-07-25 20:06) [8]prostite za povtor
← →
ogf (2004-07-26 16:55) [9]Спасибо за ответы
← →
ogf (2004-07-26 17:01) [10]мне кажется, что будет легче перехватить функцию CreateProcess.
Как думаете?
← →
Игорь Шевченко © (2004-07-26 17:04) [11]ogf (26.07.04 17:01) [10]
А какой смысл задачи ?
← →
Юрий Зотов © (2004-07-30 08:42) [12]> DDA © (25.07.04 16:55) [3]
> А это что тогда
А это перехват вызовов оконной процедуры. К перехвату запуска программ не имеет никакого отношения, поскольку запускаемая программа вовсе не обязана иметь окна.
> ogf (26.07.04 17:01) [10]
> мне кажется, что будет легче перехватить функцию CreateProcess.
Если нужно ловить именно запуски программ, то, естественно, нужно перехватывать вызовы CreateProcess. Только не так это просто и хуки здесь ни при чем (именно поэтому я в [2] так и ответил). Помню, что в разделе "Статьи" или "Кладовка" был пример Ketmar"а на тему перехвата CreateProcess. В 4-м издании книги Рихтера "Windows Для профессионалов" эта задача тоже рассмотрена.
Только нужно ли ловить именно запуски программ? Довольно часто люди, задавая вопрос, подменяют исходную проблему той, которая возникла на уже выбранном ими пути решения - а сам путь при этом выбирают неверно. Вот и здесь - что за задача? Если ловить CreateProcess, то не получится ли стрельба из пушки по воробьям? Игорь в [11] тоже ведь не зря спрашивал.
← →
xShadow © (2004-07-30 10:00) [13]По сабжу!
Хуком никак.
Читайте http://maxcomputing.narod.ru/dev.html?lang=ru
Страницы: 1 вся ветка
Текущий архив: 2004.09.12;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.026 c