Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.11.09;
Скачать: CL | DM;

Вниз

Ловим сообщения программы   Найти похожие ветки 

 
cruiser ©   (2008-10-01 14:02) [40]

Сергей М., а работает именно ping... или какое-то другое приложение? Я спрашиваю, потому что как раз ping это не показатель. С ping у меня и мой первый код работал.
За "Консольному процессу, очевидно, следует посылать CTRL_C_EVENT
" спасибо, попробую реализовать.


 
Сергей М. ©   (2008-10-01 14:05) [41]


> cruiser ©   (01.10.08 14:02) [40]


> работает именно ping... или какое-то другое приложение?


Именно ping.

А с другим приложением нужно разбираться индивидуально.


 
cruiser ©   (2008-10-01 14:17) [42]

А вчем тогда может быть разница? Почему перехват сообщений ping.exe нормально происходит и вовремя записывается в memo1, а с тем же кодом , но с другим консольным приложением почему-то коряво отрабатывает код?


 
Сергей М. ©   (2008-10-01 14:19) [43]


> cruiser ©   (01.10.08 14:17) [42]


Приводи конкретный пример - будем посмотреть)


 
cruiser ©   (2008-10-01 14:28) [44]

Хорошо. Попробую привести конкретный пример, но позже. Кстати, наткнулся тут на один форум и там вот такую фразу прочитал: "....все серьезно обсуждали недостатки метода - когда консольная программа хочет получить от запустившео какие-либо дополнительные данные, то вся система виснет.И никто не обратил внимания, что в CreateProcess в hStdInput и hStdOutput переданы концы hRead и hWrite одного пайпа!"
Не могу понять, может в моем коде это тоже наблюдается?


 
brother ©   (2008-10-01 14:30) [45]

сделал так:
...
const
  ReadBuffer = 240;

...

     Apprunning := WaitForSingleObject(ProcessInfo.hProcess, 100);
    sleep(50);
     if Apprunning <> WAIT_TIMEOUT then Break;

заработал) поигрался даже:
 RunDosInMemo("ping 127.0.0.1", Memo1);
и
 RunDosInMemo("cmd /?", Memo1);


 
brother ©   (2008-10-01 14:31) [46]

RunDosInMemo("dir c:\", Memo1);
не отрабатывает(


 
Leonid Troyanovsky ©   (2008-10-01 14:33) [47]


> brother ©   (01.10.08 14:31) [46]

> RunDosInMemo("dir c:\", Memo1);

"cmd /c dir c:\"

--
Regards, LVT.


 
Сергей М. ©   (2008-10-01 14:35) [48]


> может в моем коде это тоже наблюдается?


Ну ты же сам вначале сказал, что конс.приложения, с которыми ты намерен работать посредством этого кода, заведомо не будут требовать ввода, так ?

Значит это не твой случай, т.е. тот самый "недостаток" конкретно твоего случая не касается.


 
cruiser ©   (2008-10-01 14:36) [49]

А кто-нибудь может проверить работу кода с winrar.exe (запуск с параметрами). Будет ли нормально отрабатывать код?


 
cruiser ©   (2008-10-01 14:37) [50]


> Ну ты же сам вначале сказал, что конс.приложения, с которыми
> ты намерен работать посредством этого кода, заведомо не
> будут требовать ввода, так ?

Да. Именно так.


 
Leonid Troyanovsky ©   (2008-10-01 15:23) [51]


> cruiser ©   (01.10.08 14:28) [44]

>  что в CreateProcess в hStdInput и hStdOutput переданы концы
> hRead и hWrite одного пайпа!"
> Не могу понять, может в моем коде это тоже наблюдается?

Наблюдается. Строку
start.hStdInput := ReadPipe; - убрать

Кроме того, вместо OemToAnsi(Buffer, Buffer) надо

if BytesRead > 0 then
 begin
   OemToAnsi(Buffer, Buffer);
   ..
end;

--
Regards, LVT.


 
cruiser ©   (2008-10-01 15:37) [52]

Спасибо, учту.


 
cruiser ©   (2008-10-01 20:31) [53]

Проверил всё что мне сказали + совместил всё с кодом от Сергея М. В итоге, получается, что в моём коде строки в memo заполняются быстрее (т.е. не заметна склейка). Это вот что по окночании дочернего процесса в memo:

&#206;&#225;&#236;&#229;&#237; &#239;&#224;&#234;&#229;&#242;&#224;&#236;&#232; &#241; 127.0.0.1 &#239;&#238; 32 &#225;&#224;&#233;&#242;:

&#206;&#242;&#226;&#229;&#242; &#238;&#242; 127.0.0.1: &#247;&#232;&#241;&#235;&#238; &#225;&#224;&#233;&#242;=32 &#226;&#240;&#229;&#236;&#255;<1&#236;&#241; TTL=128

&#206;&#242;&#226;&#229;&#242; &#238;&#242; 127.0.0.1: &#247;&#232;&#241;&#235;&#238; &#225;&#224;&#233;&#242;=32 &#226;&#240;&#229;&#236;&#255;<1&#236;&#241; TTL=128

&#206;&#242;&#226;&#229;&#242; &#238;&#242; 127.0.0.1: &#247;&#232;&#241;&#235;&#238; &#225;&#224;&#233;&#242;=32 &#226;&#240;&#229;&#236;&#255;<1&#236;&#241; TTL=128

&#206;&#242;&#226;&#229;&#242; &#238;&#242; 127.0.0.1:

Не нужно обращать внимание на кракозяблы, это сути не меняет. Во первых при визуальном наблюдении очень заметен процесс склейки &#206;&#242;&#226;&#229;&#242; &#238;&#242; 127.0.0.1: и &#247;&#232;&#241;&#235;&#238; &#225;&#224;&#233;&#242;=32 &#226;&#240;&#229;&#236;&#255;<1&#236;&#241; TTL=128 частей. В моём (выше [3]) коде склейка визуально незаметна и последняя строка  полная.  
Где проблема?


 
Leonid Troyanovsky ©   (2008-10-02 14:52) [54]


> cruiser ©   (01.10.08 20:31) [53]

> и последняя строка  полная.  
> Где проблема?

Сделай цикл таким

   repeat
     Apprunning := WaitForSingleObject(ProcessInfo.hProcess, 10);
     ReadFile(ReadPipe, Buffer[0], ReadBuffer, BytesRead, nil);
     if BytesRead = 0 then
       Continue;
     Buffer[BytesRead] := #0;
     OemToAnsi(Buffer, Buffer);
     len := AMemo.Perform(WM_GETTEXTLENGTH, 0, 0);
     AMemo.Perform(EM_SETSEL, len, len);
     AMemo.SelText := Buffer;
     AMemo.Perform(EM_SCROLLCARET, 0,0);
     Application.ProcessMessages;
   until (Apprunning <> WAIT_TIMEOUT) or Application.Terminated;

--
Regards, LVT.



Страницы: 1 2 вся ветка

Текущий архив: 2008.11.09;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.013 c
2-1222849064
Игорь
2008-10-01 12:17
2008.11.09
Сортировка нескольких TStringList


6-1194876467
Иван_А
2007-11-12 17:07
2008.11.09
Как вытащить номер сокета из clientaddr


2-1222873726
Толик
2008-10-01 19:08
2008.11.09
Сохранение настроек в ini файл


15-1221560475
axis_of_Evil
2008-09-16 14:21
2008.11.09
Mac OS X .. вроде Leopard


15-1221501740
Virgo_Style
2008-09-15 22:02
2008.11.09
Имеет место быть распродажа слонов от Acronis