Форум: "Начинающим";
Текущий архив: 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