Допустимо ли изменять lpstrFile на CDN_FILEOK через Hook для GetOpenFileName / GetSaveFileName? - PullRequest
0 голосов
/ 06 июня 2019

Допустимо ли изменять содержимое lpstrFile на CDN_FILEOK через Hook on GetOpenFileName() / GetSaveFileName()?

Причина в том, что мне может понадобиться добавить дополнительную информацию к имени файла для GetSaveFileName(). Пользователь может ввести общее имя, такое как «мой файл», и программа обрабатывает добавление информации, которую пользователь не знал бы добавить (уже является частью фильтра). Затем он проверит перезапись и задаст вопрос, можно ли перезаписать. Если нет, я могу просто использовать пользовательское поле данных, но не могу найти ссылку, если разрешено изменять содержимое lpstrFile

ТИА !!

1 Ответ

0 голосов
/ 06 июня 2019

Зависит от вашего определения действительного. Разработчики этого API не собирались делать это, но если он работает, он работает ™. Эти диалоги, вероятно, больше не изменят свой внутренний дизайн, так как у Microsoft есть достаточно проблем с совместимостью приложений в этой области, и в Vista + эти диалоги были заменены API на основе COM.

Я бы порекомендовал сохранить адрес вашего буфера в lCustData также до вызова функции Open / Save и изменять только этот буфер. Диалог теоретически может использовать свой собственный буфер в некоторых местах, и вам может не хватить места, чтобы что-то написать в них, и невозможно определить их размер.

На практике, похоже, нет проблем играть с буфером за спиной Windows. В прошлом я даже заменял реальный адрес буфера новым большим блоком памяти при реализации поддержки выбора нескольких файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...