从服务启动时错误的键盘布局

时间:2014-03-21 09:15:50

标签: c++ windows service keyboard postmessage

我有一个应用程序可以创建报告并通过电子邮件将其发送给用户输入的收件人姓名。除此之外,我们还构建了一个自动化层,以便可以安排报告运行特定时间并每次向同一个收件人发送电子邮件。这是通过记录文件中收到的Windows消息并使用PostMessage稍后播放来实现的。这在登录用户运行时没有问题,但是从使用相同用户帐户登录的服务启动时失败。重新播放收件人电子邮件地址会从recipient_nam@domain.com更改为recipient_name~domain.com

电子邮件地址中的“@”符号被替换为“〜”,我认为这是由于从服务启动时使用的键盘布局。 @符号在英国英国键盘上有一个虚拟键码VK_OEM_3,但在英国美国键盘上对应于'Esc'键下的键,并且与shift结合使用时,会给出'〜'字符。这也可以通过调用GetKeyboardLayout()进行备份,该调用在用户启动时产生0x0809(英国(GB)),在由作为同一用户帐户登录的服务启动时产生0x0409(美国(US))。

我能找到的所有语言和区域设置都显示为英国英国。从哪里可以获取英语美国键盘布局?我可以强制布局到英国英国吗?

1 个答案:

答案 0 :(得分:0)

Microsoft客户服务代表在相关服务器上使用区域/键盘设置,并设法重置它们,以便服务帐户使用英国英语键盘。