У меня есть приложение, которое создает отчет и отправляет его по электронной почте на имя получателя, введенное пользователем. Кроме того, мы создали слой автоматизации, чтобы можно было запланировать запуск отчета в определенное время и каждый раз отправлять электронное письмо одному и тому же получателю. Это достигается путем записи сообщений Windows, полученных в файле, и использования PostMessage для их последующего воспроизведения. Это работает без проблем при запуске вошедшего в систему пользователя, но не работает при запуске из службы, которая вошла в систему с той же учетной записью пользователя. Повторное воспроизведение адреса электронной почты получателя изменится с [email protected] на receient_name ~ domain.com.
Символ «@» в адресе электронной почты заменяется на «~», что, по моему мнению, связано с раскладкой клавиатуры, используемой при запуске из службы. Символ @ имеет код виртуальной клавиши VK_OEM_3 на английской английской клавиатуре, но на английской американской клавиатуре, который соответствует клавише под клавишей «Esc» и в сочетании со смещением дает символ «~». Это также подтверждается вызовами GetKeyboardLayout (), которые выдают 0x0809 (Великобритания (ГБ)) при запуске пользователем и 0x0409 (США (США)) при запуске службы, вошедшей в систему под той же учетной записью пользователя.
Все языковые и региональные настройки, которые я могу найти, отображаются как английский Великобритания. Где взять английскую раскладку клавиатуры США? Могу ли я заставить макет на английском Великобритании?
Представитель службы поддержки Microsoft поиграл с настройками региона / клавиатуры на рассматриваемом сервере и сумел их сбросить, поэтому учетная запись службы использовала английскую английскую клавиатуру.
Других решений пока нет …