Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - bat & cmd - сокрытие окна и вывод данных консоли в интерфейсе нашей программы

Ответить
Настройки темы
C/C++ - bat & cmd - сокрытие окна и вывод данных консоли в интерфейсе нашей программы

Аватара для crashtuak

Старожил


Сообщения: 467
Благодарности: 25


Конфигурация

Профиль | Отправить PM | Цитировать


Есть у нас пакетный файл. Надо его сокрыть и выводить все данные с него, например, в ТекстБокс в нашей программе. Ну и если в нашем цмд есть моменты, где надо вводить данные, то сделать поле на форме, с которого те данные будут ити в консоль.

-------
Мне надо не так много "Полезных сообщений", чтоб сровнять их количество с моими постами :).


Отправлено: 07:55, 06-05-2009

 

Аватара для Alan85

Старожил


Сообщения: 463
Благодарности: 91

Профиль | Отправить PM | Цитировать


http://www.delphisources.ru/pages/fa...e_to_memo.html - пример на делфи но думаю суть будет понятна - я могу транслировать на c++ borland если не разберешься

Отправлено: 20:42, 06-05-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Alan85

Старожил


Сообщения: 463
Благодарности: 91

Профиль | Отправить PM | Цитировать


Транслировал, но что-то не работает что понять не могу (возможно BDS 2006) - выдает ошибку при нажатие на кнопку - ошибка доступа к kernel32.dll (обычное исключение рунтайма). Стопится все на этой строчке
Код: Выделить весь код
if (CreatePipe(ReadPipe,WritePipe,&Security,0))
.
Весь исходник :
Код: Выделить весь код
//$$---- 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


Аватара для Alan85

Старожил


Сообщения: 463
Благодарности: 91

Профиль | Отправить PM | Цитировать


Все разобрался:
Код: Выделить весь код
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


Аватара для crashtuak

Старожил


Сообщения: 467
Благодарности: 25

Профиль | Отправить PM | Цитировать


Alan85, большое спасибо. Это уже большая часть того, что мне надо. Может потом еще вопросы будут, так напишу.

-------
Мне надо не так много "Полезных сообщений", чтоб сровнять их количество с моими постами :).


Отправлено: 07:47, 07-05-2009 | #5


Аватара для crashtuak

Старожил


Сообщения: 467
Благодарности: 25

Профиль | Отправить 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



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - bat & cmd - сокрытие окна и вывод данных консоли в интерфейсе нашей программы

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] 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




 
Переход