Как получить ручку Open Vista /SaveDialog в стиле Vista?

Я хотел бы получить дескриптор окна нового Open-SaveDialog в стиле Vista, открытого моим приложением Delphi.

Это было возможно в диалоге старого стиля путем анализа OnShow, но в диалоге нового стиля такого события нет.

Есть ли возможность, возможно, перебрать все дескрипторы окон в Windows и получить это таким образом?

Спасибо!


Изменить: я знаю, что OpenDialog.Handle будет возвращать дескриптор, но только когда диалоговое окно видно (в противном случае это 0). Мне нужно событие, чтобы поймать дескриптор сразу после показа диалога (без каких-либо действий пользователя, т. Е.: выбрать элемент в диалоговом окне, изменить тип файла и т. Д.).

2 ответа

Я хотел бы получить дескриптор окна нового Open-SaveDialog в стиле Vista, открытого моим приложением Delphi.

Это доступно через диалог Handle имущество.

Вероятно, самый простой способ отловить событие показа диалога - это использовать хук CBT, который вы установили непосредственно перед показом диалога, и удалить, как только он закроется.

TOpenDialog имеет событие OnShow, которое запускается сразу после отображения диалогового окна, поэтому вы можете использовать его для получения OpenDialog.Handle, так как дескриптор уже установлен в это время.

РЕДАКТИРОВАТЬ: После того, как некоторые люди отметили, что использование события OnShow изменяет внешний вид диалогов, я проверил это и могу подтвердить, что использование события OnShow действительно меняет апертуру диалогов.

Другие вопросы по тегам