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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.08.2010, 13:35   #1
legendary
Форумчанин
 
Аватар для legendary
 
Регистрация: 21.04.2010
Сообщений: 125
По умолчанию перехват сис сообщений

как перехвативать ВСЕ сис сообщения windows (при етом не используя windowproc так как в моей проге нет окна)???
нашел пример мониторинга активних окон но чтото он не катит-файл не создается

Код:
library lib;

uses
  SysUtils,
  Windows,
  Messages;

{$R *.res}

var
	SysHook : HHook = 0;
	Wnd : Hwnd = 0;

function SysMsgProc(code : integer; wParam : word; lParam : longint) : longint;  stdcall;
var
f: TextFile;
windtext, windir: array [0..255] of char;
Filedir,str:String;
begin
	Result:= CallNextHookEx(SysHook, Code, wParam, lParam);
  if code=HCBT_ACTIVATE then
      begin
			GetWindowsDirectory(windir, 255);
			Filedir:=windir+'\scan.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/mra/yyyy hh:nn:ss', Date+Time)+
'###ACTIVATE==='+Str+'+++'+'@@@'+IntToStr(Wnd));
			Flush(f);
			CloseFile(f) ;
			end;
      end;

function SetHook(Hook: Boolean): Boolean;  stdcall;
begin
Result:= false;
if Hook then
begin
if SysHook = 0 then
SysHook:= SetWindowsHookEx(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.

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  function SetHook(Hook : Boolean):boolean; stdcall;

var
  Form1: TForm1;


implementation
function SetHook;  external 'lib.dll' index 1 ;

{$R *.dfm}


procedure TForm1.FormShow(Sender: TObject);
begin
SetHook(true);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
SetHook(false);
end;

end.
в чом прикол??

From Stilet: У нас принято код оформлять спецтегом по кнопке #. Попрошу впредь этого не забывать.

Последний раз редактировалось Stilet; 03.08.2010 в 13:52.
legendary вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перехват сообщений -Flasher- Общие вопросы Delphi 5 15.03.2010 12:44
Перехват сообщений об ошибках Garacio_cain Общие вопросы Delphi 0 18.09.2009 15:08
Перехват сообщений в сервисе mosian Win Api 0 22.07.2009 12:18
Перехват сообщений от Службы сообщений (Messenger) SJMS Win Api 6 17.07.2008 10:26
Перехват сообщений rubi Win Api 3 06.09.2007 00:25