Хендл???

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Хендл???

Сообщение Ramzes » 02.07.2004 (Пт) 0:48

Что такое хендл? :oops:

Leon_
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 333
Зарегистрирован: 19.05.2004 (Ср) 16:31
Откуда: Moscow

Сообщение Leon_ » 02.07.2004 (Пт) 7:44

Дескриптор.

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 02.07.2004 (Пт) 9:52

Уникальное 32-битное число (Long), являющееся идентификатором некоторого объекта - окна (hWnd), меню (hMenu), контекста устройства (hDC) и так далее...
Моду создают модоки, а распространяют модозвоны.

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 02.07.2004 (Пт) 11:54

И что с ним можно сделать?

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 02.07.2004 (Пт) 17:03

Обычно - управлять им. Для этого есть много функций API. Например - находишь хендл кнопки "+" на калькуляторе и изменяешь ее Caption например, на "-". Или делаешь ее неактивной (Enabled = False). Или находишь хендл меню в Internet Explorer'е и перекрашиваешь его, или добавляешь какие-нибудь картинки в подменю. Или находишь хендл "Пуска" и меняешь надпись, или не даешь ему открыться, или наоборот, постоянно держишь его открытым... Ой, да сколько примеров есть! :)

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 02.07.2004 (Пт) 17:12

А можна примерчик с коментариями.

:roll:

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 02.07.2004 (Пт) 17:43

Пример запустит калькулятор, 20 раз изменит св-во Enabled кнопки "+", отображая кол-во оставшихся смен в заголовке окна, и под конец, закроет его.

Код: Выделить всё
Private Const WM_CLOSE As Long = &H10 'Константа - сообщение "Close", которое нужно посылать окну с помощью функций SendMessage или PostMessage и нужная для его закрытия

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 'API-функция, находящая хендл окна по имени его класса или его Caption.
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long 'API-функция, находящая хендл окна, находящегося в другом окне. Не забывай, все объекты являются окнами.
Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long 'API-функция, меняющая заголовок окна
Private Declare Function EnableWindow Lib "user32" (ByVal hwnd As Long, ByVal fEnable As Long) As Long 'API-функция, делающая окно активным или неактивным
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long 'API-функция, посылающая окну некое сообщение
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'API-функция для создания паузы

Private Sub Form_Load()
Dim Wnd As Long 'Переменная для хендла окна "Калькулятор"
Dim Wnd1 As Long 'Переменная для хендла кнопки "+"
Dim I As Long 'Переменная-счетчик
Dim B As Boolean 'Переменная, хранящая свойство "Enabled" кнопки "="
Shell "calc.exe", vbNormalFocus 'Запускаем калькулятор. Здесь можно обойтись и без API
Wnd = FindWindow(vbNullString, "Калькулятор") 'Находим хендл окна
Wnd1 = FindWindowEx(Wnd, 0&, vbNullString, "+") 'Находим хендл кнопки "+"
For I = 1 To 20 '20 раз меняем ее Enabled
SetWindowText Wnd, 20 - I 'Отображаем количество оставшихся смен в заголовке окна. Наглость! :)
EnableWindow Wnd1, B 'Меняем свойство Enabled у кнопки
B = Not B 'Меняем состояние переменной
Sleep 200 'Пауза в 0.2 сек.
Next 'И еще раз
End Sub

За описаниями, объявлениями и т.п. всего, что связано с API, иди сюда.


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

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

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

    TopList