Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.03.04;
Скачать: CL | DM;

Вниз

Получить результат выполнения команды консоли?   Найти похожие ветки 

 
Vyacheslav   (2011-11-26 05:03) [0]

Здравствуйте.
Хотелось бы не просто запустить консольное приложение на выполнение, например:

dir:=ExtractFilePath(ParamStr(0))+"ffmpeg.exe";
params:=" -i test.flv";
ShellExecute(Handle,  PWideChar("open"), PWideChar(dir), Pwidechar(params), PWideChar(""), SW_SHOW);

но и получить результат работы консоли, например в TMemo..
Может кто-то подскажет как это реализовать?


 
MBo ©   (2011-11-26 07:52) [1]

http://www.sources.ru/cpp/using_anonymous_pipes.shtml
и др. по теме - перехват вывода на консоль


 
Омлет ©   (2011-11-26 11:13) [2]

http://delphimaster.net/view/4-1321913659/
см. сообщение 9.


 
Vyacheslav   (2011-11-26 12:22) [3]

Пробую разобраться с
http://delphimaster.net/view/4-1321913659/
точнее http://www.koders.com/delphi/fidDB05C6361540F62D532FC7C960D4111CE3AAEDB3.aspx

procedure TForm1.Button2Click(Sender: TObject);
begin
 ExecuteConsoleApp("cmd", "", Memo1.Lines);
end;

Access violation at address 7519B763 in module "kernell32.dll". Write of address 0051578A.


 
Омлет ©   (2011-11-26 12:46) [4]

Может, какие-то особенности 2003 винды.. В ХР работает без ошибок.
На какой строке вылетает?


 
sniknik ©   (2011-11-26 13:32) [5]

а том вообще cmd есть? может уже что-то другое в качестве консоли.

p.s. в XP приведенный код по ссылке работает. правда почему то нормально закрыть программу не дает, не охота разбираться почему, но ошибок на старте нет.


 
Vyacheslav   (2011-11-26 15:42) [6]

Windows 7 64 bit
cmd есть, проверил


 
Vyacheslav   (2011-11-26 15:47) [7]

Может есть какая-то особенность Win7, но поскольку я для себя пишу, нужно хотябы для конкретной оси попробовать поправить..


 
Vyacheslav   (2011-11-26 16:06) [8]

Как искать причину?
Какие в какую сторону крутить поисковик?


 
sniknik ©   (2011-11-26 18:34) [9]

> Windows 7 64 bit
а приложение 32 разрядное...

> cmd есть, проверил
32 разрядная версия? я как то столкнулся в 64-х винде не было 32-х разрядного IE ... ну вернее не самого, а части объектов COM, ну те, что в TWebBrowser-е используются. печать из него не работала... а так пожалуйста запускай IE печатает, любой причем.


 
Vyacheslav   (2011-11-26 19:03) [10]

> а приложение 32 разрядное...
Да, 32х разрядное. Пробовал и 64, тоже самое, только адреса ошибок больше!

>> cmd есть, проверил
> 32 разрядная версия?
А вот это хороший вопрос! Но вот только как проверить cmd.exe разрядность и может ли это как-то помочь направить на решение проблемы?


 
Омлет ©   (2011-11-26 21:15) [11]


> почему то нормально закрыть программу не дает, не охота
> разбираться почему, но ошибок на старте нет.


Надо вызвать StopConsoleApp для остановки процесса.


 
Омлет ©   (2011-11-26 21:16) [12]


> Но вот только как проверить cmd.exe разрядность

Возьми любое или напиши 32-разрядное консольное приложение для теста.


 
Anatoly Podgoretsky ©   (2011-11-26 21:26) [13]

> Омлет  (26.11.2011 21:16:12)  [12]

Системная переменная
PROCESSOR_ARCHITECTURE


 
Vyacheslav   (2011-11-26 21:38) [14]

Ох, камрады, запутался окончательно...

> Возьми любое или напиши 32-разрядное консольное приложение для теста.
Вобщем-то я и хочу запустить 32х разрядное приложение, в данном случае - это ffmpeg.exe


 
Vyacheslav   (2011-11-26 21:49) [15]

ExecuteConsoleApp("ffmpeg.exe -i", "c:\bin\", Memo1.Lines);


 
sniknik ©   (2011-11-26 22:34) [16]

> в данном случае - это ffmpeg.exe
так чего ты нам с cmd мозг "паришь"?

> ExecuteConsoleApp("ffmpeg.exe -i", "c:\bin\", Memo1.Lines);
иии....?
все хорошо? ну хорошо тогда.


 
Vyacheslav   (2011-11-26 23:04) [17]

Дк та же самая ошибка в случае с ExecuteConsoleApp("ffmpeg.exe -i", "c:\bin\", Memo1.Lines);


 
Vyacheslav   (2011-11-26 23:13) [18]

Начну сначала!

1) Windows 7 64 bit, Intel i5, Delphi XE2

2) unit uZpRunConsoleApp; не скомпилировался сразу:
szCurrentDir := PCharOrNil(Trim(aCurrentDir));
[DCC Error] uZpRunConsoleApp.pas(617): E2010 Incompatible types: "PWideChar" and "PAnsiChar"
Меняю на
szCurrentDir := PChar(Trim(aCurrentDir));
Компилится.

3) Добаляю модуль в проект, добавляю Memo1 и Button1 на форму..

4) в код кнопки пишу:

procedure TForm1.Button1Click(Sender: TObject);
begin
 ExecuteConsoleApp("ffmpeg.exe -i", "c:\bin\", Memo1.Lines);
end;


5) При нажатии на Button1 Вылетает ошибка:
Access violation at address 7519B763 in module "kernell32.dll". Write of address 00515754.

--------------
В случае с ExecuteConsoleApp("cmd", "", Memo1.Lines);
Access violation at address 7519B763 in module "kernell32.dll". Write of address 0051578A


 
Simon   (2011-11-26 23:20) [19]

На какой строке вылетает?


 
Amoeba_   (2011-11-26 23:20) [20]


> получить результат работы консоли, например в TMemo..

Здесь:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=801


 
Simon   (2011-11-26 23:22) [21]


> Delphi XE2

О так модуль-то старый. Наверное его надо править под юникодовскую дельфю.


 
Германн ©   (2011-11-27 00:23) [22]


> Vyacheslav   (26.11.11 23:13) [18]
>
> Начну сначала!
>
> 2) unit uZpRunConsoleApp; не скомпилировался сразу:
> szCurrentDir := PCharOrNil(Trim(aCurrentDir));
> [DCC Error] uZpRunConsoleApp.pas(617): E2010 Incompatible
> types: "PWideChar" and "PAnsiChar"
> Меняю на
> szCurrentDir := PChar(Trim(aCurrentDir));
> Компилится.
>

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


 
Vyacheslav   (2011-11-27 01:14) [23]

Вобщем, вызвало подозрения.. Но не писал бы я в ветке для новичков, если бы понимал, что в этом модуле делается хотябы на 60%.

А проблему решил, воспользовавшись Delphi 7. Родная среда!

Сам модуль не асилил переделывать, не для моих знаний задача Было бы интересно узнать, в чём проблема в совместимости этих версий.


 
sniknik ©   (2011-11-27 02:27) [24]

> А проблему решил, воспользовавшись Delphi 7. Родная среда!
оно у тебя с самого начало было...
> Получить результат выполнения команды консоли? [D7, 2003]
или опять мозг парил?

> Начну сначала!
> 1) Windows 7 64 bit, Intel i5, Delphi XE2
ну, точно... блин.


 
Германн ©   (2011-11-27 03:12) [25]


> Но не писал бы я в ветке для новичков, если бы понимал,
> что в этом модуле делается хотябы на 60%.

А вот и не надо было его использовать, если не понимаешь.
Иначе ССЗБ!


 
Anatoly Podgoretsky ©   (2011-11-27 08:08) [26]

> Vyacheslav  (26.11.2011 23:13:18)  [18]

Это код для Д7 для ХЕ2 надо дорабатывать


 
Anatoly Podgoretsky ©   (2011-11-27 08:12) [27]

Хотя если не понимаешь 60% то это не твое, тебе, как минимум, противопоказано использовать ХЕ2



Страницы: 1 вся ветка

Текущий архив: 2012.03.04;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.008 c
15-1321342175
oleg1963lora
2011-11-15 11:29
2012.03.04
Анимация *.gif объектов


2-1322388950
я
2011-11-27 14:15
2012.03.04
длина bmp в пикселях


2-1322210432
LDV
2011-11-25 12:40
2012.03.04
установить курсор в датасете после insert


15-1321426745
depper
2011-11-16 10:59
2012.03.04
ZEOSLib for PostgreSQL 9.1.1


15-1321389003
Юрий
2011-11-16 00:30
2012.03.04
С днем рождения ! 16 ноября 2011 среда