powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Автоматизировать процесс установки принтера.
11 сообщений из 11, страница 1 из 1
Автоматизировать процесс установки принтера.
    #38855872
Namik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго Вам времени суток
Уважаемые господа.

При наличии Вашего времени прошу Вас подсказать.

Есть принтер печатающий чеки. Однако инсталляционного пакета для win7 нет. Принтер приходиться устанавливать вручную, т.е. через установку нового принтера указывая папку с драйверами.

Вопрос:
можно ли подготовить setup файл на основе имеющихся драйверов, чтобы процесс установки принтера был автоматизирован ?
Если да то прошу Вас подсказать как это сделать (где, что почитать, может пример какой).

С Уважением и Благодарностью
Намик
...
Рейтинг: 0 / 0
Автоматизировать процесс установки принтера.
    #38855876
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую, Намик.

Вопрос, в общем-то, не имеет отношения к ВБ, хотя может кто-то и подскажет.
Я рекомендую вам создать дублирующую тему в windows , а здесь дать на нее ссылку.
...
Рейтинг: 0 / 0
Автоматизировать процесс установки принтера.
    #38855878
Namik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую Вас.
Понял.

Сейчас исправлю.

С Уважением и Благодарностью
Намик
...
Рейтинг: 0 / 0
Автоматизировать процесс установки принтера.
    #38855883
Namik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тема перенесена в раздел windows.

http://www.sql.ru/forum/1137369-a/avtomatizirovat-process-ustanovki-printera
...
Рейтинг: 0 / 0
Автоматизировать процесс установки принтера.
    #38856033
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Namik,

Можно, я это умею.
Но это не просто.
Вот тебе кусок кода чтоб намекнуть с чем иметь дело.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
Option Explicit

Public Enum eInstall
 Install = 0
 unInstall = 1
End Enum

Public Function PrinterMonitor(InstallTyp As eInstall) As Long
  Dim res As Long, Monitor2 As MONITOR_INFO_2
  Select Case InstallTyp
    Case 0: ' Install
      With Monitor2
        .pName = MonitorName & Chr$(0)
        .pEnvironment = "" & Chr$(0)
        If sys_x64 Then
          .pDLLName = SystemWow64Directory & "<ТвойПринтер>mon64.dll" & Chr$(0)
        Else
          .pDLLName = "<ТвойПринтер>mon.dll" & Chr$(0)
        End If
      End With
      res = AddMonitor(vbNullString, 2, Monitor2)
      If res <> 0 Then
        AddLog "  Calling AddMonitor... Done."
      Else
        AddLog "  Calling AddMonitor... Failed. Error code: " & RaiseAPIError
      End If
      PrinterMonitor = res
      Exit Function
    Case 1: ' UnInstall
      res = DeleteMonitor(vbNullString, vbNullString, MonitorName & vbNullString)
      If res <> 0 Then
        AddLog "  Calling DeleteMonitor... Done."
      Else
        AddLog "  Calling DeleteMonitor... Failed. Error code: " & RaiseAPIError
      End If
      PrinterMonitor = res
      Exit Function
    End Select
End Function

Public Function PrinterDriver(InstallTyp As eInstall) As Long
  Dim DI3 As DRIVER_INFO_3
  Dim res As Long
  
  Select Case InstallTyp
    Case 0: ' Install
      With DI3
        .pName = DriverName & vbNullString
        .cVersion = 1
        .pConfigFile = DriverDirectory & "unidrvui.dll" & vbNullString
        If sys_x64 Then 'для x64 нужен <ТвойПринтер>uni64.GPD
          .pDataFile = DriverDirectory & "<ТвойПринтер>uni64.GPD" & vbNullString
        Else 'для win32 нужен <ТвойПринтер>uni.GPD
          .pDataFile = DriverDirectory & "<ТвойПринтер>uni.GPD" & vbNullString
        End If
        .pDriverPath = DriverDirectory & "unidrv.dll" & vbNullString
        .pEnvironment = vbNullString
        .pHelpFile = DriverDirectory & "unidrv.hlp" & vbNullString
        If sys_x64 Then 'для x64 файл <ТвойПринтер>uni.dll не нужен
          .pDependentFiles = DriverDirectory & "unires.dll" & Chr$(0) & DriverDirectory & "STDNAMES.GPD" & vbNullString & vbNullString
        Else 'для win32 файл <ТвойПринтер>uni.dll нужен!!!
          .pDependentFiles = DriverDirectory & "<ТвойПринтер>uni.dll" & Chr$(0) & DriverDirectory & "unires.dll" & Chr$(0) & DriverDirectory & "STDNAMES.GPD" & vbNullString & vbNullString
        End If
        .pMonitorName = vbNullString
        .pDefaultDataType = "RAW" & vbNullString
      End With
      res = AddPrinterDriver(vbNullString, 3, DI3)
      If res <> 0 Then
        AddLog "  Calling AddPrinterDriver... Done."
      Else
        AddLog "  Calling AddPrinterDriver... Failed. Error code: " & RaiseAPIError
      End If
    Case 1: ' UnInstall
      res = DeletePrinterDriver(vbNullString, vbNullString, DriverName & vbNullString)
      If res <> 0 Then
        AddLog "  Calling DeletePrinterDriver... Done."
      Else
        AddLog "  Calling DeletePrinterDriver... Failed. Error code: " & RaiseAPIError
      End If
  End Select
  PrinterDriver = res
End Function

Public Function WindowsPrinter(InstallTyp As eInstall) As Long
  Dim res As Long, PI As PRINTER_INFO_2, pHandle As Long, pd As PRINTER_DEFAULTS
   
  Select Case InstallTyp
    Case 0: ' Install
      With PI
        .pPrinterName = PrinterName & vbNullString
        .pDriverName = DriverName & vbNullString
        .pPortName = PortName & vbNullString
        .pServerName = vbNullString
        .pComment = PrinterName & vbNullString
        .pPrintProcessor = "WinPrint" & vbNullString
        .Priority = 1
        .DefaultPriority = 1
        .pDatatype = "RAW" & vbNullString
        .AveragePPM = 0
        .cJobs = 0
        .pDevMode = 0
        .pLocation = vbNullString
        .pParameters = 0
        .pSecurityDescriptor = 0
        .pShareName = PrinterName & vbNullString
        .StartTime = 0
        .Status = 0
        .UntilTime = 0
      End With
  
      res = AddPrinter(vbNullString, 2, PI)
      If res <> 0 Then
        AddLog "  Calling AddPrinter... Done."
      Else
        AddLog "  Calling AddPrinter... Failed. Error code: " & RaiseAPIError
      End If
      If res <> 0 Then
        res = ClosePrinter(res)
      End If
      If res <> 0 Then
        AddLog "  Calling ClosePrinter... Done."
      Else
        AddLog "  Calling ClosePrinter... Failed. Error code: " & RaiseAPIError
      End If
    Case 1: ' UnInstall
      With pd
        .pDatatype = 0
        .pDevMode = 0
        .DesiredAccess = PRINTER_ALL_ACCESS
      End With
      res = OpenPrinter(PrinterName, pHandle, pd)
      If res <> 0 Then
        AddLog "  Calling OpenPrinter... Done."
      Else
        AddLog "  Calling OpenPrinter... Failed. Error code: " & RaiseAPIError
      End If
      If res <> 0 Then
        res = DeletePrinter(pHandle)
        If res <> 0 Then
          AddLog "  Calling DeletePrinter... Done."
        Else
          AddLog "  Calling DeletePrinter... Failed. Error code: " & RaiseAPIError
        End If
      End If
      If res <> 0 Then
        res = ClosePrinter(pHandle)
        If res <> 0 Then
          AddLog "  Calling ClosePrinter... Done."
        Else
          AddLog "  Calling ClosePrinter... Failed. Error code: " & RaiseAPIError
        End If
      End If
  End Select
  WindowsPrinter = res
End Function

Public Sub InstallCompletePrinter()
  WindowsPrinter unInstall
  PrinterDriver unInstall
  PrinterMonitor unInstall
    
  PrinterMonitor Install
  PrinterDriver Install
  WindowsPrinter Install
End Sub

Public Sub UnInstallCompletePrinter()
  WindowsPrinter unInstall
  PrinterDriver unInstall
  PrinterMonitor unInstall
End Sub

Т.е. устанавливается в последовательности Монитор -> Драйвер -> Принтер, удаляется в обратной последовательности.
Код пишется под конкретный принтер.
Причем предварительная укладка нужных файлов в System и DriverDirectory (а также чистка оных при удалении) - ручной код в твоей программе.
Нужные файлы это:
1) специфические файлы конкретно твоего принтера
2) системные файлы, которые в общем случае надо вытаскивать из CAB-архивов, ServicePack-ов твоей OS и т.д. -места стандартные но это надо знать. (тупой поик по всем местам с подбором наиболее свежих версий, распаковка если надо и копирование)
Все "нужные файлы" как правило перечислены в свойствах монитора и драйвера когда принтер уже установлен.
...
Рейтинг: 0 / 0
Автоматизировать процесс установки принтера.
    #38856050
Namik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые господа, я понял что это немного сложновато, и не факт что сработает и потому отказываюсь от данной затеи.

С Уважением и Благодарностью
Намик
...
Рейтинг: 0 / 0
Автоматизировать процесс установки принтера.
    #38856058
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Namik,

Если речь идет о какой-то разовой задаче, пусть даже и 50шт. надо установить, то да

>Принтер приходиться устанавливать вручную, т.е. через установку нового принтера указывая папку с драйверами

-это оптимальный вариант (тем более если умеешь ).

В моем случае - виртуальный принтер поставляемый вместе с моим продуктом, поэтому без своего красивого инсталлятора -никак.
...
Рейтинг: 0 / 0
Автоматизировать процесс установки принтера.
    #38856061
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну уж если ЭТО сложновато - то что тогда просто?
...
Рейтинг: 0 / 0
Автоматизировать процесс установки принтера.
    #38856078
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

Ну, вообще говоря жестковатая процедура.
Во-первых API с нехилыми структурами.
Во-вторых надо знать все файлы которые данный принтер использует.
Я хитрил - в проге которая устанавливала принтер (из которой я выдрал собственно нужный мне принтер) был неплохой лог, глядя на который было понятно какие API она использует и где и какие файлы в какой последовательности ищет.

А тс зачем. Ему проще пройтись по магазинам и поставить эти принтеру ручками.
...
Рейтинг: 0 / 0
Автоматизировать процесс установки принтера.
    #38856575
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Во-первых API с нехилыми структурами.
Во-вторых надо знать все файлы которые данный принтер использует.Я понимаю, пятница, вечер... но не до такой же степени!
...
Рейтинг: 0 / 0
Автоматизировать процесс установки принтера.
    #38856642
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaДмитрий77Во-первых API с нехилыми структурами.
Во-вторых надо знать все файлы которые данный принтер использует.Я понимаю, пятница, вечер... но не до такой же степени!
До какой? ты поясни
Претензии к приведенному мной коду? Я свой код писал в 2009г. под XP и с поправкой на Висту и чуть позже с поправкой на 64-битную версию принтера. Сейчас 2015. Код совместим с Win7, 8 и 8.1, я его не переписывал. От клиентов (а их у меня оч.много) ни одной претензии что что-то там не установилось не было.

Или считаешь код простеньким? (я привел только часть)
Времени потратил тогда много. При том что у меня уровень на тот момент был явно выше чем у ТС сейчас.

Принтеры разные. Если у тс есть работающая процедура ручной установки, то возможно есть более простой способ автоматизировать - какими нибудь скриптами и утилитами.
В моем случае такого способа не было.

Ко мне какие претензии?
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Автоматизировать процесс установки принтера.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]