Форум: "WinAPI";
Текущий архив: 2006.07.09;
Скачать: [xml.tar.bz2];
ВнизПрограмма логирования запуска 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.07.09;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.009 c