View Full Version : Recieve Application Idle Message
  
combat1964
شنبه 18 شهریور 1385, 23:13 عصر
سلام کسی میدونه چطور از اجرای کامل یک برنامه با خبر بشیم یعنی بعد از دستور اجرای برنامه دیگه برنامه ما خط بعدی برنامه رو بعد از رسیدن پیام حاوی idle اون برنامه غیر دلفی اجرا بشه
vesal
یک شنبه 19 شهریور 1385, 02: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, 21:43 عصر
سلام veal عزیز فکر میکنم منظور من رو اشتباه متوجه شدید من تابعی برای Wait For Complete Load  میخوام نه Wait for Terminate  این مثالی که شما زدید در مورد wait For Terminate هستش!!!
vesal
دوشنبه 20 شهریور 1385, 01:49 صبح
سلام veal عزیز فکر میکنم منظور من رو اشتباه متوجه شدید من تابعی برای Wait For Complete Load  میخوام نه Wait for Terminate  این مثالی که شما زدید در مورد wait For Terminate هستش!!!
جدی !!! بر بی سوادی بنده ببخشید
ghabil
دوشنبه 20 شهریور 1385, 02:10 صبح
خب از  WaitForInputIdle استفاده کن که تا بارگذاری کامل برنامه صبر میکنه ، البته کلا درستش اینه که از CreateProcess استفاده کنی ، حالا هرطوری که میخوای سینکش بکنی میتونی :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createprocess.asp
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.