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

Вниз

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

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

Наверх





Память: 0.49 MB
Время: 0.046 c
3-1311683275
Patrick1968
2011-07-26 16:27
2017.01.15
Интересная вещь в ADO


15-1453983731
K-1000
2016-01-28 15:22
2017.01.15
Тернарный оператор в Delphi


15-1452693339
кгшзх
2016-01-13 16:55
2017.01.15
TClientDataSet склеить датапакеты


15-1448010775
Kerk
2015-11-20 12:12
2017.01.15
Все работы хороши


15-1453242651
Jeer
2016-01-20 01:30
2017.01.15
Jeer





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский