2016-02-03 2 views
0

У меня есть приложение WPF, которое иногда запускает старые окна VB6. Эти окна VB6 скомпилированы как DLL ActiveX и запускаются «модально» из основного приложения WPF. Когда основное приложение WPF запускает окно VB6, окно VB6 передает Me.Hwnd обратно в основное приложение WPF, которое использует ITaskbarList для отображения значка на панели задач Windows. Код, аналогичный приведенному ниже, работал в течение многих лет («значение» в конечном счете - Me.Hwnd из приложения VB6).ITaskbar Метод HrInit генерирует исключение в RemoteApp

private ITaskbarList _taskbar; 
_taskbar = (ITaskbarList)new CoTaskbarList(); 
_taskbar.HrInit(); 
_taskbar.AddTab((IntPtr)value); 

Мой клиент теперь работает приложение с помощью RemoteApp и метод HrInit бросает исключение (HRESULT -2146233088/0x80131500).

Поддерживается ли поддержка ITaskbarList в RemoteApp? Есть ли лучший подход к доступу к панели задач, когда приложение работает под RemoteApp?

ответ

0

Это потому, что RemoteApp не запускает dwm/explorer.exe как оболочку, вместо этого запускает свою собственную оболочку (rdpshell.exe). Запустив dwm/explorer в качестве оболочки, вы потянете за весь рабочий стол (так что вы в основном запускаете Remote Desktop, а не RemoteApp).

Таким образом, утилиты, специфичные для DWM/explorer.exe, не работают под управлением RemoteApp (так как нет хостинговой оболочки и нет панели задач и т. Д.).

Что вы пытаетесь достичь? Предполагается ли, что приложение RemoteApp (приложение VB6) запускает другое приложение или чего вы пытаетесь достичь? Возможно, мы сможем это исправить.

+0

«Основное приложение» - это приложение WPF. Он развертывается клиентом через RemoteApp. Пользователь выбирает элемент ленты, и приложение запускает форму VB6 ActiveX. Поскольку пользователь может перемещаться между этой формой VB6 и исходным окном (или даже запускать другие окна), мы хотим, чтобы главное окно и окно VB6 отображалось на панели задач - например, если окно VB6 позади в главном окне пользователь может перенести его, нажав на панель задач. Спасибо за ваш ответ. – DFG

+0

Я думаю, что @cdavid прав, я не смог получить доступ к панели задач. Вместо этого мой код использует это выражение: Boolean isRemoteApp = System.Windows.Forms.SystemInformation.TerminalServerSession; , чтобы определить, запускается ли он с RemoteApp. Если это так, то он не пытается контролировать панель задач. Не идеально, но работает нормально для моей ситуации. – DFG