Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не работает GetActiveWindow 
:(
    Опции темы
Mephisto
  Дата 29.3.2004, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: 2
Всего: 34



Столкнулся со следующей проблемой:
Использую функцию WinAPI GetActiveWindow, но она возвращает hWnd только моей формы (если она активна). Вопрос: Каким образом можно узнать hWnd формы с которой работает Windows?
PM   Вверх
cardinal
Дата 30.3.2004, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



MSDN:
Цитата
GetForegroundWindow
The GetForegroundWindow function returns a handle to the foreground window (the window with which the user is currently working). The system assigns a slightly higher priority to the thread that creates the foreground window than it does to other threads.

HWND GetForegroundWindow(VOID)

Parameters
This function has no parameters.

Return Values
The return value is a handle to the foreground window.

Объявлять так:
Код
Private Declare Function GetForegroundWindow Lib "user32" () As Long

Использовать так:
Код
Dim hWndActive As Long
 
' получаешь handle на active/foreground окно
hWndActive = GetForegroundWindow()

Для того чтобы затормозить процесс, например, на 2 секунды и сделать то окно активным, от которого ты хочешь handle можешь написать что-нибудь на подобии:
Код
Dim EndTime As Date

MsgBox "Две секунды после закрытия этого окна ты получишь handle."

' ждешь две секунды
EndTime = DateAdd("s", 2, Now)
Do Until Now > EndTime
   DoEvents
Loop

Вот полный исходник:
Код
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function PostMessage Lib "user32" _
               Alias "PostMessageA" (ByVal hwnd As Long, _
                                     ByVal wMsg As Long, _
                                     ByVal wParam As Long, _
                                     ByVal lParam As Long) As Long
Private Const WM_CLOSE = &H10

Private Sub Command1_Click()
Dim hWndActive As Long
Dim EndTime As Date

MsgBox "Две секунды после закрытия этого окна ты получишь handle."

' ждешь две секунды
EndTime = DateAdd("s", 2, Now)
Do Until Now > EndTime
   DoEvents
Loop
 
' получаешь handle на active/foreground окно
hWndActive = GetForegroundWindow()

' PostMessage hWndActive, WM_CLOSE, 0, 0 ' это ответ на твой второй вопрос
End Sub



--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
Mephisto
Дата 30.3.2004, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: 2
Всего: 34



Код
PostMessage hWndActive, WM_CLOSE, 0, 0 ' это ответ на твой второй вопрос

Я так понял это корректное завершение приложения. Мея нтересовал немного другой вопрос. Завершения приложения без запроса на сохронение и.т.д. Данную прогу я хочу установить на свой комп и при помощи сокета иногда просматривать запущенные приложения через сеть. Ну естественно выгружать ненужные, если таковые будут. Для этого мне понадобится не совсем корректный выход из приложения. Но я обязательно испробую твой вариант. Его я ещё не пробовал. Спасибо, очень толково написано.
Код
EndTime = DateAdd("s", 2, Now)
Do Until Now > EndTime
  DoEvents
Loop

Чесно, еще не встречал такой записи. Прикольно.
Читал твой код поповоду асма. Просто СУПЕР.
PM   Вверх
cardinal
Дата 6.4.2004, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



тогда так:
Код
PostMessage hWndActive, WM_QUIT, 0, 0



--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0434 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.