Code source
Code source

  Présentation
  Unités exemple gratuites
  Unités commercialisées
  Conditions d'utilisation
  Comment acheter
  Vendez vos codes
Unités commercialisées

  LRJ_DosDevice
  LRJ_FileMapped
  LRJ_ModifDateTime
  LRJ_ShellUtils
  LRJ_TokenAPI
  LRJ_WinACL
  LRJ_WinBrowseDialog
  LRJ_WinCreateProcess
  LRJ_WinDesktop
  LRJ_WinDirectories
  LRJ_WinDocRecents
  LRJ_WinDrives
  LRJ_WinFavorisWeb
  LRJ_WinFiles
  LRJ_WinIconNotifArea
  LRJ_WinInternetShortcut
  LRJ_WinMenuFolder
  LRJ_WinModule
  LRJ_WinNetApi
  LRJ_WinNetLocalGroups
  LRJ_WinNetUsers
  LRJ_WinPrivileges
  LRJ_WinProcess
  LRJ_WinRecycleBin
  LRJ_WinRegion
  LRJ_WinRegAppPath
  LRJ_WinShellLink
  LRJ_WinShellUI
  LRJ_WinSID
  LRJ_WinStation
  LRJ_WinTokenGroups
  LRJ_WinTrackChangeDir
  LRJ_WinVolumes
  LRJ_WinWorkingSet

   Accueil | GlobalDesk | Code source Delphi | Développements | Votre compte | Contact   

Code source : unité LRJ_WinCreateProcess




      
Description : cette unité contient les objets TWinStartupInfo et TWinCreateProcess. TWinStartupInfo permet de renseigner les informations utiles aux méthodes CreateProcess. TWinCreateProcess permet de créer et contrôler des processus.

L'unité est livrée avec une application de démonstration ( voir description plus loin ) qui utilise les fonctionnalités des objets contenus dans l'unité. Les codes de l'application sont livrés avec l'unité pour illustrer comment utiliser les méthodes de cette unité. L'application de démonstration utilise les unités LRJ_WinRegAppPath et LRJ_CommandLine non livrées avec l'application.

L'unité LRJ_WinCreateProcess met en oeuvre les fonctions de Windows suivantes :
             Closehandle
CreateProcessW
CreateProcessAsUserW
GetExitCodeProcess
ResumeThread
SuspendThread
TerminateProcess

Déclarations publiques de l'unité  I  Télécharger l'application de démonstration  I  Exemples d'utilisations

Utilise les unités : Windows, registry et SysUtils .

Version : 1.0 du 12.07.2009
Auteur : Laurent Hède
Copyright : LorenJo

Nombre de lignes : 613

Réalisée sous : Delphi 6

Systèmes compatibles : NT4, 2000, XP, Vista, serveurs

Prix : 131.00 € H.T.

Déclarations publiques de l'unité :

unit LRJ_WinCreateProcess;

interface

                          uses
                          windows,
                          registry,
                          SysUtils;

   .........

    //------------OBJET----------------------------
TWinStartupInfo = class(TObject)
   .........
   procedure SubtractSetOfTypedStartupInfoFlags(const ASetOfStartupInfoFlags: LRJ_TSetOfStartupInfoFlags);
   procedure AddSetOfTypedStartupInfoFlags(const ASetOfStartupInfoFlags: LRJ_TSetOfStartupInfoFlags);
   property Flags: DWORD read MOStartupInfo.dwFlags write MOStartupInfo.dwFlags;
   property TypedFlags: LRJ_TSetOfStartupInfoFlags read GetTypedFlags write SetTypedFlags;
   property DesktopName: string read GetDesktopName write SetDesktopName;
   property Title: string read GetTitle write SetTitle;
   property X: DWORD read MOStartupInfo.dwX write MOStartupInfo.dwX;
   property Y: DWORD read MOStartupInfo.dwY write MOStartupInfo.dwY;
   property XSize: DWORD read MOStartupInfo.dwXSize write MOStartupInfo.dwXSize;
   property YSize: DWORD read MOStartupInfo.dwYSize write MOStartupInfo.dwYSize;
   property XCountChars: DWORD read MOStartupInfo.dwXCountChars write MOStartupInfo.dwXCountChars;
   property YCountChars: DWORD read MOStartupInfo.dwYCountChars write MOStartupInfo.dwYCountChars;
   property FillAttribute: DWORD read MOStartupInfo.dwFillAttribute write MOStartupInfo.dwFillAttribute;
   property ShowWindow: WORD read MOStartupInfo.wShowWindow write MOStartupInfo.wShowWindow;
   property StdInput: THandle read MOStartupInfo.hStdInput write MOStartupInfo.hStdInput;
   property StdOutput: THandle read MOStartupInfo.hStdOutput write MOStartupInfo.hStdOutput;
   property StdError: THandle read MOStartupInfo.hStdError write MOStartupInfo.hStdError;
   end;//-----------FIN--------------------------


    //------------OBJET----------------------------
TWinCreateProcess = class(TObject)
   .........
   function IsOpen: boolean;
   function CreateProcess(const WaitTime: Integer = 5000): boolean;  // si TokenUser = 0, createProcess simple, sinon, CreateProcesAsUser
   function Terminate: boolean;
   function Suspend: boolean;
   function Resume: boolean;
   function Restart: boolean; // Terminate + CreateProcess
   procedure AddSetOfTypedCreationFlags(const ASetOfTypedCreationFlags: LRJ_TSetOfProcessCreationFlags); // Ajoute à CreationFlags
                                            // la valeur des types passés en paramètre
   procedure SubtractSetOfTypedCreationFlags(const ASetOfTypedCreationFlags: LRJ_TSetOfProcessCreationFlags); // Retire à CreationFlags
                                            // la valeur des types passés en paramètre
   property CreationFlags: DWORD read MOCreationFlags write MOCreationFlags; //CreationFlags sous la forme standard
   property TypedCreationFlags: LRJ_TSetOfProcessCreationFlags read GetSetOfTypedCreationFlags write SetSetOfTypedCreationFlags; //CreationFlags
                                            // sous une forme typée. Lorsqu'on attribut TypedCreationFlags, CreationFlags devient la valeur
                                            // du set attribué indépendamment de sa valeur antérieure (CreationFlags est remis à zéro avant
                                            // que le set soit ajouté).
   property ProcessHandle: THandle read MOProcessInfo.hProcess;
   property ThreadHandle: THandle read MOProcessInfo.hThread;
   property ProcessID: DWORD read MOProcessInfo.dwProcessId;
   property ThreadID: DWORD read MOProcessInfo.dwThreadId;
   property FullFileName: string read MOApplicName Write SetFullFileName;
   property Directory: string read MODirectory Write SetDirectory;
   property CommandLine: string read MOCommandLine write SetCommandLine;
   property InheritedHandles: boolean read MOInheritedHandles write SetInheritedHandles;
   property Environment: pointer read MOEnvironnement write SetEnvironment;
   property TokenUser: THandle read MOTokenUser write SetTokenUser;
   property SecurityDescriptorProcess: pointer read GetSecurityDescriptorProcess write SetSecurityDescriptorProcess;
   property SecurityDescriptorProcessInheritable: boolean read GetSecurityDescriptorProcessInheritable write SetSecurityDescriptorProcessInheritable;
   property SecurityDescriptorThread: pointer read GetSecurityDescriptorThread write SetSecurityDescriptorThread;
   property SecurityDescriptorThreadInheritable: boolean read GetSecurityDescriptorThreadInheritable write SetSecurityDescriptorThreadInheritable;
   property StartupInfoObject: TWinStartupInfo read MOStartupInfo;
   property LastError: DWORD read MOLastError;
   end;//-----------FIN--------------------------


Application de démonstration

Le champs "Nom de l'application" sert à saisir le chemin complet de l'application et "Ligne de commande" la ligne de commande associée à l'application.
Le bouton "Lancer l'application saisie" permet de lancer l'application des valeurs saisies dans les boîtes d'édition.
Le bouton "Lancer une application de la liste" ouvre un PopUpMenu dans lequel on retrouve les applications référencés dans le système que l'on peut lancer en cliquant sur l'item du PopUpMenu.
Le nom complet et la ligne de commande renseignés pour l'objet TWinCreateProcess passe par les fonction d'optimisation LRJ_GetApplicName et LRJ_GetCmdLine de l'unité LRJ_CommandLine .



Exemples d'utilisations

Codes de l'application de démo.

unit Unit1;

interface

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

                     LRJ_WinRegAppPath,
                     LRJ_CommandLine,
                     LRJ_WinCreateProcess;

type

TSpecMenuItem = class(TMenuItem)
  private
  MOApplicName: string;
  MOIcon: TIcon;
  procedure Int_OnMeasureItem(Sender: TObject;ACanvas: TCanvas; var Width, Height: Integer);
  procedure Int_OnDrawItem(Sender: TObject;ACanvas:TCanvas; ARect: TRect; Selected: Boolean);
  public
  procedure AfterConstruction; override;
  destructor destroy; override;
  end;


  TForm1 = class(TForm)
    Button1: TButton;
    PopupMenu1: TPopupMenu;
    Button2: TButton;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
  procedure ChargeMenu;
  procedure OnClickItem(sender: TObject);
  public
    { Déclarations publiques }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
{--------------------------------------------------------------}
procedure TForm1.OnClickItem(sender: TObject);
var
  zCreatedProcess: TWinCreateProcess;
begin
zCreatedProcess := TWinCreateProcess.Create;
zCreatedProcess.FullFileName := LRJ_GetApplicName('',TSpecMenuItem(sender).MOApplicName);
zCreatedProcess.CommandLine := LRJ_GetCmdLine('',TSpecMenuItem(sender).MOApplicName);
zCreatedProcess.CreateProcess;
zCreatedProcess.Free;
end;
{--------------------------------------------------------------}
procedure TForm1.ChargeMenu;
var
  zListApplic: LrJ_TWRegAppPathsList;
  zItem: LrJ_TWRegAppPathsItem;
  zMenuItem: TSpecMenuItem;
  i: integer;
  zExt: string;
begin
zListApplic := LrJ_TWRegAppPathsList.Create;
for i:=0 to zListApplic.Count -1 do
  begin
  zItem := zListApplic.Items[i];
  if assigned(zItem) then
    begin
    zExt := ExtractFileExt(zItem.ApplicName);
    if compareText(zExt, '.exe') = 0 then
    if FileExists(zItem.FileName) then
      begin
      zMenuItem := TSpecMenuItem.Create(PopupMenu1);
      zMenuItem.MOIcon.Handle := zItem.GetSmallIcon;
      zMenuItem.Caption := zItem.ApplicName;
      zMenuItem.MOApplicName := zItem.FileName;
      zMenuItem.OnClick := OnClickItem;
      PopupMenu1.items.Add(zMenuItem);
      end;
    end;
  end;
PopupMenu1.OwnerDraw := true;
PopupMenu1.AutoHotkeys := maManual;
zListApplic.Free;
end;
{--------------------------------------------------------------}
procedure TSpecMenuItem.AfterConstruction;
begin
inherited;
MOIcon := TIcon.Create;
OnMeasureItem := Int_OnMeasureItem;
OnDrawItem := Int_OnDrawItem;
end;
{--------------------------------------------------------------}
procedure TSpecMenuItem.Int_OnDrawItem(Sender: TObject;ACanvas:TCanvas; ARect: TRect; Selected: Boolean);
begin
ACanvas.Draw(ARect.Left+1,ARect.Top+1, TIcon(MOIcon));
ACanvas.TextOut(ARect.Left + 20, ARect.Top + 2, caption);
end;
{--------------------------------------------------------------}
procedure TSpecMenuItem.Int_OnMeasureItem(Sender: TObject;ACanvas: TCanvas; var Width, Height: Integer);
begin
width := 22 + ACanvas.TextWidth(caption)
end;
{--------------------------------------------------------------}
destructor TSpecMenuItem.destroy;
begin
MOIcon.Free;
inherited;
end;
{--------------------------------------------------------------}
procedure TForm1.FormCreate(Sender: TObject);
begin
ChargeMenu;
end;
{--------------------------------------------------------------}
procedure TForm1.Button1Click(Sender: TObject);
var
  zPoint: TPoint;
begin
if PopupMenu1.Items.Count = 0 then ChargeMenu;
zPoint.X := form1.ClientRect.Left + Button1.Left + Button1.Width;
zPoint.Y := form1.ClientRect.top + Button1.top + Button1.height;
zPoint := form1.ClientToScreen(zPoint);
PopupMenu1.Popup(zPoint.X, zPoint.y);
end;
{--------------------------------------------------------------}
procedure TForm1.Button2Click(Sender: TObject);
var
  zCreatedProcess: TWinCreateProcess;
begin
zCreatedProcess := TWinCreateProcess.Create;
zCreatedProcess.FullFileName := LRJ_GetApplicName(edit1.Text,edit2.Text);
zCreatedProcess.CommandLine := LRJ_GetCmdLine(edit1.Text,edit2.Text);
zCreatedProcess.CreateProcess;
zCreatedProcess.Free;
end;
{--------------------------------------------------------------}
end.

Vous n'avez pas trouvé d'exemple répondant à votre problématique ?
Cliquez sur ce lien.


 Accueil | GlobalDesk | Code source Delphi | Développements | Votre compte | Contact 
Copyright © LorenJo 2000-2009    Notice légale