A voir également:
- Attendre fin de processus en delphi
- Telecharger delphi - Télécharger - Langages
- Fin de mail en anglais - Guide
- Fin de windows 10 - Guide
- Processus inactif du systeme - Forum Matériel & Système
- Le processus ne peut pas accéder au fichier car ce fichier est utilisé par un autre processus ✓ - Forum Windows 7
2 réponses
Ravachol
Messages postés
560
Date d'inscription
vendredi 5 mars 2004
Statut
Membre
Dernière intervention
30 octobre 2005
120
9 juin 2004 à 12:03
9 juin 2004 à 12:03
Salut,
>est-ce que quelqun sait s'il existe un equivalent en delphi à :
>WaitForSingleObject(ProcessInformation.hProcess, INFINITE)
ben non car cela ne dépend pas de l'outil de dev, mais de l'API Windows.
Par contre sous W98 à quel moment cela ne fonctionne pas ?
Lors de la compil ou à l'éxecution ?
Je ne comprend pas bien non plus l'utilisation de ShellExecute, tu ne peut pas passer le nom de ta présentation en paramètre de ligne de cde lors de la création du process ex:
CreateProcess(nil,'PPView97.exe presentation.pps',nil,nil,true,0,nil,nil,StartInfo,ProcessInformation) ?
Car le WaitForSingleObject ne retourne comme son nom l'indique ;-) que lorsque le process passe à l'état signalé. Ce qui fait si j'en crois ton code que les instructions ShellExecute ne seront traitées que lorsque tu auras fermé la visionneuse => PB
Sinon je vois pas le Pb, mais ça fait un bout de temps que je n'ai pas bossé sous
Windows ...
Bon courage
Ni l'ignorance n'est défaut d'esprit,
ni le savoir n'est preuve de génie. LUC DE CLAPIERS
>est-ce que quelqun sait s'il existe un equivalent en delphi à :
>WaitForSingleObject(ProcessInformation.hProcess, INFINITE)
ben non car cela ne dépend pas de l'outil de dev, mais de l'API Windows.
Par contre sous W98 à quel moment cela ne fonctionne pas ?
Lors de la compil ou à l'éxecution ?
Je ne comprend pas bien non plus l'utilisation de ShellExecute, tu ne peut pas passer le nom de ta présentation en paramètre de ligne de cde lors de la création du process ex:
CreateProcess(nil,'PPView97.exe presentation.pps',nil,nil,true,0,nil,nil,StartInfo,ProcessInformation) ?
Car le WaitForSingleObject ne retourne comme son nom l'indique ;-) que lorsque le process passe à l'état signalé. Ce qui fait si j'en crois ton code que les instructions ShellExecute ne seront traitées que lorsque tu auras fermé la visionneuse => PB
Sinon je vois pas le Pb, mais ça fait un bout de temps que je n'ai pas bossé sous
Windows ...
Bon courage
Ni l'ignorance n'est défaut d'esprit,
ni le savoir n'est preuve de génie. LUC DE CLAPIERS
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Memo1: TMemo;
Timer1: TTimer;
procedure Button1Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var Si :STARTUPINFO;
Pi : PROCESS_INFORMATION ;
begin
zeromemory(@si,sizeof(STARTUPINFO));
Si.dwFlags:=STARTF_USESHOWWINDOW;
Si.wShowWindow:=SW_SHOWNORMAL;
CreateProcess(nil,pchar('cmd.exe /c del c:\out.txt'),nil,nil,True,
0,nil,nil,Si,Pi);
WaitForSingleObject(pi.hProcess,INFINITE);
CreateProcess(nil,pchar('cmd.exe /c '+edit1.text+'>>c:\out.txt'),nil,nil,True,
0,nil,nil,Si,Pi);
WaitForSingleObject(pi.hProcess,INFINITE);
Memo1.Lines.Add('Le handle du process est : '+intToStr(Pi.hProcess) ) ;
Memo1.Lines.Add('L''ID du process est : '+intToStr(Pi.dwProcessId) ) ;
WaitForSingleObject(pi.hProcess,INFINITE);
memo1.Lines.LoadFromFile('c:\out.txt');
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
begin
memo1.Lines.Clear;
button1.Click;
edit1.Text:='';
edit1.SetFocus;
end;
end;
end.
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Memo1: TMemo;
Timer1: TTimer;
procedure Button1Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var Si :STARTUPINFO;
Pi : PROCESS_INFORMATION ;
begin
zeromemory(@si,sizeof(STARTUPINFO));
Si.dwFlags:=STARTF_USESHOWWINDOW;
Si.wShowWindow:=SW_SHOWNORMAL;
CreateProcess(nil,pchar('cmd.exe /c del c:\out.txt'),nil,nil,True,
0,nil,nil,Si,Pi);
WaitForSingleObject(pi.hProcess,INFINITE);
CreateProcess(nil,pchar('cmd.exe /c '+edit1.text+'>>c:\out.txt'),nil,nil,True,
0,nil,nil,Si,Pi);
WaitForSingleObject(pi.hProcess,INFINITE);
Memo1.Lines.Add('Le handle du process est : '+intToStr(Pi.hProcess) ) ;
Memo1.Lines.Add('L''ID du process est : '+intToStr(Pi.dwProcessId) ) ;
WaitForSingleObject(pi.hProcess,INFINITE);
memo1.Lines.LoadFromFile('c:\out.txt');
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then
begin
memo1.Lines.Clear;
button1.Click;
edit1.Text:='';
edit1.SetFocus;
end;
end;
end.
9 juin 2004 à 14:36
Par contre ça marche sous NT/2K et XP