Страницы: 1
RSS
Как по названию принтера определить его порт и добавить значение в макрос??? помогите!!!
 
Доброго ВСЕМ времени суток. Никак не могу сообразить, как программно определить порт принтера по его "имени", или выбрать его в ЛИСТ БОКСЕ в открывшемся окне "НАСТРОЙКА", чтобы потом добавить значение (порт (Ne00:)) в макрос. У меня два принтера и надо чтобы при переходе на нужный мне лист ("таблица", "картинка") выбирался нужный принтер ("лазерный", "цветной") соответственно. Но приходится работать на разных компьютерах. И вот ПРОБЛЕМА, ИМЕНА СОВПАДАЮТ А ПОРТЫ НЕТ. ПОМОГИТЕ ПОЖАЛУЙСТА. В вложенном примере есть еще похожий вопрос с высотой и номером строки. Кто знает как это сделать, прошу помочь.
 
я это решал так:  
 
Declare Function EnumPrinters Lib "winspool.drv" Alias _  
  "EnumPrintersA" (ByVal flags As Long, ByVal name As String, _  
  ByVal Level As Long, pPrinterEnum As Long, ByVal cdBuf As Long, _  
  pcbNeeded As Long, pcReturned As Long) As Long  
 
Function getPrintersNames(ByVal sName As String, ByVal flag As Long) As Long  
 
  Dim Success As Boolean, cbRequired As Long, cbBuffer As Long  
  Dim Buffer() As Long, nEntries As Long  
  Dim i As Long, PFlags As Long, PDesc As String  
  Dim drv As String, Temp As Long  
   ReDim Buffer(0) As Long  
  cbBuffer = 2  
getPrintersNames = -1  
Success = EnumPrinters(flag, _  
                        sName, _  
                        1, _  
                        Buffer(0), _  
                        cbBuffer, _  
                        cbRequired, _  
                        nEntries)  
  If Not Success And cbRequired <> 0 Then  
        cbBuffer = cbRequired  
        ReDim Buffer(cbBuffer \ 4) As Long  
        Success = EnumPrinters(flag, _  
                            sName, _  
                            1, _  
                            Buffer(0), _  
                            cbBuffer, _  
                            cbRequired, _  
                            nEntries)  
        If Not Success Then  
           GoTo errmes  
       End If  
   Else  
       GoTo errmes  
   End If  
     
  ReDim PName(nEntries - 1) As String  
  For i = 0 To nEntries - 1  
       PName(i) = Space$(StrLen(Buffer(i * 4 + 1)))  
       Temp = PtrToStr(PName(i), Buffer(i * 4 + 1))  
  Next i  
   getPrintersNames = nEntries  
  Exit Function  
errmes:  
'              MsgBox "Error enumerating printers."  
   
End Function  
 
 
можно еще прочитать это в регистре windows, но тоже нужно api
Живи и дай жить..
 
Спасибо большое за ответ, только я не понял, как он работает. У меня ничего не получается.
Страницы: 1
Читают тему
Наверх