Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.04.02;
Скачать: [xml.tar.bz2];

Вниз

Сервис на API   Найти похожие ветки 

 
Vadim M   (2006-01-10 15:48) [0]

подскажите готовый пример (Работающий!!) в виде pas,
без окон - минимальный набор
можно и линк,
знаменитую статью видел ,но там кусками


 
DVM ©   (2006-01-10 15:54) [1]

сервис с окнами - это наверное круто


 
Fay ©   (2006-01-10 16:04) [2]

Vadim M   (10.01.06 15:48)
могу прислать пример


 
Leonid Troyanovsky ©   (2006-01-10 16:05) [3]


> DVM ©   (10.01.06 15:54) [1]
> сервис с окнами - это наверное круто


Вполне буднично.

--
Regards, LVT.


 
DVM ©   (2006-01-10 16:08) [4]


> Вполне буднично.

но некрасиво имхо.


 
Reindeer Moss Eater ©   (2006-01-10 16:40) [5]

>но некрасиво имхо.

Сервис использует некий класс, который использует скажем AllocateHWnd для обмена сообщениями .
И где именно здесь некрасота ?

(Это сервис с окном)


 
Vadim M   (2006-01-10 17:49) [6]

To Fay

если нетрудно скиньте на marinazolotai@mail.ru

DVM

да действительно - окно прибивается из под юзера
и прибивается сервис


 
Leonid Troyanovsky ©   (2006-01-10 17:54) [7]


> DVM ©   (10.01.06 16:08) [4]

> > Вполне буднично.

> но некрасиво имхо.


В будни ж никто не обещал праздник ;)

Возможно, что немного более ресурсоемко, но,
главное, IMHO, чтобы костюмчик сидел, т.е. работал.
Многим разработчикам GUI родней, чем консоль.
А зачастую - и удобней.

--
Regards, LVT.


 
Leonid Troyanovsky ©   (2006-01-10 17:56) [8]


> Vadim M   (10.01.06 17:49) [6]

> да действительно - окно прибивается из под юзера
> и прибивается сервис


Нее, это если только разрешить сервису interactive.
Т.е., для камикадзе.

--
Regards, LVT.


 
Vadim M   (2006-01-11 00:12) [9]

To Fay

Спасибо

А как правельно запускать сервис?
я под админом - запускаю кликом на ЕХЕ,
5 сек в процессах висит и сваливает, читал ,что он сам должен
стартовать в автозагрузке, если его добавить

или руками В панеле задач - сервисы его нет,
запуск бата с имя.exe /install  вобще не запускается

Win2000


 
Reindeer Moss Eater ©   (2006-01-11 00:23) [10]

я под админом - запускаю кликом на ЕХЕ,

c:\>net start myservice

c:\>net stop myservice


 
Vadim M   (2006-01-11 01:08) [11]

скопировал в с:\
запускаю в сmd так
net start c:\1.exe

говорит неправельно имя службы (((((


 
Fay ©   (2006-01-11 03:35) [12]

2 Vadim M   (11.01.06 1:08) [11]
Помню я очень! Сто лет назад написано...

Запусти с /i


 
Fay ©   (2006-01-11 03:37) [13]

2 Vadim M   (11.01.06 0:12) [9]
> А как правельно запускать сервис?
М.б. погодить пока с API?

> запуск бата с имя.exe /install  вобще не запускается
Выясняется за 1 минуту при чтении исходника.


 
Rouse_ ©   (2006-01-11 09:02) [14]

http://rouse.front.ru/twoservicedemo.zip


 
Vadim M   (2006-01-11 10:22) [15]

>Fay

спасибо ,запускал через Службы,еле нашел
оно описание подставляет) "Рыба"

>Rouse_

спасибо ,работает


 
Reindeer Moss Eater ©   (2006-01-11 11:08) [16]

net start c:\1.exe

говорит неправельно имя службы (((((


А ты ему поверь. Правильно говорит.


 
Vadim M   (2006-01-12 13:22) [17]

а как без окон следить за сообщениями ?
ведь окно в сервисе не охота делать - прибьют

Для того,чтоб узнать ,что пользователь залогинился
и начать выполнять другой код

p.S :сообщения типа WM_


 
Rouse_ ©   (2006-01-12 14:12) [18]


> ведь окно в сервисе не охота делать - прибьют

Это почему это? А если внутри сервиса крутиться асинхронный транспорт который без окон ни туды ни сюды?

> Для того,чтоб узнать ,что пользователь залогинился

А для этого пишеться небольшая библиотечка:

////////////////////////////////////////////////////////////////////////////////
//
//  ****************************************************************************
//  * Unit Name : WinlogonEventDemo
//  * Purpose   : Winlogon event demo
//  * Author    : Alexander (Rouse_) Bagel
//  * Version   : 1.00
//  ****************************************************************************
//

library logoneventdemo;

uses
 Windows;

var DTLC:Boolean=false;

type
 PFNMSGECALLBACK = function (bVerbose: BOOL; lpMessage: LPWSTR): DWORD; stdcall;
 _WLX_NOTIFICATION_INFO = record
   Size: ULONG;
   Flags: ULONG;
   UserName: PWideChar;
   Domain: PWideChar;
   WindowStation: PWideChar;
   hToken: THandle;
   hDesktop: HDESK;
   pStatusCallback: PFNMSGECALLBACK;
 end;

procedure OutputDebugString(Value: String; var pInfo: _WLX_NOTIFICATION_INFO);
const
 Path = "suser.log";
var
 hFile: THandle;
 BytesWrite, Len: DWORD;
 SystemPath:String;
 FilePath: String;
 ST:_SystemTime;
 fStr,ST_Str:String;
 t:array [0..5] of integer;
begin
try
 GetLocalTime(ST);
 SetLength(ST_Str,21);
 fStr:="%02d:%02d:%04d - %02d:%02d:%02d";
 t[0]:=ST.wDay;
 t[1]:=ST.wMonth;
 t[2]:=ST.wYear;
 t[3]:=ST.wHour;
 t[4]:=ST.wMinute;
 t[5]:=ST.wSecond;
 wvsprintf(PChar(ST_Str),PChar(fStr),PChar(@t));
 Len:=GetSystemDirectory(nil, 0);
 SetLength(SystemPath, Len-1);
 if GetSystemDirectory(PChar(SystemPath),Len)>0 then
 begin
   if SystemPath[Len]="\" then FilePath :=SystemPath+Path else FilePath :=SystemPath+"\"+Path;
   hFile:=CreateFile(PChar(FilePath),GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
   if hFile<>INVALID_HANDLE_VALUE then
    begin
     try
     Value :=
       "NOTIFY: User "" + pInfo.UserName +
       "" entering " + Value +
       " on WindowStation "" + pInfo.WindowStation +
       "", Domain "" + pInfo.Domain + "" ("+ST_Str+")"+#13+#10;
       SetFilePointer(hFile,0,nil,FILE_END);
       WriteFile(hFile,Value[1],Length(Value),BytesWrite, nil);
     except
     end;
      CloseHandle(hFile);
    end;
 end;
 SetLength(ST_Str,0);
 SetLength(SystemPath,0);
except
end;
end;

// Here is the event handler for the Winlogon Logon event.
procedure WLEventLogon(var pInfo: _WLX_NOTIFICATION_INFO); stdcall;
begin
 if SizeOf(_WLX_NOTIFICATION_INFO) = pInfo.Size then
   // Print the name of the handler to debug output.
   OutputDebugString("WLEventLogon", pInfo);
end;

// Here is the event handler for the Winlogon Logoff event.
procedure WLEventLogoff(var pInfo: _WLX_NOTIFICATION_INFO); stdcall;
begin
 if SizeOf(_WLX_NOTIFICATION_INFO) = pInfo.Size then
   // Print the name of the handler to debug output.
   OutputDebugString("WLEventLogoff", pInfo);
end;

exports
 WLEventLogon,
 WLEventLogoff;

begin
 // library initialization code
 if DTLC=false then
  DisableThreadLibraryCalls(HInstance); //Не беспокоить :)
 DTLC:=true;
end.


и регистрируется вот тут: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon

Подробней в MSDN


 
Rouse_ ©   (2006-01-12 14:14) [19]

Зы за глухие эксепты в демке плз не пинать :)
OutputDebugString не моя :)


 
BiN ©   (2006-01-12 14:50) [20]

А можно за другое попинать? ;)
Например, за
if DTLC=false then


 
Rouse_ ©   (2006-01-12 15:04) [21]

:)))))) Я кусками выковыривал, в оригинале она нужна :)


 
BiN ©   (2006-01-12 15:08) [22]


> Rouse_ ©   (12.01.06 15:04) [21]
>
> :)))))) Я кусками выковыривал, в оригинале она нужна :)


Я имел в виду сравнение булевой переменной с константой.
Т.е. if DTLC=false then можно заменить на if not DTLC then.

Это мелочь, конечно.


 
Rouse_ ©   (2006-01-12 15:14) [23]

Аааа :) Ну да - че под пиво только не накодишь :)


 
Vadim M   (2006-01-12 15:37) [24]

>Rouse_

счас буду пробывать,
все сложнее чем я думал ,
очереди нет привычной в виде
WM_COPYDATA:
begin
end;

а вот при  выключении компьютера,сервисы убиваются
(кем ?) или замораживаются?

>if DTLC=false then можно заменить на if not DTLC then.
компилер все равно одинаково скомпилит,а
первый наглянее


 
Rouse_ ©   (2006-01-12 15:41) [25]


> очереди нет привычной в виде
> WM_COPYDATA:
> begin
> end;

Руками крути цикл выборки сообщений...


> а вот при  выключении компьютера,сервисы убиваются

Выключаются соответствующим менеджером


> компилер все равно одинаково скомпилит,а
> первый наглянее

всерано это называется косяк :)


 
Vadim M   (2006-01-12 15:57) [26]

>всерано это называется косяк :)

на то он косяк,чтоб его курили :)

в МЭИН крутить можно


 while(GetMessage(Msg, Handle, 0, 0)) do
 begin
TranslateMessage(msg);
   DispatchMessage(msg);
 end;


Непонятки с  handle  и  hWnd,
формы нет и хэндл нулевой,слышал его получать можно
не имея оного


function WindowProc(hWnd, uMsg, wParam, lParam: Integer): Integer; stdcall;
begin
 Result := DefWindowProc(hWnd, uMsg, wParam, lParam);
 { Checks for messages }
 if uMsg = WM_DESTROY then halt;
end;



 
Игорь Шевченко ©   (2006-01-12 16:51) [27]


> Для того,чтоб узнать ,что пользователь залогинился
> и начать выполнять другой код


В топку такие сервисы


 
Vadim M   (2006-01-12 17:58) [28]

выполнение кода без рабочего стола может
плохо кончиться,а
FindWindows не пашет для окон ,так как я localsystem


 
Игорь Шевченко ©   (2006-01-12 18:05) [29]

Vadim M   (12.01.06 17:58) [28]

У сервисов по умолчанию свой рабочий стол, если в настройке не указано, что они взаимодействуют с рабочим столом пользователя.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2006.04.02;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.097 c
2-1142591431
_RusLAN
2006-03-17 13:30
2006.04.02
Изменение установленного компонента!


2-1142441377
Fl@sh
2006-03-15 19:49
2006.04.02
FireBird!!!


15-1141385417
КаПиБаРа
2006-03-03 14:30
2006.04.02
А программисты программисты...


2-1142642475
antonioxxx
2006-03-18 03:41
2006.04.02
Связь расширения с программой. Корректная передача пути файла.


2-1142800561
Quattro
2006-03-19 23:36
2006.04.02
Окно-заставка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский