Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2012.03.04;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.004 c
3-1272207079
Crocklam
2010-04-25 18:51
2012.03.04
Транзакции в очередь?


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


15-1321012496
alexdn
2011-11-11 15:54
2012.03.04
Radikal.ru


15-1321116538
Laguna
2011-11-12 20:48
2012.03.04
Пропал доступ к ресурсам из меню.


15-1321409838
Sher
2011-11-16 06:17
2012.03.04
DBGrid to StringGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский