Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Heaven

Programa travar tudo, exceto ele mesmo

Recommended Posts

Bom, eu sou novo aqui e começei a programar Delphi a pouco tempo(Uma semana), mas como já programa em C e vi uns tutos na internet, já estou melhorzinho. Estou querendo fazer um programa, para que em determinados horários, ele peça uma senha e trave tudo, exceto ele mesmo, obrigando o usuário a digitar a senha. Na terceira tentativa, o computador fechará tudo e fará logoff(Já foi dado um aviso à 5 minutos avisando).

 

Aproveitando o tópico, como faço para programa ser executado quando o computador ligar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não está 100%, mas já fica na bandeja e já verifica os horários.

 

unit Horarios3;

interface

uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Menus, Registry, ShellApi, ExtCtrls, StdCtrls;

      const WM_TRAYICON=WM_USER+1;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    Timer1: TTimer;
    PopupMenu: TPopupMenu;
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
      { Private declarations }
      { Tratamento dos Ícones da Aplicação }
      procedure WMSysCommand(var Msg: TWMSysCommand); Message WM_SysCommand;
      procedure WMTrayIcon(var Msg: TMessage); Message WM_TRAYICON;
      procedure DestroyIcone;
      procedure CriaIcone;
      procedure FormCreate(Sender: TObject);
    public
      { Public declarations }
      end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
Var
quem: integer;
hora, minuto, segundo, milisegundo: word;
janela: HWND;

begin
decodeTime(time, hora, minuto, segundo, milisegundo);
     case hora-1 of
        0, 2, 7, 10, 13, 17, 19, 22: quem:= 1;//'Rodrigo';
        1, 4, 6, 9, 12, 15, 21, -1: quem:= 2;//'Bárbara';
        3, 8, 11, 14, 16, 18, 20: quem:= 3;//'Alexandre';

     if quem = 1 then
     if minuto = 55 then
        showmessage('A senha de segurança será pedida e o computador será travado em 5 minutos.')
        showmessage('Utilize este tempo para salvar seus documentos.');
     else
        exit;

     case hora of
        0, 2, 7, 10, 13, 17, 19, 22: quem:= 1;//'Rodrigo';
        1, 4, 6, 9, 12, 15, 21, 23: quem:= 2;//'Bárbara';
        3, 8, 11, 14, 16, 18, 20: quem:= 3;//'Alexandre';
     else
         quem:=0;
     end;
     if quem = 2 then
     if quem = 1 then
        begin
          janela:=FindWindow(nil,'Hórários');
          PostMessage(janela, SW_SHOW,0,0);
          //TRAVA TUDO
        end;
     end;
procedure TForm1.CriaIcone;
  var
    NotifyIconData: TNotifyIconData;
  begin
    with NotifyIconData do
    begin
      cbSize:= SizeOf(TNotifyIconData);
      Wnd:= Self.Handle;
      uID:= 0;
      uCallbackMessage:= WM_TRAYICON;
      uFlags:= NIF_ICON or NIF_TIP or NIF_MESSAGE;
      hIcon:= Application.Icon.Handle;
      szTip:= 'Horarios';
    end;
    Shell_NotifyIcon(NIM_ADD, @NotifyIconData);
//    Application.ShowMainForm:= False;
  end;

  procedure TForm1.DestroyIcone;
  var
    NotifyIconData: TNotifyIconData;
  begin
    NotifyIconData.cbSize:= SizeOf(TNotifyIconData);
    NotifyIconData.Wnd:= Self.Handle;
    NotifyIconData.uID:= 0;
    NotifyIconData.uFlags:= 0;
    Shell_NotifyIcon(NIM_DELETE, @NotifyIconData);
  end;

      {Captura todas as mensagens enviadas para a aplicação.
      Neste caso, trabalhamos apenas com as mensagens SC_MINIMIZE e SC_MAXIMIZE, que são enviadas quando devemos Minimizar ou Maximizar o formulario da aplicação. Capturando estas mensagens para esconder o ícone da aplicação da Barra de Tarefas do Windows e para criar / destruir o ícone que ficará ao lado do relógio.

      Obs: Você pode trabalhar com outras mensagem também. Tipo SC_CLOSE, SC_RESTORE e etc.}
  procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
  begin
    case (Msg.CmdType) of
      SC_MINIMIZE:
      begin
        Self.Visible:= False;
        CriaIcone;
      end;
      SC_MAXIMIZE:
      begin
        Self.Visible:= True;
      end
      else
        Inherited
    end;
  end;

      {Quando dar um duplo clique sobre o ícone da aplicação, destrímos este mesmo ícone e exibimos o formulário principal. Isto só funciona se implementarmos um manipulador para as Mensagens WMTrayIcon, que é o que faremos abaixo.

      Lembra-se da constante declarada no ínicio de nossa Unit?
      Pois bem, ela é passada como parâmetro para esta procedure.}
  procedure TForm1.WMTrayIcon(var Msg: TMessage);
  var
    Pt: TPoint;
  begin
    if (Msg.LParam = WM_RBUTTONDOWN) then
    begin
      GetCursorPos(Pt);
      PopupMenu.Popup(Pt.X, Pt.Y);
      PopupMenu.AutoPopup:= False;
    end
    else
      if (Msg.LParam = WM_LBUTTONDBLCLK) then
      begin
        Self.Visible:= True;
        DestroyIcone;
      end;
  end;

procedure TForm1.FormCreate(Sender: TObject);
  var
    Reg: TRegistry;
  begin
    CriaIcone;
    try

      // Inicializa a variavel do tipo TRegistry
      Reg:= TRegistry.Create;

      // Define a hirearquia das pasta, a qual irá trabalhar.
      Reg.RootKey:= HKEY_LOCAL_MACHINE;

      // Cria/entra, dentro da pasta do registro no qual irá aguardar informação
      Reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run', False);

      // Escreve a informção na chave
      // NomeDaChave, pode ser qualquer nome que você queira
      Reg.WriteString('Horarios', Application.ExeName);

      // Fecha a chave do registro
      Reg.CloseKey;
    Finally
      Reg.Free;
    end;
  end;
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
    if i > 3 then
      i:=0;
    if Edit1.Text = 'heaven' then
      begin
      showmessage('Senha correta. Acesso liberado.');
      //DESTRAVA
      exit;
      end
    else if Edit1.Text = '' then
      showmessage('O campo não pode ficar vazio')
    else if i = 3 then
      showmessage('Todas as tentativas foram usadas. Você será deslogado')
      //LOGOFF
    else
      begin
      i:= i+1;
      showmessage('Tentativa '+inttostr(i)+'/3 utilizada');
      end;
end;

end.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça um Timer que será ativado ao iniciar o programa e o mesmo irá Finalizar o processo "Explorer.exe", eu falo pra fazer um Timer, porque em algumas vezes o Windows inicia ele automaticamente após ser finalizado. E para ajudar mais ainda você pode desabilitar o CTRL ALT DEL. Com isto somente seu programa estará rodando, finalize também os comunicadores instantaneos...

 

 

Dica: No caso de gravar no Registro, se o computador usar o Kaspersky, faça um bat e coloque o bat para iniciar ao começar a instalação do software. (Uso o Winrar SFX para isto). Isto evita uma falsa detecção.

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.