![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
проблема с запуском ShellExecute с протоколом mailto [D7, Win2k, WinXP]
GreyWolf © (2009-11-18 21:26:00)Добрый день.
Пытаюсь инициировать отправку почты через
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' (или один из его компонентов)..."
Что я делаю не так?
brother (2009-11-24 11:11:00) [1]я по поводу реестра тебе сказал в [9], так что, потенциальные грабли...
GreyWolf (2009-11-23 19:51:00) [2]Всем спасибо, проблему удалось обойти путем извлечения exe-имени почтового клиента из HKEY_CLASSES_ROOT\mailto\shell\open\command и запуска уже этой строки по ShellExecute с нужным адресом как четвертый параметр.
GreyWolf (2009-11-21 16:56:00) [3]да конечно тот же!
адрес там тоже 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';
Eraser (2009-11-21 15:25:00) [4]> [13] GreyWolf © (20.11.09 14:19)
да конечно тот же!
адрес там тоже test@test.com???
GreyWolf (2009-11-20 14:19:00) [5]>Так в рабочем проекта ошибку выдает наверно другой код.
Именно ТОТ ЖЕ.
Я догадываюсь, что в рабочем проекте ошибка. Там есть несколько компонент, может быть они меняют какие-то настройки Windows для моего приложения, которые потом сказываются на работе ShellExecute. Предположение такое.
Используются также модули из madExcept.
Anatoly Podgoretsky (2009-11-20 12:56:00) [6]Так в рабочем проекта ошибку выдает наверно другой код.
brother (2009-11-20 11:29:00) [7]> В рабочем проекте - выдает ошибку.
ну, значт в рабочем проекте - ошибка ;)
GreyWolf (2009-11-20 11:27:00) [8]Проверил на пустом проекте. На пустом проекте тот же самый код с ShellExecute (все варианты не проверял, два последних из предложенных), работает. В рабочем проекте - выдает ошибку.
brother (2009-11-20 11:13:00) [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\""
что у тебя?
clickmaker (2009-11-20 11:04:00) [10]а он точно там живет - C:\\PROGRA~1\\THEBAT~1\\thebat.exe?
brother (2009-11-20 04:48:00) [11]хотя вот тут другое:
http://www.iks.ru/~spector/delphi.htm
ShellExecute(Application.Handle,'open','mailto:towho@mysite.com',nil,nil,0 );
данный код отлично запустил мою почтовую программу (The Bat) делфи - 6...
пробуй...
brother (2009-11-20 04:43:00) [12]загуглил:
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);
имхо не хватает...
GreyWolf (2009-11-19 19:07:00) [13]> Smile (19.11.09 16:43) [4]
Попробовал. То же самое (ErrorCode = 2 - ERROR_FILE_NOT_FOUND)
Я понимаю, что проблема выглядит странно, вроде бы на ровном месте, сам не ожидал, но тем не менее...
Smile (2009-11-19 16:43:00) [14]А что, если так попробовать:
ShellExecute(Form1.Handle, 'open', PChar('mailto:test@test.com'), nil, nil, SW_SHOWNORMAL);
?
GreyWolf (2009-11-19 16:29:00) [15]Попробовал
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 пустым письмом с данным адресом.
clickmaker (2009-11-19 11:55:00) [16]ShellExecute(0, nil, 'mailto:test@test.com', nil, nil, SW_SHOW)
GreyWolf (2009-11-18 21:49:00) [17]На другой машине (XP), где почтовый клиент по умолчанию - Outlook Express, код также не срабатывает.