Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

проблема с запуском 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, код также не срабатывает.


Наверх

Титульная страница Поиск, карта сайта Написать письмо