Форум: "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.047 c