Главная страница
    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.045 c
1-1152695808
antonn
2006-07-12 13:16
2006.08.27
Опять про локализации...


15-1154071925
umbra
2006-07-28 11:32
2006.08.27
Литература/ссылки по проектированию баз данных


2-1154385873
Drashka
2006-08-01 02:44
2006.08.27
BlueTooth


1-1152524205
Чапаев
2006-07-10 13:36
2006.08.27
Активировать форму


2-1154762326
12
2006-08-05 11:18
2006.08.27
Можно ли вытащить код из exe





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский