Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #2  
Antiguo 11-11-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 23
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
camiz,

Cita:
Empezado por camiz
...este código...al ejecutarse la aplicación crea un proceso repetitivo...ejecutándose infinidad de veces...
Te comento: El código señalado en el Msg #1 no controla el número de instancias de una aplicación, solo permite ejecutar la misma con privilegios de administrador en Windows.

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

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

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

var
  Form1: TForm1;
  CurrentSemafor : THandle;

implementation

{$R *.dfm}

// Ejecuta una aplicación con derechos de administrador en Windows
procedure RunAsAdmin(const ProgramName: String; const Parameters: String = ''; Handle : HWND = 0);
var
   Info : TShellExecuteInfo;

begin

   FillChar(Info, SizeOf(Info), 0);

   Info.cbSize := SizeOf(Info);
   Info.Wnd := Handle;
   Info.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI;
   Info.lpVerb := 'runas'; // Eleva los privilegios de ejecución a Administrador
   Info.lpFile := PChar(ProgramName);
   Info.lpParameters := PChar(Parameters);
   Info.nShow := SW_SHOWNORMAL;

   if not ShellExecuteEx(@Info) then
      RaiseLastOSError;

end;

// Verifica si esta activa una instancia de la aplicación por medio de un Semáforo de Control
function CheckInstance(AppName : String) : Boolean;
var
   Semafor : THandle;
begin

   Semafor := CreateSemaphore(nil, 0, 1, PChar(AppName));
   if (Semafor <> 0) and (GetLastError = ERROR_ALREADY_EXISTS) then
   begin
      CloseHandle(Semafor);
      Result := False;
      Exit;
   end
   else
   begin
      CurrentSemafor := Semafor;
      Result := True;
   end;

end;

// Ejecuta una sola instancia de la aplicación con derechos de administrador por medio de un Semáforo de Control
procedure TForm1.Button1Click(Sender: TObject);
begin
   if CheckInstance('Calc') then
      RunAsAdmin('Calc.exe')
   else
      MessageDlg('La Aplicación ya esta Activa en Memoria',mtInformation,[mbOK],0)
end;

// Libera el Semáforo de Control para Permitir otra Instancia de la Aplicación
procedure TForm1.Button2Click(Sender: TObject);
begin
   CloseHandle(CurrentSemafor);
end;

end.
El código anterior permite ejecutar una única instancia de una aplicación con derechos de administrador en Windows mientras este activo un semáforo de control definido por medio de un string que identifica a la misma.

Revisa estos links:
Cita:
1- Evitar múltiples instancias de nuestra aplicación : http://clubdelphi.com/foros/showthread.php?t=80901

2- Controlling the number of application instances : http://delphi.about.com/od/windowssh.../aa100703a.htm

3- TInstanceControl : http://delphi.about.com/library/weekly/aa110203a.htm

4- CreateSemaphore function : http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 11-11-2013 a las 04:38:12.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Auto Borrar Aplicacion / Cambiar Privilegios Aplicacion / Ejecutar como Administrador jogagua Varios 15 27-10-2011 01:38:07
Obligar ejecucion como Administrador de mi aplicacion aram2r Varios 6 06-04-2011 21:02:35
Derechos de administrador w_mathesius Varios 4 04-01-2009 20:16:50
Aplicación con privilegios de administrador vtorres Varios 8 07-11-2008 16:59:38
Dar privilegios de Administrador a la Aplicación PoZi API de Windows 16 26-04-2006 20:17:52


La franja horaria es GMT +2. Ahora son las 13:27:29.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi