【发布时间】:2012-01-15 23:03:17
【问题描述】:
使用 .NET Clipboard API,您可以编写以下代码:
//dataObject - instance of IDataObject, received from Clipboard
if (dataObject != null)
{
if (dataObject.GetDataPresent(DataFormats.Locale))
{
var data = dataObject.GetData(DataFormats.Locale);
var locale = AsInt(data);
if (locale.HasValue)
{
return new CultureInfo(locale.Value);
}
}
}
int? AsInt(object data); - my method which tries to read `Int32` value from `MemoryStream`
问题是为什么我总是得到en-US 语言环境,即使我的电脑的语言环境是乌克兰语?
我无法理解,我认为 Windows 操作系统在执行复制操作时会将当前语言环境信息放入剪贴板?不是吗?
UPD:如果可能的话,我需要知道剪贴板中对象的语言环境
UPD2:我的 PC 的区域设置是 uk-UA,PC 的 UI 区域设置是 en-US,FAR 管理器将一些不同的东西放到剪贴板(值 1024,它不能被识别为有效的语言环境标识符)。所以好像是Excel2010的问题。
【问题讨论】:
-
您是要获取系统当前的语言环境指定还是剪贴板内对象的语言环境?
-
剪贴板内对象的区域设置
-
只是一个想法,但问题可能出在将其放在剪贴板上的代码方面,而不是在您这边。如果剪贴板上的对象是您自己放在那里的东西(使用所需的语言环境),是否也会发生这种情况?
-
经过测试的应用程序 - Windows 记事本、MS Excel 2010。自己放数据不累
-
出于某种原因,我倾向于同样的做法,尽管上面由@M-Peror 提出,其中将信息放在剪贴板上的应用程序可能是罪魁祸首。
标签: c# .net clipboard clipboard-interaction clipboarddata