【发布时间】:2014-03-21 09:15:49
【问题描述】:
我有一个应用程序可以创建报告并将其通过电子邮件发送给用户输入的收件人姓名。最重要的是,我们构建了一个自动化层,因此可以安排报告在特定时间运行并每次通过电子邮件发送给同一收件人。这是通过将接收到的 Windows 消息记录在文件中并稍后使用 PostMessage 播放它们来实现的。这在由登录用户运行时没有问题,但在从使用相同用户帐户登录的服务启动时失败。重播收件人邮箱地址从receiver_nam@domain.com变为recipient_name~domain.com
电子邮件地址中的“@”符号被替换为“~”,我认为这是由于从服务启动时使用的键盘布局所致。 @ 符号在英语英国键盘上具有虚拟键代码 VK_OEM_3,但在英语美国键盘上对应于“Esc”键下的键,并且与 shift 结合使用“~”字符。这也得到了对 GetKeyboardLayout() 的调用的支持,当用户启动时会产生 0x0809(英国 (GB)),而当服务以相同的用户帐户登录时会产生 0x0409(美国 (US))。
我能找到的所有语言和地区设置都显示为英国英语。美式英语键盘布局可以从哪里获得?我可以将布局强制为 English UK 吗?
【问题讨论】:
标签: c++ windows service keyboard postmessage