Access 2002

Целое, идентифицирующее объект в windows          


Дескриптор — это длинное целое, идентифицирующее объект в Windows. Первым аргументом функции GetWindowText является дескриптор окна, называемый также hwnd или hWnd. У всех форм, отчетов, у объекта Application, а также у некоторых элементов управления ActiveX имеется свойство hwnd, возвращающее дескриптор окна, который можно передать, например, функции GetWindowText. Обязательно считывайте значение этого свойства перед каждой передачей его подобной функции, поскольку каждый раз, когда вы закрываете и снова открываете форму, Windows присваивает ей новый дескриптор. Встроенные элементы управления Access не имеют свойства hwnd, потому что они не являются окнами — это не более чем множества пикселей, отображаемых на экране средствами Access.

После вызова функции GetWindowText управление передается библиотеке Windows API USER32.DLL. Функция ищет переданный вами дескриптор во внутренних структурах Windows и заполняет параметр IpString текстом, связанным с данным окном. Вот пример вызова этой функции:

В этом примере функция Space$ возвращает строку из 255 пробелов, за которыми следует нуль-символ. Нуль-символ (или нуль-терминатор) — это символ

с ASCII-кодом 0, он отмечает конец LPSTR-строки. Заголовок окна, который в результате может вернуть нам функция GetWi ndowText, не должен быть длиннее 255 символов. В памяти переменная strReturnedStnng выглядит так:

Как видите, строка, соответствующая переменной strReturnedStnng, располагается в памяти прямо по адресу этой переменной. Если DLL-функция запишет в эту строку слишком много данных, выйдя за пределы строки, они заменят собой данные каких-нибудь других переменных, что приведет к непредсказуемым результатам и к ошибке общей защиты.

Подготовив строку strReturnedStnng, код нашего примера вызывает функцию GetWi ndowText.

Комментарии закрыты