2010-02-23 1 views
1

У меня есть приложение VB 6 MDI. Он реагирует на устаревшую функцию SwitchToThisWindow, но не функции ShowWindow и SetActiveWindow. Я знаю, что ShowWindow и SetActiveWindow объявлены правильно, потому что я могу использовать их с любым другим приложением.WIn32 SwitchToThisWindow, ShowWindow и SetActiveWindow

EDIT: Моя цель - не использовать эти функции, просто переключить фокус с моего приложения на приложение VB 6. Поэтому, если у вас есть альтернативные методы, я все уши.

ответ

1

SetActiveWindow будет работать только с окнами, которые прикреплены к текущему потоку, поэтому вы не можете использовать его для активации другого приложения.

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

+0

Это возвращает меня к тому же месту, что и SwitchToThisWindow. Но это не работает, когда окно сведено к минимуму. –

1

После активации родителя вам необходимо отправить WM_MDIACTIVATE message, чтобы активировать определенное дочернее окно MDI. Получение рук от ручек дочерних окон MDI должно быть сложным.

+0

Спасибо, но для меня достаточно получить родительское окно. –

+0

Вместо этого используйте SetForegroundWindow(). –

1

Вы можете определить, минимизировано ли окно с помощью IsIconic(hWnd), а затем отправить ShowWindow(hWnd, SW_RESTORE) для восстановления свернутого окна. Наконец, используйте SetForegroundWindow(hWnd), чтобы вывести окно вперед.

Вот и все, что делает для вас Карл Петерсон: excellent VB6.

0

Вы можете использовать часть кода из моего ответа здесь: Correct way (in .NET) to switch the focus to another application, просто измените объявление активного активного окна на установленную функцию окна переднего плана, вы также можете попробовать использовать различные перечисления для функции ShowWindow.

Basic 6 Определение Визуальный

Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hwnd As Long) As Long 

Visual Basic .NET Определение

Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hwnd As Integer) As Integer 

C# определение

[DllImport("user32.dll")] public static extern int SetForegroundWindow(int hwnd) 

Если ваша цель разве использовать импорт USER32.dll, то ваш довольно сильно завинчивается, потому что, поскольку ваше приложение не имеет доступа к целевому приложению, чтобы его принести в фокусе вам понадобятся окна.

АЛЬТЕРНАТИВА вы можете использовать какое-то межсистемный процесс коммуникации (ключевые слова: .NET Remoting) и код фокус сниппеты в целевой applciation, а затем из приложения просто отправить сообщение фокуса вашего второго приложения

 Смежные вопросы

  • Нет связанных вопросов^_^