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