Форум по 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, подскажите. Вот код сервиса:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<b>unit</b> Main;
  
<b>interface</b>
  
<b>uses</b>
  Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
  ExtCtrls, AppEvnts;
<b>type</b>
  TService1 = <b>class</b>(TService)
    Timer1: TTimer;
    ApplicationEvents1: TApplicationEvents;
    <b>procedure</b> ServiceAfterInstall(Sender: TService);
    <b>procedure</b> ServiceStart(Sender: TService; <b>var</b> Started: Boolean);
    <b>procedure</b> ServiceStop(Sender: TService; <b>var</b> Stopped: Boolean);
    <b>procedure</b> Timer1Timer(Sender: TObject);
  <b>private</b>
    <font color="royalblue"><i>{ Private declarations }</i></font>
  <b>public</b>
    <b>function</b> GetServiceController: TServiceController; override;
    <i><font color="royalblue">{ Public declarations }</font></i>
  <b>end</b>;
  
<b>var</b>
  Service1: TService1;
  f: TextFile;
  Wnd: HWND;                  
  Pos: TPoint;                
  buff: <b>array</b>[<font color="royalblue">0</font>..<font color="royalblue">255</font>] <b>of</b> char;
  NameClass: <b>string</b>;
  
<b>implementation</b>
  
<i><font color="royalblue">{$R *.DFM}</font></i>
  
<b>procedure</b> ServiceController(CtrlCode: DWord); <b>stdcall</b>;
<b>begin</b>
   Service1.Controller( CtrlCode );
<b>end</b>;
  
<b>function</b> TService1.GetServiceController: TServiceController;
<b>begin</b>
   Result := ServiceController;
<b>end</b>;
  
<b>procedure</b> TService1.ServiceAfterInstall(Sender: TService);
<b>var</b>
  s: <b>string</b>;
<b>begin</b>
   s := ExtractFilePath( Application.GetNamePath ) + <font color="royalblue">'test.txt'</font>;
   AssignFile( f, s );
   <b>if</b> FileExists( s ) <b>then</b>
      Append( f )
   <b>else</b>
      Rewrite( f );
<b>end</b>;
  
<b>procedure</b> TService1.ServiceStart(Sender: TService; <b>var</b> Started: Boolean);
<b>begin</b>
   AfterInstall( Sender );
<b>end</b>;
  
<b>procedure</b> TService1.ServiceStop(Sender: TService; <b>var</b> Stopped: Boolean);
<b>begin</b>
   CloseFile( f );
<b>end</b>;
  
<b>procedure</b> TService1.Timer1Timer(Sender: TObject);
<b>begin</b>
   GetCursorPos( Pos );
   Wnd := WindowFromPoint( Pos );
   GetClassName( Wnd, buff, SizeOf( buff ) );
   NameClass := StrPas( buff );
   Writeln( f, DateTimeToStr( Now ) + <font color="royalblue">' '</font> + ClassName + Format( <font color="royalblue">' %d %d'</font>, [Pos.x,Pos.y] ) );
<b>end</b>;
  
<b>end</b>.
Ситуация следующая. При инсталляции сервиса файл 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, время: 17:34.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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