SASGIS

Веб-картография и навигация

Перейти по заданным координатам извне

Форум для обсуждения деталей разработки программы SAS.Планета

Модераторы: vdemidov, Tolik

Re: перейти по заданным координатам из вне

Сообщение vdemidov » 20 окт 2015, 18:52

Смотрите исходники тестовой программки TestWMCopyData.dpr
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
Аватара пользователя
vdemidov
Гуру
 
Сообщения: 1687
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз.
Поблагодарили: 136 раз.

Re: перейти по заданным координатам из вне

Сообщение zed » 20 окт 2015, 21:41

Johnson писал(а):что попытки добавить метки из консоли надо оставить.

Зачем же сразу сдаваться? Пришлите пару патчей, отработайте пару тикетов и SAS будет вести себя так, как вам надо:
0000033: Загрузка меток через командную строку
0002519: Добавить In-Mem базу меток для хранения временных меток
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 525 раз.

Re: перейти по заданным координатам из вне

Сообщение Johnson » 20 окт 2015, 22:19

zed писал(а): Пришлите пару патчей, отработайте пару тикетов и SAS будет вести себя так, как вам надо

Я бы рад, но мне кажется, что если у меня возникают вопросы о том, в каком формате САС понимает сообщения и я не могу пока даже с этим разобраться, то мне пока рановато в разработчики :?
Johnson
Новичок
 
Сообщения: 8
Зарегистрирован: 23 сен 2015, 00:32
Благодарил (а): 4 раз.
Поблагодарили: 0 раз.

Re: перейти по заданным координатам из вне

Сообщение karat440 » 09 сен 2016, 23:35

echo писал(а):В дополнение темы, может кому пригодится: можно использовать запуск приложения с параметром
"C:\SAS.Planet\SAS.Planet.Nightly.150920.9091\SASPlanet.exe --map={F6574B06-E632-4D5F-BC75-C8FA658B57DF} --zoom=19 --move=(37.574999,55.776213)",
Тут ключ --move указывавает координаты перемещения, но пожалуй через WM_COPYDATA было бы правильнее чтоли, тут уж смотря из какого приложения.

Доброго времени суток!
Очень интересует возможность отображения меток и полигонов в САС по командам из сторонних программ и приведенный вариант ("C:\SAS.Planet\SAS.Planet."и т.д. ) вполне бы устроил если бы не открывал каждый раз новую копию программы. Т.е. это получается что-то типа ярлыка, но хотелось бы получить более подробную информацию про WM_COPYDATA, а еще лучше несколько конкретных примеров. Также во встроенном браузере САС можно копировать ярлык (sas://Placemarks/193306/Description), но насколько я понял - это и не должно было работать, или не предназначено для отображения меток и полигонов!? Или может кто подскажет/научит примером/вариантом ссылки отображения меток для САС?
К моему глубочайшему сожалению - я не программист, но есть пока только попытки. Поэтому буду признателен, если кто-то не пожалеет своего времени и поможет "чайнику" разобраться в вопросе. Спасибо.
karat440
Новичок
 
Сообщения: 1
Зарегистрирован: 19 май 2016, 22:06
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.

Re: Перейти по заданным координатам извне

Сообщение alexchuk » 14 окт 2016, 12:54

В C++ Buider 6 получилось вот так

HWND hsas = NULL;
hsas = FindWindow(NULL,"SAS.Планета160606.9420 Stable");

COPYDATASTRUCT cd;
AnsiString sTest = "Testing string";
sTest.sprintf("--move=(%.6f,%.6f)", L84*180/M_PI, B84*180/M_PI);
cd.cbData = sTest.Length() + 1;
cd.lpData = sTest.c_str();
int rr = SendMessage(hsas, WM_COPYDATA, 0 , (LPARAM) &cd);
alexchuk
Новичок
 
Сообщения: 1
Зарегистрирован: 14 окт 2016, 12:52
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Перейти по заданным координатам извне

Сообщение Agafia » 24 ноя 2017, 16:03

VBA как-то так

Код: Выделить всё
Option Compare Database
Option Explicit

Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long

Public Const WM_COPYDATA As Long = &H4A

Public Type COPYDATASTRUCT
    dwData As Long      ' передаваемые данные (0 - текс, 1 - бинарные)
    cbData As Long      ' размер(в байтах) данных, на которые ссылается lpData
    lpData As String    ' передаваемая строка, или Long — указатель на передаваемые данные, тогда StrPtr(sTest)
                        ' Long в SAS ругается, толи тире не нравиться, толи юникод
End Type


Public Function TestSAS()
    Dim sTest As String         ' передаваемая строка
    Dim hWnd As Long            ' окно в которое передаем
    Dim cd As COPYDATASTRUCT    ' смотрим выше
    Dim res As Long             ' результат выполнения (0 - ok)
   
        hWnd = FindWindow(vbNullString, "SAS.Планета 160707.9476 Stable")
       
        sTest = "--zoom=17 --move=(37.574999,55.776213)"
        cd.dwData = 0
        cd.cbData = Len(sTest) + 1
        cd.lpData = sTest
   
    res = SendMessage(hWnd, WM_COPYDATA, 0, cd)
End Function
Аватара пользователя
Agafia
Новичок
 
Сообщения: 2
Зарегистрирован: 24 ноя 2017, 15:43
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.

Пред.

Вернуться в Раздел для разработчиков программы SAS.Планета

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1