Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Как различить какой вид дуплексной печати поддерживает принтер: ручной или автоматический?  [new]
Dimitry Timokhov
Member

Откуда: Москва
Сообщений: 71
Приветствую!

1. Как определить, есть ли вообще возможность дуплексной печати, я знаю.
Когда-то скопипастил из интернета что-то типа такого:

function IsDuplexSupported: Boolean;
var
   kDevice: array[0..1023] of Char;
   kDriver: array[0..1023] of Char;
   kPort: array[0..1023] of Char;
   kDeviceMode: THandle;
   kResult: Integer;
begin
   Printer.GetPrinter(kDevice, kDriver, kPort, kDeviceMode);
   kResult := WinSpool.DeviceCapabilities(kDevice, kPort, DC_DUPLEX, nil, nil);
   ...
   Result := kResult = 1;
end;


2. Как теперь понять, какой именно вид дуплексной печати поддерживается: ручной (когда надо самому бумажку перекладывать) или автоматический (когда принтер сам обратно бумажку засасывает)?

Спасибо!
25 фев 20, 15:58    [22086652]     Ответить | Цитировать Сообщить модератору
 Re: Как различить какой вид дуплексной печати поддерживает принтер: ручной или автоматический?  [new]
Dimitry Timokhov
Member

Откуда: Москва
Сообщений: 71
Dimitry Timokhov,

Удивительно, но интернет не знает ответ на мой вопрос.
Даже ребята с стековерфлоу не знают https://stackoverflow.com/questions/60496972/printer-duplex-printing-manual-vs-auto-how-to-detect-programmatically

Но MS Word то как-то это делает! Он же умеет понимать какой дуплекс - ручной или автоматический.

Ладно, буду копать.
4 мар 20, 11:58    [22092364]     Ответить | Цитировать Сообщить модератору
 Re: Как различить какой вид дуплексной печати поддерживает принтер: ручной или автоматический?  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 61152
Dimitry Timokhov> Но MS Word то как-то это делает! Он же умеет
Dimitry Timokhov> понимать какой дуплекс - ручной или автоматический.

А он точно это умеет ?

Posted via ActualForum NNTP Server 1.5

4 мар 20, 12:13    [22092380]     Ответить | Цитировать Сообщить модератору
 Re: Как различить какой вид дуплексной печати поддерживает принтер: ручной или автоматический?  [new]
AndyMandy
Member

Откуда: СПб
Сообщений: 196
Отрыл старый компонент, может вам поможет.

К сообщению приложен файл (temp.rar - 51Kb) cкачать
4 мар 20, 13:35    [22092518]     Ответить | Цитировать Сообщить модератору
 Re: Как различить какой вид дуплексной печати поддерживает принтер: ручной или автоматический?  [new]
Dimitry Timokhov
Member

Откуда: Москва
Сообщений: 71
Гаджимурадов Рустам,

Точно.
Где есть только ручной дуплекс, показывает два варианта:
а. Односторонняя печать.
б. Печать вручную с обеих сторон.
Где есть автоматический дуплекс, показывает варианты:
а. Односторонняя печать.
б. Print on Both sides/Flip pages on long edge
в. Print on Both sides/Flip pages on short edge
г. Печать вручную с обеих сторон.
Т.е. умеет различать возможности принтера.
5 мар 20, 08:44    [22093108]     Ответить | Цитировать Сообщить модератору
 Re: Как различить какой вид дуплексной печати поддерживает принтер: ручной или автоматический?  [new]
Dimitry Timokhov
Member

Откуда: Москва
Сообщений: 71
AndyMandy,

Спасибо.
Но, к сожалению, это аналог моего кода - т.е. Вы устанавливаете дуплекс. Но не анализируете возможности дуплекса.

Я думаю, что разработчики Word могут себе позволить реализовать эвристический анализ.
Например, знать все принтеры мира, и на основе имени принтера определять возможности дуплекса - ручной или автоматический.

Возможно напрямую в драйвер лазят как-то. Не компетентен, возможно ли это.

Похоже, что легального способа получения информации через WinAPI мир не знает.

В общем сделаю так: не буду анализировать дуплекс, буду предлагать варианты дуплекса, как будто есть автоматический дуплекс. Пользователь сам разберется.
5 мар 20, 09:25    [22093129]     Ответить | Цитировать Сообщить модератору
 Re: Как различить какой вид дуплексной печати поддерживает принтер: ручной или автоматический?  [new]
AndyMandy
Member

Откуда: СПб
Сообщений: 196
Наверно Ваш путь самый правильный.
Слазил ради интереса в FastReport в реализацию окна печати, так там тоже тупо вызывается DeviceCapabilitiesW и возвращается fwCapability.
5 мар 20, 16:25    [22093667]     Ответить | Цитировать Сообщить модератору
 Re: Как различить какой вид дуплексной печати поддерживает принтер: ручной или автоматический?  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2267
Dimitry Timokhov
Где есть только ручной дуплекс, показывает два варианта:
а. Односторонняя печать.
б. Печать вручную с обеих сторон.
Эээ.. а чем это отличается от отсутствия дуплекса? И первый и второй пункт - как раз подходят для принтера где модуля дуплекса тупо нет
5 мар 20, 21:47    [22093987]     Ответить | Цитировать Сообщить модератору
 Re: Как различить какой вид дуплексной печати поддерживает принтер: ручной или автоматический?  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 61152
Dimitry Timokhov
Похоже, что легального способа получения информации через WinAPI мир не знает.
Да, похоже слабо документировано. Хотя в .Net есть и в WMI есть...
DC_DUPLEX значения 2 и 3 точно никогда не возвращает ?
6 мар 20, 00:34    [22094070]     Ответить | Цитировать Сообщить модератору
 Re: Как различить какой вид дуплексной печати поддерживает принтер: ручной или автоматический?  [new]
Dimitry Timokhov
Member

Откуда: Москва
Сообщений: 71
Гаджимурадов Рустам,

1. Даже если и возвращает (не пробовал, хотя идея интересная), то всё равно - это недокументированная возможность, согласно:

DC_DUPLEX
If the printer supports duplex printing, the return value is 1; otherwise, the return value is zero. The pOutput parameter is not used.

отсюда https://docs.microsoft.com/en-us/windows/win32/api/wingdi/nf-wingdi-devicecapabilitiesa

2. Рустам, почему, думаете, 2 и 3 могут вообще возвращаться?

3. Что Вы имеете в виду, говоря, что "Хотя в .Net есть и в WMI есть..."?

Сообщение было отредактировано: 6 мар 20, 02:31
6 мар 20, 02:25    [22094096]     Ответить | Цитировать Сообщить модератору
 Re: Как различить какой вид дуплексной печати поддерживает принтер: ручной или автоматический?  [new]
Dimitry Timokhov
Member

Откуда: Москва
Сообщений: 71
white_nigger,

Ну, "Печать вручную с обеих сторон", это когда при печати выводится окошечко (кем-то, не мною) - переложите лист в другой лоток и нажми галочку. Возможно любой принтер так может, не знаю.
6 мар 20, 02:31    [22094098]     Ответить | Цитировать Сообщить модератору
 Re: Как различить какой вид дуплексной печати поддерживает принтер: ручной или автоматический?  [new]
Dimitry Timokhov
Member

Откуда: Москва
Сообщений: 71
Да... я не одинок в своих вопросах.
http://rsdn.org/forum/winapi/672417.1
16 лет прошло и нет ответа по сути.

Похоже, что все же легально (через WinAPI) решить вопрос нельзя.
6 мар 20, 03:11    [22094106]     Ответить | Цитировать Сообщить модератору
 Re: Как различить какой вид дуплексной печати поддерживает принтер: ручной или автоматический?  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 61152
Dimitry Timokhov> всё равно - это недокументированная возможность

Да, конечно, это было просто предположение (проверить мне всё равно не на чем).
Я бы попробовал проверять не DevCap, а DevMode - там есть соотв. параметры:
https://docs.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-devmodea

Posted via ActualForum NNTP Server 1.5

6 мар 20, 10:38    [22094266]     Ответить | Цитировать Сообщить модератору
 Re: Как различить какой вид дуплексной печати поддерживает принтер: ручной или автоматический?  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11602
white_nigger
Эээ.. а чем это отличается от отсутствия дуплекса?
Страницы автоматически печатаются через одну. После печати с одной стороны принтер приостанавливает работу и ожидает, когда ему подсунут перевернутые напечатанные листы.
6 мар 20, 15:12    [22094666]     Ответить | Цитировать Сообщить модератору
 Re: Как различить какой вид дуплексной печати поддерживает принтер: ручной или автоматический?  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2267
_Vasilisk_
Страницы автоматически печатаются через одну. После печати с одной стороны принтер приостанавливает работу и ожидает, когда ему подсунут перевернутые напечатанные листы.
Так это и без дуплекса принтер может - зависит от ПО/драйверов поставляемых с ним
6 мар 20, 23:17    [22094904]     Ответить | Цитировать Сообщить модератору
 Re: Как различить какой вид дуплексной печати поддерживает принтер: ручной или автоматический?  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2267
Надо на своем стареньком домашнем фотопринтере Pixma iP6600D поэкспериментировать. Я, к своему стыду, только на втором или третьем году эксплуатации узнал что он поддерживает двухстороннюю печать - думал что блок дуплекса надо отдельно докупать
6 мар 20, 23:21    [22094905]     Ответить | Цитировать Сообщить модератору
 Re: Как различить какой вид дуплексной печати поддерживает принтер: ручной или автоматический?  [new]
Dimitry Timokhov
Member

Откуда: Москва
Сообщений: 71
Коллеги, извиняйте.
Походу, я не прав.

1. Мой принтер таки поддерживает дуплекс, если поставить в настройках принтера в Панели управления. Да, выводит окошечко - типа страничку переложи. Я почему-то думал, что это и есть дуплекс. Это не дуплекс!
Ибо WinSpool.DeviceCapabilities(kDevice, kPort, DC_DUPLEX, nil, nil) возвращает 0!
Я реально забыл это проверить - думал, что галка в настройках сама собой даёт 1 для вызова WinSpool.DeviceCapabilities для DC_DUPLEX.
И этот дуплекс, который не дуплекс, я называл ручным.

2. А вот 1 вызов WinSpool.DeviceCapabilities для DC_DUPLEX возвращает именно на тех принтерах, где есть настоящий дуплекс, с засасыванием страницы обратно.

3. Вывод простой (но еще надо проверить у клиентов, у которых принтера как а/м стоят).
Если вызов WinSpool.DeviceCapabilities для DC_DUPLEX возвращает 1, то это и есть автоматический дуплекс.

4. Насчёт Word, который типа умеет различать ручной и автоматический дуплекс, то все просто. Т.н. ручной дуплекс просто Word делает сам программно. И Word предлагает ручной дуплекс вообще для любого принтера (т.к. реализация программная). А вот варианты автодуплекса с прошивкой по длинному или короткому краю Word предлагает для тех принтеров, которые при вызове WinSpool.DeviceCapabilities для DC_DUPLEX возвращают 1.

В общем, еще раз извиняйте.
Перемудрил я.
7 мар 20, 01:56    [22094976]     Ответить | Цитировать Сообщить модератору
 Re: Как различить какой вид дуплексной печати поддерживает принтер: ручной или автоматический?  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 61152
Dimitry Timokhov
4. Насчёт Word, который типа умеет различать ручной и автоматический дуплекс, то все просто. А вот варианты автодуплекса с прошивкой по длинному или короткому краю Word предлагает для тех принтеров, которые при вызове WinSpool.DeviceCapabilities для DC_DUPLEX возвращают 1.
Вы всё же проверьте devmode - упомянутые

б. Print on Both sides/Flip pages on long edge
в. Print on Both sides/Flip pages on short edge

как раз оттуда и берутся, AFAIU.
7 мар 20, 09:35    [22095028]     Ответить | Цитировать Сообщить модератору
 Re: Как различить какой вид дуплексной печати поддерживает принтер: ручной или автоматический?  [new]
Dimitry Timokhov
Member

Откуда: Москва
Сообщений: 71
Гаджимурадов Рустам,

Рустам, я не до конца понимаю, что имеется в виду.

Если речь про это:
автор
dmDuplex
Selects duplex or double-sided printing for printers capable of duplex printing. Following are the possible values.
TABLE 5
Value Meaning
DMDUP_SIMPLEX Normal (nonduplex) printing.
DMDUP_HORIZONTAL Short-edge binding, that is, the long edge of the page is horizontal.
DMDUP_VERTICAL Long-edge binding, that is, the long edge of the page is vertical.


отсюда https://docs.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-devmodea, то это, как я понял, для установки режима, а не проверки возможностей.

Или я не прав?
7 мар 20, 13:11    [22095133]     Ответить | Цитировать Сообщить модератору
 Re: Как различить какой вид дуплексной печати поддерживает принтер: ручной или автоматический?  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2267
Dimitry Timokhov
Или я не прав?
Прав. Специально посмотрел в исходниках винды 2000 - там в диалоге эти опции появляются если дуплекс есть. Без всяких дополнительных проверок. Тонкости могут быть на уровне драйверов производителей

Сообщение было отредактировано: 7 мар 20, 14:52
7 мар 20, 14:48    [22095166]     Ответить | Цитировать Сообщить модератору
 Re: Как различить какой вид дуплексной печати поддерживает принтер: ручной или автоматический?  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 61152
Dimitry Timokhov> то это, как я понял, для установки режима, а не проверки возможностей.

Режим (параметры) можно же не только задать, но и получить текущий.
https://docs.microsoft.com/en-us/windows/win32/printdocs/documentproperties

white_nigger> эти опции появляются если дуплекс есть.
white_nigger> Без всяких дополнительных проверок.
white_nigger> Тонкости могут быть на уровне драйверов производителей


Наверное, драйвера и устанавливают.
А ты какую конкретно функцию смотрел?

Posted via ActualForum NNTP Server 1.5

8 мар 20, 10:34    [22095362]     Ответить | Цитировать Сообщить модератору
 Re: Как различить какой вид дуплексной печати поддерживает принтер: ручной или автоматический?  [new]
Dimitry Timokhov
Member

Откуда: Москва
Сообщений: 71
white_nigger,

1. Я тоже пришел к выводу, что если есть дуплекс, то он есть автоматический и баста.
2. Звучит круто про "посмотрел в исходниках винды 2000"))) Я так не умею)

---
Всем спасибо!
15 мар 20, 16:53    [22099431]     Ответить | Цитировать Сообщить модератору
 Re: Как различить какой вид дуплексной печати поддерживает принтер: ручной или автоматический?  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1668
Dimitry Timokhov
white_nigger,
2. Звучит круто про "посмотрел в исходниках винды 2000"))) Я так не умею)

Они же слиты в сеть и гуляют там.. Можно скачать изучать)))
15 мар 20, 21:37    [22099529]     Ответить | Цитировать Сообщить модератору
 Re: Как различить какой вид дуплексной печати поддерживает принтер: ручной или автоматический?  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2267
X-Cite
Они же слиты в сеть и гуляют там.. Можно скачать изучать)))
Именно так)) Конкретно диалог настройки печати
15 мар 20, 22:49    [22099550]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить