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

Wrong Keyboard Layout When Started from a Service

本文关键字:布局 错误 键盘 服务 启动      更新时间:2023-10-16

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

电子邮件地址中的"@"符号被替换为"~",我认为这是由于从服务启动时使用的键盘布局。@符号在英国英语键盘上有一个虚拟键代码VK_OEM_3,但在美国英语键盘上,对应于"Esc"键下的键,并且与shift相结合,给出了"~"字符。这也通过调用GetKeyboardLayout()得到支持,当由用户启动时产生0x0809(英国(GB)),当由登录为相同用户帐户的服务启动时产生0x0409(美国(US))。

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

一名微软客户服务代表摆弄了问题服务器上的地区/键盘设置,并设法将其重置,使服务帐户使用英语英国键盘。