Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];

Вниз

Чтение из консоли в окно   Найти похожие ветки 

 
Dinamyc   (2006-05-04 23:29) [0]

вот код

const

 ReadBuffer = 2400;


var

 Command:array[1..1024] of Char;

 i:integer;

 CommandStr,Temp, AllBuffer:string;

 Security: TSecurityAttributes;

 ReadPipe, WritePipe: THandle;

 Start: TStartUpInfo;

 ProcessInfo: TProcessInformation;

 Buffer: PChar;

 MyBuffer:array[1..10000] of Char;

 BytesRead: DWord;

 Apprunning: DWord;


begin

recv(ClientSocket,Command,SizeOf(Command),0);

for i:=1 to 1024 do Temp:=Temp+Command[i];

CommandStr:=copy(Temp, 1, Pos("#", Temp)-1);

with Security do

 begin

   nlength := SizeOf(TSecurityAttributes);

   binherithandle := true;

   lpsecuritydescriptor := nil;

 end;

if CreatePipe(ReadPipe, WritePipe, @Security, 0) then

 begin

   Buffer := VirtualAlloc(nil, ReadBuffer+1, MEM_COMMIT ,PAGE_READWRITE );

   FillChar(Start, Sizeof(Start), #0);

   Start.cb := SizeOf(start);

   Start.hStdOutput := WritePipe;

   Start.hStdInput := ReadPipe;

   Start.dwFlags := STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW;

   Start.wShowWindow := SW_HIDE;

   if CreateProcess(nil,PChar("cmd /c"+CommandStr),@Security,@Security,true,NORMAL_PRIORITY_CLASS,nil,nil,Start,Process Info) then  //çàïóñê ïðîöåññà

   begin

     repeat

       Apprunning := WaitForSingleObject(ProcessInfo.hProcess, 300);

       ReadFile(ReadPipe, Buffer[0], ReadBuffer, BytesRead, nil);

       OemToAnsi(Buffer, Buffer);

       AllBuffer:=AllBuffer+Buffer;

     until (Apprunning=WAIT_OBJECT_0);

     for i:=1 to Length(AllBuffer) do Mybuffer[i]:=AllBuffer[i];

     send(ClientSocket,MyBuffer,SizeOf(MyBuffer),0);

   end;

   VirtualFree(Buffer,0,MEM_RELEASE );

   CloseHandle(ProcessInfo.hProcess);

   CloseHandle(ProcessInfo.hThread);

   CloseHandle(ReadPipe);

   CloseHandle(WritePipe);

 end;

Проблема в том что комманды выполняются но не все, например ren file.name file1.name и все зависание по полной(т.е. выполняются те которые что-то выводят[netstat,ping,dir...]). В чем проблема не подскажите!
Может че то с ReadFile и каналом. Ну кто с етим работал подскажите. Или мож условие не правильное
Apprunning=WAIT_OBJECT_0. A?


 
Сергей М. ©   (2006-05-05 08:26) [1]


> выполняются те которые что-то выводят


А где у тебя собственно консольный ввод используется (WriteFile(WritePipe, ..)) ?


 
Dinamyc   (2006-05-05 13:08) [2]

Команда CommandStr, она посылается cmd.exe при запуске процесса, а получается она функцией recv(ClientSocket,Command,SizeOf(Command),0), которая ждет прихода данных на определенный порт.


 
Сергей М. ©   (2006-05-05 14:08) [3]


> Dinamyc   (05.05.06 13:08) [2]


А с чего ты взял. что строка CommandStr была принята полностью ?

Какого вообще хрена ты не анализируегшь результат вызова ф-ции recv() ? Это что, мода такая новая, да ?


 
Slym ©   (2006-05-05 16:21) [4]

Поставь какойнить TelnetServer и не парься


 
Slym ©   (2006-05-05 16:31) [5]

Dinamyc   (04.05.06 23:29)
for i:=1 to 1024 do Temp:=Temp+Command[i];

с таким кодом далеко не уйдешь :(

Dinamyc   (04.05.06 23:29)
CreatePipe(ReadPipe, WritePipe, @Security, 0) then

Вообщето 2 пайпа делать надо... а то получается сам в себя

Откуда код сдернул?


 
Dinamyc   (2006-05-06 02:32) [6]

2 ой пайп мне не нужен мне надо только считать данные и все. Цикл я создаю потому что Recv не работает со строками, а только с char и array of char. А проверка на данном этапе мне пока не нужна, но это я думаю не составит особого труда, вопрос не в том. Telnet Serv мне не нужен, нужно только API. А вобщем я сам разобрался, помогла ф-ция PeekNamedPipe.


 
Сергей М. ©   (2006-05-06 16:52) [7]


> Recv не работает со строками


Чавой-то ?

С этого места поподробней, пожалуйста ...


 
Eraser ©   (2006-05-06 18:53) [8]


> Dinamyc   (04.05.06 23:29)

вот пример глянь http://www.torry.ru/authorsmore.php?id=3914


 
Dinamyc   (2006-05-07 18:50) [9]

Ну не знаю но ни send ни recv со строками у меня(?) не работают. Вот! Так уж получилось что выдает токо глюки.(Перекодировки не помогают).Вот так, не знаю правда как у вас? А пример хорошенький спасибо.



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

Форум: "WinAPI";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.054 c
4-1146761361
Antonyan
2006-05-04 20:49
2006.08.27
Опять кнопка Пуск


15-1154510916
SPeller
2006-08-02 13:28
2006.08.27
Глюк IE. Помогите, кто чем может


1-1152619279
Rater1
2006-07-11 16:01
2006.08.27
передать данные из excel в приложение


1-1152971168
Vendict
2006-07-15 17:46
2006.08.27
Потомок TFileStream


2-1154704534
Klever
2006-08-04 19:15
2006.08.27
количество строк таблицы DBGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский