Pegar dados de outro programa
29/09/2004
0
Para facilitar a manutenção e o tempo de desenvolvimento, eu dividi um programa em módulos, onde cada múdulo é um executável. O que estou precisando fazer é arrumar um modo de autenticar usuario e senha nos módulos filhos sem pedir novamente login e senha. Para isto pensei em criar uma variavel booleana no múdulo principal onde é verdadeira se o usuário está logado e se ele tem permissão de acessar tal módulo. Mas, como eu leio essa variável a partir de outro programa??? esta é a minha dúvida.
Se tiverem outras sugestões, por favor, me ajudem!
Valew!!!
Bueno
Post mais votado
29/09/2004
Uma solução para isso é você adicionar uma string na tabela global de átomos do sistema. Assim é possível fazer essa verificação entre diversos aplicativos. Veja como fazer:
:arrow: No módulo de login (módulo principal) você coloca a rotina abaixo no OnShow do form:
procedure TForm1.FormShow(Sender: TObject); const iAtom=´MeuSistema[{9F77EF76-2F3A-4B50-85CE-AD47BBAE014A}]´; begin if GlobalFindAtom (iAtom) <> 0 then begin ShowMessage (´Se liga mané você já está logado!´); Exit; end; // Aqui vem a rotina para acesso ao BD e efetuar o login // Se login efetuado com sucesso executar a função abaixo GlobalAddAtom (iAtom); ShowMessage (´Logon efetuado com sucesso!´); end;
[b:b1f81ebacc]Notas:[/b:b1f81ebacc] iAtom é a string de verificação. Faça uma string longa como a do exemplo acima porque outros aplicativos podem usar essa API e se houver coinscidência de strings seu aplicativo vai gerar um erro. Como opção e para maior segurança você pode também criptografar a string quando for adicioná-la a tabela de átomos e decriptografar a string quando recuperar.
:arrow: Nos demais módulos você coloca a rotina abaixo:
Adiciona uma variável global do tipo Atom:
var Form1: TForm; Atomo: Atom;
e coloca a rotina no OnShow do Form
procedure TForm1.FormShow(Sender: TObject); begin Atomo := GlobalFindAtom (iAtom); if Atomo = 0 then begin ShowMessage (´Você não está logado! Cai fora!´); // Chamar módulo de login e encerrar este módulo; // ShellExecute (applogin) Application.Terminate; end; end;
Para efetuar logoff você remove a string da tabela de átomos do sistema.
procedure TForm1.Button2Click(Sender: TObject); begin GlobalDeleteAtom (Atomo); ShowMessage (´Logoff efetuado com sucesso´); end;
Nota: Se for testar abra duas instancias do Delphi e salve os dois projetos antes de compilar. Caso contrário pode não funcionar pois todos os executaveis serão gerados com o mesmo nome (project1.exe).
Tatuweb
Mais Posts
29/09/2004
Debug
Vc teria uma tabela os acessos dos usuarios.
Um abraço.
29/09/2004
Bueno
Legal, mas q informações eu teria para fazer a pesquisa na tabela? eu teria q ao menos pegar o usuário logado no módulo pai. Como eu poderia pegar o usuário logado no múdulo pai? Eu já fiz isso usando o registro do Windows, mas é muito inseguro, então eu gostaria de fazer isto de uma outra forma.
a dúvida continua....
29/09/2004
Tatuweb
var Form1: TForm; Atomo: Atom;
Coloque:
var Form1: TForm; Atomo: Atom; const iAtom=´MeuSistema[{9F77EF76-2F3A-4B50-85CE-AD47BBAE014A}]´;
Clique aqui para fazer login e interagir na Comunidade :)