Тема: TService
Показать сообщение отдельно
  #1  
Старый 20.01.2007, 02:06
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию TService

Всем привет! Кто писал сервисы на Delphi, подскажите. Вот код сервиса:
Код:
unit Main;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
  ExtCtrls, AppEvnts;
type
  TService1 = class(TService)
    Timer1: TTimer;
    ApplicationEvents1: TApplicationEvents;
    procedure ServiceAfterInstall(Sender: TService);
    procedure ServiceStart(Sender: TService; var Started: Boolean);
    procedure ServiceStop(Sender: TService; var Stopped: Boolean);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    function GetServiceController: TServiceController; override;
    { Public declarations }
  end;
 
var
  Service1: TService1;
  f: TextFile;
  Wnd: HWND;                   
  Pos: TPoint;                 
  buff: array[0..255] of char; 
  NameClass: string;
 
implementation
 
{$R *.DFM}
 
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
   Service1.Controller( CtrlCode );
end;
 
function TService1.GetServiceController: TServiceController;
begin
   Result := ServiceController;
end;
 
procedure TService1.ServiceAfterInstall(Sender: TService);
var
  s: string;
begin
   s := ExtractFilePath( Application.GetNamePath ) + 'test.txt';
   AssignFile( f, s );
   if FileExists( s ) then
      Append( f )
   else
      Rewrite( f );
end;
 
procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
begin
   AfterInstall( Sender );
end;
 
procedure TService1.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
   CloseFile( f );
end;
 
procedure TService1.Timer1Timer(Sender: TObject);
begin
   GetCursorPos( Pos );
   Wnd := WindowFromPoint( Pos );
   GetClassName( Wnd, buff, SizeOf( buff ) );
   NameClass := StrPas( buff );
   Writeln( f, DateTimeToStr( Now ) + ' ' + ClassName + Format( ' %d %d', [Pos.x,Pos.y] ) );
end;
 
end.
Ситуация следующая. При инсталляции сервиса файл test.txt создается в директории программы (как и задумано), однако во время работы (или при перезапуске) все пишется в c:\WINDOWS\system32\test.txt. Мне непонятно, почему меняется путь, и как этого не допустить? И еще момент. В файл должно писаться текущее время, класс окна под курсором и координаты курсора... А вот что пишется на самом деле
Цитата:
20.01.2007 2:31:01 TService1 261 253
20.01.2007 2:31:02 TService1 483 190
20.01.2007 2:31:03 TService1 342 464
20.01.2007 2:31:04 TService1 170 425
20.01.2007 2:31:05 TService1 170 425
20.01.2007 2:31:06 TService1 170 425
20.01.2007 2:31:07 TService1 175 423
20.01.2007 2:31:08 TService1 569 440
20.01.2007 2:31:09 TService1 832 521
20.01.2007 2:31:10 TService1 978 520
20.01.2007 2:31:11 TService1 994 519
20.01.2007 2:31:12 TService1 712 513
20.01.2007 2:31:13 TService1 267 455
20.01.2007 2:31:14 TService1 269 456
20.01.2007 2:31:15 TService1 264 456
20.01.2007 2:31:16 TService1 264 456
20.01.2007 2:31:17 TService1 264 456
20.01.2007 2:31:18 TService1 264 456
20.01.2007 2:31:19 TService1 264 456
20.01.2007 2:31:20 TService1 453 452
20.01.2007 2:31:21 TService1 501 313

тоесть, время и координаты курсора определяются нормально, а вот класс окна нифига. Кто сталкивался с подобным и решил это, помогите...
Ответить с цитированием