Вверх ↑
Этот топик читают: Гость
Ответов: 176
Рейтинг: 12
#1: 2011-01-26 21:09:03 ЛС | профиль | цитата
Имеется редактор MQ5 файлов. При открытии файла с расширением .mq5 средствами ОС, редактор запускается с параметрами /dde и ОС передаёт ему по DDE комадну на открытие файла. Команда выглядит так [open("%1")]. Вместо %1 подставляется путь к файлу. Проблема в том, что редактор успешно открывает файл, когда он открывается средствами ОС. А вот когда редактор получает аналогичную команду из программы (см. схему), файл в редактор не загружается. Может кто уже сталкивался с такой ситуацией? Как решить проблему?

Схема которая посылает команду редактору.
code_22310.txt

Программа, которой пользовался для перехвата команд, посылаемых операционной системой при открытии файла. Просто надо заменить metaeditor.exe скомпилированным файлом.

code_22311.txt

Сам редактор прикрепил к сообщению
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
файлы: 3metaeditor.zip [997.7KB] [419], code_22310.txt [1KB] [461], code_22311.txt [776B] [469]
Разработчик
Ответов: 26113
Рейтинг: 2126
#2: 2011-01-26 21:57:21 ЛС | профиль | цитата
А где взять файл Project1.mq5 Желательно бы его иметь для чистоты эксперимента
карма: 22

0
Ответов: 176
Рейтинг: 12
#3: 2011-01-26 22:01:46 ЛС | профиль | цитата
nesco, это обычный текстовый файл. Прикрепил его здесь.
Хочу ещё заметить, что редактор запоминает, какие файлы были в нём открыты, и автоматически открывает их при повторном запуске. Так, что нужно закрывать сначала внутреннее окошко редактора с открытым файлом, а потом сам редактор, во время экспериментов, перед посылкой команд по dde.
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
файлы: 1mq5.zip [346B] [300]
Разработчик
Ответов: 26113
Рейтинг: 2126
#4: 2011-01-27 03:00:47 ЛС | профиль | цитата
Откуда взято, что имя сервиса должно быть именно METAED~1 и подавать надо именно команду, а не что-либо еще
------------ Дoбавленo в 03.00:
Разобрался, проверил, получил тоже
toropchin писал(а):
файл в редактор не загружается

при эмуляции передачи команды. С чем это связано, я пока так и не понял.
К тому же, в результате экспериментов, угробил у себя расширение, теперь не могу прописать его по новой, откликаться не хочет больше на DDE при запуске расширения
А другого способа нет их открывать
карма: 22

0
Ответов: 176
Рейтинг: 12
#5: 2011-01-27 06:08:38 ЛС | профиль | цитата
nesco писал(а):
Откуда взято, что имя сервиса должно быть именно METAED~1 и подавать надо именно команду, а не что-либо еще

Если установлен Windows XP, то команды запуска можно посмотреть так: сервис >> свойства папки >> типы файлов >> ищем в списке mq5 >> нажимаем "дополнительно" >> выбираем в списке команду open и жмём "изменить".

Если установлена виста или семёрка, то надо лезть в реестр. Сама привязка к расширению хранится здесь: HKEY_CLASSES_ROOT.mq5. Команды open со всеми параметрами находится вот в этом ключе: HKEY_CLASSES_ROOTMQL5.Fileshellopen.

nesco писал(а):
К тому же, в результате экспериментов, угробил у себя расширение, теперь не могу прописать его по новой, откликаться не хочет больше на DDE при запуске расширения

Если удалить HKEY_CLASSES_ROOT.mq5 и HKEY_CLASSES_ROOTMQL5.File, то должно получиться восстановить привязку к расширениям при следующем запуске редактора.

nesco писал(а):
А другого способа нет их открывать

Можно ещё открывать файл в связанной с ним программе. Вот так:


Add(WinExec,6516148,189,126)
{
Param=" /dde"
FileName="E:\_TOROP~1METATR~3NORDFX~1.COMMETAED~1.EXE"
}
Add(Button,14454563,133,133)
{
Left=5
Top=5
link(onClick,6516148:doShellExec,[])
}
Но такой способ не подходит, потому, что здесь именно ОС выбирает в чём открыть файл, а не программа.
------------ Дoбавленo в 06.08:
Попробовал открыть файл в ворде. У меня стоит офис 2007. Посмотрел ключи запуска вот тут: HKEY_CLASSES_ROOTWord.Document.12shellOpen

Add(MainForm,14332235,35,126)
{
Position=1
}
Add(Button,4222831,161,126)
{
Left=45
Top=25
link(onClick,3544816:doExec,[])
}
Add(DDEClient,8066386,280,140)
{
ServiceName="WinWord"
TopicName="System"
Point(onError)
Point(doExecute)
Point(onExecute)
link(onOpenLink,3285838:doText,[])
}
Add(Edit,3285838,350,140)
{
Left=125
Top=65
Width=150
Text="Ожидаем коннект"
link(onChange,14934731:doData,[(400,146)(400,215)(205,215)(205,174)])
}
Add(DoData,14934731,217,168)
{
@Hint=#44:Прописать путь к файлу, который надо открыть|
Data=String([REM _DDE_Direct][FileOpen("E:\_ToropchinHiAsmProjectsProject1.mq5")])
link(onEventData,8066386:doExecute,[])
AddHint(44,60,190,26,@Hint)
}
Add(WinExec,3544816,217,126)
{
@Hint=#36:Прописать свой путь к metaeditor.exe|
Param="/dde"
FileName="C:Program FilesMicrosoft Office 2007Office12WINWORD.EXE"
link(onExec,8066386:doOpenLink,[(265,132)(265,146)])
AddHint(51,-46,134,26,@Hint)
}

Ворд успешно открыл файл.
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#6: 2011-01-27 09:03:33 ЛС | профиль | цитата
toropchin писал(а):
Ворд успешно открыл файл

Действительно, открыл. В таком случае, возможно, команда должна быть другой -- Ворд отрабатывает свою команду, значит, принцип управления работает, а вот metaeditor -- нет
карма: 22

0
Ответов: 176
Рейтинг: 12
#7: 2011-01-27 10:05:57 ЛС | профиль | цитата
Команда прописана в реестре. Да и при отлове команды, посылаемой операционкой она остаётся той же, что в реестре. Написал разраобтчикам metaeditor'a. Может пояснять ситуацию...
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#8: 2011-01-27 10:13:56 ЛС | профиль | цитата
Сижу, юзаю, никаких эмоций, кроме поднятия прогой DDE-сервера. А Ворд -- без проблем, странно это как-то
карма: 22

0
Ответов: 176
Рейтинг: 12
#9: 2011-01-27 10:18:56 ЛС | профиль | цитата
Да и другие программы запросто открывают файлы таким методом. Точно, странно
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#10: 2011-01-27 10:34:16 ЛС | профиль | цитата
toropchin писал(а):
Да и другие программы запросто открывают файлы таким методом

Че-то меня стали сомнения терзать, что это прога сама DDE-сервер поднимает, а не система, а прога тупо забила на наши команды, только на системные откликется, может, система сама декодирует эти команды, а в прогу передает какой-то другой параметр
Тут действительно надо разработчиков трусить

карма: 22

0
Ответов: 176
Рейтинг: 12
#11: 2011-01-27 10:45:35 ЛС | профиль | цитата
Разработчики не очень-то шевелятся отвечать.
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#12: 2011-01-27 11:52:59 ЛС | профиль | цитата
Проверил файловым монитором -- при запуске из системы передается имя запускаемого файла, при запуске эмулятора -- нет.
карма: 22

0
Ответов: 176
Рейтинг: 12
#13: 2011-01-27 12:12:52 ЛС | профиль | цитата
Что за файловый монитор?
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#14: 2011-01-27 12:22:40 ЛС | профиль | цитата
toropchin писал(а):
Что за файловый монитор?

FileMon.exe, но нормально работает только под XP, под Семеркой глючит нещадно. У меня старая версия вот с этого сайта --http://technet.microsoft.com/ru-ru/sysinternals. Вроде, ее сейчас заменили одной -- Process Monitor http://technet.microsoft.com/ru-ru/sysinternals/bb896645
карма: 22

0
Ответов: 176
Рейтинг: 12
#15: 2011-01-27 13:16:51 ЛС | профиль | цитата
Причём не помогает загрузить файл даже такая функция:

#pas
ShellExecute(0,'open','E:\_TOROP~1\HiAsm\compiler\MQL5\MT5\METAED~1.EXE', 'E:\_Toropchin\HiAsm\Projects\Project1.mq5', nil, SW_SHOW);
Редактор открывается, файл - нет.
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)