Конференция "WinAPI" » проблема с запуском ShellExecute с протоколом mailto [D7, Win2k, WinXP]
 
  • GreyWolf © (18.11.09 21:26) [0]
    Добрый день.
    Пытаюсь инициировать отправку почты через
    ShellExecute(0, 'open', 'mailto:test@test.com', nil, nil, SW_SHOW)
    , но функция возвращает ошибку ERROR_FILE_NOT_FOUND (2).
    Почтовый клиент The Bat установлен, протокол зарегистрирован в реестре:

    REGEDIT4

    [HKEY_CLASSES_ROOT\mailto]
    @="URL:╧ЁюЄюъюы MailTo"
    "EditFlags"=dword:00000002
    "URL Protocol"=""

    [HKEY_CLASSES_ROOT\mailto\DefaultIcon]
    @="C:\\PROGRA~1\\THEBAT~1\\thebat.exe,0"

    [HKEY_CLASSES_ROOT\mailto\shell]

    [HKEY_CLASSES_ROOT\mailto\shell\open]

    [HKEY_CLASSES_ROOT\mailto\shell\open\command]
    @="\"C:\\PROGRA~1\\THEBAT~1\\thebat.exe\" %1"

    [HKEY_CLASSES_ROOT\mailto\shell\open\DDEexec]
    @="%1"

    [HKEY_CLASSES_ROOT\mailto\shell\open\DDEexec\Application]
    @="thebat"

    [HKEY_CLASSES_ROOT\mailto\shell\open\DDEexec\Topic]
    @="tbDDE"



    Если я набираю mailto:test@test.com в командной строке far, (shift+Enter) то The Bat! запускается, окно с новым письмом на этот адрес появляется, ХОТЯ при этом выскакивает MessageBox c ICON_ERROR о том, что "Не удается найти файл 'mailto:test@test.com' (или один из его компонентов)..."

    Что я делаю не так?
  • GreyWolf © (18.11.09 21:49) [1]
    На другой машине (XP), где почтовый клиент по умолчанию - Outlook Express, код также не срабатывает.
  • clickmaker © (19.11.09 11:55) [2]
    ShellExecute(0, nil, 'mailto:test@test.com', nil, nil, SW_SHOW)
  • GreyWolf © (19.11.09 16:29) [3]
    Попробовал
    ShellExecute(0, nil, 'mailto:test@test.com', nil, nil, SW_SHOW)
    на машине с XP
    Независимо от второго параметра (nil или 'open'), возвращает 5 (ERROR_ACCESS_DENIED) и ничего не запускается.
    Опять же при наборе mailto URL в командной строке far и Shift+Enter запускается Outlook Express c пустым письмом с данным адресом.
  • Smile (19.11.09 16:43) [4]
    А что, если так попробовать:
    ShellExecute(Form1.Handle, 'open', PChar('mailto:test@test.com'), nil, nil, SW_SHOWNORMAL);


    ?
  • GreyWolf © (19.11.09 19:07) [5]
    > Smile   (19.11.09 16:43) [4]
    Попробовал. То же самое (ErrorCode = 2 - ERROR_FILE_NOT_FOUND)
    Я понимаю, что проблема выглядит странно, вроде бы на ровном месте, сам не ожидал, но тем не менее...
  • brother © (20.11.09 04:43) [6]
    загуглил:
    http://www.rsdn.ru/forum/winapi/353485.1.aspx
    ShellExecute(NULL,"open","mailto:email1;email2?subject=Subject%20text&body=
    STRING1
    STRING2
    STRING3
    STRING4
    &cc=email",NULL,NULL,SW_SHOWNORMAL);


    имхо не хватает...
  • brother © (20.11.09 04:48) [7]
    хотя вот тут другое:
    http://www.iks.ru/~spector/delphi.htm
    ShellExecute(Application.Handle,'open','mailto:towho@mysite.com',nil,nil,0 );


    данный код отлично запустил мою почтовую программу (The Bat) делфи - 6...
    пробуй...
  • clickmaker © (20.11.09 11:04) [8]
    а он точно там живет - C:\\PROGRA~1\\THEBAT~1\\thebat.exe?
  • brother © (20.11.09 11:13) [9]
    кстати!:

    > [HKEY_CLASSES_ROOT\mailto]

    у меня нет, но все работает! убей это вообще!
    нашел у себя поиском по реестру вот:
    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\The Bat!]
    @="The Bat!"
    "DLLPath"="C:\\Program Files\\The Bat!\\TBMapi.DLL"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\The Bat!\Protocols]

    [HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\The Bat!\Protocols\mailto]
    @="URL:MailTo Protocol"
    "EditFlags"=dword:00000002
    "URL Protocol"=""

    [HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\The Bat!\Protocols\mailto\DefaultIcon]
    @="C:\\Program Files\\The Bat!\\thebat.exe,0"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\The Bat!\Protocols\mailto\shell]

    [HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\The Bat!\Protocols\mailto\shell\open]

    [HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\The Bat!\Protocols\mailto\shell\open\command]
    @="\"C:\\Program Files\\The Bat!\\thebat.exe\" %1"

    [HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\The Bat!\Shell]

    [HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\The Bat!\Shell\open]

    [HKEY_LOCAL_MACHINE\SOFTWARE\Clients\Mail\The Bat!\Shell\open\command]
    @="\"C:\\Program Files\\The Bat!\\thebat.exe\""


    что у тебя?
  • GreyWolf © (20.11.09 11:27) [10]
    Проверил на пустом проекте. На пустом проекте тот же самый код с ShellExecute (все варианты не проверял, два последних из предложенных), работает. В рабочем проекте - выдает ошибку.
  • brother © (20.11.09 11:29) [11]
    > В рабочем проекте - выдает ошибку.

    ну, значт в рабочем проекте - ошибка ;)
  • Anatoly Podgoretsky © (20.11.09 12:56) [12]
    Так в рабочем проекта ошибку выдает наверно другой код.
  • GreyWolf © (20.11.09 14:19) [13]
    >Так в рабочем проекта ошибку выдает наверно другой код.
    Именно ТОТ ЖЕ.
    Я догадываюсь, что в рабочем проекте ошибка. Там есть несколько компонент, может быть они меняют какие-то настройки Windows для моего приложения, которые потом сказываются на работе ShellExecute. Предположение такое.
    Используются также модули из madExcept.
  • Eraser © (21.11.09 15:25) [14]
    > [13] GreyWolf ©   (20.11.09 14:19)

    да конечно тот же!
    адрес там тоже test@test.com???
  • GreyWolf © (21.11.09 16:56) [15]
    да конечно тот же!
    адрес там тоже test@test.com???

    ДА. ТОТ ЖЕ.
    Например, прямо эти две строчки:

     ErrorCode := ShellExecute(Self.Handle, 'open', PChar('mailto:test@test.com'), nil, nil, SW_SHOWNORMAL);
     ErrorCode := ShellExecute(0, nil, 'mailto:test@test.com', nil, nil, SW_SHOW);


    Отладчик показывает, что ShellExecute вызывается откуда надо в обоих случаях - на строчку из ShellApi.pas
    function ShellExecute; external shell32 name 'ShellExecuteA';
  • GreyWolf © (23.11.09 19:51) [16]
    Всем спасибо, проблему удалось обойти путем извлечения exe-имени почтового клиента из HKEY_CLASSES_ROOT\mailto\shell\open\command и запуска уже этой строки по ShellExecute с нужным адресом как четвертый параметр.
  • brother © (24.11.09 11:11) [17]
    я по поводу реестра тебе сказал в [9], так что, потенциальные грабли...
 
Конференция "WinAPI" » проблема с запуском ShellExecute с протоколом mailto [D7, Win2k, WinXP]
Есть новые Нет новых   [134431   +15][b:0][p:0.002]