Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 1 / 1
Регистрация: 04.05.2013
Сообщений: 9
1

Не удается запустить стороннее приложение Delphi

04.05.2013, 23:04. Просмотров 660. Ответов 2
Метки нет (Все метки)


Создал вот такую программу, для запуска стороннего приложения и открытия файла в нем. Но что то не получается запустить приложение, не могу понять где ошибка закралась. Прошу помочь.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, StdCtrls;
 
type
  TForm1 = class(TForm)
    edApp: TEdit;
    Label1: TLabel;
    edFile: TEdit;
    Label2: TLabel;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    OpenDialog1: TOpenDialog;
    btnStart: TSpeedButton;
    btnClose: TSpeedButton;
    Label3: TLabel;
    lblInfo: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
    procedure btnStartClick(Sender: TObject);
    procedure btnCloseClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
    pInfo: TprocessInformation; //Ñòðóêòóðà, ñîäåðæàùàÿÿ èíôîðìàöèþ î ñîçäàííîì ïðîöåññå
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
begin
 edApp.Text:='C:\Program Files (x86)\Microsoft Office\Office12\powerpnt.exe';
end;
 
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
   openDialog1.Filter:='Ïðîãðàììà(*.exe)|*.exe';
    if not openDialog1.Execute then
     ShowMessage('Îøèáêà îòêðûòèÿ ôàéëà') else
      edApp.Text:=openDialog1.Files.Strings[0];
end;
 
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
   openDialog1.Filter:='Ïðåçåíòàöèÿ PowerPoint(*.ppt)|*.ppt|Äîêóìåíò Word(*.doc)|*.doc|Äîêóìåíò Excel(*.xls)|*.xls';
    if not openDialog1.Execute then
     ShowMessage('Îøèáêà îòêðûòèÿ ôàéëà!') else
       edFile.Text:=openDialog1.Files.Strings[0];
end;
 
procedure TForm1.btnStartClick(Sender: TObject);
   var
    SInfo:TStartupInfo;
begin
   FillChar(SInfo,SizeOf(SInfo),#0);
    SInfo.cb:=sizeOf(SInfo);
     if edFile.Text='' then
      ShowMessage('Çàïîëíèòå âñå ïîëÿ.')else
begin
   if not
     CreateProcess(nil,PChar(Trim(edApp.Text)+''+''+Trim(edFile.Text)+''+''),
    nil,nil,false,REALTIME_PRIORITY_CLASS,nil,nil,SInfo,pInfo) then
     ShowMessage(IntToStr(GetLastError));
      lblInfo.Caption:='Äèñêðèïòîð ïîòîêà:'+#13+IntToStr(pInfo.hThread)+#13+#13+'Ãëîáàëüíûé èíäåôèêàòîð'+#13+IntToStr(pInfo.dwProcessId);
 
end;
   end;
procedure TForm1.btnCloseClick(Sender: TObject);
  var exCode:LongWord;
begin
   if not GetExitCodeProcess(pInfo.hProcess,exCode) then
    ShowMessage('Îøèáêà çàâåðøåíèÿ ïðîöåññà'+intToStr(GetLastError));
     TerminateProcess(pInfo.hProcess,exCode);
      lblInfo.Caption:='';
end;
 
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.05.2013, 23:04
Ответы с готовыми решениями:

Как запустить стороннее приложение с параметром?
В общем как открыть стороннее приложение через программу делфи так, как показано на скрине

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

Программно закрыть стороннее приложение
В проекте 2 приложения. Обмен данными между ними организован средствами TIdTCPServer и...

Запуск файла, спроецированного в память, через стороннее приложение.
Граждане, поиск по форуму ничего не дал, поэтому не обессудьте. Текстовый файл (text.txt)...

2
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30867 / 20189 / 7874
Регистрация: 22.10.2011
Сообщений: 35,049
Записей в блоге: 6
05.05.2013, 01:03 2
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var
  SInfo : TStartupInfo;
  PInfo : TprocessInformation;
procedure TForm1.btnStartClick(Sender: TObject);
begin
   ZeroMemory(@SInfo, SizeOf(SInfo));
   SInfo.cb := SizeOf(SInfo);
   ZeroMemory(@pInfo, SizeOf(pInfo));
 
   if not CreateProcess(PChar(Trim(edApp.Text)),
             PChar(Format('"%s" "%s"', [Trim(edApp.Text), Trim(edFile.Text)])),
             nil, nil, False, REALTIME_PRIORITY_CLASS, nil, nil, SInfo, PInfo)
   then ShowMessage(SysErrorMessage(GetLastError));
end;
Почему запуск производится именно так - см. здесь: Этот проблемный CreateProcess...
0
1 / 1 / 1
Регистрация: 04.05.2013
Сообщений: 9
06.05.2013, 01:46  [ТС] 3
Спасибо. Прочел все по ссылке, я даже этого не знал.

Добавлено через 13 часов 25 минут
А как реализовать в этой программе закрытие программы по сообщению WM_CLOSE.
Если я посылаю вот такое сообщение закрытие не происходит.
Delphi
1
2
3
4
5
6
7
8
9
procedure TForm1.btnCloseClick(Sender: TObject);
  var exCode:LongWord;
begin
   if not GetExitCodeProcess(pInfo.hProcess,exCode) then
    ShowMessage('Îøèáêà çàâåðøåíèÿ ïðîöåññà'+intToStr(GetLastError));
     SendMessage(exCode, WM_CLOSE, 0, 0);
     TerminateProcess(pInfo.hProcess,exCode);
      lblInfo.Caption:='';
end;
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.05.2013, 01:46

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Как определить, в фокусе или нет стороннее приложение
Доброго времени суток. Подскажите пожалуйста, как определить в фокусе или нет стороннее приложение....

Запустить стороннее приложение
Привет всем :) Например есть программа (консолная) что делать чтоб при запуске форму запустит...

Запустить стороннее приложение
Имеется программа c:\test.exe и рядом с ней есть файл test.txt, который открывается в этой...

Как запустить стороннее приложение
Всем доброго здоровьеца. пока безуспешно пытаюсь работать с WinForms в visual studio 2012\2010....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.