Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];

Вниз

хук на запуск прог   Найти похожие ветки 

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.033 c
9-1084564663
stud2
2004-05-14 23:57
2004.09.12
Подскажете пожалуйста, где можно найти описание игр шашки и шахма


1-1093442564
Andy
2004-08-25 18:02
2004.09.12
Проблема Delphi-> Excel


14-1093103407
QuasiLamo
2004-08-21 19:50
2004.09.12
База слов из MSWord


1-1093934301
drmagic
2004-08-31 10:38
2004.09.12
TMemo и запрет клавиш управления курсором


1-1093437199
Л1
2004-08-25 16:33
2004.09.12
Можно ли в ехе файл всунуть gif, bmp





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский