Доступ к элементу управления MS Tree через API SendMessage, вызывающий сбой приложения в Citrix Presentation Server Client - PullRequest
0 голосов
/ 22 июня 2010

Кто-нибудь имеет опыт работы с этим?

У меня есть приложение, написанное третьей стороной, которое использует вызовы API SendMessage для использования расширенных функций элемента управления Tree, поставляемых с Visual Basic 6.

Все это отлично работает (и работает в течение 3-4 лет) на рабочем столе и в Citrix 4 на Windows 2000 Server.При нашей текущей настройке Citrix 5 на Windows 2003 Server он отлично работает с консоли, но в клиенте Presentation Server;когда вызов SendMessage () используется с сообщением TVM_GETITEM или TVM_SETITEM, происходит сбой всего приложения, нет сообщений об ошибках, нет записей журнала, ничего.

Я создал среду разработки VB6 под Citrix и, когда вы проходитекод под клиентом Presentation Server, то же самое происходит и с IDE.

Обычно я ожидаю ошибку в структуре параметров, передаваемой в вызов SendMessage (), но VB6 в любом случае довольно нервный, поэтому я быЯ думал, что он будет терпеть неудачу на Windows каждый раз.Должно быть различие под клиентом Citrix.

Я не могу найти ссылку на проблему в Google, на веб-сайте Citrix и т. Д.

Любые указатели, идеи и т. Д. Приветствуются.

Ответы [ 3 ]

0 голосов
/ 24 июня 2010

Я ничего не знаю о сервере Citrix / Presentation, но один из вариантов последней возможности, который вам доступен, может состоять в том, чтобы попробовать древовидную структуру из библиотеки общих элементов управления VB5 (comctl32.ocx).

(IПредлагаю это только потому, что древовидное представление VB6 (mscomctl.ocx) не связано с «базовым» древовидным представлением общих элементов управления win32 (comctl32.dll) - это полностью настраиваемая реализация, и поэтому имеет ограниченную поддержку API древовидной структуры (не может быть отменено/ fore colors например), тогда как версия VB5 использует реальную вещь.

0 голосов
/ 14 марта 2011

Мы не нашли решения, почему это не удалось.Таким образом, код был удален и использовалась нативная функциональность элемента управления.

Кажется, что подход API был бессмысленным отклонением, поскольку древовидный контроль более чем управлял поведением изначально.

Спасибо за комментарии и помощь.

0 голосов
/ 22 июня 2010

Убедитесь, что вы получаете только TVITEM атрибуты, ограничив mask следующим образом:

    .mask = .mask And &H7F

... до звонка SendMessage. Вы не можете шлепнуть & FFFF или -1 там, потому что TVM_GET / SETITEM ожидают расширенный приемный буфер в более новых версиях общих элементов управления. Новая версия структуры переименована в TVITEMEX.

...