|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - bat & cmd - сокрытие окна и вывод данных консоли в интерфейсе нашей программы |
|
C/C++ - bat & cmd - сокрытие окна и вывод данных консоли в интерфейсе нашей программы
|
![]() Старожил Сообщения: 467 |
Есть у нас пакетный файл. Надо его сокрыть и выводить все данные с него, например, в ТекстБокс в нашей программе. Ну и если в нашем цмд есть моменты, где надо вводить данные, то сделать поле на форме, с которого те данные будут ити в консоль.
|
|
------- Отправлено: 07:55, 06-05-2009 |
![]() Забанен Сообщения: 463
|
http://www.delphisources.ru/pages/fa...e_to_memo.html - пример на делфи но думаю суть будет понятна - я могу транслировать на c++ borland если не разберешься
|
Отправлено: 20:42, 06-05-2009 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Забанен Сообщения: 463
|
Транслировал, но что-то не работает что понять не могу (возможно BDS 2006) - выдает ошибку при нажатие на кнопку - ошибка доступа к kernel32.dll (обычное исключение рунтайма). Стопится все на этой строчке
.
Весь исходник : //$$---- Form CPP ---- //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "uwincon.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm2 *Form2; void RunDosInMemo(char* cmd, TMemo* memo) { const ReadBuffer = 2400; SECURITY_ATTRIBUTES Security; PHANDLE ReadPipe, WritePipe; STARTUPINFO start; PROCESS_INFORMATION ProcessInfo; char Buffer[ReadBuffer]; DWord BytesRead; //======================== Security.nLength= sizeof(SECURITY_ATTRIBUTES); Security.bInheritHandle=TRUE; Security.lpSecurityDescriptor=NULL; if (CreatePipe(ReadPipe,WritePipe,&Security,0)) { //тут ошибка как будто не туда ссылка идет в kernel. При чем в делфях того же BDS все ок ZeroMemory( &start, sizeof(start) ); start.cb = sizeof(start); start.hStdOutput = WritePipe; start.hStdInput = ReadPipe; start.dwFlags = STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW; start.wShowWindow = SW_HIDE; if (CreateProcess(NULL,cmd, &Security, &Security, true, NORMAL_PRIORITY_CLASS,NULL,NULL,&start, &ProcessInfo)) do { ReadFile(ReadPipe, Buffer, ReadBuffer, &BytesRead, NULL); Buffer[BytesRead]= 0; OemToAnsi(Buffer, Buffer); memo->Text = memo->Text + Buffer; Application->ProcessMessages(); } while (WaitForSingleObject(ProcessInfo.hProcess, 100) == WAIT_TIMEOUT) ; //FreeMem(Buffer); CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); CloseHandle(ReadPipe); CloseHandle(WritePipe); } } //--------------------------------------------------------------------------- __fastcall TForm2::TForm2(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm2::Button1Click(TObject *Sender) { Memo1->Clear(); RunDosInMemo("ping -t 192.168.0.3", Memo1); } //--------------------------------------------------------------------------- |
Отправлено: 21:54, 06-05-2009 | #3 |
![]() Забанен Сообщения: 463
|
Все разобрался:
void RunDosInMemo(char* cmd, TMemo* memo) { const ReadBuffer = 2400; SECURITY_ATTRIBUTES Security; HANDLE ReadPipe, WritePipe; STARTUPINFO start; PROCESS_INFORMATION ProcessInfo; char Buffer[ReadBuffer]; DWord BytesRead, Apprunning; //======================== Security.nLength= sizeof(SECURITY_ATTRIBUTES); Security.bInheritHandle=TRUE; Security.lpSecurityDescriptor=NULL; if (CreatePipe(&ReadPipe,&WritePipe,&Security,0)) { ZeroMemory( &start, sizeof(start) ); start.cb = sizeof(start); start.hStdOutput = WritePipe; start.hStdInput = ReadPipe; start.dwFlags = STARTF_USESTDHANDLES + STARTF_USESHOWWINDOW; start.wShowWindow = SW_HIDE; if (CreateProcess(NULL,cmd, &Security, &Security, true, NORMAL_PRIORITY_CLASS,NULL,NULL,&start, &ProcessInfo)) do { Apprunning = WaitForSingleObject(ProcessInfo.hProcess, 100) ; // обязательно ReadFile(ReadPipe, Buffer, ReadBuffer, &BytesRead, NULL); Buffer[BytesRead]= 0; OemToAnsi(Buffer, Buffer); memo->Text = memo->Text + Buffer; Application->ProcessMessages(); } while (Apprunning== WAIT_TIMEOUT) ; //FreeMem(Buffer); CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); CloseHandle(ReadPipe); CloseHandle(WritePipe); } } |
Отправлено: 22:12, 06-05-2009 | #4 |
![]() Старожил Сообщения: 467
|
Профиль | Отправить PM | Цитировать Alan85, большое спасибо. Это уже большая часть того, что мне надо. Может потом еще вопросы будут, так напишу.
|
|
------- Отправлено: 07:47, 07-05-2009 | #5 |
![]() Старожил Сообщения: 467
|
Профиль | Отправить PM | Цитировать Данный цмд с такой реализацией неработает
![]() @echo off color 17 title L2EmuProject: Login Server Console :start echo Initializing L2EmuProject LoginServer. echo. SET OLDCLASSPATH=%CLASSPATH% call setenv.bat REM ######################################################################## REM # You need to set here your JDK/JRE params in case of x64 bits System. # REM # Remove the "REM" after set PATH variable # REM # If you're not a x64 system user just leave # REM ######################################################################## REM set PATH="type here your path to java jdk/jre (including bin folder)" java -Dfile.encoding=UTF-8 -Xmx64m net.l2emuproject.loginserver.L2LoginServer SET CLASSPATH=%OLDCLASSPATH% if ERRORLEVEL 2 goto restart if ERRORLEVEL 1 goto error goto end :restart echo. echo Admin Restart ... echo. goto start :error echo. echo LoginServer terminated abnormaly echo. :end echo. echo LoginServer terminated echo. pause |
------- Отправлено: 16:40, 07-05-2009 | #6 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] IP из cmd (2 IP на интерфейсе, статический + динамический) | alexandri | Сетевые технологии | 18 | 20-11-2022 15:20 | |
C/C++ - Некоторые проблемы с установкой нашей программы поверх всех окон | crashtuak | Программирование и базы данных | 3 | 31-12-2009 00:32 | |
[решено] сокрытие окна, как только оно появилось или всплыло | crashtuak | AutoIt | 7 | 30-07-2009 21:47 | |
CMD/BAT - [решено] вывод текстового файла на экран cmd | idsp | Скриптовые языки администрирования Windows | 6 | 06-04-2009 07:18 | |
Java - Вывод модального окна сообщения в Java | EvgeniyQQQ | Программирование и базы данных | 2 | 19-04-2008 14:50 |
|