Chamar o programa de e-mail padrão
boa tarde,
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
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
Curtidas 0
Respostas
Rafael Mattos
04/12/2003
Procedure DialogEmail(cText : String);
var
pEMail : PChar;
begin
{$ifdef win32}
pEMail:=PChar(´mailto:´+cText);
ShellExecute(HIDE_WINDOW, ´open´, pEMail, nil, nil, SW_SHOW);
{$endif}
end;
var
pEMail : PChar;
begin
{$ifdef win32}
pEMail:=PChar(´mailto:´+cText);
ShellExecute(HIDE_WINDOW, ´open´, pEMail, nil, nil, SW_SHOW);
{$endif}
end;
GOSTEI 0
Deus
04/12/2003
Bem, não entendi se você quer [i:a2d84a650a]abrir o programa[/i:a2d84a650a] ou se você quer [i:a2d84a650a]mandar um e-mail pelo programa[/i:a2d84a650a], então vou mandar uma função que executa o mailer padrão, já que funções que mandam e-mail já há várias por aqui. ;) A chave da questão está no registro
Que guarda o executável do mail padrão. Logo, é só buscar o valor dessa chave e executá-la, como na função abaixo:
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.
[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.
GOSTEI 0
Fcunha
04/12/2003
obrigado pela força so que no primeiro caso ele abre direto pra manda mensagem e nao seria isso seria abrir o programa so... como se fosse um atalho ... ( malz nao soube explicar rs.)
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:
e o oultlook express coloca a seguinte linha:
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
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
GOSTEI 0
Deus
04/12/2003
Rapaz... se o problema com meu código é apenas esse, então a solução é instantânea. :) Basta apenas você trocar a parte onde tem
para
E aí então você vai ter um esquema plenamente operacional. ;) Mude isso e veja se não vai funcionar. ;)
Abraços, 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.
GOSTEI 0
Fcunha
04/12/2003
ehehhe valeu deu certinho :D
quem manda eu ser novato :D
um dia eu aprendo...
Abraços
quem manda eu ser novato :D
um dia eu aprendo...
Abraços
GOSTEI 0