Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

посылка сообщения в локальной сети [D6, Win2k]


lead-in ©   (2008-05-21 11:45:00) 

Добрый день. Есть такой вопрос - как узнать запущена ли какая-либо служба (net send, например) на удалённом пк, нужно вот отправить сообщение, а кроме net send`а ничево не знаю подходящего, вообще сообщение нужно отправить анонимно, net send показывает сетевое имя отправителя, а можно это сделать не раскрывая своего ip?


lead-in   (2008-06-18 13:36:00) [1]


> alexm_hs_


спасибо! буду пробовать)...


alexm_hs_   (2008-06-17 19:23:00) [2]

Ах, да! Извиняюсь! Днем сегодня сам уже подумал.

конечно же вот здесь другой флаг (в первой функции)


 hSCManager := OpenSCManager(PChar(hostaddr), nil, SC_MANAGER_CONNECT);


Rouse_   (2008-06-17 11:02:00) [3]


> alexm_hs_   (23.05.08 21:14) [8]
>
> Никаких прав администратора не надо на чужом компе

Точно уверен?


alexm_hs_   (2008-06-16 22:49:00) [4]

да! и не забудьте подключить к проекту модуль WinSvc :)


alexm_hs_   (2008-06-16 22:45:00) [5]

определить статус службы:


function TfSysInfo.ServiceStatus(hostaddr, ServiceName: string): cardinal;
var hSCManager: SC_HANDLE;
 hService: SC_HANDLE;
 lpServiceStatus: _SERVICE_STATUS;
begin
 hSCManager := 0;
 hService := 0;
 try
   hSCManager := OpenSCManager(PChar(hostaddr), nil, SC_MANAGER_ALL_ACCESS);
   if hscManager <> 0 then begin
     hService := OpenService(hSCManager, PChar(ServiceName), SERVICE_QUERY_STATUS);
     QueryServiceStatus(hService, lpServiceStatus);
     result := lpServiceStatus.dwCurrentState;
   end else result := 0;
 finally
   if hService <> 0 then CloseServiceHandle(hService);
   if hscManager <> 0 then CloseServiceHandle(hscManager);
 end;
end;



Расшифровка кодов есть в MSDN.
вот к примеру, как у меня сделано:


 StatusText: array[SERVICE_STOPPED..SERVICE_PAUSED] of string =
 ('Остановлена', 'Ожидание запуска', 'Ожидание останова', 'Запущена',
   'Ожидание продолжения', 'Ожидание приостанова', 'Приостановлена');


вот как запустить/остановить службу


function TfSysInfo.StartStopService(pcname, ServName: string; startstop: integer): integer; //start - 1, stop - 0; 2 - pause; 3 - continue;
var
 hscManager, hService: LongWord;
 sStatus: TServiceStatus;
 lpServiceArgVectors: PChar;
begin
 result := 0;
 hService := 0;
 hscManager := OpenSCManager(PChar(pcname), nil, SC_MANAGER_ALL_ACCESS);
 try
   if hscManager <> 0
     then
     case startstop of
       0: begin
           hService := OpenService(hscManager, PChar(ServName), SERVICE_STOP);
           ControlService(hService, SERVICE_CONTROL_STOP, sStatus);
           result := 0;
         end;
       1: begin
           lpServiceArgVectors := nil;
           hService := OpenService(hscManager, PChar(ServName), SERVICE_ALL_ACCESS);
           if hService <> 0 then StartService(hService, 0, PChar(lpServiceArgVectors));
           result := 0;
         end;
       2: begin
           hService := OpenService(hscManager, PChar(ServName), SERVICE_PAUSE_CONTINUE {SERVICE_ALL_ACCESS});
           ControlService(hService, SERVICE_CONTROL_PAUSE, sStatus);
           result := 0;
         end;
       3: begin
           hService := OpenService(hscManager, PChar(ServName), SERVICE_PAUSE_CONTINUE {SERVICE_ALL_ACCESS});
           ControlService(hService, SERVICE_CONTROL_CONTINUE, sStatus);
           result := 0;
         end;
     end
   else begin
     result := GetLastError
   end;
 finally
   if hService <> 0 then CloseServiceHandle(hService);
   if hscManager <> 0 then CloseServiceHandle(hscManager);
 end;
end;



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


multiflex   (2008-06-16 17:44:00) [6]

Никакого смысла даже если и прочитаеш "список состояний", то уж запустить нужную службу без привилегий тебе точно не удастся. лучше засади на тот комп резидента, пускай висит себе %)


lead-in   (2008-06-16 12:09:00) [7]


> alexm_hs_


да конечно! привидите, если не трудно... время ещё есть


DVM   (2008-05-23 21:16:00) [8]


> это намного неожиданней и соот-но приятней)))

Доставку цветов на дом лучше закажи. Там анонимно тоже можно.


alexm_hs_   (2008-05-23 21:14:00) [9]

Никаких прав администратора не надо на чужом компе. Дяля получения списка служб и их состояния. если код нужен - скажите


Сергей М.   (2008-05-21 15:00:00) [10]

Не соглашусь)
Кому как)


lead-in   (2008-05-21 14:56:00) [11]

Да в принципе))) но согласитель если выползает сообщение прям "на рабочий стол" - это намного неожиданней и соот-но приятней)))


Сергей М.   (2008-05-21 13:00:00) [12]

Почтовой).. Если адресат по случаю праздника будет регулярно проверять почту)


lead-in   (2008-05-21 12:59:00) [13]

а их (прав) естественно нет, то есть никакими службами здесь не обойтись?


Сергей М.   (2008-05-21 12:41:00) [14]


> как узнать запущена ли какая-либо служба (net send, например)
> на удалённом пк


Для этого нужно иметь административные права на целевом компе


lead-in   (2008-05-21 12:04:00) [15]

Да никакой шифровки, поздравление с праздником просто, и чтоб не знали от кого)))


Сергей М.   (2008-05-21 11:59:00) [16]


> нужно отправить анонимно


От кого шифруемся ?)


Наверх

Титульная страница Поиск, карта сайта Написать письмо