Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-07-2007
panuweb panuweb is offline
Miembro
 
Registrado: jun 2007
Posts: 13
Poder: 0
panuweb Va por buen camino
Smile Cronómetro en una Sesión

Hola

Estoy realizando un programa en Delphi, que sirve para controlar el tiempo que un unsuario de una pc con WIndows XP utiliza una seción de windows.

A cada usuario se le asigna un tiempo, desde una cuenta de tipo administrador, y trascurrido el tiempo establecido la ceción se cerrá.

Mis Problemas
  1. ¿Cómo puedo cerrar una sesión o la sesión activa de windows?
  2. ¿Se puede saber cuantas seciones hay creadas y si son administrador o Limitada?
  3. y última ¿Cómo se hace para que mi programa se ejecute cada vez que el usuario ejecute la seción?
Bueno espero que me puedan ayudar y Muhas Gracias
__________________
PANU WEB
Diseño y Administración de Sitios WEB
Responder Con Cita
  #2  
Antiguo 16-07-2007
loxod loxod is offline
Miembro
 
Registrado: feb 2007
Ubicación: Mexico
Posts: 45
Poder: 0
loxod Va por buen camino
Creo que el primer paso seria que vieras como cerrar la session de windows, te paso un enlace de un ejemplo:

http://www.delphi3000.com/articles/article_3933.asp?SK=

Hacer el cronometro es mas sencillo utilizando un timer, de todos modos te dejo otro enlace que tiene un ejemplo de un cronometro

http://www.clubdelphi.com/foros/show...ght=cronometro
Responder Con Cita
  #3  
Antiguo 17-07-2007
panuweb panuweb is offline
Miembro
 
Registrado: jun 2007
Posts: 13
Poder: 0
panuweb Va por buen camino
Wink

Hola.

Gracias por la ayuda pero no puedo ver el artículo porque sólo es para usuarios registrados. ¿podrías transcribirlo acá?.

Y por lo del coronómetro seguro que es mejor con un timer, eso ya lo tengo hecho y no tengo problemas, lo que nu se cómo hacer es lo que pregunté arriba

muchas gracias

Mauricio
__________________
PANU WEB
Diseño y Administración de Sitios WEB
Responder Con Cita
  #4  
Antiguo 17-07-2007
loxod loxod is offline
Miembro
 
Registrado: feb 2007
Ubicación: Mexico
Posts: 45
Poder: 0
loxod Va por buen camino
El codigo fuente para reiniciar, apagar y cerrar sesion de una pc o mostrar un warning a un tiempo determinado


Código Delphi [-]
unit Main; 

interface 

uses 
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
  ShellApi, Menus, ExtCtrls, ActnList, StdCtrls, ComCtrls, Buttons; 

type 
  TwndIconic = class(TForm) 
    GroupBox1: TGroupBox; 
    lHoraActual: TLabel; 
    RadioGroup1: TRadioGroup; 
    gAccion: TGroupBox; 
    lHora: TLabel; 
    Button3: TButton; 
    BMinimizar: TButton; 
    BAjustar: TButton; 
    Button2: TButton; 
    actAction: TActionList; 
    actAcercaDe: TAction; 
    actAyuda: TAction; 
    actAjustarHora: TAction; 
    actMinimizar: TAction; 
    actSalir: TAction; 
    Temporizador: TTimer; 
    PopupMenu1: TPopupMenu; 
    Acercade1: TMenuItem; 
    Ayuda1: TMenuItem; 
    Ajustarhora1: TMenuItem; 
    Minimizar1: TMenuItem; 
    Salir1: TMenuItem; 
    opApagar: TRadioButton; 
    opReiniciar: TRadioButton; 
    opReiniciarEquipo: TRadioButton; 
    opAviso: TRadioButton; 
    BE: TStatusBar; 
    actConfiguracion: TAction; 
    N1: TMenuItem; 
    Configuracin1: TMenuItem; 
    N2: TMenuItem; 
    LWEB: TLabel; 
    Nuev: TLabel; 
    GroupBox2: TGroupBox; 
    opGuardar: TCheckBox; 
    opCapturar: TCheckBox; 
    Button1: TButton; 
    procedure FormCreate(Sender: TObject); 
    procedure FormDestroy(Sender: TObject); 
    procedure actAcercaDeExecute(Sender: TObject); 
    procedure actAjustarHoraExecute(Sender: TObject); 
    procedure actMinimizarExecute(Sender: TObject); 
    procedure actSalirExecute(Sender: TObject); 
    procedure TemporizadorTimer(Sender: TObject); 
    procedure opApagarClick(Sender: TObject); 
    procedure opApagarDblClick(Sender: TObject); 
    procedure opAvisoClick(Sender: TObject); 
    procedure opReiniciarClick(Sender: TObject); 
    procedure opReiniciarDblClick(Sender: TObject); 
    procedure opReiniciarEquipoClick(Sender: TObject); 
    procedure opReiniciarEquipoDblClick(Sender: TObject); 
    procedure actConfiguracionExecute(Sender: TObject); 
    procedure BitBtn1Click(Sender: TObject); 
    procedure RealizarProceso (); 
    procedure LWEBClick2(Sender: TObject); 
  private 
    iconificada : boolean; 
    FTrayMessage: Cardinal; 
    ejecutadoYa : boolean; 
    procedure RButtonUp; 
    procedure LButtonDblClk; 
  protected 
    procedure WndProc(var Msg: TMessage); override; 
  public 
    Hora : TDatetime;{ Public declarations } 
    cancelar, realizar : boolean; 
    procedure NotifyTray(Command: Word; const Hint: string); 
  end; 

var 
  wndIconic: TwndIconic; 

implementation 

uses About,  unidadajustarhora, unidadRealizar; 

{$R *.DFM} 

resourcestring 
  STrayMessage = 'AjpdSoft PCU 1.0'; 

procedure TwndIconic.NotifyTray(Command: Word; const Hint: string); 
var 
  Data: TNotifyIconData; 
begin 
  Data.cbSize := SizeOf(Data); 
  Data.uID := 0; 
  Data.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP; 
  Data.Wnd := Self.Handle; 
  Data.uCallbackMessage := FTrayMessage; 
  Data.hIcon := Application.Icon.Handle; 
  StrLCopy(Data.szTip, PChar(Hint), SizeOf(Data.szTip)); 
  Shell_NotifyIcon(Command, @Data); 
end; 

procedure TwndIconic.WndProc(var Msg: TMessage); 
begin 
  if Msg.Msg = FTrayMessage then 
    case Msg.LParam of 
      WM_RBUTTONUP: RButtonUp; 
      WM_LBUTTONDBLCLK: LButtonDblClk; 
    end 
  else 
    inherited WndProc(Msg); 
end; 

procedure TwndIconic.LButtonDblClk; 
begin 
  with Twndabout.Create(nil) do 
  try 
    ShowModal; 
  finally 
    Free; 
  end; 
end; 

procedure TwndIconic.RButtonUp; 
var 
  Pt: TPoint; 
begin 
  GetCursorPos(Pt); 
  SetForegroundWindow(Application.Handle); 
  Application.ProcessMessages; 
  PopupMenu1.Popup(Pt.X, Pt.Y); 
end; 

procedure TwndIconic.FormCreate(Sender: TObject); 
begin 
  realizar := False; 
  cancelar := False; 
  iconificada := false; 
  lhoraactual.Caption := TimeToStr (time); 
end; 

procedure TwndIconic.FormDestroy(Sender: TObject); 
begin 
  ejecutadoya := false; 
  NotifyTray(NIM_DELETE, ''); 
end; 

procedure TwndIconic.actAcercaDeExecute(Sender: TObject); 
begin 
  with Twndabout.Create(nil) do 
  try 
    ShowModal; 
  finally 
    Free; 
  end; 
end; 

procedure TwndIconic.actAjustarHoraExecute(Sender: TObject); 
begin 
  If frmAjustarHora.ShowModal = MrOk Then 
  begin 
    try 
    begin 
      Hora := StrToTime(frmAjustarHora.txthora.Text); 
      lhora.Caption := frmAjustarHora.txthora.Text; 
      actAjustarHora.caption := 'Change hour'; 
      if opApagar.Checked then 
        caption := 'Shutdown at the: ' + TimeToStr (hora); 
      if opReiniciar.Checked then 
        caption := 'Restart at the: ' + TimeToStr (hora); 
      if opAviso.Checked then 
        caption := 'Warning at the: ' + TimeToStr (hora); 
      ejecutadoya := false; 
      temporizador.Enabled := true; 
    end; 
    except 
      messagedlg ('The introduced hour is not correct.', mterror, [mbok],0); 
    end; 
  end; 
end; 

procedure TwndIconic.actMinimizarExecute(Sender: TObject); 
begin 
  hide; 
  actMinimizar.visible := false; 
  actConfiguracion.visible := true; 
  Application.ShowMainForm := False; 
  ShowWindow(Application.Handle, SW_HIDE); 
  FTrayMessage := RegisterWindowMessage(PChar(STrayMessage)); 
  NotifyTray(NIM_ADD, ''); 
  iconificada := true; 
end; 


procedure TwndIconic.actSalirExecute(Sender: TObject); 
begin 
  close; 
end; 

function GetErrorstring: string; 
var 
  lz : Cardinal; 
  err : array[0..512] of Char; 
begin 
  lz := GetLastError; 
  FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nil, lz, 0, @err, 512, nil); 
  Result := string(err); 
end; 

procedure apagarPC; 
var 
  rl, flgs : Cardinal; 
  hToken : Cardinal; 
  tkp : TOKEN_PRIVILEGES; 
begin 
  flgs := 0; 
  flgs := flgs or EWX_POWEROFF; 
  if Win32Platform = VER_PLATFORM_WIN32_NT then 
  begin 
    if not OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES 
             or TOKEN_QUERY, hToken) then 
      ShowMessage ('Has not been possible to open the process. [' + GetErrorstring + ']') 
    else 
    begin 
      if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid) then 
      begin 
        tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; 
        tkp.PrivilegeCount           := 1; 
        AdjustTokenPrivileges(hToken, False, tkp, 0, nil, rl); 
        if GetLastError <> ERROR_SUCCESS then 
          ShowMessage('An error has taken place when trying to adjust the privileges.'); 
      end 
      else 
        ShowMessage('Has not been the value of the privilege. [' + GetErrorstring + ']'); 
    end; 
    ExitWindowsEx(flgs, 0); 
  end; 
end; 

procedure TwndIconic.RealizarProceso (); 
begin 
  //shutdown 
  If (opapagar.checked = True)  Then 
  begin 
    apagarPC; 
  end; 
  //close session current user 
  If (opreiniciar.checked = True)  Then 
    ExitWindowsEx (0,0); 
  //restart PC 
  If (opReiniciarEquipo.checked = True)  Then 
    ExitWindowsEx (EWX_REBOOT,0); 
  //Warning 
  If (opaviso.checked = True)  Then 
    messagedlg ('I warn of the program PCU, surely have something to make...', 
        mtwarning, [mbok],0); 
  frmRealizando.hacer := false;   
  frmRealizando.Close; 
end; 

procedure TwndIconic.TemporizadorTimer(Sender: TObject); 
Var 
 hAlarma,mAlarma : word; 
 hActual,mActual : word; 
 Milisegundos, Segundos : word; 
begin 
  lhoraactual.Caption := TimeToStr (time); 
  if not ejecutadoYa then 
  begin 
    DecodeTime(Hora, hAlarma, mAlarma, segundos, Milisegundos); 
    DecodeTime(Time, hActual, mActual, segundos, Milisegundos); 

    if iconificada then 
    begin 
      if lhora.Caption <> 'Without adjusting hour...' then 
      begin 
        if opapagar.Checked then 
          if iconificada then 
            NotifyTray(NIM_MODIFY, 'The PC will fade to those: ' + lHora.Caption); 
        if opReiniciar.Checked then 
          if iconificada then 
            NotifyTray(NIM_MODIFY, 'The session will close to those: ' + lHora.Caption); 
        if opReiniciarEquipo.Checked then 
          if iconificada then 
            NotifyTray(NIM_MODIFY, 'The PC will be restarted to those: ' + lHora.Caption); 
        if opAviso.Checked then 
          if iconificada then 
            NotifyTray(NIM_MODIFY, 'The PC will warn to those: ' + lHora.Caption); 
      end 
      else 
        NotifyTray(NIM_MODIFY, 'It has not adjusted hour of action'); 
    end; 

    //shutdown 
    If (HActual = hAlarma) and (mActual= mAlarma) and 
        (opapagar.checked = True)  Then 
    Begin 
      ejecutadoya := true; 
      frmrealizando.lAccion.Caption := 'Will shutdown the PC...'; 
      frmrealizando.temporizador.Enabled := true; 
      frmrealizando.show; 
    end; 
    //Close the current session 
    If (HActual = hAlarma) and (mActual= mAlarma) and 
        (opreiniciar.checked = True)  Then 
    begin 
      ejecutadoya := true; 
      frmrealizando.lAccion.Caption := 'Closing the current session...'; 
      frmrealizando.temporizador.Enabled := true; 
      frmrealizando.show; 
    end; 
    //Restart the PC 
    If (HActual = hAlarma) and (mActual= mAlarma) and 
        (opReiniciarEquipo.checked = True)  Then 
    begin 
      ejecutadoya := true; 
      frmrealizando.lAccion.Caption := 'Restarting the PC...'; 
      frmrealizando.temporizador.Enabled := true; 
      frmrealizando.show; 
    end; 
    //warning 
    If (HActual = hAlarma) and (mActual= mAlarma) and 
        (opaviso.checked = True)  Then 
    begin 
      ejecutadoya := true; 
      temporizador.Enabled := false; 
      frmrealizando.lAccion.Caption := 'Warning to the user...'; 
      frmrealizando.temporizador.Enabled := true; 
      frmrealizando.show; 
    end; 
  end; 
end; 


procedure TwndIconic.opApagarClick(Sender: TObject); 
begin 
  ejecutadoya := false; 
  be.Panels[0].Text := 'Action: TURN OFF'; 
end; 

procedure TwndIconic.opApagarDblClick(Sender: TObject); 
begin 
  ExitWindowsEx (1,0); 
end; 

procedure TwndIconic.opAvisoClick(Sender: TObject); 
begin 
  ejecutadoya := false; 
  be.Panels[0].Text := 'Action: I WARN'; 
end; 

procedure TwndIconic.opReiniciarClick(Sender: TObject); 
begin 
  ejecutadoya := false; 
  be.Panels[0].Text := 'Action: RESTART CURRENT SESSION'; 
end; 

procedure TwndIconic.opReiniciarDblClick(Sender: TObject); 
begin 
  ExitWindowsEx (0,0); 
end; 

procedure TwndIconic.opReiniciarEquipoClick(Sender: TObject); 
begin 
  ejecutadoya := false; 
  be.Panels[0].Text := 'Action: RESTART PC'; 
end; 

procedure TwndIconic.opReiniciarEquipoDblClick(Sender: TObject); 
begin 
  ExitWindowsEx (EWX_REBOOT,0); 
end; 

procedure TwndIconic.actConfiguracionExecute(Sender: TObject); 
begin 
  show; 
  actMinimizar.Visible := true; 
  iconificada := false; 
end; 

procedure TwndIconic.LWEBClick2(Sender: TObject); 
begin 
  ShellExecute(Handle, Nil, PChar(LWEB.CAPTION), 
      Nil, Nil, SW_SHOWNORMAL); 
end; 

end. 













******************************************* 



unit unidadajustarhora; 

interface 

uses 
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
  StdCtrls, Mask, Buttons, ExtCtrls; 

type 
  TfrmAjustarHora = class(TForm) 
    txtHora: TMaskEdit; 
    Label1: TLabel; 
    BitBtn1: TBitBtn; 
    Panel1: TPanel; 
  private 
    { Private declarations } 
  public 
    { Public declarations } 
  end; 

var 
  frmAjustarHora: TfrmAjustarHora; 

implementation 

{$R *.DFM} 

end. 






********************************************************++ 


unit unidadRealizar; 

interface 

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

type 
  TfrmRealizando = class(TForm) 
    bp: TProgressBar; 
    lAccion: TLabel; 
    Button1: TButton; 
    Button2: TButton; 
    temporizador: TTimer; 
    procedure FormShow(Sender: TObject); 
    procedure Button2Click(Sender: TObject); 
    procedure Button1Click(Sender: TObject); 
    procedure FormClose(Sender: TObject; var Action: TCloseAction); 
    procedure temporizadorTimer(Sender: TObject); 
  private 
    bpulsado : boolean; 
    { Private declarations } 
  public 
    hacer : boolean; 
    { Public declarations } 
  end; 

var 
  frmRealizando: TfrmRealizando; 

implementation 

uses Main; 

{$R *.dfm} 

procedure TfrmRealizando.FormShow(Sender: TObject); 
begin 
  hacer := true; 
  bpulsado := false; 
end; 

procedure TfrmRealizando.Button2Click(Sender: TObject); 
begin 
  bpulsado := true; 
  wndiconic.cancelar := true; 
  wndiconic.realizar := false; 
  close; 
end; 

procedure TfrmRealizando.Button1Click(Sender: TObject); 
begin 
  bpulsado := true; 
  wndiconic.realizar := true; 
  wndiconic.cancelar := false; 
  close; 
end; 

procedure TfrmRealizando.FormClose(Sender: TObject; 
  var Action: TCloseAction); 
begin 
  if hacer then 
  begin 
    if not bpulsado then 
      wndIconic.realizar := true; 
    wndiconic.realizarProceso(); 
  end; 
end; 

procedure TfrmRealizando.temporizadorTimer(Sender: TObject); 
var 
  i, j, k : integer; 
begin 
  temporizador.Enabled := false; 
  wndiconic.cancelar := false; 
  wndiconic.realizar := false; 
  bpulsado := false; 
  bp.Min := 0; 
  bp.max := 1000; 
  bp.Position := 0; 
  refresh; 
  for i := 0 to 1000 do 
  begin 
    bp.Position := i; 
    Application.ProcessMessages; 
    if (wndiconic.cancelar) or (wndiconic.realizar) then 
    begin 
      bpulsado := true; 
      close; 
    end; 
    for j := 1 to 1000 do 
      for k := 1 to 1000 do 
  end; 
  close; 
end; 

end. 






************************************************************ 
unit About; 

interface 

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

type 
  Twndabout = class(TForm) 
    Label1: TLabel; 
    Label2: TLabel; 
    Bevel1: TBevel; 
    Label3: TLabel; 
    Label4: TLabel; 
    txMemory: TLabel; 
    txFree: TLabel; 
    Button1: TButton; 
    LWEB: TLabel; 
    procedure FormCreate(Sender: TObject); 
    procedure LWEBClick(Sender: TObject); 
  private 
    { Private declarations } 
  public 
    { Public declarations } 
  end; 

var 
  wndabout: Twndabout; 

implementation 

{$R *.DFM} 

procedure Twndabout.FormCreate(Sender: TObject); 
var 
  MS: TMemoryStatus; 
begin 
  MS.dwLength := SizeOf(MS); 
  GlobalMemoryStatus(MS); 
  txMemory.Caption := FormatFloat('#, KB', MS.dwTotalPhys div 1024); 
  txFree.Caption := FormatFloat('#, KB', MS.dwAvailPhys div 1024); 
end; 

procedure Twndabout.LWEBClick(Sender: TObject); 
begin 
  ShellExecute(Handle, Nil, PChar(LWEB.CAPTION), 
      Nil, Nil, SW_SHOWNORMAL); 
end; 

end.
Responder Con Cita
  #5  
Antiguo 19-07-2007
panuweb panuweb is offline
Miembro
 
Registrado: jun 2007
Posts: 13
Poder: 0
panuweb Va por buen camino
Apagar el Equipo

Hola:

Quizas no debería haberlo dicho antes pero recién comienzo con Pascal y Delphi y tanto código junto es como que me marea.

Prodrías explicarme cómo enlazo el código a mi unit y cómo llamo a la función cerrar sesión por ejemplo desde un botón o cuando el timer llegue a 2 horas.

Gracias

Mauricio Panuncio
__________________
PANU WEB
Diseño y Administración de Sitios WEB
Responder Con Cita
Respuesta



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
Cronometro grone35 Varios 4 27-08-2006 19:34:51
Cronometro FGarcia Varios 1 19-01-2006 06:44:46
Crear un cronometro tannyk Varios 4 21-12-2005 14:59:03
SOCORRO un cronómetro Ita Varios 7 25-11-2004 16:43:09
Cronometro C++ The_Borg C++ Builder 1 31-05-2004 23:01:05


La franja horaria es GMT +2. Ahora son las 13:09:08.


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