Как активировать окно приложения, если оно уже запущено. - VB
Формулировка задачи:
Пример: Outlook Express.
Если не запущен, то запускается.
Если уже запущен, то его окно просто активируется, т.е.
1) Если свернуто, то показывается в том виде как было (normal либо max)
2) Фокус устанавливается на него.
Чтоб исключить дубликаты:
Хорошо, это работает.
А вот с восстановлением окна, если запущено.
Ну, в духе
Но этот код не совсем для этого, т.е.
1) если окно прикрыто другими, то оно наверх вылазит
НО
2) если на панели задач - там и остается
3) будучи запущенным щелчком по ярлыку, фокус в окно предыдущего экземпляра приложения не передается, а возвращается как это сказать, в папку откуда щелкнули.
Как бы этот код подправить по простому?
Есть конечно вариант послать WM_COPYDATA "предыдущему" окну, и выполнить
Но без этого никак нельзя?
Если не запущен, то запускается.
Если уже запущен, то его окно просто активируется, т.е.
1) Если свернуто, то показывается в том виде как было (normal либо max)
2) Фокус устанавливается на него.
Чтоб исключить дубликаты:
Хорошо, это работает.
А вот с восстановлением окна, если запущено.
Ну, в духе
Но этот код не совсем для этого, т.е.
1) если окно прикрыто другими, то оно наверх вылазит
НО
2) если на панели задач - там и остается
3) будучи запущенным щелчком по ярлыку, фокус в окно предыдущего экземпляра приложения не передается, а возвращается как это сказать, в папку откуда щелкнули.
Как бы этот код подправить по простому?
Есть конечно вариант послать WM_COPYDATA "предыдущему" окну, и выполнить
ТАМ
кодНо без этого никак нельзя?
Решение задачи: «Как активировать окно приложения, если оно уже запущено.»
textual
Листинг программы
Private Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hwnd As Long) As Long
Private Declare Function IsIconic Lib "user32.dll" (ByVal hwnd As Long) As Long
If App.PrevInstance Then
Dim hwndTarget As Long 'hwnd окна PrevInstance
hwndTarget = FindWindow(vbNullString, WINDOWTITLE_APP)
If hwndTarget <> 0 Then
If IsIconic(hwndTarget) Then ShowWindow hwndTarget, SW_RESTORE
SetForegroundWindow hwndTarget
End If
Exit Sub
End If
...
Form1.Show
End Sub