Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.09;
Скачать: CL | DM;

Вниз

Программа логирования запуска ScreenSaver.   Найти похожие ветки 

 
oleon   (2006-03-30 18:46) [0]

Написал программу в XP работает в Windows 2003 server нет.

Пожалуйста, может кто знает в чем проблема, но WM_SYSCOMMAND не ловится.

Программа из одной формочки состоит.
Код :
unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Memo1: TMemo;
   procedure FormCreate(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
 private
   { Private declarations }
   FLogStream: TStream;
   procedure WMSysCommand(var Msg : TWMSysCommand); message WM_SYSCOMMAND;
   procedure WriteLog(S: String; NewLine: Boolean = True);
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

uses
 RTLConsts;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
const FILENAME = "log.log";
var
 FileHandle: THandle;
begin
 //FLogStream:= TFileStream.Create(FILENAME, fmCreate);

// TFileStream не используется, чтобы потом можно было открыть файл в режиме, когда другие могут читать (например, чтобы следить в FAR"е)
 FileHandle:= CreateFile(PChar(FILENAME), GENERIC_WRITE, FILE_SHARE_READ, nil, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
 if FileHandle = INVALID_HANDLE_VALUE then begin
   raise EFOpenError.CreateResFmt(@SFOpenErrorEx, [FILENAME, SysErrorMessage(GetLastError)]);
 end;
 FLogStream:= THandleStream.Create(FileHandle);

 WriteLog("======== start ==========");
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 FLogStream.Free;
end;

procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
 WriteLog(IntToStr(Msg.CmdType));
 if (Msg.CmdType = SC_SCREENSAVE) then
   WriteLog("Так это ж скринсейвер");
 inherited;
// http://www.delphicorner.f9.co.uk/articles/wapi11.htm
end;

procedure TForm1.WriteLog(S: String; NewLine: Boolean = True);
var
 ss: String;
begin
 ss:= TimeToStr(Now) + ": " + S;
 if NewLine then
   ss:= ss + sLineBreak;
 FLogStream.Seek(0, soEnd); //??
 FLogStream.WriteBuffer(PChar(SS)^, Length(SS))
end;

end.


 
oleon   (2006-03-30 20:54) [1]

После тестов выяснилось, что по крайней мере на XP она работает. только когда формочка активна. А как написать такую программу( потом передлать ее в сервис) чтобы она логировала это все. В дальнейшем планирую писать эту инфу в базу данных. А сейчас, хотя бы в файл. Спасибо.


 
Eraser ©   (2006-03-30 21:00) [2]


> oleon   (30.03.06 18:46)

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

http://support.microsoft.com/default.aspx?scid=kb;en-us;238882


 
oleon   (2006-03-31 00:53) [3]

Спасибо. Это я прочитал. Но понять не могу как мне это все в проекте написать нужно))


 
Eraser ©   (2006-03-31 00:56) [4]


> oleon   (31.03.06 00:53) [3]

ввиде т.н. ловушки (hook) в отдельной DLL. В инете полно примеров реализации ловушек.
В твоём случае надо использовать тип ловушки WH_GETMESSAGE, как и указано в информации по ссылке.



Страницы: 1 вся ветка

Текущий архив: 2006.07.09;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.033 c
15-1150188027
tesseract
2006-06-13 12:40
2006.07.09
Разработчик freebsd нуждается в помощи


15-1149849883
Сергей М.
2006-06-09 14:44
2006.07.09
Проблема с UDATE.COM


15-1149845579
ALEXD31
2006-06-09 13:32
2006.07.09
Обновление Windows 98 до Windows 2000


2-1151145736
И. Павел
2006-06-24 14:42
2006.07.09
Проблема с прокруткой в TScrollBox


2-1150452726
NSA
2006-06-16 14:12
2006.07.09
Как узнать колличество дней в месяце?