代码之家  ›  专栏  ›  技术社区  ›  Sabuncu

哪个Windows API控制文件名编辑?

  •  2
  • Sabuncu  · 技术社区  · 14 年前

    在Windows Shell中按F2键编辑文件名时,可以理解的编辑键集是有限的,例如CTRL+箭头键、Home、End、CTRL+X。例如,当键入CTRL+右箭头时,光标将在短划线后立即停止,但不会在句点处停止。这些操作是可定制的吗?如果可以,如何定制?

    任何不直接相关但您认为可能有助于本主题的附加信息也将不胜感激。

    3 回复  |  直到 8 年前
        1
  •  5
  •   casablanca    14 年前

    您可以使用 EM_SETWORDBREAKPROC ; EditWordBreakProc 是操作系统在需要查找分词位置时调用的相应回调函数。

    从文档中:

    当用户同时按箭头键和CTRL键将插入符号移动到下一个或上一个单词时,多行或单行编辑控件都可能调用此函数。

    键组合本身不可直接定制,这是有充分理由的——这样用户体验在所有应用程序中都是统一的。当然,您可以自己对编辑控件进行子类化并处理键盘消息,但我想这不是重点。

        2
  •  2
  •   Hans Passant    14 年前

    Windows版本很重要,但通常情况下,此行为会烘焙到SysListView32(本机列表视图控件)中。不,键盘操作很难。子类化控件在技术上是可行的,但不实用,因为它位于Explorer.exe中。如果不知道插入符号在标签中的位置,就没有它的消息。

        3
  •  2
  •   Tergiver    14 年前

    我认为“WindowsShell”是指WindowsExplorer,但不管你在说什么程序,答案可能都是一样的。

    资源管理器只需创建一个编辑控件并将其移动到位。编辑行为来自这个stock系统控件,以及添加到它自己的实例中的任何额外逻辑资源管理器。

    虽然可以很容易地更改属于自己进程中某个线程的编辑控件的行为,但在另一个进程中这样做需要全局钩子。我们将规定您了解正确执行全局钩子所需的工作量,并且哪些钩子将在x86和x64环境中运行。

    在另一个带有WH_CALLWNDPROC的进程中,您不能直接干扰编辑控件的行为,但是您可以使用WH_CALLWNDPROCRET来观察键盘消息,检查窗口是否为和编辑控件,检查编辑控件是否属于资源管理器,然后准确地知道编辑控件是如何响应该键盘事件的,do像是回到那个时期。

    或者您可以使用WH_CBT钩子监视HCBT_CREATEWND,并在每次创建编辑控件时将其子类化。

    这种努力可能不值得。