quarta-feira, 7 de outubro de 2009

Captura a tela de erro de uma aplicação e envia por e-mail

{As vezes em nosso sistema ocorrem erros de diversos tipos: erros de programação, erros do banco de dados, erro do windows, erros de hardware que não suporta o sistema, etc. Isso as vezes faz com que os dados fiquem inconsistentes. Portanto a idéia foi desenvolver um procedimento que capture a tela onde ocorreu o erro, capture a mensagem de erro e envie por e-mail.}

procedure EnviaErroaoSuporte(Para, CC, Mensagem: String);
var
OutlookApp,
Mapi, Msg : Variant;
BitMap : TBitMap;
begin
OutlookApp := CreateOleObject('Outlook.Application');
try
Mapi := OutlookApp.GetNameSpace('MAPI');
Msg := Mapi.Application.CreateItem(0);
Msg.Subject := 'Erro no aplicativo '+UpperCase(Application.Title);
Msg.To := Para;
Msg.CC := CC;
Msg.Body := 'Ocorreu um erro na máquina : '+GetNetStation(1)+#13+
'Esta máquina encontra-se no grupo : '+GetNetStation(2)+#13+
'A mensagem de erro é : '+#13+Mensagem+#13+#13+
'A tela que o usuário utilizava antes do erro segue em anexo.'+#13;

// Captura e salva a tela atual antes do erro para anexá-la e enviar ao suporte.
BitMap := TBitmap.Create;
BitMap := CaptureScreenRect(Bounds(0,0,Screen.Width,Screen.Height));
BitMap.SaveToFile(ExtractFilePath(Application.ExeName)+'erro.bmp');
BitMap.Free;
Msg.Attachments.Add(ExtractFilePath(Application.ExeName)+'erro.bmp');

// Envia o email.
Msg.Send;
finally
OutlookApp := Unassigned;
end;
end;

//Aqui vai um exemplo da utilização desse procedimento:

// Tenta executar um procedure no Banco SQL Server.
try
SPFechaNota.ExecProc;
except
on E: Exception do EnviaErroaoSuporte('nome@email.com.br', '', E.Message);
end;


{By
Nativo_Gyn
ufgnet@pop.com.br}

Nenhum comentário:

Postar um comentário