Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как сделать GUI-оболочку к консольной проге?  (Прочитано 26015 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
monrus
Опытный

ru
Offline Offline

« : 02-07-2006 15:22 » 

Как сделать GUI-оболочку к консольной проге, чтобы можно было передавать в строку некие аргументы. Дайте примеры.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 02-07-2006 19:24 » 

monrus, легче к GUI приложению привинтить консоль. Делаеш отдельно два приложения. Из GUI приложения запускаеш консоль и через сокеты или pipe передаеш данные на консоль.
Можно в принципе и консоль напрямую вызывать. Только это надо будет покопаться в MSDN. Я как-то натыкался на статьи по созданию консоли.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
zubr
Гость
« Ответ #2 : 03-07-2006 04:26 » 

В дельфях делается до безобразия просто:
Код:
unit Unit1;
{$APPTYPE CONSOLE}

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 Writeln('Eto stroka Edit1: ', Edit1.Text);
end;

end.
« Последнее редактирование: 06-12-2007 18:55 от Алексей1153++ » Записан
monrus
Опытный

ru
Offline Offline

« Ответ #3 : 03-07-2006 15:12 » 

Боюсь, мы друг друга не поняли. Приведу пример: все вы знаете прогу UPX, которая работает ч/з командную строку. Как, например, к ней сделать оболочку, чтобы можно было передавть ей различные аргументы. или оболочка к компилятору, к примеру.
Меня просто интересует как это все работает. Спасибо, что помогаете.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #4 : 03-07-2006 16:29 » 

Вот пример из MSDN, Как это делать Улыбаюсь
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
monrus
Опытный

ru
Offline Offline

« Ответ #5 : 03-07-2006 17:00 » 

А на дельфи Улыбаюсь?
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #6 : 03-07-2006 17:33 » 

monrus, А прогуглить малость слабо? Вот ссылка http://delphiworld.narod.ru/base/stdin_stdout.html
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #7 : 04-07-2006 14:39 » 

https://forum.shelek.ru/index.php/topic,2507.0.html
Записан

monrus
Опытный

ru
Offline Offline

« Ответ #8 : 04-07-2006 15:27 » 

Блин не понимаю. Дайте пример реальной программы. Please.
Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #9 : 04-07-2006 15:47 » 

monrus, по ссылке приведён готовый код реальной программы, которая запускает ping 127.0.0.1 и выводит результат её работы в TMemo.
Записан

monrus
Опытный

ru
Offline Offline

« Ответ #10 : 04-07-2006 16:50 » 

Она у меня не работает, хоть тупым я себя не считаю.
Записан
monrus
Опытный

ru
Offline Offline

« Ответ #11 : 04-07-2006 16:51 » 

там еще и синтаксис чем-то левым заменен
Записан
monrus
Опытный

ru
Offline Offline

« Ответ #12 : 04-07-2006 16:53 » 

х77, пришли мне пожалуйста эту прогу.
Записан
zubr
Гость
« Ответ #13 : 05-07-2006 04:09 » 

Может это тебе поможет:
Код:
const 
 RETURN_INVALID_HANDLE = MaxInt;
 RETURN_EXECUTE_FAILED = MaxInt - 1;


function ExecuteWait(Command, Params: string; ShowWindow: Word;
 Output: TStrings): Cardinal;


    function GetTempFile: string;
    var
      bFile, bDir: Array [0..255] of char;
    begin
      GetTempPath(SizeOf(bDir), bDir);
      GetTempFileName(bDir, 'tmp', 0, bFile);
      Result := bFile;
    end;


var
 StartupInfo: TStartupInfo;
 ProcessInfo: TProcessInformation;
 SecurityAttr: TSecurityAttributes;
 hOut: THandle;
 tempfile: string;
 workingdir: PChar;
begin
 ZeroMemory(@StartupInfo, SizeOf(TStartupInfo));
 ZeroMemory(@ProcessInfo, SizeOf(TProcessInformation));
 ZeroMemory(@SecurityAttr, SizeOf(TSecurityAttributes));


 tempfile := GetTempFile;


 with SecurityAttr do begin
   nLength := SizeOf(TSecurityAttributes);
   lpSecurityDescriptor := nil;
   bInheritHandle := True;
   end;


 hOut := CreateFile(PChar(tempfile), GENERIC_READ or GENERIC_WRITE, 0,
@SecurityAttr,
                    CREATE_ALWAYS, FILE_ATTRIBUTE_TEMPORARY, 0);


 if hOut = INVALID_HANDLE_VALUE then
   Result := RETURN_INVALID_HANDLE
 else begin
   with StartupInfo do begin
     cb := SizeOf(TStartupInfo);
     wShowWindow := ShowWindow;
     dwFlags := STARTF_USESHOWWINDOW;
     if Assigned(Output) then begin
       hStdOutput := hOut;
       hStdError := hOut;
       hStdInput := GetStdHandle(STD_INPUT_HANDLE);
       dwFlags := dwFlags or STARTF_USESTDHANDLES;
       end;
     end;


   if ExtractFilePath(Command) <> '' then
     workingdir := PChar(ExtractFilePath(Command))
   else
     workingdir := nil;


   if Pos(' ', Command) <> 0 then Command := '"' + Command + '"';


   if CreateProcess(nil, PChar(Command + ' ' + Params), nil, nil, True, 0,
nil,
                    workingdir, StartupInfo, ProcessInfo) then begin
     WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
     GetExitCodeProcess(ProcessInfo.hProcess, Result);
     CloseHandle(ProcessInfo.hProcess);
     CloseHandle(ProcessInfo.hThread);
     CloseHandle(hOut);
     if Assigned(Output) then Output.LoadFromFile(tempfile);
     DeleteFile(tempfile);
     end
   else begin
     CloseHandle(hOut);
     DeleteFile(tempfile);
     Result := RETURN_EXECUTE_FAILED;
     end;
   end;


end;
« Последнее редактирование: 06-12-2007 18:56 от Алексей1153++ » Записан
monrus
Опытный

ru
Offline Offline

« Ответ #14 : 07-07-2006 13:32 » 

дайтн реальные сорцы с выводом в консоль
Записан
zubr
Гость
« Ответ #15 : 07-07-2006 17:10 » 

Блин, называется дал го..на, давай и ложку Улыбаюсь
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  str:TStringList;
begin
 str:=TStringList.Create;
 try
  ExecuteWait('ping', '127.0.0.1', SW_HIDE, str);
  Memo1.Lines.Assign(str);
 finally
  str.Free;
 end;
end;
« Последнее редактирование: 06-12-2007 18:57 от Алексей1153++ » Записан
monrus
Опытный

ru
Offline Offline

« Ответ #16 : 07-07-2006 19:49 » 

вот пример вашей проги. Но она выводит данные из консоли в мемо. А мне нужно наоборот.
чтобы я вводил данные, к примеру, "/?" и эти данные передавались в консольную прогу.
Пожалуйста, модифицируйте ее. Очень хочу научиться работать с этим.

* cons2.zip (3.48 Кб - загружено 1019 раз.)
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #17 : 09-07-2006 14:24 » 

monrus, Ты так нефига не научишся. Это сто пудово. Дали тебе готовые сырци, работаюшие в обратном направлении. Ну так сделай их в прямом. Будет тебе практика, чтобы руку набить и самому понять. Разбирая чужой код, ты не научишся программировать. Пока сам не начнеш писать.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #18 : 09-07-2006 17:29 » 

monrus, согласен с Fintch'ем или ты используешь уже полученные данные или фиг ты чему научишься, твоя задача написания front-end интерфейса решается путём подмены потоков ввода вывода у внешней програмы. есть такой вызов dup. есть такой сайт delphikingdom.ru
« Последнее редактирование: 06-12-2007 18:58 от Алексей1153++ » Записан

Странно всё это....
monrus
Опытный

ru
Offline Offline

« Ответ #19 : 09-07-2006 18:59 » 

Жаль
Записан
zubr
Гость
« Ответ #20 : 09-07-2006 20:03 » 

Меня самого данная тема заинтерисовала, был час свободный - сварганил простенький интерпретатор консоли.
Описание:
1. Вводишь командную строку в окошко Edit.
2. Нажимаешь кнопку Пуск.
3. В левом Memo отображается вывод консоли.
4. Для ввода данных, вводишь строку в правое Memo и нажимаешь кнопку Ввод.
5. Смотришь, что выводится в левом Memo.

Проект собран в Delphi6.

* GUI_konsol.zip (8.22 Кб - загружено 1263 раз.)
Записан
monrus
Опытный

ru
Offline Offline

« Ответ #21 : 10-07-2006 16:15 » 

zubr, брат, Будь Здоров!
Теперь буду изучать.
Записан
monrus
Опытный

ru
Offline Offline

« Ответ #22 : 10-07-2006 16:17 » 

zubr, брат, Будь Здоров!
Теперь буду изучать.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines