:: Visual Foxpro, Foxpro for DOS
Очередь в принтере
Penner
Автор

Сообщений: 4102
Откуда: Muenster
Дата регистрации: 26.04.2002
давно пользуюсь подобным кодом

DO decl
* offset to "Jobs number" member in PRINTER_INFO_2 structure
#DEFINE cJobs_OFFSET 77
LOCAL hPrinter, lcPrinter, lcPrnInfo, lnBufsize, lnResult
lcPrinter = Getprinter()
*lcPrinter = GetPrnName()
hPrinter = 0
IF OpenPrinter(lcPrinter, @hPrinter, 0) = 0
? "Unable to retrieve printer handle"
RETURN
ENDIF
lnBufsize = 4096 && provide buffer of sufficient size
lcPrnInfo = Repli(Chr(0), lnBufsize)
lnResult = GetPrinterA(hPrinter, 2, @lcPrnInfo, lnBufsize, @lnBufsize)
IF lnResult = 0
? "Error code:", GetLastError()
ELSE
? "Number of print jobs queued:",;
buf2dword(SUBSTR(lcPrnInfo, cJobs_OFFSET,4))
ENDIF
= ClosePrinter(hPrinter)
* end of main
FUNCTION GetPrnName
* returns default printer name from Windows Registry
LOCAL lcBuffer, lcPrinter, lcDriver, lcPort
lcBuffer = Repli(Chr(0), 120)
= GetProfileString("Windows", "Device", ",,,",;
@lcBuffer, Len(lcBuffer))
lcBuffer = STRTRAN(lcBuffer, Chr(0), "")
RETURN SUBSTR(lcBuffer, 1, AT(",", lcBuffer, 1)-1)
PROCEDURE decl
DECLARE INTEGER OpenPrinter IN winspool.drv;
STRING pPrinterName, INTEGER @phPrinter, INTEGER pDefault
DECLARE INTEGER ClosePrinter IN winspool.drv INTEGER hPrinter
DECLARE INTEGER GetProfileString IN kernel32;
STRING lpApp, STRING lpKey, STRING lpDefault,;
STRING @lpReturnedString, INTEGER nSize
DECLARE INTEGER GetPrinter IN winspool.drv AS GetPrinterA;
INTEGER hPrinter, INTEGER Lvl, STRING @pPrinter,;
INTEGER cbBuf, INTEGER @pcbNeeded
DECLARE INTEGER GetLastError IN kernel32
FUNCTION buf2dword (lcBuffer)
RETURN Asc(SUBSTR(lcBuffer, 1,1)) + ;
BitLShift(Asc(SUBSTR(lcBuffer, 2,1)), 8) +;
BitLShift(Asc(SUBSTR(lcBuffer, 3,1)), 16) +;
BitLShift(Asc(SUBSTR(lcBuffer, 4,1)), 24)

все было хорошо, но клиент поставил принтбокс (такая маленькая коробка, с одной стороны подключается сеть, с другой принтер)
и сразу начались ошибки.
проверил - выдает ошибку "Error code:122"
т.е
OpenPrinter(lcPrinter, @hPrinter, 0) = 0
отрабатывает правильно, а
GetPrinterA(hPrinter, 2, @lcPrnInfo, lnBufsize, @lnBufsize)
не правильно
Что делать?




------------------
Никогда не откладывайте на завтра, то, о чем можно забыть навсегда
Ratings: 0 negative/0 positive
Re: Очередь в принтере
Nikolai Kremko

Сообщений: 576
Откуда: Минск
Дата регистрации: 30.08.2002
вроде здесь насчет буфера написано...
www.sql.ru
Ratings: 0 negative/0 positive
Re: Очередь в принтере
po2

Сообщений: 2864
Откуда: Иркутск
Дата регистрации: 22.12.2001
Проверь без использования GetPrinter(), т.е. сам впиши в переменную lcPrinter имя ресурса из сетевого окружения, сохранив порядок строчных и прописных символов.
Ratings: 0 negative/0 positive
Re: Очередь в принтере
Anatoliy Mogylevets
Ошибка 122 = ERROR_INSUFFICIENT_BUFFER

Я тоже этим кодом пользуюсь.
Ratings: 0 negative/0 positive
Re: Очередь в принтере
Penner
Автор

Сообщений: 4102
Откуда: Muenster
Дата регистрации: 26.04.2002
решение нашлось совсем не там где искал
стандартом инсталируется принтер на комп через ИМЯ принтбокса
проинсталлировал через IP - все стало работать нормально
Ratings: 0 negative/0 positive
Re: Очередь в принтере
ssa

Сообщений: 13008
Откуда: Москва
Дата регистрации: 23.03.2005
Это говорит о том, что ваш администратор немного недокрутил wins или DNS, в зависимости от того, что у вас там используется...
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 52 (Гостей: 52)

© 2000-2024 Fox Club 
Яндекс.Метрика