Какой Windows API управляет редактированием имени файла? - PullRequest
2 голосов
/ 28 ноября 2010

Когда вы нажимаете клавишу F2 для редактирования имени файла в оболочке Windows, существует ограниченный набор понятных ключей редактирования - например, CTRL + клавиши со стрелками, Home, End, CTRL + X.Например, когда вы набираете CTRL + стрелка вправо, курсор останавливается сразу после тире, но не останавливается через точку.Настраиваются ли эти действия, и если да, то как?

Любая дополнительная информация, не имеющая прямого отношения, но которая, по вашему мнению, может помочь теме, также будет оценена.

Ответы [ 3 ]

5 голосов
/ 28 ноября 2010

Вы можете установить пользовательскую процедуру переноса слов для элемента управления редактирования, используя EM_SETWORDBREAKPROC;EditWordBreakProc - это соответствующая функция обратного вызова, которую ОС вызывает, когда нужно найти место, где происходит разрыв слова.

Из документов:

ЛибоМногострочный или однострочный элемент управления редактирования может вызывать эту функцию, когда пользователь нажимает клавиши со стрелками в сочетании с клавишей CTRL, чтобы переместить курсор на следующее слово или предыдущее слово.

Сами комбинации клавишне настраивается напрямую, и на то есть веская причина, чтобы пользовательский интерфейс был одинаковым для всех приложений.Конечно, вы могли бы создать подкласс управления правкой и обрабатывать сообщения клавиатуры самостоятельно, но я думаю, что здесь дело не в этом.

2 голосов
/ 28 ноября 2010

Под «оболочкой Windows» я предполагаю, что вы имеете в виду Windows Explorer, но ответ, вероятно, один и тот же, независимо от того, о какой программе вы говорите.

Explorer просто создает элемент управления EDIT и перемещает его в нужное положение. Поведение редактирования происходит от этого элемента управления стандартной системой, плюс любая дополнительная логическая программа Explorer, добавленная к его собственному экземпляру.

Хотя вы можете легко изменить поведение элемента управления EDIT, принадлежащего потоку, в вашем собственном процессе, для этого в другом процессе требуется глобальная перехват. Мы оговорим, что вы понимаете объем работы, необходимой для правильного выполнения глобального хука, и который будет функционировать как в среде x86, так и в среде x64.

Вы не можете напрямую вмешиваться в поведение элемента управления EDIT в другом процессе с помощью WH_CALLWNDPROC, но вы можете использовать WH_CALLWNDPROCRET для наблюдения за сообщениями клавиатуры, проверки того, что окно является элементом управления и редактирования, проверки того, что элемент управления EDIT принадлежит Explorer, а затем точно зная, как элемент управления EDIT отреагировал на это событие клавиатуры, сделайте что-нибудь дополнительное, например, резервное копирование на этот период.

Или, возможно, вы могли бы использовать хук WH_CBT для мониторинга HCBT_CREATEWND и создавать подклассы элемента управления EDIT при каждом его создании.

Усилия, вероятно, не стоят выгоды.

2 голосов
/ 28 ноября 2010

Версия для Windows имеет значение, но, как правило, это поведение встроено в SysListView32, собственный элемент управления представлением списка. Нет, работа с клавиатурой запечена. Подклассы управления технически возможны, но не практичны, поскольку они живут внутри Explorer.exe. И не имея понятия, где находится каретка внутри метки, для нее нет сообщений.

...