我正在使用 FileSystemWatcher 检查是否在监视的目录中创建了新目录。如果用户首先通过 Explorer -> Rightclick -> New Folder 创建它,则会创建一个目录“New Folder”,用户可以立即重命名该目录。不过,我在“新文件夹”上得到了 Created 事件,我可以处理。我的问题是,运行不同本地化的 Windows 机器的软件使得无法检查“新文件夹”。如何获取资源管理器以当前语言使用的新文件夹的名称。
谢谢。
我正在使用 FileSystemWatcher 检查是否在监视的目录中创建了新目录。如果用户首先通过 Explorer -> Rightclick -> New Folder 创建它,则会创建一个目录“New Folder”,用户可以立即重命名该目录。不过,我在“新文件夹”上得到了 Created 事件,我可以处理。我的问题是,运行不同本地化的 Windows 机器的软件使得无法检查“新文件夹”。如何获取资源管理器以当前语言使用的新文件夹的名称。
谢谢。
见这些:
您需要做的是发现用于“新文件夹”的字符串的“ID”......然后您可以使用LoadString
它从内部的字符串表资源中加载它Shell32.dll
。
但是,ID 不一定是稳定的,并且在 Windows 版本之间发生了变化。
例如... XP 的字符串表设置如下:
在 Windows 7 64 位...“新文件夹”字符串的 ID 为 16888。
您可以尝试 2 种不同的方法来执行此 ID 发现:
您需要编写一个实用程序,在每个英语/美国版本的 Windows(XP、Vista、Windows 7 等)上调用此函数......以找出 ID。
UINT new_folder_id = FindResourceStringId(shell_handle, L"新建文件夹", 0x409);
然后,您可以根据当前运行的 Windows 版本在使用正确 ID 的代码中进行切换。
通过在英文资源中查找“New Folder”字符串来查找其 ID。但是,这需要在系统上安装英语 MUI 语言包。
使用此 C# 代码加载给定特定 ID 的特定“字符串”。
要测试您的代码是否正常工作......您可以安装 MUI 语言包,然后尝试为不同的语言环境加载字符串。
或者,您可以SHChangeNotifyRegister
用来监听“在外壳中”所做的更改......当它执行某些操作时Explorer
调用。SHChangeNotify
在此处使用代码:
使用合适的标志,例如 SHCNRF_ShellLevel、SHCNE_MKDIR。