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

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

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

Аватара пользователя
vdemidov
Гуру
Сообщения: 1687
Зарегистрирован: 12 дек 2008, 13:10
Откуда: Киев
Благодарил (а): 191 раз
Поблагодарили: 157 раз

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

Сообщение vdemidov »

Смотрите исходники тестовой программки TestWMCopyData.dpr
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
zed
Гуру
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз
Поблагодарили: 568 раз

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

Сообщение zed »

Johnson писал(а):что попытки добавить метки из консоли надо оставить.
Зачем же сразу сдаваться? Пришлите пару патчей, отработайте пару тикетов и SAS будет вести себя так, как вам надо:
0000033: Загрузка меток через командную строку
0002519: Добавить In-Mem базу меток для хранения временных меток
Johnson
Новичок
Сообщения: 8
Зарегистрирован: 23 сен 2015, 00:32
Благодарил (а): 4 раза

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

Сообщение Johnson »

zed писал(а): Пришлите пару патчей, отработайте пару тикетов и SAS будет вести себя так, как вам надо
Я бы рад, но мне кажется, что если у меня возникают вопросы о том, в каком формате САС понимает сообщения и я не могу пока даже с этим разобраться, то мне пока рановато в разработчики :?
karat440
Новичок
Сообщения: 1
Зарегистрирован: 19 май 2016, 22:06
Благодарил (а): 1 раз

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

Сообщение karat440 »

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), но насколько я понял - это и не должно было работать, или не предназначено для отображения меток и полигонов!? Или может кто подскажет/научит примером/вариантом ссылки отображения меток для САС?
К моему глубочайшему сожалению - я не программист, но есть пока только попытки. Поэтому буду признателен, если кто-то не пожалеет своего времени и поможет "чайнику" разобраться в вопросе. Спасибо.
alexchuk
Новичок
Сообщения: 1
Зарегистрирован: 14 окт 2016, 12:52

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

Сообщение alexchuk »

В 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);
Аватара пользователя
Agafia
Новичок
Сообщения: 2
Зарегистрирован: 24 ноя 2017, 15:43
Благодарил (а): 3 раза

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

Сообщение Agafia »

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
Ответить

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