Возможно ли узнать какой документ последний раз печатался? - VB

Узнай цену своей работы

Формулировка задачи:

Есть сетевой принтер. Возможно ли узнать какой документ последний раз печатался? С компьютера на котором подключен принтер. А может есть полная статистика в каком либо INI файле? Скажите пожалуйста. Огромное спасибо.

Решение задачи: «Возможно ли узнать какой документ последний раз печатался?»

textual
Листинг программы
  1. 'Module1
  2. Option Explicit
  3. '==========================
  4. 'Printers Jobs
  5. '
  6. 'VisualSoft
  7. '©2005, Konst Popov
  8. '==========================
  9. Public Const CCHDEVICENAME = 32
  10. Public Const CCHFORMNAME = 32
  11. Public Const PRINTER_ACCESS_ADMINISTER = &H4
  12. Public Const PRINTER_ACCESS_USE = &H8
  13. Public Type DEVMODE
  14.     dmDeviceName As String * CCHDEVICENAME
  15.     dmSpecVersion As Integer
  16.     dmDriverVersion As Integer
  17.     dmSize As Integer
  18.     dmDriverExtra As Integer
  19.     dmFields As Long
  20.     dmOrientation As Integer
  21.     dmPaperSize As Integer
  22.     dmPaperLength As Integer
  23.     dmPaperWidth As Integer
  24.     dmScale As Integer
  25.     dmCopies As Integer
  26.     dmDefaultSource As Integer
  27.     dmPrintQuality As Integer
  28.     dmColor As Integer
  29.     dmDuplex As Integer
  30.     dmYResolution As Integer
  31.     dmTTOption As Integer
  32.     dmCollate As Integer
  33.     dmFormName As String * CCHFORMNAME
  34.     dmUnusedPadding As Integer
  35.     dmBitsPerPel As Long
  36.     dmPelsWidth As Long
  37.     dmPelsHeight As Long
  38.     dmDisplayFlags As Long
  39.     dmDisplayFrequency As Long
  40. End Type
  41. Public Type PRINTER_DEFAULTS
  42.     pDatatype As String
  43.     pDevMode As DEVMODE
  44.     DesiredAccess As Long
  45. End Type
  46. Public Type SYSTEMTIME
  47.     wYear As Integer
  48.     wMonth As Integer
  49.     wDayOfWeek As Integer
  50.     wDay As Integer
  51.     wHour As Integer
  52.     wMinute As Integer
  53.     wSecond As Integer
  54.     wMilliseconds As Integer
  55. End Type
  56. Public Type JOB_INFO_1_API
  57.     JobId As Long
  58.     pPrinterName As Long
  59.     pMachineName As Long
  60.     pUserName As Long
  61.     pDocument As Long
  62.     pDatatype As Long
  63.     pStatus As Long
  64.     Status As Long
  65.     Priority As Long
  66.     Position As Long
  67.     TotalPages As Long
  68.     PagesPrinted As Long
  69.     Submitted As SYSTEMTIME
  70. End Type
  71. Public Type JOB_INFO_1
  72.     JobId As Long
  73.     pPrinterName As String
  74.     pMachineName As String
  75.     pUserName As String
  76.     pDocument As String
  77.     pDatatype As String
  78.     pStatus As String
  79.     Status As Long
  80.     Priority As Long
  81.     Position As Long
  82.     TotalPages As Long
  83.     PagesPrinted As Long
  84.     Submitted As SYSTEMTIME
  85. End Type
  86. Public Declare Function OpenPrinter Lib 'winspool.drv' Alias 'OpenPrinterA' (ByVal pPrinterName As String, phPrinter As Long, pDefault As PRINTER_DEFAULTS) As Long
  87. Public Declare Function EnumJobs Lib 'winspool.drv' Alias 'EnumJobsA' (ByVal HPrinter As Long, ByVal FirstJob As Long, ByVal NoJobs As Long, ByVal Level As Long, ByVal pJob As Long, ByVal cdBuf As Long, pcbNeeded As Long, pcReturned As Long) As Long
  88. Private Declare Sub CopyMem Lib 'kernel32.dll' Alias 'RtlMoveMemory' (pTo As Any, uFrom As Any, ByVal lSize As Long)
  89. Public Declare Function CloseHandle Lib 'kernel32.dll' (ByVal hObject As Long) As Long
  90. Private Declare Function lstrlenW Lib 'kernel32.dll' (ByVal lpString As Long) As Long
  91. Private Declare Function HeapAlloc Lib 'kernel32.dll' (ByVal hHeap As Long, ByVal dwFlags As Long, ByVal dwBytes As Long) As Long
  92. Private Declare Function GetProcessHeap Lib 'kernel32.dll' () As Long
  93. Private Declare Function HeapFree Lib 'kernel32.dll' (ByVal hHeap As Long, ByVal dwFlags As Long, lpMem As Any) As Long
  94. '
  95. Public JobsDesc(0 To 127) As JOB_INFO_1
  96. '
  97.  
  98. Public Function TrimStr(strName As String) As String
  99. 'Finds a null then trims the string
  100. Dim x As Integer
  101.     x = InStr(strName, vbNullChar)
  102.     If x > 0 Then TrimStr = Left(strName, x - 1) Else TrimStr = strName
  103. End Function
  104.  
  105. Function LPSTRtoSTRING(ByVal lngPointer As Long) As String  _Name = 'Form1'
  106. Attribute VB_GlobalNameSpace = False
  107. Attribute VB_Creatable = False
  108. Attribute VB_PredeclaredId = True
  109. Attribute VB_Exposed = False
  110. Option Explicit
  111.  
  112. Private Sub chkStart_Click()
  113.     If Me.chkStart.Value = vbChecked Then
  114.         Me.Timer1.Enabled = True
  115.     Else
  116.         Me.Timer1.Enabled = False
  117.     End If
  118. End Sub
  119.  
  120. Private Sub Command1_Click()
  121. Dim i As Integer
  122.  
  123.     i = GetPrinterQueue(Me.Combo1.Text)
  124.     'MsgBox 'Количество запущенных заданий: ' & i
  125.    
  126.     If i > 0 Then
  127.        
  128.         Me.txtOut.Text = 'Кол-во заданий: ' & i & vbCrLf & vbCrLf
  129.    
  130.         For i = 0 To 127
  131.             If JobsDesc(i).JobId > 0 Then
  132.             With Me.txtOut
  133.                 .SelText = 'JobID=' & JobsDesc(i).JobId & vbCrLf
  134.                .SelText = 'Document=' & JobsDesc(i).pDocument & vbCrLf
  135.                .SelText = 'MachineName=' & JobsDesc(i).pMachineName & vbCrLf
  136.                .SelText = 'UserName=' & JobsDesc(i).pUserName & vbCrLf
  137.                .SelText = 'TotalPages=' & JobsDesc(i).TotalPages & vbCrLf
  138.                .SelText = vbCrLf
  139.             End With
  140.             End If
  141.         Next i
  142.        
  143.     End If
  144.    
  145. End Sub
  146.  
  147. Private Sub Form_Load()
  148. Dim prn As Printer
  149.  
  150.     Me.Combo1.Clear
  151.     For Each prn In VB.Printers
  152.         Me.Combo1.AddItem prn.DeviceName
  153.     Next prn
  154.     If Me.Combo1.ListCount > 0 Then
  155.         Me.Combo1.ListIndex = 0
  156.     End If
  157.    
  158. End Sub
  159.  
  160. Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  161.     Me.Timer1.Enabled = False
  162. End Sub
  163.  
  164. Private Sub Timer1_Timer()
  165.     Command1_Click
  166. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы