|
|
|
ПРИНТРЕР
|
|||
|---|---|---|---|
|
#18+
кто нибудь пытался получить состояние принтера (включен, выключен, нет бумаги) и т.д. третий день на месте подскажите плз. что куда в нете есть пару примеров но они не работают, в MSDN - лажа, или я что то не так делаю ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2005, 17:47 |
|
||
|
ПРИНТРЕР
|
|||
|---|---|---|---|
|
#18+
PRINTER_INFO_2 *Pr; DWORD byteNeed = 0,prCount=0; EnumPrinters(PRINTER_ENUM_CONNECTIONS|PRINTER_ENUM_LOCAL,NULL,2,NULL,0,&byteNeed,&prCount); Pr = new PRINTER_INFO_2 [byteNeed]; if(EnumPrinters(PRINTER_ENUM_CONNECTIONS|PRINTER_ENUM_LOCAL,NULL,2,(LPBYTE)Pr,byteNeed,&byteNeed,&prCount)) { printf("\n********************************************************\n"); for(int i = 0; i < prCount; ++i) { printf("Name :%s\n",Pr .pPrinterName); printf("Port :%s\n",Pr.pPortName); printf("Driver :%s\n",Pr.pDriverName); printf("Status :%d\n",Pr.Status); printf("------------------------\n"); } printf("\n********************************************************\n"); } delete Pr; или PRINTER_INFO_2 *pPrinterInfo = NULL; if (!GetPrinter(hPrinter, 2, NULL, 0, &cByteNeeded)) { if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) return FALSE; } pPrinterInfo = (PRINTER_INFO_2 *)malloc(cByteNeeded); printf("Size buffer for pPrinterInfo : %d byte\n",cByteNeeded); if (!(pPrinterInfo)) { printf("Error - alloc memory (pPrinterInfo)\n"); return FALSE; } if (!GetPrinter(hPrinter,2,(LPBYTE)pPrinterInfo,cByteNeeded,&cByteUsed)) { printf("Error - access denide to printer\n"); free(pPrinterInfo); pPrinterInfo = NULL; return FALSE; } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2005, 12:41 |
|
||
|
ПРИНТРЕР
|
|||
|---|---|---|---|
|
#18+
"PRINTER_INFO_2" .Status - всегда равен 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2005, 12:42 |
|
||
|
ПРИНТРЕР
|
|||
|---|---|---|---|
|
#18+
Ого... Уже шестой топик По-моему, это вполне нормально для Windows: выньте LPT-шнур принтера и посмотрите, что и в какой момент поменяется в папке принтеры, в принтерном окне и в свойствах принтера. Результат обескураживает: НИЧЕГО. Пока не возникнет проблем с распечаткой, Windows не сможет дать ответ, что там с принтером. Думаю, status поменяется только после "Ошибки записи в порт принтера". Об этом же говорит и то, что ко многим принтерам прилагаются программы анализа состояния, и они работают только со "своим" принтером. Т.е. копать имеет смысл только в двух направлениях - 1) по работе с программируемым интерфейсом принтера (и это глупо, т.к. придется иметь всю базу распространенных принтеров) 2) попробовать порыться в PCL-командах, м.б. там есть команды с возвратом значений (сомневаюсь). Еще вариант - экспериментировать с отсылкой документов - кинуть крупный файл, который с гарантией не уйдет в принтер за заданное время, затем отменить печать. Тогда ИМХО status может обновиться... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.05.2005, 13:40 |
|
||
|
|

start [/forum/topic.php?fid=26&tid=1513167]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
48ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
25ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 338ms |

| 0 / 0 |
