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

Вниз

Просьба оценит "корявость кода"   Найти похожие ветки 

 
AlexeyTG   (2014-12-18 18:53) [0]

По данным ранее (http://delphimaster.net/view/2-1418843283/) примерам и советам реализовал код. На примера запуска CMD  с параметрами и калькулятора.

Просьба оценить "корявость" реализации

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
 System.SysUtils,
 Winapi.Windows,
 shellapi;

var
STI: TStartUpInfo;
App, Param, RunLine:String;
App2, Param2, RunLine2:String;
PI: TProcessInformation;

begin
 try
   { TODO -oUser -cConsole Main : Insert code here }
   begin
   //FillChar(STI, SizeOf(TStartUpInfo), #0);
   //FillChar(STI, SizeOf(TProcessInformation), #0);
   STI.cb := SizeOf(TStartupInfo);
   STI.dwFlags := CREATE_NO_WINDOW;
   STI.wShowWindow := SW_Show;
   App:="C:\Windows\System32\cmd.exe";
   Param:="/?";
   RunLine:=Format(""%s" %s", [App, Param]);
   App2:="C:\Windows\System32\calc.exe";
   if CreateProcess(Pointer(App), Pchar(RunLine), nil, nil, False, CREATE_NEW_CONSOLE OR NORMAL_PRIORITY_CLASS, nil, nil, STI, PI) then
     begin
       WaitForSingleObject(PI.hProcess, INFINITE);
       //ShellExecute(0, "open","calc.exe", nil, nil, 0);
       CreateProcess(Pointer(App2), Pchar(app2), nil, nil, False, CREATE_NEW_CONSOLE OR NORMAL_PRIORITY_CLASS, nil, nil, STI, PI);
       Exit;
     end
     else exit;

   end;
 except
   on E: Exception do
     Writeln(E.ClassName, ": ", E.Message);
 end;
end.


Вопросы:
1. При запуске видно окно программы лаунчера, как сделать, чтобы окошка приложения не было?
2.Для запуска второй программы, что лучше использовать CreateProcess или ShellExecute?
3. Какие параметры использовать, если требуется без оконный запуск приложений App, App2?

/Ну и что убрать добавить в код для его приведения в нормальный вид?


 
brother ©   (2014-12-18 18:56) [1]

2. Если ждать не планируете, то можно ShellExecute


 
Ega23 ©   (2014-12-18 20:42) [2]


> как сделать, чтобы окошка приложения не было?


CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS or CREATE_NO_WINDOW


 
MBo ©   (2014-12-18 20:52) [3]

убрать опцию консольной программы {$APPTYPE CONSOLE}


 
Dennis I. Komarov ©   (2014-12-18 21:01) [4]

Моделирую ситуация:
в результате выполнения, не запускается App2


 
AlexeyTG   (2014-12-18 21:42) [5]

Dennis I. Komarov Скопировал код, у меня запускает оба нормально. RAD Studio XE7
MBo пробовал, но окошко приложения висит все равно
Ega23 Если в CreateProcess имеется ввиду, то имелось ввиду окошко лаунчера самого


 
Dennis I. Komarov ©   (2014-12-18 22:30) [6]


> у меня запускает оба нормально. RAD Studio XE7

И я про то... А вот через месяц не запустился, причем где-нить за 1000 км...


 
AlexeyTG   (2014-12-18 23:06) [7]

Сорри, а можно узнать из-за чего?

Или взять за основу предложенный ранее?
http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988621841&n=15


 
Dennis I. Komarov ©   (2014-12-18 23:10) [8]


> Сорри, а можно узнать из-за чего?

Можно, если исправить код. Я же явно на это и указываю
P.S.
 CreateProcess is function...


 
Ega23 ©   (2014-12-18 23:13) [9]

Если в CreateProcess имеется ввиду, то имелось ввиду окошко лаунчера самого

Аааа... Я не догнал.
Тогда -

> MBo ©   (18.12.14 20:52) [3]
>
> убрать опцию консольной программы {$APPTYPE CONSOLE}



>  пробовал, но окошко приложения висит все равно


А ты уверен, что это окошко именно лаунчера?
По шагам: File -> New -> Other -> Console Application

Внутри:


program Project30;

uses
 SysUtils;

begin
 try
 Sleep(3000);
 except
   on E: Exception do
     Writeln(E.ClassName, ": ", E.Message);
 end;
end.


Никаких окошек.


 
AlexeyTG   (2014-12-18 23:13) [10]

Просто он у меня вообще с ошибкой вылетает, один в один код с примера


 
AlexeyTG   (2014-12-18 23:26) [11]

Ega23 Уверен.
По шагам: File -> New -> Other -> Console Application
Весь код удаляю и копипаст кода. Окошко висит


 
Dennis I. Komarov ©   (2014-12-18 23:34) [12]

Твой:
uses
 System.SysUtils,
 Winapi.Windows,
 shellapi;


и код Ega23. Найди отличия!


 
AlexeyTG   (2014-12-18 23:36) [13]

Я код Ega23 один в один скопировал полность CTRL+A, Del,  CTRL+V


 
Ega23 ©   (2014-12-18 23:39) [14]

Хмм... Я на 2010 проверял. Ща на XE4 глянем...

Ого. А под XE4 висит...

Ну тогда окнное приложение делай, только код создания главной формы выкини.
Типа


program Project16;

uses SysUtils;
//  Vcl.Forms,
//  Unit16 in "Unit16.pas" {Form16};
//
//{$R *.res}
//
begin
 Sleep(3000);
end.


 
Dennis I. Komarov ©   (2014-12-18 23:39) [15]


> AlexeyTG   (18.12.14 23:36) [13]

Вот и зря, IDE разные


 
AlexeyTG   (2014-12-19 00:01) [16]

Ega23 Ок. С этим разобрался. Сделал так, New-> VCL Forms Application. Потом Project->Remove from project Unit1/Form1. Сохранил проект. Заново открыл его и увидел строку для кода.
program Project1;

uses
 Vcl.Forms;

{$R *.res}

begin
 Application.Initialize;
 Application.MainFormOnTaskbar := True;
 Application.Run;
end.


Как пример изменил на
program Project1;

uses
 Vcl.Forms, Vcl.Dialogs;

//{$R *.res}

begin
 ShowMessage("AllOK");
end.


Правильно?


 
AlexeyTG   (2014-12-19 00:06) [17]

Dennis I. Komarov ©   (18.12.14 23:10) [8]

> Сорри, а можно узнать из-за чего?

Можно, если исправить код. Я же явно на это и указываю
P.S.

Проблема в том, что не обнуляю (в коде нет)

   ZeroMemory(@si,sizeof(si));
   si.cb:=SizeOf(si)


 
AlexeyTG   (2014-12-19 00:11) [18]

http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988621841&n=15
Вылетает с ошибкой


 
Dennis I. Komarov ©   (2014-12-19 13:41) [19]


> Проблема в том, что не обнуляю (в коде нет)

Нет


 
AlexeyTG   (2014-12-19 19:02) [20]

Приехал, снова сяду изучать. В целом разобрался вчера вроде. ПРОШУ иметь ввиду, что я не программист и впервые за много лет на днях скачал и запустил дельфи.

Проблема в том, что я не освободил хэндл потока?

2 Если я CreateProcess буду использовать только один раз за все время, есть ли смысл писать его как отдельную функцию, к примеру

Function CrProc (const ProgName, ProgParams: ShortString): boolean;

или можно просто использовать напрямую в коде? (как в примере)



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

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

Наверх




Память: 0.51 MB
Время: 0.023 c
2-1423343139
Andrey K
2015-02-08 00:05
2017.01.15
Как перевести текст в формат DOS


2-1426067911
aka
2015-03-11 12:58
2017.01.15
TObject через ссылку


2-1429615713
dmk
2015-04-21 14:28
2017.01.15
Отрисовка контрола при перемещении


15-1452576702
sniknik
2016-01-12 08:31
2017.01.15
Помогите в анализе ошибок по дампам


15-1455465762
pavelnk
2016-02-14 19:02
2017.01.15
С праздником!