Heaven 0 Denunciar post Postado Janeiro 24, 2010 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
wllf 2 Denunciar post Postado Janeiro 25, 2010 Heaven o que você já tem pronto aí? Compartilhar este post Link para o post Compartilhar em outros sites
Heaven 0 Denunciar post Postado Janeiro 25, 2010 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
Roohrk 0 Denunciar post Postado Janeiro 28, 2010 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