1

我正在使用 FileSystemWatcher 检查是否在监视的目录中创建了新目录。如果用户首先通过 Explorer -> Rightclick -> New Folder 创建它,则会创建一个目录“New Folder”,用户可以立即重命名该目录。不过,我在“新文件夹”上得到了 Created 事件,我可以处理。我的问题是,运行不同本地化的 Windows 机器的软件使得无法检查“新文件夹”。如何获取资源管理器以当前语言使用的新文件夹的名称。

谢谢。

4

1 回答 1

3

见这些:

您需要做的是发现用于“新文件夹”的字符串的“ID”......然后您可以使用LoadString它从内部的字符串表资源中加载它Shell32.dll

但是,ID 不一定是稳定的,并且在 Windows 版本之间发生了变化。

例如... XP 的字符串表设置如下:

在 Windows 7 64 位...“新文件夹”字符串的 ID 为 16888。

您可以尝试 2 种不同的方法来执行此 ID 发现:

1. 通过在您想要支持的每个版本的 Windows 上提前发现“新文件夹”字符串的 ID

您需要编写一个实用程序,在每个英语/美国版本的 Windows(XP、Vista、Windows 7 等)上调用此函数......以找出 ID。

UINT new_folder_id = FindResourceStringId(shell_handle, L"新建文件夹", 0x409);


然后,您可以根据当前运行的 Windows 版本在使用正确 ID 的代码中进行切换。

2. 运行时动态

通过在英文资源中查找“New Folder”字符串来查找其 ID。但是,这需要在系统上安装英语 MUI 语言包。


使用此 C# 代码加载给定特定 ID 的特定“字符串”。

要测试您的代码是否正常工作......您可以安装 MUI 语言包,然后尝试为不同的语言环境加载字符串。


或者,您可以SHChangeNotifyRegister用来监听“在外壳中”所做的更改......当它执行某些操作时Explorer调用。SHChangeNotify

在此处使用代码:

使用合适的标志,例如 SHCNRF_ShellLevel、SHCNE_MKDIR。

于 2013-08-22T11:22:13.750 回答