Array
(
)

Pegar dados de outro programa

Bueno
   - 29 set 2004

Fala galera! antes que alguém venha falar, já usei a busca, mas o que encontrei não me ajudou muito....

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!!!


Debug
   - 29 set 2004

Acho que seria mais facil vc contralar o acesso pelo banco de dados.
Vc teria uma tabela os acessos dos usuarios.
Um abraço.


Bueno
   - 29 set 2004

Debug,
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....


Tatuweb
   - 29 set 2004

Olá,

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:

#Código

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;

Notas: 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:

#Código
var
Form1: TForm;
Atomo: Atom;

e coloca a rotina no OnShow do Form

#Código
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.

#Código
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
   - 29 set 2004

Só uma coisa que esqueci. Onde está escrito:

#Código

var 
Form1: TForm;
Atomo: Atom;

Coloque:

#Código
var 
Form1: TForm;
Atomo: Atom;
const
iAtom=´MeuSistema[{9F77EF76-2F3A-4B50-85CE-AD47BBAE014A}]´;