Chamar o programa de e-mail padrão
04/12/2003
0
como sou leigo no assunto, gostaria de saber se é possivel fazer com que um botao chame o programa de email padrao..
ex: poderia chamar ou o outlook,incredmail,akmail,eudora.... ele chamaria o programa padrao que esta definido no windows...
grato
Fernando Cunha
Fcunha
Posts
04/12/2003
Rafael Mattos
var
pEMail : PChar;
begin
{$ifdef win32}
pEMail:=PChar(´mailto:´+cText);
ShellExecute(HIDE_WINDOW, ´open´, pEMail, nil, nil, SW_SHOW);
{$endif}
end;
04/12/2003
Deus
[HKEY_CLASSES_ROOT\mailto\shell\open\command]
Que guarda o executável do mail padrão. Logo, é só buscar o valor dessa chave e executá-la, como na função abaixo:
procedure ChamaMailer; const Mailer = ´\mailto\shell\open\command´; var stTmp: String; rgReg: TRegistry; begin try rgReg := TRegistry.Create; rgReg.RootKey := HKEY_CLASSES_ROOT; if rgReg.OpenKeyReadOnly(Mailer) then begin stTmp := rgReg.ReadString(´´); while (Pos(´\´, stTmp) > 0) do Delete(stTmp, 1, Pos(´\´, stTmp)); if (Pos(´"´, stTmp) > 0) then Delete(stTmp, Pos(´"´, stTmp), Length(stTmp) - Pos(´"´, stTmp) + 1); ShellExecute(Handle, ´´, PChar(stTmp), ´´, PChar(ExtractFilePath(Application.ExeName)), SW_SHOW); end; rgReg.CloseKey; finally rgReg.Free; end; end;
Ao chamar este procedimento, o programa mailer padrão será aberto. :) O que eu fiz foi pegar o valor da chave padrão e ´limpá-la´, deixando apenas o nome do executável. ;)
Espero que tenha ajudado! Abraços, dEUS.
04/12/2003
Fcunha
no segundo caso ele abre o programa q esta padrao no windows... bele abriu o outlook express beleza... so q se voce instala pegasus ou incredmail eles colocam nomes e diretorios diferentes la no registro ai ele nao abre...
veja o exemplo
o incredmail coloca a seguinte linha no registro:
C:\ARQUIV~1\INCRED~1\bin\IncMail.exe /c /n /mailto:"¬1"
e o oultlook express coloca a seguinte linha:
"¬ProgramFiles¬\Outlook Express\msimn.exe" /mailurl:¬1
ai pra abrir o outlook ele fica beleza, agora pros outros programas q jogam no diretorio arquivos de programas, ou c:\eudora .... ele nao pega
valeu pelo toque se conseguir ver o pq nao abre e talz... mas ja valeu pela ajuda... vo tenta algo aqui tbm
05/12/2003
Deus
if (Pos(´"´, stTmp) > 0) then Delete(stTmp, Pos(´"´, stTmp), Length(stTmp) - Pos(´"´, stTmp) + 1);
para
if (Pos(´.exe´, stTmp) > 0) then Delete(stTmp, Pos(´.exe´, stTmp) + 4, Length(stTmp));
E aí então você vai ter um esquema plenamente operacional. ;) Mude isso e veja se não vai funcionar. ;)
Abraços, dEUS.
05/12/2003
Fcunha
quem manda eu ser novato :D
um dia eu aprendo...
Abraços
Clique aqui para fazer login e interagir na Comunidade :)