PDA

View Full Version : Recieve Application Idle Message



combat1964
شنبه 18 شهریور 1385, 22:13 عصر
سلام کسی میدونه چطور از اجرای کامل یک برنامه با خبر بشیم یعنی بعد از دستور اجرای برنامه دیگه برنامه ما خط بعدی برنامه رو بعد از رسیدن پیام حاوی idle اون برنامه غیر دلفی اجرا بشه

vesal
یک شنبه 19 شهریور 1385, 01:35 صبح
این یه برنامه نمونه





unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,shellapi;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
ProcessHandle: Thandle = 0;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
Var
exInfo: TShellExecuteInfo;
Begin
FillChar( exInfo, Sizeof(exInfo), 0 );
With exInfo Do Begin
cbSize:= Sizeof( exInfo );
fMask := SEE_MASK_NOCLOSEPROCESS;
Wnd := Handle;
ExInfo.lpVerb := 'open';
lpFile:= 'Notepad';
nShow := SW_SHOWNORMAL;
End;
If ShellExecuteEx( @exInfo ) Then Begin
ProcessHandle := exInfo.HProcess;
End
Else
ShowMessage(SysErrorMessage( GetLastError ));
WaitForSingleObject(ExInfo.hProcess, INFINITE);
CloseHandle(ProcessHandle);
showmessage('process finished');
close;
end;

end.



این هم کد فرم



object Form1: TForm1
Left = 192
Top = 114
Width = 870
Height = 640
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 216
Top = 160
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 0
OnClick = Button1Click
end
end

combat1964
یک شنبه 19 شهریور 1385, 20:43 عصر
سلام veal عزیز فکر میکنم منظور من رو اشتباه متوجه شدید من تابعی برای Wait For Complete Load میخوام نه Wait for Terminate این مثالی که شما زدید در مورد wait For Terminate هستش!!!

vesal
دوشنبه 20 شهریور 1385, 00:49 صبح
سلام veal عزیز فکر میکنم منظور من رو اشتباه متوجه شدید من تابعی برای Wait For Complete Load میخوام نه Wait for Terminate این مثالی که شما زدید در مورد wait For Terminate هستش!!!

جدی !!! بر بی سوادی بنده ببخشید

ghabil
دوشنبه 20 شهریور 1385, 01:10 صبح
خب از WaitForInputIdle استفاده کن که تا بارگذاری کامل برنامه صبر میکنه ، البته کلا درستش اینه که از CreateProcess استفاده کنی ، حالا هرطوری که میخوای سینکش بکنی میتونی :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createprocess.asp