Спинным мозгом чувствую, что пишу не туда, но все же...
Есть программа на C++/MFC, она время от времени хочет что-то печатать на принтере. Печатает она хитро: формирует RTF и дальше через shell дает команду операционной системе на печать этого документа. Операционная система запускает ту программу, кот. ассоциирована с расширением .RTF, и дает ей команду на печать, которую та с удовольствием выполняет. Если же печатать надо НЕ на принтере по умолчанию, я в программе сначала переключаю принтер по умолчанию на нужный, потом отдаю команду на печать, дожидаюсь окончания процесса и потом опять переключаю принтер по умолчанию взад. У 99% пользователей все работает.
Проблема возникает в экзотическом случае: если печатать надо не на принтере по умолчанию, и если обработчиком RTF в системе назначена "странная" программа, например, WordPad. В этом случае WordPad не видит переключения принтера по умолчанию и печатает на тот принтер, который был принтером по умолчанию до переключения.
Переключение принтера по умолчанию в системе происходит (я проверял), с MSWord и OpenOffice вся эта схема работает без проблем, а вот Wordpad (и еще несколько программ) сбоит таким вот странным образом
Пробовал ставить задержу на 10 секунд после переключения принтера — не лечит; если же прогонять эту процедуру под отладчиком, то принтер переключается нормально и WordPad после этого печатает туда, куда надо. Если в этой сессии операционной системы Wordpad хоть раз переключился нормально, то дальше он печатает документы на правильном (на том, на котором надо) принтере без проблем; после перезагрузки компьютера и принтера все возвращается на круги своя.
Никто не знает, как бороть?
А>Никто не знает, как бороть?
Разослать WM_SETTINGCHANGE не оно?
SendNotifyMessage(HWND_BROADCAST,WM_SETTINGCHANGE,...)
Здравствуйте, Carc, Вы писали:
А>>Никто не знает, как бороть?
C>Разослать WM_SETTINGCHANGE не оно?
Гм... Спасибо, попробую, но, мне кажется, не оно: Вордпад на момент смены принтера по умолчанию не запущен. То есть он этого мессажа просто не получит
Здравствуйте, ononim, Вы писали:
O>Чем переключаете дефолтовый принтер?
O>Гдето на третьем уровне медитации моя задница почуствовала вероятность того, что проблема вызвана wow64 редирекшеном реестра (если винда — 64битная то ваша софтина наверное 32хбитная, а вордпад — явно 64хбитный). Проверьте на всякий случай этот вариант. Моя задница иногда не ошибается.
Кстати — да, спасибо, о том, что это может быть вызвано 64-битностью я не подумал... Передайте. пожалуйста, мои уверения в почтении Вашей заднице