Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Про принтер вопрос
 
 автор: час   (25.04.2012 в 12:26)   личное сообщение
 
 

Как проверить программно - локальный принтер уже включили или ещё нет?
==================================
Или помогите вот отсюда выдернуть нужные строки, если таковые имеются.
http://support.microsoft.com/kb/202480/ru

  Ответить  
 
 автор: silich   (25.04.2012 в 12:36)   личное сообщение
 
 

на нём лампочка зелёненькая должна загореться или надпись - рэди
ну или через принтерную апишную библятеку, например


Option Compare Database

Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, pDefault As Any) As Long
Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
Private Declare Function PrinterProperties Lib "winspool.drv" (ByVal hwnd As Long, ByVal hPrinter As Long) As Long
Public Function prnIsLoad()
    Dim hPrinter As Long
    OpenPrinter Printer.DeviceName, hPrinter, ByVal 0&
    'PrinterProperties Me.hwnd, hPrinter
    prnIsLoad = (hPrinter <> 0)
    ClosePrinter hPrinter
End Function

  Ответить  
 
 автор: час   (25.04.2012 в 12:39)   личное сообщение
 
 

на нём лампочка зелёненькая должна загореться

Да ты чё!!!!!

  Ответить  
 
 автор: silich   (25.04.2012 в 12:40)   личное сообщение
 
 

так по твоей ссылке всё тоже самое :)) даже лучше
чё ты!

  Ответить  
 
 автор: час   (25.04.2012 в 12:41)   личное сообщение
 
 

там стока всего, шоя заплуталси........

  Ответить  
 
 автор: час   (25.04.2012 в 12:47)   личное сообщение
 
 

И кусок, что ты дал - чё та я не пойму - как проверить принтер включен или нет - лампочка горит или нет?
hPrinter <> 0 - всегда.
не зависимо включен принтер или нет.

  Ответить  
 
 автор: silich   (25.04.2012 в 16:31)   личное сообщение
 
 

я дал намёк на работать как с апи принетрным
у тебя в примере твоём по ссылке - всё есть
просто почитай

засунь весь код в модуль
посмотри процедуры и функции
все должно работать

там видел краем глаза шото типа Check статус принтера...
а в моем примере если есть принтер - он его открывает
попробуй взять другое название :)) получишь ноль

с віключением не єкспериментировал :)

  Ответить  
 
 автор: час   (25.04.2012 в 19:53)   личное сообщение
 
 

спасибо!
Это всё относится к драйверу устройства.
А сам принтер - он не досягаем типа.

  Ответить  
 
 автор: silich   (26.04.2012 в 09:51)   личное сообщение
 
 

драйвер статус девайса возвращает, вопщето
ну, может что поменялось с тех времен

  Ответить  
 
 автор: час   (26.04.2012 в 15:49)   личное сообщение
 
 


Вощем надо делать примерно так:
Посылаем что то на печать.
оно помещается в очередь.(даже если принтер не включен)
Потом черес секунд несколько - надо глянуть - напечаталося или ещё нет.
И если нет - тада сказать (спросить) А У ВАС ВСЁ С БАШКОЙ В ПОРЯДКЕ?

  Ответить  
 
 автор: k@s   (28.04.2012 в 15:40)   личное сообщение
 
 

'Может отсюда можно что то выдернуть
Option Explicit
Option Base 0

Private Const PRINTER_ENUM_LOCAL = &H2 'Принтеры, установленные на данной машине

Private Type PRINTER_INFO_5 'Структура для InfoLevel=5
pPrinterName As String 'Имя принтера (имя иконки в панели "Принтеры")
pPortName As String '"<порт>:" или "\\<сетевой адрес>" устройства
dwAttrs As Long
dwDevNotSelectedTimeout As Long
dwTransmissRetryTimeout As Long
End Type

Private Declare Function StrCopy Lib "kernel32.dll" _
Alias "lstrcpyA" _
(ByVal lpStrDst As String, lpStrSrc As Any) As Long

Private Declare Function StrLen Lib "kernel32.dll" _
Alias "lstrlenA" (lpStrSrc As Any) As Long

Private Declare Function EnumPrinters Lib "winspool.drv" _
Alias "EnumPrintersA" _
(ByVal Flags As Long, ByVal lpsPrnName As String, _
ByVal InfoLevel As Long, _
pEnumArray As Any, ByVal pEnumArraySize As Long, _
pNeededBytes As Long, pReturnedCount As Long) As Long

Function ПринтерПоУмолчанию(МаскаИмени As String, _
Optional МаскаПорта As String) As String
'Задает принтер поумолчанию на основе заданной маски его имени [и имени порта]
Dim res As Long, need As Long, cnt As Long, i As Long
Dim buf() As Long
Dim inf() As PRINTER_INFO_5

ReDim inf(0)
ReDim buf(255) 'Работаем через промежуточный 32бит-буфер
res = EnumPrinters(PRINTER_ENUM_LOCAL, vbNullString, 5, _
buf(0), (UBound(buf) + 1) * LenB(buf(0)), _
need, cnt)
If res <> 1 Then 'Буфер слишком мал - переопределяем
ReDim buf(need \ (LenB(inf(0)) \ 4))
res = EnumPrinters(PRINTER_ENUM_LOCAL, vbNullString, 5, _
buf(0), (UBound(buf) + 1) * LenB(buf(0)), _
need, cnt)
End If

If res = 1 Then 'Переносим содержимое буфера в массив структур
If cnt > 0 Then 'Количество принтеров в системе
ReDim inf(cnt - 1) 'Резервируем массив структур

For i = 0 To cnt - 1 'Переносим только строки
inf(i).pPrinterName = Space(StrLen(ByVal buf(5 * i)))
Call StrCopy(inf(i).pPrinterName, ByVal buf(5 * i))
inf(i).pPortName = Space(StrLen(ByVal buf(5 * i + 1)))
Call StrCopy(inf(i).pPortName, ByVal buf(5 * i + 1))
Next i
Else
Exit Function 'Нет установленных принтеров на данном компьютере
End If
Else
Exit Function 'Ошибка вызова EnumPrinters()
End If

For i = LBound(inf) To UBound(inf)
If UCase(inf(i).pPrinterName) Like UCase(МаскаИмени) Then
If IsMissing(МаскаПорта) Or Len(МаскаПорта) = 0 Then
ПринтерПоУмолчанию = inf(i).pPrinterName & _
" (" & inf(i).pPortName & ")"
Exit For
Else 'Поиск по двум маскам
If UCase(inf(i).pPortName) Like UCase(МаскаПорта) Then
ПринтерПоУмолчанию = inf(i).pPrinterName & _
" (" & inf(i).pPortName & ")"
Exit For
End If
End If
End If
Next i

'Возвращает "<имя> (<порт>:)", "<имя> (\\<сетевой адрес>)",
'Или пустую строку
End Function

там циклом For i = LBound(inf) To UBound(inf) идет перебор всех твоих принтеров, которые вернул API-вызов

в экселе так: (нужно по дефолту проставить сетевой HP 5Si Mx PS, если он привязан на клиенте):

Application.ActivePrinter =ПринтерПоУмолчанию("*5Si*")

  Ответить  
 
 автор: час   (28.04.2012 в 21:57)   личное сообщение
 
 

спасибо!
Может быть.
Но я такой тупой, шо не знаю что дёргать.
И не вижу ничё подходящего.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList