หากมีคำถาม ขอให้ไปโพสต์ลง เว็บบอร์ดจีทูจีเน็ตดอตคอม ตัวใหม่แทนน่ะครับ

หรือติดต่อเข้ามาทาง Inbox ที่ เฟซบุ๊ค ผมครับ

หน้าหลัก
ข่าวสาร - บทความ ทั้งหมด
VB 6/VB.Net
ASP/ASP.Net
จับฉ่ายคอมพิวเตอร์
เรียนรู้ผ่าน Flash Movie
บทความที่มีผู้ตอบล่าสุด  
 RSS Feeds
 ดาวน์โหลดโปรแกรม RSS Reader ได้ที่นี่ ...   Download โปรแกรม RSS Reader

Forum - www.g2gnet.com
Webmaster - www.g2gnet.com
Visitors - Session views
 4 5 6 5 5 5 7

7 ธันวาคม พ.ศ.2549
593 Users On-Line.
Visitors - Page views
 7 7 1 6 4 8 4
1 กุมภาพันธ์ พ.ศ.2551

Google   
เว็บ g2gnet.com
ขนาดตัวอักษร:  

VB6 กับการอ่านค่า MAC Address ของ LAN Card ด้วยวิธีบ้านๆ (ตามเคย)

Category »  VB 6/VB.Net
โดย : Webmaster เมื่อ 28/8/2552   เวลา: 02:34
(อ่าน : 16372) 
ผมเขียนบทความตอนนี้ขึ้นมาแบบลัดคิว (สดๆร้อนๆ) เพราะทีแรกกะส่ง VB.NET ออกมาก่อน ทั้งโค้ด และ คำอธิบายเรียบร้อย ... แต่เจอคำถามจากหลายๆคน ที่ถามผมมาอย่างต่อเนื่องคล้ายๆกัน คือ ตัวแปลภาษาตัวไหนมันดีกว่ากัน ทำไมผมจึงเลือกใช้ VB6 ทั้งๆที่ผมเองก็เขียน VB.Net ได้ ... (ความคิดผม) : ตัวแปลภาษาที่ใช้ มันไม่ใช่เรื่องหลัก แต่เรื่องแนวคิด หรือ จินตนาการที่ล่องลอยอยู่กลางอากาศ ก่อนที่จะปั้นมันขึ้นมาให้สัมผัสได้ แตะต้องได้ หรือที่เราเรียกว่า "โปรแกรม" นี่แหละที่สำคัญกว่า ... ซึ่งในแวดวงทางการศึกษา "ของจริง" คือ สื่อการเรียนการสอนที่ดีที่สุดครับ ... พี่น้อง ... ดังนั้นของแบบนี้มันต้องมีการพิสูจน์ให้เห็น ... ซึ่งหากพี่น้องได้ลองศึกษาดูแล้ว ผมคิดว่าหลายคนน่าจะถูกกระตุ้นต่อมไอเดียจนพุ่งกระฉูด ให้นำไปประยุกต์ใช้งานอย่างอื่นได้สบายเลย ...

แนวคิดของงานชิ้นนี้ ... ไม่ใช้ API, OCX, DLL หรือ ActiveX อาศัยคำสั่งของ DOS ร่วมกับการอ่านข้อมูลจาก Text File เท่านั้นเป็นพอ ... หลักการคิดแก้ปัญหาแบบง่ายๆ แต่สามารถนำไปประยุกต์ได้อย่างกว้างขวางมาก หลายคนอาจจะไม่เคยรู้มาก่อนว่า คำสั่งต่างๆของ DOS หากไม่มีการสั่งให้เปลี่ยนทิศทางการแสดงผล (Redirect) จะถือว่าเป็นการแสดงผลออกทางจอภาพโดยปริยาย แต่ถ้าหากต่อด้วยเครื่องหมาย > ตามด้วยชื่อไฟล์ เช่น

เมื่อเปิดไฟล์ MyIPConfig.txt
Windows IP Configuration
        Host Name . . . . . . . . . . . . : Thongkorn
        Primary Dns Suffix  . . . . . . . : 
        Node Type . . . . . . . . . . . . : Unknown
        IP Routing Enabled. . . . . . . . : No
        WINS Proxy Enabled. . . . . . . . : No

Ethernet adapter Local Area Connection:
        Connection-specific DNS Suffix  . : 
        Description . . . . . . . . . . . : Realtek RTL8139/810x Family Fast Ethernet NIC
        Physical Address. . . . . . . . . : 00-00-00-99-99-99
        Dhcp Enabled. . . . . . . . . . . : Yes
        Autoconfiguration Enabled . . . . : Yes
        IP Address. . . . . . . . . . . . : 192.168.0.151
        Subnet Mask . . . . . . . . . . . : 255.255.255.0
        Default Gateway . . . . . . . . . : 192.168.0.1
        DHCP Server . . . . . . . . . . . : 192.168.0.1
        DNS Servers . . . . . . . . . . . : 192.168.0.1
        Lease Obtained. . . . . . . . . . : Wednesday, August 26, 2009 11:03:55 PM
        Lease Expires . . . . . . . . . . : Tuesday, January 19, 2038 10:14:07 AM
หรือหากสั่ง ipconfig /all >> MyIPConfig.txt หมายถึง ให้นำข้อมูลที่ได้ใหม่นี้ไปต่อท้ายจากข้อมูลเดิม (ความรู้เกี่ยวกับเรื่องของการทำ Redirect)

หลักการคิดที่จะเขียนโปรแกรม (ไม่จำเป็นเฉพาะแค่ VB6 เท่านั้น)
  • รันคำสั่งภายนอก หรือ คำสั่ง DOS ผ่านทาง Shell
  • ให้ Redirect เพื่อเก็บข้อมูลไว้ใน Text File
  • อ่านข้อมูลใน Text File เข้ามาทีละบรรทัด จนกว่าจะหมดข้อมูล
  • ค้นหาคำว่า Physical Address เช่น
      Physical Address. . . . . . . . . : 00-00-00-99-99-99
  • เมื่อเจอข้อมูลที่ต้องการ
    • ให้ตัดช่องว่างทั้งหน้า และ หลังออก (คำสั่ง TRIM)
    • ให้นับข้อมูลจากทางขวามา 17 ตัว คือ MAC Address 12 ตัว และ เครื่องหมาย - อีก 5 ตัว
    ดาวน์โหลด
    ดาวน์โหลด Source Code สำหรับ MS Visual Basic 6.0 - Service Pack 6
     ดาวน์โหลด Visual Basic 6.0 SP5: Run-Time Redistribution Pack
     ดาวน์โหลด Microsoft Data Access Object (MDAC) และ Jet 4.0 Update
     ดาวน์โหลด Microsoft Visual Basic Service Pack 6
    ข้อมูลเพิ่มเติม
    CMD Command - ไมโครซอฟท์
    คำสั่งต่างๆของ DOS
    การเปลี่ยนค่า MAC Address (Media Access Control Address) แบบง่ายๆ
    การสร้างโปรแกรมย่อยเพื่อทำให้เกิดการรอคอยเป็นระยะเวลาตามที่ต้องการ
  • ออกแบบโปรแกรม (Design - Time)
  • RUN TIME
    เริ่มต้นกระบวนการทำงาน
    
    Option Explicit
    
    ' อ่านรายละเอียดเพิ่มเติมได้ที่ ...
    ' http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/cmd.mspx?mfr=true
    ' อ่านเรื่องการทำ Redirect
    ' http://www.uv.tietgen.dk/staff/mlha/PC/Soft/DOS/com/
    
    Private Sub Form_Load()
        Me.Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2
        
        txtMACAddress.Text = ""
        Timer1.Enabled = False
        
        ' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        ' เรียกใช้งานโปรแกรมย่อยเพื่ออ่านค่า MAC Address
        Call GetMACAddress
        ' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        
    End Sub
    
    ' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' โปรแกรมย่อยที่เรียกใช้งานผ่าน Command DOS
    ' บทพิสูจน์ของ ... จินตนาการ ... ที่มาจากความรู้เก่าๆ เก๋าๆ และ ใช้มันอยู่ประจำ
    ' เทคโนโลยีแม้จะก้าวไกลไปถึงไหนก็ตามที ... หากนำมาใช้งานไม่เป็น มันก็ไร้ค่า ...
    ' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Private Sub GetMACAddress()
    On Error GoTo ErrHandler
        
        
        Dim sCommand As String  ' คำสั่งผ่าน DOS
        Dim strData As String   ' อ่านค่าจาก Text File ครั้งละบรรทัด
        
        ' ตรวจสอบว่าเจอไฟล์เดิมหรือไม่ ... หากพบก็ให้ลบทิ้ง (Kill) ไปได้เลย
        If Dir(App.Path & "\MyIPConfig.txt") <> "" Then Kill App.Path & "\MyIPConfig.txt"
        
        ' ASCII Code 34  คือ  เครื่องหมาย Double Quote (")
        sCommand = "ipconfig /all > " & Chr(34) & App.Path & "\MyIPConfig.txt" & Chr(34)
        ' ซึ่งจำเป็นต้องใส่เครื่องหมาย Double Quote (") ด้วยน่ะครับ .. เช่น ...
        ' ipconfig /all > "G:\Project VB60\GetMACAddress\MyIPConfig.txt"
        ' เครื่องหมาย > (หรือ Redirect) เป็นการเปลี่ยนทิศทางเพื่อส่งออกไปยังไฟล์ข้อมูล (แทนที่จะออกหน้าจอภาพตามปกติ)
        
        ' สั่งรันคำสั่ง cmd และตามด้วยคำสั่ง DOS ต่อท้ายได้เลย
        Shell ("cmd /c " & sCommand)
        ' Option /c คือ เมื่อรันคำสั่งเสร็จสิ้น ให้ปิดหน้าต่าง DOS หนีไปเลย ไม่ต้องมาสะเออะ ... เชอะ 55555+
        
        ' เครื่องมันทำงานเร็วเกินไป (อย่างนี้ก็มีด้วย) ... หน่วงเวลาเอาไว้สักครึ่งวินาที (500 millisecond)
        ' ไม่เช่นนั้นมันจะหาไฟล์ไม่เจอ ทำให้เกิด Error 53 หรือ File not found. ... ไม่เชื่อผมก็ลองทดสอบดู
        If Dir(App.Path & "\MyIPConfig.txt") = "" Then DelayTime (500)
        
        ' เปิดอ่านไฟล์
        Open App.Path & "\MyIPConfig.txt" For Input As #1
        
        Do While Not EOF(1)
    
            ' อ่านข้อมูลเข้ามาทีละบรรทัด
            Line Input #1, strData
            ' เร่งการค้นหาโดยการข้ามบรรทัดที่เป็นช่องว่างออกไปได้เลย
            ' คือ ... บรรทัดไหนที่ไม่มีข้อมูล ก็ให้วนรอบไปรับข้อมูลบรรทัดใหม่
            If Trim(strData) <> "" Then
                ' ตรวจสอบหาคำว่า Physical Address ในแต่ละบรรทัด
                If InStr(Trim(strData), "Physical Address") Then
                    ' เมื่อเจอ ... ให้นับตัวอักขระ (Character) จากทางขวามือมาทั้งหมด 17 ตัว
                    ' เช่น ... 00-00-00-FF-FF-FF
                    txtMACAddress.Text = "MAC Address : " & Right$(strData, 17)
                    Exit Do
                End If
            End If
            
        Loop
        
    ExitProc:
        ' ปิด Text File
        Close #1
        Exit Sub
    
    ErrHandler:
        
        ' บ่อยครั้งที่เราต้องมาดักความผิดพลาด (Trap Error)
        MsgBox Err.Number & " : " & Err.Description
        ' หากสั่ง Resume Next ... คือ การสั่งให้กระโดดไปทำงานต่อจากบรรทัดที่เกิด Error ทันที
        ' หากสั่ง Resume ExitProc ... คือ การสั่งให้กระโดดไปที่ลาเบล ExitProc
        ' หากสั่ง Resume ... คือ การสั่งให้กลับไปทำงานซ้ำบรรทัดที่เกิด Error
        Resume
        
        ' ไม่สั่ง Resume หรือ อะไรเลย ... ก็อ่านคำสั่งบรรทัดต่อไป ...
        ' แน่นอนเจอ Exit Sub หมายความว่า จบโปรแกรมย่อยไปเลย ... 55555+
    
    End Sub
    
    ' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ' ส่วนของการหน่วงเวลา (Delay Time)
    ' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Public Sub DelayTime(MilliSec As Long)
        ' กำหนดให้ MilliSecond เป็นพารามิเตอร์เพื่อรับค่าการหน่วงเวลาเข้ามา
        ' Turn Timer1 On - เปิด
        Timer1.Enabled = True
        Timer1.Interval = MilliSec
            ' ไม่ใช่ว่ามันไม่ได้ทำอะไรน่ะครับ ... พี่น้อง
            While Timer1.Interval > 0
                ' คืน CPU ให้กับระบบปฏิบัติการ (Operating System - OS) ไปทำงานอย่างอื่นต่อ
                DoEvents
            Wend
            ' Turn Timer1 Off - ปิด
            Timer1.Enabled = False
    End Sub
    
    Private Sub Timer1_Timer()
        ' ปิดการทำงานของ Timer1
        Timer1.Enabled = False
        Timer1.Interval = 0
    End Sub
    
    Conclusion:
    พี่น้องครับ ... คงจะเห็นแล้วว่าด้วยหลักการง่ายๆแบบนี้ เพียงอันเดียว ครั้งเดียวเท่านั้น กลับสามารถที่จะนำไปใช้ประโยชน์ได้อย่างมากมาย ไม่เชื่อก็ดูโค้ดด้านล่าง หากผมอยากรู้ ชื่อเครื่องคอม ชื่อผู้ใช้ หรืออื่นๆ ผมก็ไม่มีความจำเป็นต้องพึ่งพาหา WinAPI 32 มาใช้งานสักกะติ๊ดเลยครับผม (แต่ขอให้รู้คำสั่ง DOS ด้วยน่ะ) ...
    
    net config rdr > NetConfig.txt
    Computer name                        \\THONGKORN
    Full Computer name                   Thongkorn
    User name                            Administrator
    
    Workstation active on                
    	NetbiosSmb (000000000000)
    	NetBT_Tcpip_{6339B9DD-B200-4E47-82B9-D5A8E053FE89} (00FFFFFFFFFF)
    
    Software version                     Windows 2002
    
    Workstation domain                   WORKGROUP
    Workstation Domain DNS Name          (null)
    Logon domain                         THONGKORN
    
    COM Open Timeout (sec)               0
    COM Send Count (byte)                100
    COM Send Timeout (msec)              250
    The command completed successfully.
    

  • จี ทู จี เน็ต ดอต คอม - g2gNet Dot Com
    เลขทะเบียนพาณิชย์อิเล็กทรอนิกส์ 0407314800231
    CopyLeft © 2004 - 2099 g2gNet.Com All rights reserved.
    Email: thongkorn@hotmail.com หรือ โทร. 08-6862-6560