我有一个C# (.NET 4) Windows作为LocalSystem运行。
它的一个功能是生成进程(也可以作为LocalSystem运行)。这些进程出现在给定会话的桌面上(如SessionID 1或SessionID 2、winlogon屏幕等)。
当以这种方式创建进程时,在进程中调用Thread.CurrentThread.CurrentUICulture总是返回'en-US',而不是返回给定会话的登录用户的区域性。
我需要一种方法来确定登录用户的区域性。我发现的最接近的东西是windows 'GetProcessPreferredUILanguages‘,我希望使用它来获取给定会话的“资源管理器”进程的语言,但我不清楚这是否是一个可行的选项。
如能提供任何协助,我们将不胜感激。提前感谢!
发布于 2015-08-14 13:48:26
从来没有这样做过,但我很好奇,所以我做了一些谷歌。你可以试试GetUserDefaultUILanguage()。
根据本文在MSDN中
当前的UI区域性是每个线程的属性.也就是说,每个线程都有自己的当前UI区域性。此属性等效于检索,或者从System.Threading.Thread.CurrentThread.CurrentUICulture Framework4.6开始设置分配给.NET属性的CultureInfo对象。启动线程时,其UI区域性最初确定如下:
还请注意这一点:
此函数只返回语言标识符。应用程序可以使用GetUserPreferredUILanguages函数检索语言名称。
发布于 2015-08-14 15:18:22
在GetUserDefaultUILanguage()块中调用WindowsIdentity.Impersonate()将返回正确的区域性信息
https://stackoverflow.com/questions/32011432
复制相似问题