• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Kiểm tra tình trạng hoạt động của máy in

Các ví dụ nho nhỏ và những thứ linh tinh không thuộc nhóm nào
Hình đại diện của người dùng
vietteiv
Quản trị
Quản trị
Bài viết: 1323
Ngày tham gia: T.Bảy 10/02/2007 12:17 am
Đến từ: Cung cấp giải pháp quản lý doanh nghiệp, dự án, tư vấn xây dựng
Has thanked: 6 time
Been thanked: 71 time
Liên hệ:

Kiểm tra tình trạng hoạt động của máy in

Gửi bàigửi bởi vietteiv » T.Bảy 18/09/2010 11:37 am

Tên chương trình: Kiểm tra tình trạng hoạt động của máy in
Ngôn ngữ lập trình: VB6
Tác giả: Sưu tầm
Chức năng:



khai báo hàm sử dụng trong module
  1. Option Explicit
  2.  
  3. 'Constants Definition
  4. Public Const CCHDEVICENAME = 32
  5. Public Const CCHFORMNAME = 32
  6. Public Const PRINTER_ACCESS_ADMINISTER = &H4
  7. Public Const PRINTER_ACCESS_USE = &H8
  8.  
  9. 'Types Definition
  10. Public Type DEVMODE
  11.   dmDeviceName As String * CCHDEVICENAME
  12.   dmSpecVersion As Integer
  13.   dmDriverVersion As Integer
  14.   dmSize As Integer
  15.   dmDriverExtra As Integer
  16.   dmFields As Long
  17.   dmOrientation As Integer
  18.   dmPaperSize As Integer
  19.   dmPaperLength As Integer
  20.   dmPaperWidth As Integer
  21.   dmScale As Integer
  22.   dmCopies As Integer
  23.   dmDefaultSource As Integer
  24.   dmPrintQuality As Integer
  25.   dmColor As Integer
  26.   dmDuplex As Integer
  27.   dmYResolution As Integer
  28.   dmTTOption As Integer
  29.   dmCollate As Integer
  30.   dmFormName As String * CCHFORMNAME
  31.   dmUnusedPadding As Integer
  32.   dmBitsPerPel As Long
  33.   dmPelsWidth As Long
  34.   dmPelsHeight As Long
  35.   dmDisplayFlags As Long
  36.   dmDisplayFrequency As Long
  37. End Type
  38.  
  39. Public Type PRINTER_DEFAULTS
  40.   pDatatype As String
  41.   pDevMode As DEVMODE
  42.   DesiredAccess As Long
  43. End Type
  44.  
  45. Public Type SYSTEMTIME
  46.   wYear As Integer
  47.   wMonth As Integer
  48.   wDayOfWeek As Integer
  49.   wDay As Integer
  50.   wHour As Integer
  51.   wMinute As Integer
  52.   wSecond As Integer
  53.   wMilliseconds As Integer
  54. End Type
  55.  
  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.  
  72. Public Type JOB_INFO_1
  73.   JobId As Long
  74.   pPrinterName As String
  75.   pMachineName As String
  76.   pUserName As String
  77.   pDocument As String
  78.   pDatatype As String
  79.   pStatus As String
  80.   Status As Long
  81.   Priority As Long
  82.   Position As Long
  83.   TotalPages As Long
  84.   PagesPrinted As Long
  85.   Submitted As SYSTEMTIME
  86. End Type
  87.  
  88. 'API Declarations
  89. Public Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, pDefault As PRINTER_DEFAULTS) As Long
  90. 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
  91. Public Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
  92.  
  93. Private Declare Sub CopyMem Lib "kernel32.dll" Alias "RtlMoveMemory" (pTo As Any, uFrom As Any, ByVal lSize As Long)
  94. Private Declare Function lstrlenW Lib "kernel32.dll" (ByVal lpString As Long) As Long
  95.  
  96. Private Declare Function HeapAlloc Lib "kernel32.dll" (ByVal hHeap As Long, ByVal dwFlags As Long, ByVal dwBytes As Long) As Long
  97. Private Declare Function GetProcessHeap Lib "kernel32.dll" () As Long
  98. Private Declare Function HeapFree Lib "kernel32.dll" (ByVal hHeap As Long, ByVal dwFlags As Long, lpMem As Any) As Long
  99.  
  100. 'Public structure filled by GetPrinterQueue with all the documents data in the selected printer queue
  101. Public JobsDesc(0 To 127) As JOB_INFO_1
  102.  
  103. Public Function TrimStr(strName As String) As String
  104.   'Finds a null then trims the string
  105.  Dim x As Integer
  106.  
  107.   x = InStr(strName, vbNullChar)
  108.   If x > 0 Then TrimStr = Left(strName, x - 1) Else TrimStr = strName
  109. End Function
  110.  
  111. Function LPSTRtoSTRING(ByVal lngPointer As Long) As String
  112.   Dim lngLength As Long
  113.  
  114.   'Get number of characters in string
  115.  lngLength = lstrlenW(lngPointer) * 2
  116.   'Initialize string so we have something to copy the string into
  117.  LPSTRtoSTRING = String(lngLength, 0)
  118.   'Copy the string
  119.  CopyMem ByVal StrPtr(LPSTRtoSTRING), ByVal lngPointer, lngLength
  120.   'Convert to Unicode
  121.  LPSTRtoSTRING = TrimStr(StrConv(LPSTRtoSTRING, vbUnicode))
  122. End Function
  123.  
  124. 'Get the number of Jobs in the specified Printer Queue (max 128)... the PrinterName can be a network path: "\MYSERVER\MYPRINTER"
  125. Function GetPrinterQueue(PrinterName As String) As Long
  126.   Dim PrinterStruct As PRINTER_DEFAULTS
  127.   Dim HPrinter As Long
  128.   Dim ret As Boolean
  129.   Dim Jobs(0 To 127) As JOB_INFO_1_API
  130.   Dim pcbNeeded As Long
  131.   Dim pcReturned As Long
  132.   Dim i As Integer
  133.   Dim TempBuff As Long
  134.  
  135.   'Initialize the Printer structure
  136.  PrinterStruct.pDatatype = vbNullString
  137.   PrinterStruct.pDevMode.dmSize = Len(PrinterStruct.pDevMode)
  138.   PrinterStruct.DesiredAccess = PRINTER_ACCESS_USE
  139.   'Get the printer Handle
  140.  ret = OpenPrinter(PrinterName, HPrinter, PrinterStruct)
  141.   'Get the Printer active jobs
  142.  ret = EnumJobs(HPrinter, 0, 127, 1, TempBuff, 0, pcbNeeded, pcReturned)
  143.   If pcbNeeded = 0 Then
  144.     GetPrinterQueue = 0
  145.   Else
  146.     'Allocate the Buffer
  147.    TempBuff = HeapAlloc(GetProcessHeap(), 0, pcbNeeded)
  148.     ret = EnumJobs(HPrinter, 0, 127, 1, TempBuff, pcbNeeded, pcbNeeded, pcReturned)
  149.     CopyMem Jobs(0), ByVal TempBuff, pcbNeeded
  150.     For i = 0 To pcReturned - 1
  151.       JobsDesc(i).pPrinterName = LPSTRtoSTRING(Jobs(i).pPrinterName)
  152.       JobsDesc(i).pMachineName = LPSTRtoSTRING(Jobs(i).pMachineName)
  153.       JobsDesc(i).pUserName = LPSTRtoSTRING(Jobs(i).pUserName)
  154.       JobsDesc(i).pDocument = LPSTRtoSTRING(Jobs(i).pDocument)
  155.       JobsDesc(i).pDatatype = LPSTRtoSTRING(Jobs(i).pDatatype)
  156.       JobsDesc(i).pStatus = LPSTRtoSTRING(Jobs(i).pStatus)
  157.       JobsDesc(i).JobId = Jobs(i).JobId
  158.       JobsDesc(i).Status = Jobs(i).Status
  159.       JobsDesc(i).Priority = Jobs(i).Priority
  160.       JobsDesc(i).Position = Jobs(i).Position
  161.       JobsDesc(i).TotalPages = Jobs(i).TotalPages
  162.       JobsDesc(i).PagesPrinted = Jobs(i).PagesPrinted
  163.       JobsDesc(i).Submitted = Jobs(i).Submitted
  164.     Next
  165.     If TempBuff Then HeapFree GetProcessHeap(), 0, TempBuff
  166.     GetPrinterQueue = pcReturned
  167.   End If
  168.   'Close printer
  169.  ret = CloseHandle(HPrinter)
  170. End Function
  171.  


liệt kê các máy in đang hoạt động
  1. Private Sub Command1_Click()
  2.     Dim i As Long
  3.     Dim sPrintername As String
  4.    
  5.     i = 0
  6.     sPrintername = "HP LaserJet1020"
  7.     List1.Clear
  8.     If GetPrinterQueue(Printer.DeviceName) > 0 Then
  9.     'If GetPrinterQueue(sPrintername) > 0 Then
  10.        With List1
  11.             .AddItem "-------------------------------------------"
  12.             .AddItem "Printer name: " & JobsDesc(i).pPrinterName
  13.             .AddItem "Machine name: " & JobsDesc(i).pMachineName
  14.             .AddItem "User name: " & JobsDesc(i).pUserName
  15.             .AddItem "Document name: " & JobsDesc(i).pDocument
  16.             .AddItem "Document type: " & JobsDesc(i).pDatatype
  17.             .AddItem "Document status: " & JobsDesc(i).pStatus
  18.             .AddItem "Job id: " & JobsDesc(i).JobId
  19.             .AddItem "Job status: " & JobsDesc(i).Status
  20.             .AddItem "Job priority: " & JobsDesc(i).Priority
  21.             .AddItem "Job position: " & JobsDesc(i).Position
  22.             .AddItem "Job total pages: " & JobsDesc(i).TotalPages
  23.             .AddItem "Job page printed: " & JobsDesc(i).PagesPrinted
  24.             '.AddItem "Job submitted: " & JobsDesc(i).Submitted
  25.        End With
  26.        
  27.     End If
  28. End Sub

test.JPG
test.JPG (20.95 KiB) Đã xem 2415 lần
Tập tin đính kèm
Printer device cap.rar
source code
(20.57 KiB) Đã tải 536 lần



dactung93
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 496
Ngày tham gia: T.Ba 04/11/2008 8:43 am
Has thanked: 6 time
Been thanked: 8 time

Re: Kiểm tra tình trạng hoạt động của máy in

Gửi bàigửi bởi dactung93 » T.Năm 21/10/2010 9:25 pm

Máy in loaik nào cũng được hả anh ?

Hình đại diện của người dùng
tuyen_dt18
Guru
Guru
Bài viết: 259
Ngày tham gia: T.Bảy 19/04/2008 8:46 pm
Đến từ: Hưng Yên
Been thanked: 43 time
Liên hệ:

Re: Kiểm tra tình trạng hoạt động của máy in

Gửi bàigửi bởi tuyen_dt18 » T.Năm 04/11/2010 7:37 pm

Có bác nào rành về máy in cho tôi hỏi chút. Để In một thứ gì đó thì các bước cơ bản cần làm những gì. Mình không có Máy In nên cũng không thể thử Code được nên cũng chẳng tìm hiểu nhiều.
Hỏi ý kiến tác giả trước khi sử dụng hoặc trích dẫn rõ nguồn bài viết khi sử dụng.

Hình đại diện của người dùng
vietteiv
Quản trị
Quản trị
Bài viết: 1323
Ngày tham gia: T.Bảy 10/02/2007 12:17 am
Đến từ: Cung cấp giải pháp quản lý doanh nghiệp, dự án, tư vấn xây dựng
Has thanked: 6 time
Been thanked: 71 time
Liên hệ:

Re: Kiểm tra tình trạng hoạt động của máy in

Gửi bàigửi bởi vietteiv » T.Năm 04/11/2010 7:54 pm

lên google tìm phần mềm giả lập máy in PDF Factory về mà dùng
dân IT mà chịu potay, chẳng cần tìm hiểu nhiều thì cũng hơi tiếc cho bạn.

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4762
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 515 time

Re: Kiểm tra tình trạng hoạt động của máy in

Gửi bàigửi bởi truongphu » T.Năm 20/01/2011 1:39 pm

tham dự một chút cho vui...
mời anh vt chạy thử đoạn mã VBS, gọn, nhanh, đầy đủ thông tin:
  1. Private Sub Command1_Click()
  2. strComputer = "." ' <- Thay tên máy PC
  3. Set objWMIService = GetObject("winmgmts:" _
  4.     & "{impersonationLevel=impersonate}!\" & strComputer & "\root\cimv2")
  5. Set objRefresher = CreateObject("WbemScripting.SWbemRefresher")
  6. Set colItems = objRefresher.AddEnum _
  7.     (objWMIService, "Win32_PerfFormattedData_Spooler_PrintQueue").objectSet
  8. objRefresher.Refresh
  9.     For Each objItem In colItems
  10.         pP = pP & vbCrLf & "Add Network Printer Calls: " & _
  11.             objItem.AddNetworkPrinterCalls
  12.         pP = pP & vbCrLf & "Bytes Printed Per Second: " & objItem.BytesPrintedPersec
  13.         pP = pP & vbCrLf & "Caption: " & objItem.Caption
  14.         pP = pP & vbCrLf & "Description: " & objItem.Description
  15.         pP = pP & vbCrLf & "Enumerate Network Printer Calls: " & _
  16.         objItem.EnumerateNetworkPrinterCalls
  17.         pP = pP & vbCrLf & "Job Errors: " & objItem.JobErrors
  18.         pP = pP & vbCrLf & "Jobs: " & objItem.Jobs
  19.         pP = pP & vbCrLf & "Jobs Spooling: " & objItem.JobsSpooling
  20.         pP = pP & vbCrLf & "Maximum Jobs Spooling: " & objItem.MaxJobsSpooling
  21.         pP = pP & vbCrLf & "Maximum References: " & objItem.MaxReferences
  22.         pP = pP & vbCrLf & "Name: " & objItem.Name
  23.         pP = pP & vbCrLf & "Not-Ready Errors: " & objItem.NotReadyErrors
  24.         pP = pP & vbCrLf & "Out-of-Paper Errors: " & objItem.OutofPaperErrors
  25.         pP = pP & vbCrLf & "References: " & objItem.References
  26.         pP = pP & vbCrLf & "Total Jobs Printed: " & objItem.TotalJobsPrinted
  27.         pP = pP & vbCrLf & "Total Pages Printed: " & objItem.TotalPagesPrinted
  28.         objRefresher.Refresh
  29.     Next
  30. MsgBox pP
  31. End Sub
Tập tin đính kèm
Script Kiêm tra máy in.rar
(1.54 KiB) Đã tải 375 lần
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh


Quay về “[VB] Mã nguồn linh tinh”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.0 khách