|
สำหรับบทความนี้จะมีโค้ดทั้ง VB6 และ VB.Net เพราะใช้กระบวนคิดแบบเดียวกันหมด แตกต่างแค่คำสั่งที่ใช้งานเท่านั้น โดยใช้งานติดต่อผ่านทาง WMI หรือ Windows Management Instrumentation แอดมินเตรียมเอาไว้สำหรับโปรเจคใหม่ ซึ่งโปรแกรมตัวเดียวจะต้องส่งพิมพ์งานออกทางหลายเครื่องพิมพ์ ขึ้นอยู่กับลักษณะของงานนั้นๆ และเพืออำนวยความสะดวกให้กับผู้ใช้งาน รายละเอียดมันมีเยอะ แอดมินตัดมาให้ได้รับชมในส่วนสำคัญๆ เช่น การตรวจสอบสถานะของเครื่องพิมพ์ เรียนรู้ศึกษารายละเอียดเพิ่มเติมเกี่ยวกับ Win32_Printer class (สำคัญและจำเป็นมาก) ...
แนะนำการใช้งานและดาวน์โหลด WMI Code Creator Tool
กรณี 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) ได้ที่นี่
|
ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง
คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน
x
|