Получить координаты иконки на десктопе

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Получить координаты иконки на десктопе

Сообщение Williams » 10.05.2008 (Сб) 0:17

Как можно получить координаты конкретного значка на рабочем столе?

Желательно расстояние от верхнего левого края в пикселях.



Спасибо за ответ!

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 10.05.2008 (Сб) 0:23

LVM_GETITEMPOSITION
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Сообщение Williams » 10.05.2008 (Сб) 0:32

С какими системами совместим этот метод?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 10.05.2008 (Сб) 0:34

Со всеми, начиная с Windows NT 3.51 (в линейке NT) и Windows 95 (в линейке 9x), если вопрос был об операционных системах.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Сообщение Williams » 10.05.2008 (Сб) 0:37

Да, вопрос был именно в этом. Слышал что на каких-то системах он вызывает ошибки. Есть пример, желательно работоспособный под .Net?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 10.05.2008 (Сб) 0:38

Примеры под .net, работоспособные и неработоспособные, и не только примеры, но и всё остальное, имеющее отношение к .net обсуждается в другом разделе.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Сообщение Williams » 10.05.2008 (Сб) 0:41

Ладно - просто не хотел создавать отдельную, повторную тему.

Код на VB6 также подойдет.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 10.05.2008 (Сб) 0:42

Williams
Что не позволяет написать такой код самому?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Сообщение Williams » 11.05.2008 (Вс) 19:39

Хакер



Вот тут описание метода:

http://msdn.microsoft.com/en-us/library/bb761048(VS.85).aspx



Что я должен указывать в последнем параметре для получения координат?



SendMessage( Это_Понятно, LVM_GETITEMPOSITION, Индекс, НЕ_понятно )



Да, опять-таки, мне нужно .Net решение. Можете переместить тему в другой раздел.



Спасибо

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 11.05.2008 (Вс) 19:47

В качестве последнего параметра ты должен передать указатель на структуру (т.е. адрес этой структуры) POINT, в которую обработчик сообщения запишет нужные координаты.

Решение для VB6:
Код: Выделить всё
Dim ItemCoordinates As POINT       ' Не забываем об UDT "POINT".

...

' А теперь всё зависит от того, как объявлен последний аргумент
' функции SendMessage()

' Если там ByVal ... As Long, то:
SendMessage( Это_Понятно, LVM_GETITEMPOSITION, Индекс, VarPtr(ItemCoordinates))

' Если там ByRef ... As Any, то:
SendMessage( Это_Понятно, LVM_GETITEMPOSITION, Индекс, ItemCoordinates)


Теоретически возможен блэк-кодинговый трюк, заключающийся в объявлении локальных переменных ItemX и ItemY as Long, и передачи в качестве последнего параметра ByVal VarPtr(ItemX).

При этом, надо сделать всё, чтобы оптимизатор не испортил замысла. Без понимания сути, использовать не рекомендую.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Williams
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1280
Зарегистрирован: 06.05.2008 (Вт) 18:35
Откуда: System.Reflection.Williams (увидел себя в зеркале :))

Сообщение Williams » 11.05.2008 (Вс) 21:23

Хакер

пришлось существующий сишарповский код все-таки конвертировать )

Столько заморочек ради такой, казалось бы, несложной задачи, но стоило того :)


Вернуться в Visual Basic .NET

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

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

    TopList