|
Изменение настроек принтера по-умолчанию
|
|||
---|---|---|---|
#18+
Всем доброго времени суток, суть моей проблемы вот в чем: По работе необходимо написать внешнюю программу/скрипт, который бы изменял настройки принтера (пользователи нынче пошли ленивые, не знают/могут где-что нужно переключать чтобы поменять ориентацию при печати документа). Т.о. изменяться должны настройки принтера по-умолчанию. Пробовал использовать скрипты на VBS, наподобие: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Но все свелось к: автор Unfortunately, that technique won't work. The Win32_PrinterConfiguration properties are read-only. Тогда я попробовал провернуть все через драйвер winspool.drv как указано ниже: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129.
Процедура отрабатывает корректно и при вызове с нужными параметрами изменяет ориентацию листа принтера по-умолчанию. Но только если запускать "от имени Администратора" или в среде разработки (Microsoft Visual Basic 6-Portable). Если вызывать исполнение этой программы из другой или просто запускать из директории, то ничего не происходит. В ходе дебаггинга, выяснилось что проблема в получении дексриптора принтера ( Код: vbnet 1.
): Код: vbnet 1.
При вызове не "от имени администратора", в Result возвращается 0, а в PrinterHandle соответственно не пишется дексриптор. (вот тут про функцию: http://msdn.microsoft.com/en-us/library/windows/desktop/dd162751(v=vs.85).aspx ) Что можно с этим сделать? По какой причине функция так себя ведет? Заранее спасибо! (П.С. До этого момента c VB почти не работал, поэтому большая просьба писать советы как можно подробней) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2013, 13:11 |
|
Изменение настроек принтера по-умолчанию
|
|||
---|---|---|---|
#18+
Попробуйте посмотреть в сторону команды rundll32 printui.dll,PrintUIEntry У нас была аналогичная задача, только с включением двухсторонней печати. В итоге остановились на этой команде. Предварительно принтер настраивается как нужно и сохраняются настройки в файл rundll32 printui.dll,PrintUIEntry /Ss /n "HP4515" /a "c:\temp\config.bin" d u g 8 затем перед печатью настройки восстанавливаются. rundll32 printui.dll,PrintUIEntry /Sr /n "HP4515" /a "c:\temp\config.bin" d u g 8 Из VB эту команду можно вызывать при помощи Shell (если мне не изменяет память). Но это работает если знаете имя принтера в системе. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2013, 18:35 |
|
Изменение настроек принтера по-умолчанию
|
|||
---|---|---|---|
#18+
AlexShiryaevПопробуйте посмотреть в сторону команды rundll32 printui.dll,PrintUIEntry У нас была аналогичная задача, только с включением двухсторонней печати. В итоге остановились на этой команде. Предварительно принтер настраивается как нужно и сохраняются настройки в файл rundll32 printui.dll,PrintUIEntry /Ss /n "HP4515" /a "c:\temp\config.bin" d u g 8 затем перед печатью настройки восстанавливаются. rundll32 printui.dll,PrintUIEntry /Sr /n "HP4515" /a "c:\temp\config.bin" d u g 8 Из VB эту команду можно вызывать при помощи Shell (если мне не изменяет память). Но это работает если знаете имя принтера в системе. Благодарю за совет, свою проблему я решил аналогичным способом. Подробности ниже: Вызов API из 1С: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Получение списка доступных принтеров на данном ПК: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33.
Получение настроек печати выбранного принтера: Код: plaintext 1. 2. 3. 4.
Сохраняем настройки выбранного принтера в файл Код: plaintext 1. 2. 3. 4. 5. 6.
Загрузка настроек выбранного принтера из файла: Код: plaintext 1. 2. 3. 4. 5. 6.
Не совсем понятно почему у вас были одновременно флаги "u" и "g", я оставил только "d u" - и все работает: Код: plaintext 1. 2. 3.
Возможно кому-то данная тема поможет решить аналогичную проблему в своей среде разработки. Вот еще ссылка в помощь: http://настройкапк.рф/Rundll32.exe ... |
|||
:
Нравится:
Не нравится:
|
|||
29.08.2013, 13:01 |
|
|
start [/forum/topic.php?fid=60&msg=38375758&tid=2156717]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
51ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
others: | 291ms |
total: | 427ms |
0 / 0 |