Одна интересная вещь, которую я обнаружил за это время (просто упомянул об этом на случай, если кто-то найдет этот вопрос): для многих проверенных мною элементов управления значение GWL_USERDATA
, возвращаемое GetWindowLong
, дает адрес некоторой структуры, которая имеет1003 * значение указателя со смещением 12. Таким образом, для вас может работать следующее:
IUnknown *unk = (IUnknown *)((char*)GetWindowLong( hwnd, GWL_USERDATA ) + 12);
Кажется, что многие элементы управления имеют одинаковую структуру, сохраненную по адресу, заданному GWL_USERDATA
.Может быть, это верно для всех элементов управления Visual Basic или около того?