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

我正在使用FileSystemWatcher来检查是否在监视的目录中创build新的目录。 如果用户按资源pipe理器创build – >右击 – >新build文件夹,则会创build一个目录“新build文件夹”,用户可以立即进行重命名。 不过,我可以在“新build文件夹”上获得创build的事件,我可以处理。 我的问题是,运行软件不同本地化的Windows机器使得不可能检查“新build文件夹”。 如何获取当前语言中资源pipe理器使用的新文件夹的名称?

谢谢。

看到这些:

你需要做的是发现用于“新建文件夹”的字符串的“ID”….然后,您可以使用LoadStringShell32.dll的字符串表资源加载它。

但是,ID不一定是稳定的,并且在Windows版本之间已经改变。

比如… XP有如下设置的字符串表:

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

你可以尝试两种不同的方式来做这个ID发现:

1.通过在您想要支持的每个Windows版本上预先发现“New Folder”字符串的ID

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

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

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

2.在运行时动态地

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


使用这个C#代码来加载一个特定的“字符串”给定一个特定的ID。

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


或者,您可以使用SHChangeNotifyRegister来侦听“在shell中”所做的更改… Explorer在执行某些操作时会调用SHChangeNotify

使用这里的代码:

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