如何获取Windows会话的当前文化

本文关键字:会话 文化 Windows 何获取 获取 | 更新日期: 2023-09-27 18:07:53

我有一个c#。作为LocalSystem运行的Windows服务。

它的一个功能是生成进程(也作为LocalSystem运行)。这些进程出现在给定会话的桌面上(例如SessionID 1或SessionID 2, winlogon屏幕等)。

当以这种方式创建进程时,调用Thread.CurrentThread。进程中的CurrentUICulture总是返回'en-US',而不是给定会话的登录用户的区域性。

我需要一种方法来确定登录用户的文化。我发现最接近的是一个windows API ' getprocesspreferreduillanguages ',我希望用它来获得给定会话的'浏览器'进程的语言,但我不清楚这是否是一个可行的选择。

感谢任何帮助。提前感谢!

如何获取Windows会话的当前文化

从来没有这样做过,但我很好奇,所以我做了一点谷歌搜索。你可以试试getuserdefaultuillanguage()。

根据这篇文章在MSDN:

当前UI区域性是每个线程的属性。也就是说,每个线程都有自己当前的UI文化。这个属性相当于检索或者从。net Framework 4.6开始,设置分配给System.Threading.Thread.CurrentThread.CurrentUICulture属性的CultureInfo对象。当一个线程启动时,它的UI区域性最初是这样确定的:

  • 如果DefaultThreadCurrentUICulture属性值不为空,则通过在线程正在执行的应用程序域中检索由该属性指定的区域性。

  • 通过调用Windows getuserdefaultulanguage函数

还要注意:

这个函数只返回一个语言标识符。应用程序可以使用getuserpreferreduillanguages函数检索语言名称。

在windowidentity . impersonate()块中调用getuserdefaultuillanguage()返回正确的文化信息