Pegar dados de outro programa

29/09/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!!!


Bueno

Respostas

29/09/2004

Debug

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


Responder Citar

29/09/2004

Bueno

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


Responder Citar

29/09/2004

Tatuweb

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:

procedure TForm1.FormShow(Sender: TObject);
const
  iAtom=´MeuSistema[{9F77EF76-2F3A-4B50-85CE-AD47BBAE014A}&93;´;
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).


Responder Citar

29/09/2004

Tatuweb

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

var 
  Form1: TForm; 
  Atomo: Atom;

Coloque:

var 
  Form1: TForm; 
  Atomo: Atom;
const
  iAtom=´MeuSistema[{9F77EF76-2F3A-4B50-85CE-AD47BBAE014A}&93;´;



Responder Citar