Переключение между окнами.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Ruslan2000
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 27.09.2007 (Чт) 14:45
Откуда: Питер

Переключение между окнами.

Сообщение Ruslan2000 » 09.10.2007 (Вт) 15:59

Подскажите, пожалуйста, как можно реализовать переключение между окнами WIN XP приложений. Возможно есть какая нибудь Win Api функция которая делает активным окно заданного приложения?

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 09.10.2007 (Вт) 16:26

SetActiveWindow, SetForegroundWindow.
Подпись проходит рефакторинг

Ruslan2000
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 27.09.2007 (Чт) 14:45
Откуда: Питер

Сообщение Ruslan2000 » 12.10.2007 (Пт) 8:49

ок.спс.

Ruslan2000
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 27.09.2007 (Чт) 14:45
Откуда: Питер

Сообщение Ruslan2000 » 12.10.2007 (Пт) 13:27

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

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 12.10.2007 (Пт) 16:45

Ruslan2000
Не знаю, я в таймере написал SetForegroundWindow Me.hwnd, скомпилил, запустил. Потом запустил cmd, ессно консоль встала поверх моей проги, но через секунду (интервал у таймера был 1 секнда) снова сверху оказалась моя прога.
Но если у тя не работает, посмотри ещё функу BringWindowToTop.
Подпись проходит рефакторинг

Ruslan2000
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 27.09.2007 (Чт) 14:45
Откуда: Питер

Сообщение Ruslan2000 » 13.10.2007 (Сб) 2:16

Мне надо какраз наоборот.
Попробуй сделать так чтобы свернутое окно игры развернулось поверх твоей программы.
С BringWindowToTop тоже ничего не получается. Вероятно с некоторыми процессами все это не работает.

Пришлось изгалятся:

For ddr123 = 1 To 30
ActiveWindowHandle = GetForegroundWindow&()
wowWindowHandle = FindWindow(vbNullString, "WindowNAme")
If ActiveWindowHandle <> wowWindowHandle Then
keybd_event VK_Alt, 0, 0, 0
For xx = 0 To ddr123
keybd_event VK_TAB, 0, 0, 0
keybd_event VK_TAB, 0, KEYEVENTF_KEYUP, 0
Next
keybd_event VK_Alt, 0, KEYEVENTF_KEYUP, 0
Sleep 1000
Else
ddr123 = 31
End If
Next

Gemini
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 390
Зарегистрирован: 24.07.2002 (Ср) 14:15
Откуда: Ozersk

Сообщение Gemini » 13.10.2007 (Сб) 6:41

Я тут усебя нашел в кирпичах,посмотри:
Передаваемый параметр хендл окна которое нужно поставить в перёд всех окон.

Код: Выделить всё
Public Sub ForegroundWindow(ByVal hwnd As Long)
Dim lForeThreadID As Long
Dim lThisThreadID As Long
Dim lReturn       As Long

If hwnd <> GetForegroundWindow() Then
    If IsIconic(hwnd) Then
       Call ShowWindow(hwnd, SW_RESTORE)
    Else
        ShowWindow hwnd, SW_MINIMIZE
       Call ShowWindow(hwnd, SW_SHOW)
    End If
 
    lForeThreadID = GetWindowThreadProcessId(GetForegroundWindow, ByVal 0&)
    lThisThreadID = GetWindowThreadProcessId(hwnd, ByVal 0&)
   

    If lForeThreadID <> lThisThreadID Then
     
        Call AttachThreadInput(lForeThreadID, lThisThreadID, True)
       
        lReturn = SetForegroundWindow(hwnd)
   
        Call AttachThreadInput(lForeThreadID, lThisThreadID, False)
    Else
       lReturn = SetForegroundWindow(hwnd)
    End If
   
End If
End Sub


Ruslan2000
Новичок
Новичок
Аватара пользователя
 
Сообщения: 32
Зарегистрирован: 27.09.2007 (Чт) 14:45
Откуда: Питер

Сообщение Ruslan2000 » 20.10.2007 (Сб) 10:35

Спасибо. ShowWindow решило проблему. Просто с некоторыми программами, некоторые вин апи криво работают.


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: Google-бот и гости: 35

    TopList  
cron