Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Передача текста консольному приложению


Автор: Spectre12 25.9.2006, 10:40
Есть консольное приложение, которое запускается, грубо говоря, из командной строки в моей программе.
Как можно передать этому приложению текст, дабы не вбивать его ручками?
  

Автор: Sartorius 25.9.2006, 14:02
text.txt > myApp.exe

Автор: Spectre12 25.9.2006, 14:42
не ботает

Автор: Alexeis 25.9.2006, 14:53
Spectre12, а почему бы не передавать качестве параметра командной строки?

Автор: Spectre12 25.9.2006, 15:04
тоже что-то не то
 smile 

Автор: Romikgy 25.9.2006, 15:07
создай своим приложением текстовый файл, и в качестве параметра передай консольному название этого файла, а внутри консольного прочитай файл с текстом

Автор: Sartorius 25.9.2006, 15:12
Цитата(Spectre12 @ 25.9.2006,  16:04)
тоже что-то не то
 smile

 Покажи исходник(хотя бы часть)... А то вообще не понятно ,  что там у тебя не получается...
Что ты в нем делаешь хотя бы : со стандартного ввода читаешь? 

Автор: Spectre12 25.9.2006, 15:18
Ладненько:
 - консольное приложение - nslookup.exe (внутри уже ничего не допишешь).
 - посылаю ему IP
 - получаю адрес сайта, причем для каждого IP nslookup запускается по 1 разу
 - хотелось бы за 1 открытие обработать весь список IP

Автор: Sartorius 25.9.2006, 15:28
Цитата

 - посылаю ему IP

Просто ввдодишь после запуска?

Автор: Spectre12 25.9.2006, 15:36
Цитата

 
Цитата

  - посылаю ему IP
 

Просто ввдодишь после запуска?


Нет, как параметр.

Автор: Sartorius 25.9.2006, 15:59
Тогда сделай что-то типа :
for /l %i in (0, 1, 255) do nslookup 192.168.5.%i > log.txt

Автор: Spectre12 25.9.2006, 16:05
Тоже по одному IP...
И вообще у меня номера IPшников не подряд идут.

Автор: Romikgy 25.9.2006, 16:28
через пайпы создай свою консоль и запускай что хочешь и с какими параметрами, а пайпы нужны дабы втянуть данные выданные 
Цитата(Spectre12 @  25.9.2006,  14:18 Найти цитируемый пост)
nslookup.exe

на консоль

Автор: Spectre12 26.9.2006, 09:46
Цитата

 а пайпы нужны дабы втянуть данные выданные 


Нашел тут в сети: http://olddos.narod.ru/doc/comp/bsp/v27/ch2.htm

Пойду разбиратся...

Автор: Snowy 26.9.2006, 09:47
Цитата(Spectre12 @  25.9.2006,  15:18 Найти цитируемый пост)
- получаю адрес сайта, причем для каждого IP nslookup запускается по 1 разу - хотелось бы за 1 открытие обработать весь список IP
Никак. Либо делай несколько запусков, либо пиши свою программу.

Автор: Spectre12 26.9.2006, 10:08
Цитата

 Никак. Либо делай несколько запусков, либо пиши свою программу. 


Жаль...  А есть возможность ускорить работу этой функции (задать время обработки, например)?
Код

function IPAddrToName(IPAddr : string): string;
var
  SockAddrIn: TSockAddrIn;
  HostEnt: PHostEnt;
  WSAData: TWSAData;
begin
  WSAStartup($101, WSAData);
  SockAddrIn.sin_addr.s_addr:= inet_addr(PChar(IPAddr));
  HostEnt := gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET);
  if HostEnt <> nil
   then result := StrPas(Hostent^.h_name)+#9+'('+IPAddr+')' 
   else result := IPAddr;
end;

Автор: Snowy 26.9.2006, 10:12
Запускай несколько тредов - по одному на каждый адрес.
Не заметишь, как всё продетектит.

Автор: Spectre12 26.9.2006, 10:16
Цитата

Запускай несколько тредов - по одному на каждый адрес.
Не заметишь, как всё продетектит. 


 smile 
енто про function IPAddrToName(IPAddr : string): string;
или nslookup.exe?

Автор: Snowy 26.9.2006, 11:32
Про IPAddrToName
Просто ты детектишь один адрес, потом второй, потом третий. И каждый раз ждёшь ответа.
Запускай все адреса сразу, но в разных тредах.
Они отработают одновременно.

Автор: Spectre12 26.9.2006, 14:05
Цитата

 Запускай все адреса сразу, но в разных тредах.

Где я столько тредов нарою smile  ?

потоки, так потоки...
Сел за изучение явления...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)