Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Серж
1

Как зная дескриптор чужого окна сделать его неактивным?

18.02.2008, 09:37. Просмотров 1108. Ответов 1
Метки нет (Все метки)

Подскажите пожалуйста, как зная дескриптор чужого окна сделать его неактивным (невосприимчивым к левым и правым кликам мыши и нажатием клавиш клавиатуры)?
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.02.2008, 09:37
Ответы с готовыми решениями:

Как получить снимок рабочей области окна программы зная его дескриптор?
Как получить снимок рабочей области окна программы зная его дескриптор?

Изменить тайтл окна сторонней программы, зная его дескриптор
Как изменить тайтл окна программы? Не своего приложения, а сторонней программы запущенной на...

Найти хендл чужого окна, зная его атом
как можно найти хендл чужого окна по атому??

Как найти дескриптор процесса, зная его имя?
как найти дескриптор (HANDLE) процесса, зная его имя? Добавлено через 2 часа 0 минут я не...

1
0 / 0 / 0
Регистрация: 10.01.2007
Сообщений: 11
19.02.2008, 07:17 2
Дискриптор - в смысле хэндл? Тогда попробуй поставить хук на окно. Идея следующая:

Пишем новую оконную процедуру для подопечного окна в которой и будем обрабатывать клики и нажатия клавиш

Visual Basic
1
2
3
4
5
6
7
8
9
Private Function MyHook(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
 
  Select Case uMsg
    Case WM_мышарное событие
      'можно ничего не делать - главное не возвращать управления окну
    Case Else
      'Возвращаем управление захученому окну
      MyHook= CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam)
  End Select
ставим хук на окно:

Visual Basic
1
2
3
4
Public Sub HookForm(hw As Long)
    'hw - хэндл окна, PrevProc объяви как Long в разделе деклараций
    PrevProc = SetWindowLong(hw, GWL_WNDPROC, AddressOf MyHook)
End Sub
Снимать хук:

Visual Basic
1
2
3
4
5
6
Public Sub UnHookForm(hw As Long)
    If PrevProc <> 0 Then
        SetWindowLong hw, GWL_WNDPROC, PrevProc
        PrevProc = 0
    End If
End Sub
Несколько нюансов: вся это ботва - ТОЛЬКО в теле модуля (обычного, не модуля классов). Это- простейший вариант. Дело усложняется в случае нескольких хуков на одно окно или на несколько окон. Хочешь - через SetProp действуй, хочешь - классы создавай - здесь каждый сам кто во что горазд пишет (надо признать попадаются виртуозы изрядные).
Успехов!
P.S. Константы мышиных событий:
Visual Basic
1
2
3
4
5
6
7
8
Public Const WM_LBUTTONDBLCLK = &H203
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONUP = &H202
Public Const WM_RBUTTONDBLCLK = &H206
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_RBUTTONUP = &H205
Public Const WM_NCLBUTTONUP = &HA2
Public Const WM_NCLBUTTONDOWN = &HA1
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.02.2008, 07:17

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Проверить, свёрнуто ли окно программы, зная его дескриптор
Как проверить свёрнуто ли окно программы зная его дискриптор?

Как сделать размер чужого окна больше максимального разрешения экрана
Вопрос собственно в заголовке. Вот здесь решается проблема (последнее сообщение) ...

Как взять текст из окна, зная его Handle?
К примеру я знаю хэндл (hWnd) текстового окна в любой запущенной программе. Как мне взять из неё...

Как узнать имя окна (обьекта), зная его хэндл?
Допустим, хэндл окна я узнаю так: HANDLE h=WindowFromPoint(Mouse-&gt;CursorPos); Класс так:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.