Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.aspx
ShellExecute(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.htm
ShellExecute(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.069 c
2-1335162233
jacksotnik
2012-04-23 10:23
2013.03.22
DBComboBox


15-1352782910
AV
2012-11-13 09:01
2013.03.22
Стиль письма запроса SQL. Плохо?


15-1343315733
brother
2012-07-26 19:15
2013.03.22
С днем системного администратора


15-1328645259
Artem
2012-02-08 00:07
2013.03.22
Как проверить что тип TreeNode^ имеет "нулевое значение"?(C++)


2-1342449803
solovei
2012-07-16 18:43
2013.03.22
дождаться завершения установки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский