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

กระดานข่าวสาร เว็บบอร์ด - www.g2gnet.com
ดาวน์โหลดฟรีโปรแกรม และ Free Souce Code ได้ที่นี่ ...
รู้จักกับเว็บมาสเตอร์ - www.g2gnet.com
::: โปรแกรมมาใหม่ :::
โปรแกรมพิมพ์สติ๊กเกอร์บาร์โค้ด - Barcode Sticker
โปรแกรมพิมพ์สติ๊กเกอร์บาร์โค้ด - Barcode Sticker
โปรแกรมไปรษณีย์ และ จุดชำระค่าบริการ (iPayPost Software)
โปรแกรมไปรษณีย์ และ จุดชำระค่าบริการ
โปรแกรมจุดรับชำระค่าบริการ (iPayLite Software)
โปรแกรมจุดรับชำระค่าบริการ
::: BarcodeSoft :::
::: Printing :::
โปรแกรมพิมพ์รหัสบาร์โค้ด - BarcodeSoft Printing
โปรแกรมรหัสไปรษณีย์ทั่วไทย
::: G2GNet PostCode :::
!!!!! แจกฟรี !!!!!
ดาวน์โหลดโปรแกรมรหัสไปรษณีย์ทั่วไทย G2GNet PostCode Thailand
Visitors - Session views
 3 5 6 9 5 3 2

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

Google   
เว็บ g2gnet.com
ขนาดตัวอักษร:  
    ดาวน์โหลด และ แนะนำวิธีการติดตั้ง Active Report Professional 2.0
    แจกฟรี Source Code โปรแกรมขายสินค้า - Point Of Sale (โดย เว็บมาสเตอร์-ทองก้อน
    แจกฟรี Source Code การพิมพ์ใบกำกับภาษี - Active Report 2.0 (โดย ctx-9000@hotmail.com)
    SourceCode การดึงข้อมูลมาแสดงผลลงใน SharpGrid (โดย dos_network@hotmail.com)
    แจกฟรี Source Code VB6+Access โปรแกรมฐานข้อมูลครุภัณฑ์
    แจกโปรแกรมดูทีวี ดูหนัง ฟังวิทยุ ฟังเพลงออนไลน์ - G2GnetTV On Line ... ฟรีๆๆๆๆ
          ข้อมูลสถานี/รายการ (XML)  ข้อมูลสถานี/รายการ (HTML)
โปรแกรมระบบบัญชี Profit - Account

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

Category »  VB 6/VB.Net
โดย : Webmaster เมื่อ 28/8/2552   เวลา: 02:34
(อ่าน : 12488)/(ตอบ : 8)  ข้อคิดเห็น   |   พิมพ์   |  
ผมเขียนบทความตอนนี้ขึ้นมาแบบลัดคิว (สดๆร้อนๆ) เพราะทีแรกกะส่ง 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.
    

  • ร่วมแสดงความคิดเห็น

    [ความเห็นที่:  1] จากคุณ : bigdaddy เมื่อ 28/8/2552 7:50:12  IP: 124.157.222.97

    หน่วงเวลาเอาไว้สักครึ่งวินาที (500 millisecond) ไม่เช่นนั้นมันจะหาไฟล์ไม่เจอ...
    -------------------
    ขอบคุณครับคุณครู

    -------------------
    ...ในอ้อมกอดพี่เคยมีเจ้าซบอิงอุ่น รอยรักละมุนอุ่นเหลือเมื่อแอบกานดา...



    [ความเห็นที่:  2] จากคุณ : aunsunyo เมื่อ 28/8/2552 9:04:29  IP: 125.24.213.209

    ได้ความรู้ใหม่อีกแล้วครับ...พี่น้อง
    ขอบคุณมากครับ
     

    [ความเห็นที่:  3] จากคุณ : luckyname เมื่อ 28/8/2552 15:19:37  IP: 58.9.139.23

    แหล่มคร๊าบบ...

    [ความเห็นที่:  4] จากคุณ : witty เมื่อ 9/5/2553 17:33:31  IP: 61.91.188.102

    ดี นะนี่ ขอบคุณครับ ผมก็ยังต้องใช้Vb  Vc 6 อยู่เลย

    [ความเห็นที่:  5] จากคุณ : nunit เมื่อ 10/6/2553 9:34:34  IP: 203.131.212.50

    ถ้าเราจะทำการเชื่อมต่อเครื่องคอมๆ หลายๆเครื่องแล้วดู mac ของเครื่องที่เราเชื่อมต่อต้องทำไงอะคะ 

    [ความเห็นที่:  6] จากคุณ : กฤษดา เมื่อ 24/9/2554 9:13:39  IP: 125.26.107.112

    ไอน์สไตน์บอกว่าจินตนาการสำคัญกว่าความรู้...แต่นี่กลับได้ทั้งจินตนาการและความรู้...พอดีผมยังใช้ vb6 กับ VBAบนExcel ช่วยงานอยู่พอดี ขอรับ

    [ความเห็นที่:  7] จากคุณ : สันติ เมื่อ 2/3/2555 14:02:43  IP: 203.127.6.85

    ถ้าจะดึงเอาค่า ความแรงสัญญาณ wifi มาแสดงผลทำยังไงครับ รบกวนด้วบนะครับ

    [ความเห็นที่:  8] จากคุณ : jhishuz เมื่อ 28/4/2555 10:42:43  IP: 213.42.124.98

    GOd2Xo  tavipfpbxopf


    ก่อนการคลิ๊กโพสต์ข้อความ ขอความกรุณาใช้ถ้อยคำที่สุภาพด้วยครับ เว็บไซต์แห่งนี้เป็นแหล่งเผยแพร่ความรู้ ดังนั้นสำหรับท่านที่พยายามจะป่วนเว็บไซต์ หากท่านเป็น "คนไทย" เช่นเดียวกันกับผม ก็ขอความกรุณาได้โปรดเห็นใจ "คนไทย" อีกจำนวนไม่น้อย ที่เข้ามาขอความช่วยเหลือ จากเว็บไซต์ของผมด้วยน่ะครับ และหากท่านใดไม่เข้าใจในตรงจุดไหน ก็ขอให้ระบุสิ่งที่อยากจะถามออกมา บทความของผมแทบทั้งหมดต้องอาศัยทักษะการปฏิบัติเป็นหลัก ดังนั้นขอให้ดู และ ทดสอบจากโค้ดโปรแกรมประกอบตามไปด้วย
    IP Address: 54.81.77.93
    ชื่อของคุณ:

    ข้อคิดเห็น:

    4 + 2 = ?  (กรุณาป้อนคำตอบลงในช่องด้านล่างให้เป็น ภาษาไทย ตามผลบวกของตัวเลขให้ถูกต้องก่อนด้วยน่ะครับ เช่น ศูนย์)
      


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