[VB6/VB.NET] การแสดงรายชื่อเครื่องพิมพ์ และสถานะด้วยการใช้งาน WMI
http://www.g2gnet.com/webboard/images/vbnet/WMIListPrinter.pngสำหรับบทความนี้จะมีโค้ดทั้ง VB6 และ VB.Net เพราะใช้กระบวนคิดแบบเดียวกันหมด แตกต่างแค่คำสั่งที่ใช้งานเท่านั้น โดยใช้งานติดต่อผ่านทาง WMI หรือ Windows Management Instrumentation แอดมินเตรียมเอาไว้สำหรับโปรเจคใหม่ ซึ่งโปรแกรมตัวเดียวจะต้องส่งพิมพ์งานออกทางหลายเครื่องพิมพ์ ขึ้นอยู่กับลักษณะของงานนั้นๆ และเพืออำนวยความสะดวกให้กับผู้ใช้งาน รายละเอียดมันมีเยอะ แอดมินตัดมาให้ได้รับชมในส่วนสำคัญๆ เช่น การตรวจสอบสถานะของเครื่องพิมพ์ เรียนรู้ศึกษารายละเอียดเพิ่มเติมเกี่ยวกับ Win32_Printer class (สำคัญและจำเป็นมาก) ...
แนะนำการใช้งานและดาวน์โหลด WMI Code Creator Tool
http://www.g2gnet.com/webboard/images/vbnet/WMIReference.png
กรณี VB.Net จะต้องเลือก References คือ System.Management
มาดูโค้ดในส่วนของ VB.NET (2010)
' / --------------------------------------------------------------------------------
' / Developer : Mr.Surapon Yodsanga (Thongkorn Tubtimkrob)
' / eMail : thongkorn@hotmail.com
' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
' / Facebook: https://www.facebook.com/g2gnet (For Thailand)
' / Facebook: https://www.facebook.com/commonindy (Worldwide)
' / Purpose: Listing printer with WMI.
' / Microsoft Visual Basic .NET (2010)
' /
' / This is open source code under @CopyLeft by Thongkorn Tubtimkrob.
' / You can modify and/or distribute without to inform the developer.
' / --------------------------------------------------------------------------------
Imports System.Management
Public Class frmListPrinter
' / ตั้งค่า ListView Control
Sub InitListView()
'/ Initialize ListView Control
With lvwData
.View = View.Details
.GridLines = True
.FullRowSelect = True
.HideSelection = False
.MultiSelect = False
'/ ใช้ทั้งหมด 3 หลัก โดยหลักแรก มีค่า Index = 0
.Columns.Add("Printer Name", lvwData.Width \ 3 + 90)
.Columns.Add("Printer Status", lvwData.Width \ 3 - 60)
.Columns.Add("Default Printer", lvwData.Width \ 3 - 60)
End With
End Sub
Private Sub btnListPrinter_Click(sender As System.Object, e As System.EventArgs) Handles btnListPrinter.Click
Dim WmiQuery As String = "SELECT * FROM Win32_Printer"
Dim WmiSearcher As New ManagementObjectSearcher(WmiQuery)
lvwData.Items.Clear()
WmiSearcher = New ManagementObjectSearcher(WmiQuery)
'// Win32_Printer class
'// https://docs.microsoft.com/en-us/windows/desktop/cimwin32prov/win32-printer (See ExtendedPrinterStatus)
Dim PrinterStatuses As String() = {"Other", "Unknown", "Idle", "Printing", "WarmUp", "Stopped Printing", "Offline"}
For Each Info As ManagementObject In WmiSearcher.Get()
Try
Dim LV As ListViewItem
LV = lvwData.Items.Add(Info("Name"))'// สร้างโหนดหลัก คือ ชื่อเครื่องพิมพ์
Dim status As UInt16 = CType(Info.Properties("PrinterStatus").Value - 1, UInt16)
LV.SubItems.Add(PrinterStatuses(status)) '// Printer Status
LV.SubItems.Add(Info("Default")) '// Default Printer
Catch ex As Exception
End Try
Next
End Sub
Private Sub frmListPrinter_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
Me.Dispose()
Application.Exit()
End Sub
Private Sub frmListPrinter_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Call InitListView()
End Sub
Private Sub btnExit_Click(sender As System.Object, e As System.EventArgs) Handles btnExit.Click
Me.Close()
End Sub
End Class
มาดูโค้ดในส่วนของ VB6
' / --------------------------------------------------------------------------------
' / Developer : Mr.Surapon Yodsanga (Thongkorn Tubtimkrob)
' / eMail : thongkorn@hotmail.com
' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
' / Facebook: https://www.facebook.com/g2gnet (For Thailand)
' / Facebook: https://www.facebook.com/commonindy (Worldwide)
' / Purpose:List Printers with WMI.
' / Microsoft Visual Basic 6.0 (SP6)
' /
' / This is open source code under @CopyLeft by Thongkorn Tubtimkrob.
' / You can modify and/or distribute without to inform the developer.
' / --------------------------------------------------------------------------------
Option Explicit
'/ Initial ListView
Sub SetupListView()
With Me.lvwPrinter
' Coding with Run Time
.View = lvwReport
.Arrange = lvwNone
.LabelEdit = lvwManual
.BorderStyle = ccFixedSingle
.Appearance = cc3D
.HideColumnHeaders = False
.HideSelection = False
.LabelWrap = False
.MultiSelect = False
.Enabled = True
.AllowColumnReorder = True
.Checkboxes = False
.FlatScrollBar = False
.FullRowSelect = True
.GridLines = True
.HotTracking = False
.HoverSelection = False
.Sorted = False 'True
.SortKey = 0
.SortOrder = lvwAscending
'/ Add header
.ColumnHeaders.Add , , "Printer Name", .Width \ 3 + 1500
.ColumnHeaders.Add , , "Printer Status", .Width \ 3 - 600
.ColumnHeaders.Add , , "Default Printer", .Width \ 3 - 1000, lvwColumnLeft
End With
End Sub
Private Sub cmdListPrinter_Click()
Dim objItem As Object
Dim colItems As Object
Dim objWMIService As Object
Dim strComputer As String
strComputer = "."
Dim LV As ListItem
'// Clear Item ListView
lvwPrinter.ListItems.Clear
'// Win32_Printer class
'// https://docs.microsoft.com/en-us/windows/desktop/cimwin32prov/win32-printer (See ExtendedPrinterStatus)
Dim PrinterStatuses(7) As String
PrinterStatuses(1) = "Other"
PrinterStatuses(2) = "Unknown"
PrinterStatuses(3) = "Idle"
PrinterStatuses(4) = "Printing"
PrinterStatuses(5) = "WarmUp"
PrinterStatuses(6) = "Stopped Printing"
PrinterStatuses(7) = "Offline"
'//
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Printer", , 48)
'//
For Each objItem In colItems
Set LV = lvwPrinter.ListItems.Add(, , Trim(objItem.Name)) '// Printer Name
LV.SubItems(1) = PrinterStatuses(objItem.PrinterStatus) '// Printer Status
LV.SubItems(2) = objItem.Default '// Default Printer
Next
End Sub
Private Sub Form_Load()
'// Initial ListView Control
Call SetupListView
End Sub
Private Sub Form_Resize()
On Error Resume Next
If Me.WindowState = vbMinimized Then Exit Sub
' Width
If Me.Width <> 8625 Then Me.Width = 8625
' Height
If Me.Height <> 6750 Then Me.Height = 6750
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set frmListPrinter = Nothing
End
End Sub
Private Sub cmdExit_Click()
Unload Me
End Sub
ดาวน์โหลดโค้ดต้นฉบับทั้ง VB6/VB.NET (2010) ได้ที่นี่
หน้า:
[1]