Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> NET TIME, Получение времени с сетевого компьютера 
:(
    Опции темы
VIY
  Дата 13.10.2004, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 13.10.2004

Репутация: нет
Всего: нет



Доброго времени суток!

У меня следующая проблема - необходимо получить время установленое на другой машине через сеть.
ОС:WINDOWS 9x

Нашёл ДОС команду NET TIME \\server , но сообщение о том который час эта команда выкидывает в окно и как до него достучатся я незнаю. А перенаправление ввода/вывода через winexec и shellexecute неработает. (BAT-файл использовать немогу из-за ограничений в поставленой задаче)

Нашёл ссылку на API-функцию NetRemoteTOD которая должна быть в NETAPI32.DLL, но при запуске такой функции там программа не находит.

stena.gif
PM MAIL   Вверх
Alex
Дата 13.10.2004, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 4
Всего: 162



Цитата(VIY @ 13.10.2004, 17:10)
Нашёл ссылку на API-функцию NetRemoteTOD которая должна быть в NETAPI32.DLL, но при запуске такой функции там программа не находит.

функция работает только в NT системах


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Alex
Дата 13.10.2004, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 4
Всего: 162



Лови:
Код
function GetDosOutput(const CommandLine:string): string;
var
 SA: TSecurityAttributes;
 SI: TStartupInfo;
 PI: TProcessInformation;
 StdOutPipeRead, StdOutPipeWrite: THandle;
 WasOK: Boolean;
 Buffer: array[0..255] of Char;
 BytesRead: Cardinal;
 Line: String;

 function OEM2Ansi(const S : string) : string;
 // Конвертирует строку из кодировки DOS в Windows кодировку
 begin
   SetLength(Result,Length(S));
   if  Length(S) <> 0  then
     OemToChar(pChar(S),pChar(Result));
 end;
begin
 Application.ProcessMessages;
 with SA do begin
   nLength:= SizeOf(SA);
   bInheritHandle:= True;
   lpSecurityDescriptor:= nil;
 end;
 // создаём пайп для перенаправления стандартного вывода
 CreatePipe(StdOutPipeRead,  // дескриптор чтения
            StdOutPipeWrite, // дескриптор записи
            @SA,              // аттрибуты безопасности
            0                // количество байт принятых для пайпа - 0 по умолчанию
            );
 try
   // Создаём дочерний процесс, используя StdOutPipeWrite в качестве стандартного вывода,
   // а так же проверяем, чтобы он не показывался на экране.
   with SI do begin
     FillChar(SI, SizeOf(SI), 0);
     cb := SizeOf(SI);
     dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
     wShowWindow := SW_HIDE;
     hStdInput := GetStdHandle(STD_INPUT_HANDLE); // стандартный ввод не перенаправляем
     hStdOutput := StdOutPipeWrite;
     hStdError := StdOutPipeWrite;
   end;

   // Запускаем компилятор из командной строки
   WasOK := CreateProcess(nil, PChar(CommandLine), nil, nil, True, 0, nil, nil, SI, PI);

   // Теперь, когда дескриптор получен, для безопасности закрываем запись.
   // Нам не нужно, чтобы произошло случайное чтение или запись.
   CloseHandle(StdOutPipeWrite);  
   // если процесс может быть создан, то дескриптор, это его вывод
   if not WasOK then
     raise Exception.Create('Could not execute command line!')
   else
     try
       // получаем весь вывод до тех пор, пока DOS-приложение не будет завершено
       Line := '';
       repeat
         // читаем блок символов (могут содержать возвраты каретки и переводы строки)
         WasOK := ReadFile(StdOutPipeRead, Buffer, 255, BytesRead, nil);

         // есть ли что-нибудь ещё для чтения?
         if BytesRead > 0 then begin
           // завершаем буфер PChar-ом
           Buffer[BytesRead] := #0;
           // добавляем буфер в общий вывод
           Line := Line + Buffer;
         end;
       until not WasOK or (BytesRead = 0);
       // ждём, пока завершится консольное приложение
       WaitForSingleObject(PI.hProcess, INFINITE);
     finally
       // Закрываем все оставшиеся дескрипторы
       CloseHandle(PI.hThread);
       CloseHandle(PI.hProcess);
     end;
 finally
   result:= OEM2Ansi(Line);
   CloseHandle(StdOutPipeRead);
 end;
end;

function GetTimeNet(host: String): String;
begin
 Result:= 'none';
 with TStringList.Create do try
   Text:= GetDosOutput(Format('net time \\%s', [host]));
   if (count <> 0) and (Strings[0][Length(Strings[0])] = 'M') then
     Result:= copy(Strings[0], Length(Strings[0])-18, MaxInt);
 finally
   Free;
 end;
end;


Пример использования:
Код
procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage(GetTimeNet('alex'));
end;



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
VIY
Дата 14.10.2004, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 13.10.2004

Репутация: нет
Всего: нет



Большое спасибо, помогло!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0720 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.