Перейти по заданным координатам извне
- vdemidov
- Гуру
- Сообщения: 1687
- Зарегистрирован: 12 дек 2008, 13:10
- Откуда: Киев
- Благодарил (а): 191 раз
- Поблагодарили: 157 раз
Re: перейти по заданным координатам из вне
Смотрите исходники тестовой программки TestWMCopyData.dpr
Чтобы понять программу, вы должны стать одновременно и машиной, и программой.
-
zed
- Гуру
- Сообщения: 2888
- Зарегистрирован: 16 авг 2008, 20:21
- Благодарил (а): 89 раз
- Поблагодарили: 568 раз
Re: перейти по заданным координатам из вне
Зачем же сразу сдаваться? Пришлите пару патчей, отработайте пару тикетов и SAS будет вести себя так, как вам надо:Johnson писал(а):что попытки добавить метки из консоли надо оставить.
0000033: Загрузка меток через командную строку
0002519: Добавить In-Mem базу меток для хранения временных меток
Re: перейти по заданным координатам из вне
Я бы рад, но мне кажется, что если у меня возникают вопросы о том, в каком формате САС понимает сообщения и я не могу пока даже с этим разобраться, то мне пока рановато в разработчикиzed писал(а): Пришлите пару патчей, отработайте пару тикетов и SAS будет вести себя так, как вам надо
Re: перейти по заданным координатам из вне
Доброго времени суток!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), но насколько я понял - это и не должно было работать, или не предназначено для отображения меток и полигонов!? Или может кто подскажет/научит примером/вариантом ссылки отображения меток для САС?
К моему глубочайшему сожалению - я не программист, но есть пока только попытки. Поэтому буду признателен, если кто-то не пожалеет своего времени и поможет "чайнику" разобраться в вопросе. Спасибо.
Re: Перейти по заданным координатам извне
В 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);
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);
Re: Перейти по заданным координатам извне
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