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

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

Программное определение ip адресса


x3m ©   (2007-06-30 13:30:00) 

Сабж. Плиз, помогите с этой задачей....


JanMihail   (2007-07-01 10:19:00) [1]

1. Как самый простой вариант, сделай так:
ipconfig > c:\1.txt

Берешь там такую строчку:
IP-адрес  . . . . . . . . . . . . : 212.154.165.150
2. Рациональный вариант брать текст с консоля:
{-------------------------------------------------------------------
Функция возвращает текст окна консоля вызванного в CommandLine }
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;
WorkDir, Line: String;
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;

  // Запускаем компилятор из командной строки
  WorkDir := ExtractFilePath(CommandLine);
  WasOK := CreateProcess(nil, PChar(CommandLine), nil, nil, True, 0, nil, PChar(WorkDir), 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:=Line;
    CloseHandle(StdOutPipeRead);
end;
end;


x3m   (2007-06-30 16:53:00) [2]

: ) Нет, но щас загляну.))


Rouse_   (2007-06-30 14:49:00) [3]

FAQ читал?


Наверх

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