C#/ Windows:获取“新建文件夹”的本地化默认名称

时间:2013-08-22 09:38:12

标签: c# windows directory filesystemwatcher explorer

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

感谢。

1 个答案:

答案 0 :(得分:2)

见这些:

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

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

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

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

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

1。通过在您希望支持的每个Windows版本上预先发现“新建文件夹”字符串的ID

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

UINT new_folder_id = FindResourceStringId(shell_handle,L“New Folder”,0x409);


然后,您可以在代码中使用正确的ID进行切换,具体取决于当前运行的Windows版本。

2。在运行时动态

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


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

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


或者,您可以使用Shell32.dll收听“在shell中”所做的更改... SHChangeNotifyRegister调用Explorer,当它执行某些操作时。

使用此处的代码:

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