Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Почтовик по умолчанию


Автор: Addmin 5.2.2006, 17:32
Хотел задать этот вопрос в прошлой теме, ну да ладно. Итак, господа знатоки, хочу спросить Вас:
Как узнать почтовик по умолчанию, установленный в Windows, и открыть его?
Буду благодарен всем откликнувшимся! smile

Автор: _hunter 6.2.2006, 12:09
ты бы его поиску задал... ну да ладно:
http://forum.vingrad.ru/index.php?showtopic=29291

Автор: Addmin 6.2.2006, 13:01
Так тут ещё поиск есть! smile
Хорошо, теперь буду почаще искать.

Автор: Addmin 6.2.2006, 17:44
2__hunter: спасибо за ответ, только на той странице код немного не рационален. Немного подразобравшись, написал свой, который открывает вообще любой клиент без каких-либо проверок и открытия из папок:
Код

uses Registry;

 procedure OpenMailClient;
 const
   cMailClient = '\SOFTWARE\Clients\Mail\';
 var
   reg: TRegistry;
   RegClientDefault: string;
 begin
   reg := TRegistry.Create;
   try
     with reg do
     begin
       CloseKey;
       RootKey := HKEY_LOCAL_MACHINE;
       if OpenKeyReadOnly(cMailClient) then  RegClientDefault := reg.ReadString('');
       if OpenKeyReadOnly(cMailClient + RegClientDefault + '\shell\open\command') then
         WinExec(PChar(ReadString('')), SW_SHOWNORMAL);
     end;
   finally
     reg.Free;
   end;
 end;

 procedure TForm1.Button1Click(Sender: TObject);
 begin
   OpenMailClient;
 end;


Автор: Snowy 6.2.2006, 18:03
Код наоборот нужно усложнить:
Код

const MailClientKey = '\SOFTWARE\Clients\Mail\';
var
  r: TRegistry;
  s: string;
begin
  s := '';
  r := TRegistry.Create(STANDARD_RIGHTS_READ);
  try
    r.RootKey := HKEY_CURRENT_USER;
    if r.OpenKeyReadOnly(MailClientKey) then s := r.ReadString('');
    if s='' then
    begin
      r.RootKey := HKEY_LOCAL_MACHINE;
      if r.OpenKeyReadOnly(MailClientKey) then s := r.ReadString('');
    end;
    if s<>'' then begin
      r.RootKey := HKEY_LOCAL_MACHINE;
      if r.OpenKeyReadOnly(MailClientKey + s + '\shell\open\command') then s := r.ReadString('');
    end;
    if s<>'' then WinExec(PChar(s), SW_SHOWNORMAL);
  finally
    r.Free;
  end;
end;

Иначе код не будет правильно отрабатывать, если у юзера почтовый клиент отличается от дефолтового клиента системы.

Автор: Addmin 7.2.2006, 15:06
Действительно, snowy, спасибо за совет, а то мой код открывает стандартный MS Outlook

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)