powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как открыть окно?
10 сообщений из 10, страница 1 из 1
Как открыть окно?
    #32433682
Андрей Il
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дано:
Открывается окно в Access. Определяются hwnd и имя этого окна. Затем оно закрывается. После него закрывается сам Access.

Вопросы:
1. Можно ли открыть это окно после его закрытия, имея в наличии hwnd и имя этого окна?
2. Если возможно открытие этого окна, то воспрепятствует ли это закрытию Access?
...
Рейтинг: 0 / 0
Как открыть окно?
    #32433761
Фотография # Darth Vader #
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Форумом не промазали?
...
Рейтинг: 0 / 0
Как открыть окно?
    #32433839
Андрей Il
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Форум как раз тот!!!

Решить проблему надо именно на VB!!!

Спрашиваю о проблемах, с которыми сталкиваюсь в процессе работы!!!

Если я попал не по адресу, то скажите, КУДА мне стоит обратиться за помощью???
...
Рейтинг: 0 / 0
Как открыть окно?
    #32434062
МаксимВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зная свойство object.hWnd окна и закрыв его невозможно откыть его снова ссылаясь на данное свойство, т.к. в процессе выполнения object.hWnd изменяется и у данного окна оно(свойство) будет иметь другое значение. Это я так понимаю, может я и ошибаюсь.
В MSDN написано:

hWnd Property

Returns ahandle to a form or control.

Note This property is not supported for the OLE container control.

Syntax

object.hWnd

The object placeholder represents anobject expression that evaluates to an object in the Applies To list.

Remarks

The Microsoft Windows operating environment identifies each form and control in an application by assigning it a handle, or hWnd. The hWnd property is used withWindows API calls. Many Windows operating environment functions require the hWnd of the active window as an argument.

Note Because the value of this property can change while a program is running, never store the hWnd value in a variable.
If the Windowless property of a User Control is set to True, the hWnd property will return 0.
...
Рейтинг: 0 / 0
Как открыть окно?
    #32434467
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Достаточно путанная постановка задачи. Непонятно: что там за окно? т.е. есть главное окно Access и оно потом создает еще одно окно... очень инетерсно и что же это за окно такое, откроешь нам тайну...

А пока нет достаточной информации могу пока только исправить твои представления на счет hWnd окна:
hWnd - это цифровой идентификатор, который выдается системой когда она создает это окно. Т.е. каждый раз при создании окна она может получить абсолютно любой свободный hWnd, который сочтет нужным ей дать система.
Теперь на счет открытия окна: окно создается использую winAPI функцию: CreateWindow(стиль окна, расширен. стиль окна, имя заголовка, имя класса окна, hWnd родителя, идент. процесса, и ....)

вообщем в коде программы просто идет вызов функции winAPI по созданию окна со всеми необходимыми свойствами и ПОЭТОМУ если окно не создано (было закрыто уже), то система ничего о нем не знает, она не сможет его найти и запустить и т.д.. Система может запустить токо программу, которая и создаст это окно.
Другое дело, если окно уже создано, тогда можно его найти по заголовку или классу окна, и начать им рулить даже несмотря на то что оно чужое - НО это если окно уже СОЗДАНО.

Если объяснять по простому, то представь себе, что окно - это новая машина, которая выезжает с завода, ей в ГАИ дают номер и она катается с ним пока не сломается, когда машину уничтожат, то этот номер можно выкинуть, он больше никому не нужен (в виндах этот освободившейся номер будет скорей всего использован повторно уже для другого нового окна). Естественно, если машины нет, то порулить никак не получится и все что ты можешь это попросить прислать с завода новую машину.
...
Рейтинг: 0 / 0
Как открыть окно?
    #32434540
Андрей Il
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое hwnd и что он присваивается окну системой, я знаю.
Пока окно открыто, у нас есть о нем вся информация.

Ответы исчерпывающие. Спасибо.

Тогда такой вопрос.
Можно ли, имея эту информацию, открыть это окно еще раз (пока оно не закрыто) или воспрепятствовать его закрытию???
...
Рейтинг: 0 / 0
Как открыть окно?
    #32434970
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>Можно ли, имея эту информацию, открыть это окно еще раз (пока оно не закрыто) или воспрепятствовать его закрытию???

Не совсем понятно, что значит открыть его еще раз если оно не закрыто??? что имеется ввиду?:

- окно создано, но в данный момент скрыто (Hide) и его надо показать.(Делается через ShowWindow). Кстати многие программы держат свои окна просто скрытыми, не уничтожая их, т.е. их не видно хотя они есть и в памяти висят.

- окно открыто и надо открыть еще одно, такое же, полный дубликат - невозможно, по крайне мере я о таком чуде не слышал.

На счет: воспрепятствовать его закрытию
- ситуация такая, если окно дочернее, то оно будет уничтожено тогда, когда закроется (в смысле уничтожится) родительское окно или раньше. Т.е. оставить дочернее окно после уничтожения родительского - невозможно. Если такое окно необходимо оставить висеть, то необходимо его открепить от его текущего родительского окна и прикрепить например к своему (SetParent). Если сделать это с самого начало, то чревато разными глюками, когда например родит. окно будет удивляться куда делось его дочернее окно, также это доч. окно теперь не будет принимать сообщения от своего бывшего родителя и соотв. образом реагировано, ну вообщем это окно будет напоминать потерявшегося ребенка, хорошо если ребенок весьма самостоятельный, тогда все ОК, а если нет....

Можно сделать еще хитрее: отловить событие закрытия окна дочернего окна и вместо этого тут же прикрепить его к другому родителю. Делается это через сабклассинг: мы перегружаем оконную процедуру дочернеего окна и все события передаем старой оконной процедуре, кроме одного - WM_DESTROY, а на это событие и ставим смену родителя.
...
Рейтинг: 0 / 0
Как открыть окно?
    #32435212
Андрей Il
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>На счет: воспрепятствовать его закрытию ...
1. Если такое окно необходимо оставить висеть, то необходимо его открепить от его текущего родительского окна и прикрепить например к своему (SetParent).

2. Можно сделать еще хитрее: отловить событие закрытия окна дочернего окна и вместо этого тут же прикрепить его к другому родителю.

Где можно найти примерный код описанных действий???
...
Рейтинг: 0 / 0
Как открыть окно?
    #32435237
Фотография SergeySV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Операции с окнами:
http://www.vbnet.ru/faq/showfaqgroup.asp?id=9

На счет сабклассинга, например здеся:
http://www.vbnet.ru/subscribe/showsubscribe.asp?id=7#cunning3
...
Рейтинг: 0 / 0
Как открыть окно?
    #32435924
Фотография mahoune
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А сам по себе вопрос очень смешной!
Как открыть окно? - Это надо у Петра I спросить, он мастак на руси окна распахивать!

. http://sql.ru/]mahoune
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как открыть окно?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]