Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #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

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

Последний раз редактировалось Decoding, 20.01.2007 в 02:34.
Ответить с цитированием
  #2  
Старый 23.01.2007, 11:25
Аватар для 4kusNick
4kusNick 4kusNick вне форума
Местный
 
Регистрация: 06.09.2006
Адрес: Россия, Санкт-Петербург
Сообщения: 444
Репутация: 550
По умолчанию

На счет пути, попробуй получать путь к собственной папке по-другому, например:
s := ExtractFileDir(ParamStr(0)) + '\test.txt';
А вот с классом окна - я чего-то в замешательстве, странно вообще...

Попробуй реализовать на АПИ сервис,статьи поэтому поводу есть в делфи ворде...
__________________
THE CRACKER IS OUT THERE
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:52.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter