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

Вниз

Вызов консольного приложения   Найти похожие ветки 

 
Vasilii   (2002-01-08 10:19) [0]

Народ! Help! Не получается вызвать из программы консольное приложение.
Пробую так
ShellExecute(handle, nil, PChar("programname.exe"),PChar("-parametr"), nil, SW_SHOWNORMAL);
а в ответ - тишина.
То-же самое, но с "форточным" приложением получается. Почему?


 
Андрей Сенченко ©   (2002-01-08 10:47) [1]

Совсем тишина ? Пути проверь в первую очередь ...


 
McSimm ©   (2002-01-08 11:06) [2]

А какой результат выполнения функции?

Попробуйте пробел в строке параметров:
ShellExecute(handle, nil, "programname.exe", " -parametr", nil, SW_SHOWNORMAL);

Для констант не обязательно преобразование PChar(), компилятор сам разберется.


 
swr ©   (2002-01-08 11:12) [3]

Посмотри вот это:

procedure TfmMain.SendAlertMessage(text: string; user: string);
var
si:STARTUPINFO;
pi:PROCESS_INFORMATION;
AppName: string;
cmdline:string;
s: string;
k: integer;
begin
s:= StringReplace(MsgParamStr, "%PI%", text, [rfReplaceAll, rfIgnoreCase]);
if s = ""#34#34 then
s:= text;

ZeroMemory(@si,sizeof(si));
si.cb:=SizeOf(si);
si.dwFlags:= STARTF_USESHOWWINDOW;
si.wShowWindow:= SW_HIDE;
AppName:= "SendAlert";
if Win32Platform = VER_PLATFORM_WIN32_NT then
cmdline:="cmd.exe /C net send " + user + " "" + s + "" !!!"
else
cmdline:="command.com /C net send " + user + " "" + s + "" !!!";

if not CreateProcess( nil, // No module name (use command line).
PChar(cmdline), // Command line.
nil, // Process handle not inheritable.
nil, // Thread handle not inheritable.
False, // Set handle inheritance to FALSE.
0, // No creation flags.
nil, // Use parent"s environment block.
nil, // Use parent"s starting directory.
si, // Pointer to STARTUPINFO structure.
pi ) // Pointer to PROCESS_INFORMATION structure.
then
begin
mLog.Lines.Add( "Shepherd: Send alert message CreateProcess failed." );
Exit;
end;
{WaitForSingleObject( pi.hProcess, 10000 );
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );}
mLog.Lines.Add("message send to: " + user);
end;


 
Vasilii   (2002-01-08 12:14) [4]

Спасибо всем! Нашел подобный вопрос в форуме по БД. Посмотрите, неплохое решение. (Вопрос про gbak.exe)


 
Керик   (2002-01-11 05:52) [5]

Попробуй вот так, возможно, поможет, но параметр передать не удастся... Вот готовая функция, которая не только запустит консольное приложение, но ещё и возвратит его ID.

function CreateConsoleProcess(ApplicationPath: string): Cardinal;
var
IpStartupInfo: TStartupInfo;
IpProcessInformation: TProcessInformation;
begin
FillChar(IpStartupInfo, SizeOf(IpStartupInfo), #0);
IpStartupInfo.cb := SizeOf(IpStartupInfo);
IpStartupInfo.dwFlags := STARTF_USESHOWWINDOW;
IpStartupInfo.wShowWindow := SW_SHOWNORMAL;
CreateProcess(PChar(ApplicationPath),
nil,
nil,
nil,
False,
CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,
nil,
nil,
IpStartupInfo,
IpProcessInformation);
Result := IpProcessInformation.hProcess;
end;



Данная процедура убивает процесс, в параметре узазывай полученный функцией CreateConsoleProcess идентификатор.

procedure TerminateConsoleProcess(ProcessHandle: Cardinal);
begin
TerminateProcess(ProcessHandle, 4);
CloseHandle(ProcessHandle);
end;


P.S. Если честно, то сам не пробовал...



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

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

Наверх




Память: 0.48 MB
Время: 0.009 c
3-90205
Koks
2001-12-24 10:42
2002.01.28
QReport.....?


1-90301
Oleg Fomicheff
2002-01-11 06:18
2002.01.28
Куда копировать DCU? или Почему не ставятся компоненты?


14-90378
limon
2001-12-05 19:16
2002.01.28
> Merlin. Глюк при записи ответа


14-90353
DR
2001-12-03 12:52
2002.01.28
Подскажите на чем написан этот исходник


1-90277
IronHawk
2002-01-09 19:09
2002.01.28
ПРЕОБРАЗОВАНИЕ ТИПОВ !