![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| CX |
|
|||
|
Unregistered |
Надо сделать сервис под XP, который отслеживает запуск определённых программ. В оконной версии всё было просто: (FindWindow...First (c Application.Handle) ...Next). А вот из сервиса уже не к чему цепляться (First). Перепробовал кучу вариантов - получить десктоп, окно под мышкой, константу HWND_BOTTOM (начало Z-последовательности окон), но ничего не помогло. Кто чего думает по этому поводу? Задача ведь совсем не сложная... В конце-концов, может получать Handle окна по Handle процесса?
|
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
Так воспользуйся EnumWindows:
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
<Spawn>
К сожалению из-под сервиса Windows EnumWindows не работает! Раскомментируйте EnumWindows в моём юните и сервис перестанет работать: //Файл MyService.dpr program MyService; uses SvcMgr, service in 'service.pas' {MyServ: TService}; {$R *.RES} begin Application.Initialize; Application.CreateForm(TMyServ, MyServ); Application.Run; end. //Файл service.pas unit service; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs, ExtCtrls, TlHelp32; type TMyServ = class(TService) Timer: TTimer; procedure ServiceStart(Sender: TService; var Started: Boolean); procedure ServiceStop(Sender: TService; var Stopped: Boolean); procedure TimerTimer(Sender: TObject); private procedure Control(Msg: String); { Private declarations } public function GetServiceController: TServiceController; override; function GetWin(Handle: HWND; lParam: LParam): Boolean; stdcall; { Public declarations } end; var MyServ: TMyServ; Handle: TextFile; implementation {$R *.DFM} procedure ServiceController(CtrlCode: DWord); stdcall; begin MyServ.Controller(CtrlCode); end; function TMyServ.GetServiceController: TServiceController; begin Result := ServiceController; end; procedure TMyServ.ServiceStart(Sender: TService; var Started: Boolean); var lp: LParam; begin Control('Service started'); //EnumWindows(@TMyServ.GetWin, lp); Timer.Enabled:=True; end; procedure TMyServ.ServiceStop(Sender: TService; var Stopped: Boolean); begin Timer.Enabled:=False; Control('Service stopped'); end; procedure TMyServ.TimerTimer(Sender: TObject); begin Control('Service executed'); end; procedure TMyServ.Control(Msg: String); begin AssignFile(Handle,'c:\gkill.txt'); if FileExists('c:\gkill.txt') then Append(Handle) else Rewrite(Handle); WriteLn(Handle,Msg+' at '+FormatDateTime('dd-mm-yyyy [hh:nn:ss]',SysUtils.Now)); CloseFile(Handle); end; //==================================== //получение хендла окна function TMyServ.GetWin(Handle: HWND; lParam: LParam): Boolean; stdcall; var buff: ARRAY [0..127] OF Char; begin Result := True; //если нужно продолжить поиск, иначе присваеваешь результату значение False //получаем заголовок окна GetWindowText(Handle, buff, sizeof(buff)); //пошем заголовок окна в файл Control('Window found: '+StrPas(buff)); end; end. //Файл Service.dfm object MyServ: TMyServ OldCreateOrder = False DisplayName = 'My Service' OnStart = ServiceStart OnStop = ServiceStop Left = 378 Top = 201 Height = 150 Width = 215 object Timer: TTimer Enabled = False Interval = 2000 OnTimer = TimerTimer Left = 8 Top = 8 end end Может будут ещё какие-мысли (определение окон из-под сервиса Windows)? Я уже честно говоря сдался |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |