![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() доброе время суток.
вот возник вопрос как перехватить консоль суть в том чтоб memo полностью стало консолью каторую я хочу перехватить и реализовать работу с файломи консоль это colinux запускающийся с параметром Код:
colinux-daemon.exe -t nt @server/server.conf fastboot nogui Скрин работы с файломи: http://s012.radikal.ru/i321/1107/5a/13387010e367.jpg =================================== ======================= Открытие архива .img нужно открыть файл из этого образа 123.img и отредактировать строки в нём чтоб они выводились в Edit1,Edit2,Edit3 и т.п место расположение файла мне изветно если это чтото изменит скрин консоли colinux при запуски http://s015.radikal.ru/i332/1107/7d/26ac1525ecf8.jpg и скрин файла http://s014.radikal.ru/i326/1107/9c/20c6905b07ca.jpg Если вам нетрудно поделитесь исходником или кодом=( За рание спосибо. |
#2
|
||||
|
||||
![]() Лови модуль, буквально вчера писал. Точно знаю что работает на Delphi XE, про остальные версии 100% утверждать не берусь, но теоретически работать должно.
Код:
unit ConsoleAppRunner; interface uses Classes; procedure RunConsoleApplication(CmdLine,Params:AnsiString;OutStrings:TStrings); implementation uses Windows,AnsiStrings; procedure RunConsoleApplication(CmdLine,Params:AnsiString;OutStrings:TStrings); var securityattributes: TSecurityAttributes; startupinfo: TStartupInfoA; processinformation: TProcessInformation; hPipeInputRead: THandle; hPipeInputWrite: THandle; hPipeOutputRead: THandle; hPipeOutputWrite: THandle; WaitResult:Cardinal; buf: array [0..1023] of AnsiChar; dummy: Cardinal; begin OutStrings.Append(#13#10); securityattributes.nLength:=SizeOf(TSecurityAttributes); securityattributes.lpSecurityDescriptor:=nil; securityattributes.bInheritHandle:=True; CreatePipe(hPipeInputRead, hPipeInputWrite, @securityattributes, 0); CreatePipe(hPipeOutputRead, hPipeOutputWrite, @securityattributes, 0); ZeroMemory(@startupinfo, SizeOf(TStartupInfo)); ZeroMemory(@processinformation, SizeOf(TProcessInformation)); startupinfo.cb:=SizeOf(TStartupInfo); startupinfo.dwFlags:=STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; startupinfo.wShowWindow:=SW_HIDE; startupinfo.hStdInput:=hPipeInputRead; startupinfo.hStdOutput:=hPipeOutputWrite; startupinfo.hStdError:=hPipeOutputWrite; OutStrings.BeginUpdate; OutStrings.Append(CmdLine+' '+Params); OutStrings.EndUpdate; if CreateProcessA(nil, PAnsiChar(CmdLine+' '+Params), nil, nil, True, CREATE_NEW_CONSOLE, nil, PAnsiChar(AnsiStrings.ExtractFileDir(CmdLine)), startupinfo, processinformation) then begin repeat WaitResult:=WaitForSingleObject(processinformation.hProcess, 100); if ReadFile(hPipeOutputRead, buf, Length(buf), dummy, nil) then begin OemToAnsiBuff(buf, buf, dummy); OutStrings.BeginUpdate; OutStrings.Text:=OutStrings.Text+Copy(buf, 1, dummy); OutStrings.EndUpdate; end; until WaitResult<>WAIT_TIMEOUT; CloseHandle(processinformation.hProcess); end; CloseHandle(hPipeInputWrite); CloseHandle(hPipeInputRead); CloseHandle(hPipeOutputWrite); CloseHandle(hPipeOutputRead); end; end. CmdLine - exe-файл (указываем полный путь, далее этот путь будет использоваться как рабочий каталог) Params - параметры OutStrings - объект для вывода результатов (в самом простом варианте это Memo1.Lines) Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#3
|
||||
|
||||
![]() Код:
procedure RunConsoleApplication(CmdLine,Params:AnsiString;OutStrings:TStrings); var securityattributes: TSecurityAttributes; startupinfo: TStartupInfoA;//тут ругается и после этого на всё остальное processinformation: TProcessInformation; hPipeInputRead: THandle; hPipeInputWrite: THandle; hPipeOutputRead: THandle; hPipeOutputWrite: THandle; WaitResult:Cardinal; buf: array [0..1023] of AnsiChar; dummy: Cardinal; begin OutStrings.Append(#13#10); securityattributes.nLength:=SizeOf(TSecurityAttributes); securityattributes.lpSecurityDescriptor:=nil; securityattributes.bInheritHandle:=True; CreatePipe(hPipeInputRead, hPipeInputWrite, @securityattributes, 0); CreatePipe(hPipeOutputRead, hPipeOutputWrite, @securityattributes, 0); ZeroMemory(@startupinfo, SizeOf(TStartupInfo)); ZeroMemory(@processinformation, SizeOf(TProcessInformation)); startupinfo.cb:=SizeOf(TStartupInfo); startupinfo.dwFlags:=STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; startupinfo.wShowWindow:=SW_HIDE; startupinfo.hStdInput:=hPipeInputRead; startupinfo.hStdOutput:=hPipeOutputWrite; startupinfo.hStdError:=hPipeOutputWrite; OutStrings.BeginUpdate; OutStrings.Append(CmdLine+' '+Params); OutStrings.EndUpdate; if CreateProcessA(nil, PAnsiChar(CmdLine+' '+Params), nil, nil, True, CREATE_NEW_CONSOLE, nil, PAnsiChar(AnsiStrings.ExtractFileDir(CmdLine)), startupinfo, processinformation) then begin repeat WaitResult:=WaitForSingleObject(processinformation.hProcess, 100); if ReadFile(hPipeOutputRead, buf, Length(buf), dummy, nil) then begin OemToAnsiBuff(buf, buf, dummy); OutStrings.BeginUpdate; OutStrings.Text:=OutStrings.Text+Copy(buf, 1, dummy); OutStrings.EndUpdate; end; until WaitResult<>WAIT_TIMEOUT; CloseHandle(processinformation.hProcess); end; CloseHandle(hPipeInputWrite); CloseHandle(hPipeInputRead); CloseHandle(hPipeOutputWrite); CloseHandle(hPipeOutputRead); end; end. вот=\ |
#4
|
||||
|
||||
![]() Замени TStartupInfoA на TStartupInfo
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#5
|
||||
|
||||
![]() http://i027.radikal.ru/1107/78/80f1409ff0e2.jpg
вот чё выдаёт щяс |
#6
|
||||
|
||||
![]() Убери AnsiStrings из Uses, он мне только для XE нужен был.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#7
|
||||
|
||||
![]() http://s61.radikal.ru/i171/1107/94/a04d12682f74.jpg
В вложении исходник ато я чёт ваше запутался=\ Последний раз редактировалось bender42, 23.07.2011 в 16:06. |
#8
|
||||
|
||||
![]() Пишу программы за еду. __________________ |
#9
|
||||
|
||||
![]() Допилил я таки модуль для запуска консольных приложений, чтобы он нормально работал в XE
Кому не влом, протестируйте на семерке к примеру, ну или на любой дельфе которая не юникодовская. Код:
unit ConsoleAppRunner; interface uses Classes; procedure RunConsoleApplication(CmdLine,Params:String;OutStrings:TStrings); implementation uses SysUtils,Windows; const UnprintableSymbols = [ #$00,#$01,#$02,#$03,#$04,#$05,#$06,#$07,#$08,#$09,#$0A,#$0B,#$0C,#$0D,#$0E,#$0F, #$10,#$11,#$12,#$13,#$14,#$15,#$16,#$17,#$18,#$19,#$1A,#$1B,#$1C,#$1D,#$1E,#$1F, #$7F ]; type TAnsiBuf = array [0..1023] of AnsiChar; TCharBuf = array [0..1023] of Char; procedure MoveLeft(var Data:TAnsiBuf; From,Len,Shift:integer); var i:integer; begin for i := From to From+Len do Data[i]:=Data[i-Shift]; end; procedure AnsiBufToCharBuf(AnsiBuf:TAnsiBuf;var CharBuf:TCharBuf;Len:integer); var i:integer; begin for I := 0 to Len do begin if CharInSet(AnsiBuf[i],UnprintableSymbols) then CharBuf[i]:=Char(AnsiBuf[i]) else OemToChar(@AnsiBuf[i],@CharBuf[i]); end; end; procedure RunConsoleApplication(CmdLine,Params:String;OutStrings:TStrings); var securityattributes: TSecurityAttributes; startupinfo: TStartupInfo; processinformation: TProcessInformation; hPipeInputRead: THandle; hPipeInputWrite: THandle; hPipeOutputRead: THandle; hPipeOutputWrite: THandle; WaitResult:Cardinal; AnsiBuf: TAnsiBuf; CharBuf: TCharBuf; dummy: Cardinal; s:string; begin // OutStrings.Append(#13#10); //<--------- securityattributes.nLength:=SizeOf(TSecurityAttributes); securityattributes.lpSecurityDescriptor:=nil; securityattributes.bInheritHandle:=True; CreatePipe(hPipeInputRead, hPipeInputWrite, @securityattributes, 0); CreatePipe(hPipeOutputRead, hPipeOutputWrite, @securityattributes, 0); ZeroMemory(@startupinfo, SizeOf(TStartupInfo)); ZeroMemory(@processinformation, SizeOf(TProcessInformation)); with startupinfo do begin cb:=SizeOf(TStartupInfo); dwFlags:=STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES; wShowWindow:=SW_HIDE; hStdInput:=hPipeInputRead; hStdOutput:=hPipeOutputWrite; hStdError:=hPipeOutputWrite; end; OutStrings.BeginUpdate; OutStrings.Append(CmdLine+' '+Params); OutStrings.EndUpdate; if CreateProcess(nil, PChar(CmdLine+' '+Params), nil, nil, True, CREATE_NEW_CONSOLE, nil, PChar(ExtractFileDir(CmdLine)), startupinfo, processinformation) then begin repeat WaitResult:=WaitForSingleObject(processinformation.hProcess, 100); if ReadFile(hPipeOutputRead, AnsiBuf, Length(AnsiBuf), dummy, nil) then begin AnsiBufToCharBuf(AnsiBuf, CharBuf, dummy); OutStrings.BeginUpdate; OutStrings.Text:=OutStrings.Text+Copy(CharBuf, 1, dummy); // if Pos(#8,OutStrings.Text)>0 then //<--------- // begin //<--------- // s:=OutStrings.Text; //<--------- // Delete(s,Pos(#8,s)-3,4); //<--------- // OutStrings.Text:=s; //<--------- // end; //<--------- OutStrings.EndUpdate; end; until WaitResult<>WAIT_TIMEOUT; CloseHandle(processinformation.hProcess); end else begin OutStrings.BeginUpdate; OutStrings.Append(SysErrorMessage(GetLastError)); OutStrings.EndUpdate; end; CloseHandle(hPipeInputWrite); CloseHandle(hPipeInputRead); CloseHandle(hPipeOutputWrite); CloseHandle(hPipeOutputRead); end; end. пример вызова: Код:
uses ConsoleAppRunner; ... RunConsoleApplication('c:\windows\system32\ping.exe','192.168.104.104',ListBox1.Items); Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#10
|
||||
|
||||
![]() CharInSet появилась в Дельфи 2009.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#11
|
||||
|
||||
![]() Ну это не трудно поправить.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#12
|
||||
|
||||
![]() После доработки запускается в 5 и 7 Дельфи.
P.S. По указанному адресу, отказали в доступе. ![]() Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. Последний раз редактировалось angvelem, 04.08.2011 в 13:32. |
#13
|
||||
|
||||
![]() Склероз.
![]() Код:
unit util; {$H+,B-,R-} interface uses Windows, Messages; {$I Common.inc} type TSysCharSet = set of AnsiChar; TCharSet = TSysCharSet; //======================= SysUtils ========================= function CharInSet(C : AnsiChar; const CharSet : TSysCharSet) : Boolean; overload;{$IFDEF D10} inline;{$ENDIF} function CharInSet(C : WideChar; const CharSet : TSysCharSet) : Boolean; overload;{$IFDEF D10} inline;{$ENDIF} implementation const {$IFDEF D5} CSTR_EQUAL = 2; {$ENDIF} //--------------------------------------------------------- // SysUtils //--------------------------------------------------------- function CharInSet(C : AnsiChar; const CharSet : TSysCharSet) : Boolean; begin Result := C in CharSet; end; //--------------------------------------------------------- function CharInSet(C : WideChar; const CharSet : TSysCharSet) : Boolean; begin Result := (C < #$0100) and (AnsiChar(C) in CharSet); end; //--------------------------------------------------------- end. Код:
{$IFDEF VER100} { Borland Delphi 3.0 } {$DEFINE D3} {$ENDIF} {$IFDEF VER120} { Borland Delphi 4.0 } {$DEFINE D3} {$DEFINE D4} {$ENDIF} {$IFDEF VER130} { Borland Delphi 5.0 } {$DEFINE D3} {$DEFINE D4} {$DEFINE D5} {$ENDIF} {$IFDEF VER140} { Borland Delphi 6.0 } {$DEFINE D3} {$DEFINE D4} {$DEFINE D5} {$DEFINE D6} {$ENDIF} {$IFDEF VER150} { Borland Delphi 7.0 } {$DEFINE D3} {$DEFINE D4} {$DEFINE D5} {$DEFINE D6} {$DEFINE D7} {$ENDIF} {$IFDEF VER180} { Borland Delphi 2006 } {$DEFINE D3} {$DEFINE D4} {$DEFINE D5} {$DEFINE D6} {$DEFINE D7} {$DEFINE D10} {$ENDIF} {$IFDEF VER200} { Borland Delphi 2009 } {$DEFINE D3} {$DEFINE D4} {$DEFINE D5} {$DEFINE D6} {$DEFINE D7} {$DEFINE D10} {$DEFINE D2009} {$ENDIF} {$IFDEF D7} {$WARN SYMBOL_PLATFORM OFF} {$WARN UNSAFE_TYPE OFF} {$WARN UNSAFE_CODE OFF} // These flags requires library DbgHelp.dll on Windows NT 4.0 // and Windows 95/98/Me. {$SETPEFLAGS IMAGE_FILE_RELOCS_STRIPPED or IMAGE_FILE_DEBUG_STRIPPED or IMAGE_FILE_LINE_NUMS_STRIPPED or IMAGE_FILE_LOCAL_SYMS_STRIPPED or IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP or IMAGE_FILE_NET_RUN_FROM_SWAP} {$ENDIF} {$IFDEF D2009} {$WARN IMPLICIT_STRING_CAST OFF} {$WARN IMPLICIT_STRING_CAST_LOSS OFF} {$ENDIF} Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |