СообЧа > База Знаний > Программирование > Visual Basic > Формы и элементы управления

Вопрос

Есть некая программа, которая запускается при старте системы и ее нельзя выгружать. Окно ее, даже в свернутом состоянии, бывает, мешает. Поэтому нужно спрятать его в tray.
Таким образом, программа помещается в трей со своим значком, окно прячется. Далее надо получить то, что мы имеем в .uCallbackMessage = WM_MOUSEMOVE и Private Sub Form_MouseMove, когда помещаем в трей свою программу.
Как это сделать?

Ответ

Средствами VB эти желания неосуществимы . Нужно использовать API, но как? Окошко чужое, поэтому засубклассить его функцией SetWindowLong не удастся. Нужно юзать неуловимую SetWindowLongPtr. Но не удается составить объявление этой функции для VB. Есть такая вещь, как пакет SpyWorks. Там присутствуют библиотеки, которые без проблем субклассят чцжые окна. Если не боишься сделать свою программу зависимой от библиотеки размером на 200 кб, рискуй.

Я так понимаю, что hwnd окошка ты уже знаешь. А почему бы не ставить в трей иконку твоего окна? А при активации твое окно вызывает ShowWindow (hwnd,State), где State — состояние окна. Правда, нужно будет как-то словить момент, когда чужое окошко минимизируется. Но это проблема не большая. Можно в таймере вызывать GetWindowPlacement, и когда оказывается, что окошко минимизировано, прятать его, и показывать свое окошко в трее. Артем Кривокрисенко



Copyright © 2000-2004 Сообщество Чайников
Контактная информация