ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 5910|ตอบกลับ: 0

[VB6/VB.NET] การแสดงรายชื่อเครื่องพิมพ์ และสถานะด้วยการใช้งาน WMI

[คัดลอกลิงก์]

320

กระทู้

512

โพสต์

6583

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
6583




สำหรับบทความนี้จะมีโค้ดทั้ง VB6 และ VB.Net เพราะใช้กระบวนคิดแบบเดียวกันหมด แตกต่างแค่คำสั่งที่ใช้งานเท่านั้น โดยใช้งานติดต่อผ่านทาง WMI หรือ Windows Management Instrumentation แอดมินเตรียมเอาไว้สำหรับโปรเจคใหม่ ซึ่งโปรแกรมตัวเดียวจะต้องส่งพิมพ์งานออกทางหลายเครื่องพิมพ์ ขึ้นอยู่กับลักษณะของงานนั้นๆ และเพืออำนวยความสะดวกให้กับผู้ใช้งาน รายละเอียดมันมีเยอะ แอดมินตัดมาให้ได้รับชมในส่วนสำคัญๆ เช่น การตรวจสอบสถานะของเครื่องพิมพ์ เรียนรู้ศึกษารายละเอียดเพิ่มเติมเกี่ยวกับ Win32_Printer class (สำคัญและจำเป็นมาก) ...

แนะนำการใช้งานและดาวน์โหลด WMI Code Creator Tool



กรณี VB.Net จะต้องเลือก References คือ System.Management


มาดูโค้ดในส่วนของ VB.NET (2010)
  1. ' / --------------------------------------------------------------------------------
  2. ' / Developer : Mr.Surapon Yodsanga (Thongkorn Tubtimkrob)
  3. ' / eMail : thongkorn@hotmail.com
  4. ' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
  5. ' / Facebook: https://www.facebook.com/g2gnet (For Thailand)
  6. ' / Facebook: https://www.facebook.com/commonindy (Worldwide)
  7. ' / Purpose: Listing printer with WMI.
  8. ' / Microsoft Visual Basic .NET (2010)
  9. ' /
  10. ' / This is open source code under @CopyLeft by Thongkorn Tubtimkrob.
  11. ' / You can modify and/or distribute without to inform the developer.
  12. ' / --------------------------------------------------------------------------------

  13. Imports System.Management
  14. Public Class frmListPrinter

  15.     ' / ตั้งค่า ListView Control
  16.     Sub InitListView()
  17.         '/ Initialize ListView Control
  18.         With lvwData
  19.             .View = View.Details
  20.             .GridLines = True
  21.             .FullRowSelect = True
  22.             .HideSelection = False
  23.             .MultiSelect = False
  24.             '/ ใช้ทั้งหมด 3 หลัก โดยหลักแรก มีค่า Index = 0
  25.             .Columns.Add("Printer Name", lvwData.Width \ 3 + 90)
  26.             .Columns.Add("Printer Status", lvwData.Width \ 3 - 60)
  27.             .Columns.Add("Default Printer", lvwData.Width \ 3 - 60)
  28.         End With
  29.     End Sub

  30.     Private Sub btnListPrinter_Click(sender As System.Object, e As System.EventArgs) Handles btnListPrinter.Click
  31.         Dim WmiQuery As String = "SELECT * FROM Win32_Printer"
  32.         Dim WmiSearcher As New ManagementObjectSearcher(WmiQuery)
  33.         lvwData.Items.Clear()
  34.         WmiSearcher = New ManagementObjectSearcher(WmiQuery)
  35.         '// Win32_Printer class
  36.         '// https://docs.microsoft.com/en-us/windows/desktop/cimwin32prov/win32-printer (See ExtendedPrinterStatus)
  37.         Dim PrinterStatuses As String() = {"Other", "Unknown", "Idle", "Printing", "WarmUp", "Stopped Printing", "Offline"}
  38.         For Each Info As ManagementObject In WmiSearcher.Get()
  39.             Try
  40.                 Dim LV As ListViewItem
  41.                 LV = lvwData.Items.Add(Info("Name"))  '// สร้างโหนดหลัก คือ ชื่อเครื่องพิมพ์
  42.                 Dim status As UInt16 = CType(Info.Properties("PrinterStatus").Value - 1, UInt16)
  43.                 LV.SubItems.Add(PrinterStatuses(status))    '// Printer Status
  44.                 LV.SubItems.Add(Info("Default"))        '// Default Printer
  45.             Catch ex As Exception
  46.             End Try
  47.         Next
  48.     End Sub

  49.     Private Sub frmListPrinter_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
  50.         Me.Dispose()
  51.         Application.Exit()
  52.     End Sub

  53.     Private Sub frmListPrinter_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  54.         Call InitListView()
  55.     End Sub

  56.     Private Sub btnExit_Click(sender As System.Object, e As System.EventArgs) Handles btnExit.Click
  57.         Me.Close()
  58.     End Sub
  59. End Class
คัดลอกไปที่คลิปบอร์ด


มาดูโค้ดในส่วนของ VB6
  1. ' / --------------------------------------------------------------------------------
  2. ' / Developer : Mr.Surapon Yodsanga (Thongkorn Tubtimkrob)
  3. ' / eMail : thongkorn@hotmail.com
  4. ' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
  5. ' / Facebook: https://www.facebook.com/g2gnet (For Thailand)
  6. ' / Facebook: https://www.facebook.com/commonindy (Worldwide)
  7. ' / Purpose:  List Printers with WMI.
  8. ' / Microsoft Visual Basic 6.0 (SP6)
  9. ' /
  10. ' / This is open source code under @CopyLeft by Thongkorn Tubtimkrob.
  11. ' / You can modify and/or distribute without to inform the developer.
  12. ' / --------------------------------------------------------------------------------
  13. Option Explicit

  14. '/ Initial ListView
  15. Sub SetupListView()
  16.     With Me.lvwPrinter
  17.         ' Coding with Run Time
  18.         .View = lvwReport
  19.         .Arrange = lvwNone
  20.         .LabelEdit = lvwManual
  21.         .BorderStyle = ccFixedSingle
  22.         .Appearance = cc3D
  23.         
  24.         .HideColumnHeaders = False
  25.         .HideSelection = False
  26.         .LabelWrap = False
  27.         .MultiSelect = False
  28.         .Enabled = True
  29.         .AllowColumnReorder = True
  30.         .Checkboxes = False
  31.         .FlatScrollBar = False
  32.         .FullRowSelect = True
  33.         .GridLines = True
  34.         .HotTracking = False
  35.         .HoverSelection = False
  36.         
  37.         .Sorted = False 'True
  38.         .SortKey = 0
  39.         .SortOrder = lvwAscending
  40.         
  41.         '/ Add header
  42.         .ColumnHeaders.Add , , "Printer Name", .Width \ 3 + 1500
  43.         .ColumnHeaders.Add , , "Printer Status", .Width \ 3 - 600
  44.         .ColumnHeaders.Add , , "Default Printer", .Width \ 3 - 1000, lvwColumnLeft
  45.     End With
  46.    
  47. End Sub

  48. Private Sub cmdListPrinter_Click()
  49.     Dim objItem As Object
  50.     Dim colItems As Object
  51.     Dim objWMIService As Object
  52.     Dim strComputer As String
  53.     strComputer = "."
  54.     Dim LV As ListItem
  55.     '// Clear Item ListView
  56.     lvwPrinter.ListItems.Clear
  57.     '// Win32_Printer class
  58.     '// https://docs.microsoft.com/en-us/windows/desktop/cimwin32prov/win32-printer (See ExtendedPrinterStatus)
  59.     Dim PrinterStatuses(7) As String
  60.     PrinterStatuses(1) = "Other"
  61.     PrinterStatuses(2) = "Unknown"
  62.     PrinterStatuses(3) = "Idle"
  63.     PrinterStatuses(4) = "Printing"
  64.     PrinterStatuses(5) = "WarmUp"
  65.     PrinterStatuses(6) = "Stopped Printing"
  66.     PrinterStatuses(7) = "Offline"
  67.     '//
  68.     Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\CIMV2")
  69.     Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Printer", , 48)
  70.     '//
  71.     For Each objItem In colItems
  72.         Set LV = lvwPrinter.ListItems.Add(, , Trim(objItem.Name))   '// Printer Name
  73.         LV.SubItems(1) = PrinterStatuses(objItem.PrinterStatus) '// Printer Status
  74.         LV.SubItems(2) = objItem.Default    '// Default Printer
  75.     Next
  76. End Sub

  77. Private Sub Form_Load()
  78.     '// Initial ListView Control
  79.     Call SetupListView
  80. End Sub

  81. Private Sub Form_Resize()
  82.     On Error Resume Next
  83.     If Me.WindowState = vbMinimized Then Exit Sub
  84.     ' Width
  85.     If Me.Width <> 8625 Then Me.Width = 8625
  86.     ' Height
  87.     If Me.Height <> 6750 Then Me.Height = 6750
  88. End Sub

  89. Private Sub Form_Unload(Cancel As Integer)
  90.     Set frmListPrinter = Nothing
  91.     End
  92. End Sub

  93. Private Sub cmdExit_Click()
  94.     Unload Me
  95. End Sub
คัดลอกไปที่คลิปบอร์ด



ดาวน์โหลดโค้ดต้นฉบับทั้ง VB6/VB.NET (2010) ได้ที่นี่




ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

x
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2024-11-27 21:35 , Processed in 0.206719 second(s), 5 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้