Форум: "WinAPI";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Внизпроблема с запуском ShellExecute с протоколом mailto Найти похожие ветки
← →
GreyWolf © (2009-11-18 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 © (2009-11-18 21:49) [1]На другой машине (XP), где почтовый клиент по умолчанию - Outlook Express, код также не срабатывает.
← →
clickmaker © (2009-11-19 11:55) [2]ShellExecute(0, nil, "mailto:test@test.com", nil, nil, SW_SHOW)
← →
GreyWolf © (2009-11-19 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 (2009-11-19 16:43) [4]А что, если так попробовать:
ShellExecute(Form1.Handle, "open", PChar("mailto:test@test.com"), nil, nil, SW_SHOWNORMAL);
?
← →
GreyWolf © (2009-11-19 19:07) [5]> Smile (19.11.09 16:43) [4]
Попробовал. То же самое (ErrorCode = 2 - ERROR_FILE_NOT_FOUND)
Я понимаю, что проблема выглядит странно, вроде бы на ровном месте, сам не ожидал, но тем не менее...
← →
brother © (2009-11-20 04:43) [6]загуглил:
http://www.rsdn.ru/forum/winapi/353485.1.aspxShellExecute(NULL,"open","mailto:email1;email2?subject=Subject%20text&body=
STRING1
STRING2
STRING3
STRING4
&cc=email",NULL,NULL,SW_SHOWNORMAL);
имхо не хватает...
← →
brother © (2009-11-20 04:48) [7]хотя вот тут другое:
http://www.iks.ru/~spector/delphi.htmShellExecute(Application.Handle,"open","mailto:towho@mysite.com",nil,nil,0 );
данный код отлично запустил мою почтовую программу (The Bat) делфи - 6...
пробуй...
← →
clickmaker © (2009-11-20 11:04) [8]а он точно там живет - C:\\PROGRA~1\\THEBAT~1\\thebat.exe?
← →
brother © (2009-11-20 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 © (2009-11-20 11:27) [10]Проверил на пустом проекте. На пустом проекте тот же самый код с ShellExecute (все варианты не проверял, два последних из предложенных), работает. В рабочем проекте - выдает ошибку.
← →
brother © (2009-11-20 11:29) [11]> В рабочем проекте - выдает ошибку.
ну, значт в рабочем проекте - ошибка ;)
← →
Anatoly Podgoretsky © (2009-11-20 12:56) [12]Так в рабочем проекта ошибку выдает наверно другой код.
← →
GreyWolf © (2009-11-20 14:19) [13]>Так в рабочем проекта ошибку выдает наверно другой код.
Именно ТОТ ЖЕ.
Я догадываюсь, что в рабочем проекте ошибка. Там есть несколько компонент, может быть они меняют какие-то настройки Windows для моего приложения, которые потом сказываются на работе ShellExecute. Предположение такое.
Используются также модули из madExcept.
← →
Eraser © (2009-11-21 15:25) [14]> [13] GreyWolf © (20.11.09 14:19)
да конечно тот же!
адрес там тоже test@test.com???
← →
GreyWolf © (2009-11-21 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 © (2009-11-23 19:51) [16]Всем спасибо, проблему удалось обойти путем извлечения exe-имени почтового клиента из HKEY_CLASSES_ROOT\mailto\shell\open\command и запуска уже этой строки по ShellExecute с нужным адресом как четвертый параметр.
← →
brother © (2009-11-24 11:11) [17]я по поводу реестра тебе сказал в [9], так что, потенциальные грабли...
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.064 c