-
Добрый день. Пытаюсь инициировать отправку почты через 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' (или один из его компонентов)..." Что я делаю не так?
-
На другой машине (XP), где почтовый клиент по умолчанию - Outlook Express, код также не срабатывает.
-
ShellExecute(0, nil, 'mailto:test@test.com', nil, nil, SW_SHOW)
-
Попробовал 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 пустым письмом с данным адресом.
-
А что, если так попробовать: ShellExecute(Form1.Handle, 'open', PChar('mailto:test@test.com'), nil, nil, SW_SHOWNORMAL); ?
-
> Smile (19.11.09 16:43) [4] Попробовал. То же самое (ErrorCode = 2 - ERROR_FILE_NOT_FOUND) Я понимаю, что проблема выглядит странно, вроде бы на ровном месте, сам не ожидал, но тем не менее...
-
-
хотя вот тут другое: http://www.iks.ru/~spector/delphi.htmShellExecute(Application.Handle,'open','mailto:towho@mysite.com',nil,nil,0 ); данный код отлично запустил мою почтовую программу (The Bat) делфи - 6... пробуй...
-
а он точно там живет - C:\\PROGRA~1\\THEBAT~1\\thebat.exe?
-
кстати!: > [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\"" что у тебя?
-
Проверил на пустом проекте. На пустом проекте тот же самый код с ShellExecute (все варианты не проверял, два последних из предложенных), работает. В рабочем проекте - выдает ошибку.
-
> В рабочем проекте - выдает ошибку.
ну, значт в рабочем проекте - ошибка ;)
-
Так в рабочем проекта ошибку выдает наверно другой код.
-
>Так в рабочем проекта ошибку выдает наверно другой код. Именно ТОТ ЖЕ. Я догадываюсь, что в рабочем проекте ошибка. Там есть несколько компонент, может быть они меняют какие-то настройки Windows для моего приложения, которые потом сказываются на работе ShellExecute. Предположение такое. Используются также модули из madExcept.
-
> [13] GreyWolf © (20.11.09 14:19)
да конечно тот же! адрес там тоже test@test.com???
-
да конечно тот же! адрес там тоже 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';
-
Всем спасибо, проблему удалось обойти путем извлечения exe-имени почтового клиента из HKEY_CLASSES_ROOT\mailto\shell\open\command и запуска уже этой строки по ShellExecute с нужным адресом как четвертый параметр.
-
я по поводу реестра тебе сказал в [9], так что, потенциальные грабли...
|