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

หรือติดต่อเข้ามาทาง 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
 5 2 1 6 9 2 7

7 ธันวาคม พ.ศ.2549
1478 Users On-Line.
Visitors - Page views
 8 5 3 9 8 1 5
1 กุมภาพันธ์ พ.ศ.2551

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

การอ่านไฟล์ และ โฟลเดอร์ใน Remove Drive (Flash/Thumb/Handy Drive) ภาค 1

Category »  VB 6/VB.Net
โดย : Webmaster เมื่อ 15/12/2551 17:03:00
(อ่าน : 19820) 

บทความนี้จะสาธยายให้เห็นวิธีการเข้าถึงไฟล์ข้อมูลต่างๆที่อยู่ในอุปกรณ์การเก็บข้อมูลแบบพกพา หรือ แบบถอดได้ (Remove Drive) รวมทั้ง Floppy Disk ด้วยน่ะครับ แต่ทว่ายุคนี้ สมัยนี้ เจ้าอุปกรณ์ตัวนี้ก็คงจะเหลือไว้เป็นเพียงแค่ตำนานที่เล่าขานไปแล้วมั้งเนี่ย ... 55555+ โดยเราจะใช้งานผ่านมาทาง Script Object แต่ ... แท้จริงแล้ว ... แนวทางนี้มันก็คือ วิธีการที่จะนำมาใช้สร้างเป็นไวรัสขึ้นมาก่อกวนประสาทผู้คนได้ดีๆนั่นเอง ดังนั้นบทความของผม ผมต้องการจะถ่ายทอดมุมมองของการศึกษาเรื่องราวที่เกี่ยวกับการจัดการไฟล์ โฟลเดอร์ และ ไดรฟ์ต่างๆที่อยู่ในเครื่องคอมพิวเตอร์ (เท่านั้น) ด้วยภาษา MS Visual Basic 6.0 ไม่ใช่หวังเำพื่อให้ผู้ที่ศึกษา นำมันมันไปสร้างเป็นปัญหาขึ้นมาน่ะครับ ... ขอได้โปรดจงเข้าใจในหัวอกน้อยๆของผู้ชาย (100%) ที่ชื่อ ทองก้อน ด้วยน่ะครับ ... เอิ๊กๆๆๆๆ

    เรื่องของ Script Object ประกอบไปด้วย
  1. FileSystem Object
  2. TextStream Object
แต่วันนี้ที่จะกล่าวถึงก็คือในเรื่องของ FileSystem Object ที่จะช่วยให้เราสามารถจัดการกับไดรฟ์ โฟลเดอร์ และ แฟ้มข้อมูลบน Drive ชนิดต่างๆได้ และก่อนที่จะใช้งาน FileSystem Object นั้นจะต้องมีการสร้าง Object ขึ้นมาก่อน เช่น
    สำหรับ M$ Visual Basic 6
  • Private FileSystem As New Scripting.FileSystemObject
    สำหรับ ASP Script
  • Dim FileSystem
  • Set FileSystem = Server.CreateObject("Scripting.FileSystemObject")
โดย FileSystem Object นี้เป็นประเภทของ Object แบบ Script (สังเกตุได้จากการใช้ค่าคงที่ "Script.FileSystemObject") โดยตัวแปรของ Object นี้จะมีชื่อว่า FileSystem ตัวแปร FileSystem ที่เราประกาศขึ้นมานั้น สามารถจัดการเกี่ยวกับ แฟ้มข้อมูล โฟลเดอร์ และ ไดรฟ์ โดยมี เมธอด (Method) (วิธีการที่เราสามารถจัดการกับ Object นั้น) ที่น่าสนใจดังต่อไปนี้

CopyFile, MoveFile
ใช้สำเนา หรือ ย้ายแฟ้มข้อมูล จากที่หนึ่งไปยังอีกที่หนึ่ง

CopyFolder, MoveFolder
ใช้สำเนา หรือ ย้ายโฟลเดอร์ จากที่หนึ่งไปยังอีกที่หนึ่ง

CreateFolder
ใช้สร้างโฟลเดอร์

DeleteFile, DeleteFolder
ใช้ในการลบแฟ้มข้อมูล และ โฟลเดอร์

DriveExists, FolderExists, FileExists
ใช้ในการตรวจสอบว่าไดรฟ์ โฟลเดอร์ หรือ แฟ้มข้อมูลมีอยู่หรือไม่

GetDrives, GetFolder, GetFile
ใช้ในการเรียกใช้งานเกี่ยวกับไดรฟ์ โฟลเดอร์ หรือ แฟ้มข้อมูล

เรามาลองดูตัวอย่างก็คือ การตรวจสอบไดรฟ์ โฟลเดอร์ และ แฟ้มข้อมูล มีอยู่จริงหรือไม่ เช่น
' จะให้ค่า True เมื่อมีไดรฟ์ C อยู่จริง
FileSystem.DriveExists("C:")

' จะให้ค่า True เมื่อมีโฟลเดอร์ temp ในไดรฟ์ C อยู่จริง
FileSystem.FolderExists("C:\temp")

' เช่นเดียวกับ 2 คำสั่งด้านบน จะให้ค่า True เมื่อ
' MyData.txt อยู่ในโฟลเดอร์ temp ภายใต้ไดรฟ์ C อยู่จริง
FileSystem.FileExists("C:\temp\MyData.txt")

หรือตัวอย่างในการลบโฟลเดอร์ และ ไฟล์ข้อมูล เช่น
FileSystem.DeleteFolder "C:\temp"
FileSystem.DeleteFile "C:\temp\MyData.txt"

 

  1. Project --> References ...
  1. Project --> Components ...
  1. Design Time
  2. สำหรับ Properties ของ List View Control
    Style = 1 - CheckBox
  1. ก่อนสั่งโปรแกรมทำงาน ผมลองทดสอบสร้างไฟล์ inf และ โฟลเดอร์ resycled จากนั้นให้นำไปซ่อนเอาไว้ (สมมุติว่ามันเป็นไวรัสล่ะกัน ... เอิ๊กๆๆๆๆ)
    ไปที่ Start --> Run --> cmd ... หรือ จะใช้งานผ่านช่องบัญชร (Windows) ไปเลยก็ได้น่ะครับพี่น้อง
  2. copy con autorun.inf (จากนั้นพิมพ์ค่าอะไรก็ได้ลงไป สิ้นสุดการเก็บข้อมูลให้กด Ctrl + Z)
  3. md resycled ... สร้างโฟลเดอร์ใหม่ (Make Directory)
  4. attrib +s +h + r autorun.inf ... นำไฟล์ไปซ่อนไว้
  5. attrib +s +h + r resycled ... นำโฟลเดอร์ไปซ่อนไว้
  1. Run Time ... มันน่าอัศจรรย์ใจครับพี่น้อง ... ไฟล์ และ โฟลเดอร์ที่ถูกซ่อนมันจะแสดงผลขึ้นมาให้เห็นเลย โดยที่ไม่ต้องไปตั้งค่า หรือ กำหนดโค้ดใดๆทั้งสิ้น (ไปแก้ใน Tools --> Folder Options ... ก็ไม่มีผลครับ ... พี่น้อง)
ดาวน์โหลด Source Code สำหรับ MS Visual Basic 6.0 - Service Pack 6
ดาวน์โหลดโปรแกรม ViewRemoveDrive.exe เพื่อนำไปใช้งานได้เลย (และต้องดาวน์โหลด VB6 Run-Time ด้านล่างนี้ไปด้วยน่ะครับ)
 ดาวน์โหลด Visual Basic 6.0 SP5: Run-Time Redistribution Pack
 ดาวน์โหลด Microsoft Data Access Object (MDAC) และ Jet 4.0 Update
 ดาวน์โหลด Microsoft Visual Basic Service Pack 6
เริ่มต้นกระบวนการทำงาน

' ประกาศค่าตัวแปรที่จำเป็น
Option Explicit

' ส่วนนี้เป็นการเรียกใช้งาน ScrRun.DLL
Private FSO As New Scripting.FileSystemObject

Dim mDrive As Drive    ' ไดรฟ์
Dim mFolder As Folder    ' โฟลเดอร์
Dim mFile As File    ' ไฟล์

' ขอเพิ่มเติมเรื่องของคุณสมบัติของตัว Drive เอง
DriveType ค่าตัวเลขที่บอกถึงประเภทของ Drive
' ค่า 0 หมายถึง ค่าที่ไม่สามารถระบุได้
' ค่า 1 หมายถึง Removable Drive
' ค่า 2 หมายถึง Fix Drive
' ค่า 3 หมายถึง Network Drive
' ค่า 4 หมายถึง CD Rom Drive
' ค่า 5 หมายถึง RAM Drive


' การอ่านไฟล์ทั้งหมดที่อยู่ใน Remove Drive (หรือ Flash/Thumb/Handy Drive)
Private Sub ViewFiles()
    On Error Resume Next
    ' ลูปจำนวน Drive ที่มี
    For Each mDrive In FSO.Drives
        ' ตรวจสอบว่ามี Drive และต้องเป็นแบบ Remove Drive เท่านั้น ... พวก Hard Drive ไม่ต้องเอามา
        If mDrive.IsReady = True And mDrive.DriveType = Removable Then
            ' ลูปจำนวนไฟล์ที่มีอยู่ใน Drive
            For Each mFile In mDrive.RootFolder.Files
                ' ในขณะที่แสดงผลรายชื่อไฟล์ออกมา ... หน่วยประมลผลกลาง หรือ CPU ไม่ได้ทำงานในส่วนนี้แล้ว
                ' ก็จะทำการส่งคืน CPU ไปให้กับระบบปฏิบัติการ (ซ่ะดีๆ)
                DoEvents
                
                ' แสดงรายชื่อไฟล์ออกมา เฉพาะที่คาดว่าอาจเป็นไวรัสก็ได้น่ะครับผม
                ' นับจากทางขวามา 3 ตัว (หรืออ่านเฉพาะนามสกุล) แล้วเปลี่ยนให้เป็นตัวอักษรตัวใหญ่ทั้งหมด
                ' เพื่อเป็นเงื่อนไขให้กับ Select Case ... พิจารณาความต่างจากการใช้ IF - THEN - ELSE ด้วยน่ะครับ
                'Select Case UCase$(Right(mFile.Path, 3))
                '    Case "BAT", "EXE", "COM", "INF", "VBS", "DLL", "OCX"
                '        lvwViewer.AddItem mFile.Path
                'End Select
                
                ' แสดงไฟล์ออกมาทั้งหมดเลย
                lvwViewer.AddItem mFile.Path
            Next
        End If
    Next
    
    ' อันนี้ก็แค่แจ้งรายการจำนวนไฟล์ครับผม
    fraViewer.Caption = " จำนวน " & lvwViewer.ListCount & " ไฟล์" & " "
End Sub

' การอ่านโฟลเดอร์ทั้งหมดที่อยู่ใน Remove Drive (หรือ Flash/Thumb/Handy Drive)
Private Sub ViewFolders()
    On Error Resume Next
    Dim nFiles As Integer
    
    nFiles = lvwViewer.ListCount
    
    ' ลูปจำนวน Drive ที่มี
    For Each mDrive In FSO.Drives
        ' ตรวจสอบว่ามี Drive และต้องเป็นแบบ Remove Drive เท่านั้น ... พวก Hard Drive ไม่ต้องเอามา
        If mDrive.IsReady = True And mDrive.DriveType = Removable Then
            ' ลูปจำนวนโฟลเดอร์ที่มีอยู่ใน Drive
            For Each mFolder In mDrive.RootFolder.SubFolders
                ' DoEvents ...
                ' การนำไปประยุกต์ใช้งานอีกอย่างก็คือ การส่งงานพิมพ์ เป็นจำนวนหน้ามากๆด้วยน่ะครับ ... พี่น้อง
                ' เพื่อให้ระบบปฏิบัติการ (OS) สามารถใช้งาน CPU ได้อย่างเต็มประสิทธิภาพ
                DoEvents
                
                ' แสดงชื่อโฟลเดอร์ออกมา
                lvwViewer.AddItem mFolder.Path
            Next
        End If
    Next
    
    ' ส่วนของการนับจำนวนไฟล์ หรือ โฟลเดอร์
    If nFiles <> 0 Then
        nFiles = lvwViewer.ListCount - nFiles
        fraViewer.Caption = fraViewer.Caption & " / จำนวน " & nFiles & " โฟลเดอร์" & " "
    Else
        fraViewer.Caption = fraViewer.Caption & " จำนวน " & lvwViewer.ListCount & " โฟลเดอร์" & " "
    End If
End Sub

' โปรแกรมย่อยในการลบไฟล์ หรือ โฟลเดอร์ที่เลือก
Private Sub cmdDelete_Click()
On Error Resume Next
Dim sRow As Integer
Dim lvwData As Integer
    
    lvwData = 0
    
    ' นับจำนวนที่คลิ๊กเครื่องหมายถูกหน้าไฟล์ (โฟลเดอร์)
    For sRow = 0 To lvwViewer.ListCount - 1
       If lvwViewer.Selected(sRow) = True Then
            lvwData = lvwData + 1
       End If
    Next
    ' ตรวจสอบก่อนว่ามีการเลือกเครื่องหมายถูกหน้าไฟล์ (โฟลเดอร์) เรียบร้อยแล้วหรือไม่
    If lvwData = 0 Then
        MsgBox "กรุณาเลือกไฟล์ (โฟลเดอร์) ที่ต้องการจะลบให้เรียบร้อยก่อนด้วย.", vbExclamation, App.CompanyName
        Exit Sub
    End If
    
    ' ถามยืนยันการลบไฟล์ (โฟลเดอร์)
    If MsgBox("คุณแน่ใจว่าต้องการลบไฟล์ (โฟลเดอร์) ออก?" & vbCrLf & _
                        "กด [OK] เมื่อต้องการลบ หรือ " & vbCrLf & _
                        "กด [Cancel] เมื่อต้องการยกเลิก.", vbOKCancel + _
                        vbQuestion + vbDefaultButton2, "ยืนยันการลบไฟล์ โฟลเดอร์") _
                        = vbCancel Then Exit Sub
    
    ' ลูปตามจำนวนรายการที่มีอยู่ใน ListView
    For sRow = 0 To lvwViewer.ListCount - 1
    DoEvents
        If lvwViewer.Selected(sRow) = True Then
            lvwViewer.ListIndex = sRow
            DoEvents
            ' กรณีที่มีการเลือกเครื่องหมายถูกหน้าไฟล์ (โฟลเดอร์)
            If lvwViewer.Selected(sRow) = True Then
                ' ตรวจสอบอีกครั้งว่ายังมีไฟล์ (โฟลเดอร์) อยู่หรือไม่ (FilesExists/FolderExists)
                If FSO.FileExists(lvwViewer.List(sRow)) = True Then
                    ' Method การลบไฟล์
                    FSO.DeleteFile lvwViewer.List(sRow), True
                    ' ลบรายการออกจาก ListView
                    lvwViewer.RemoveItem sRow
                ElseIf FSO.FolderExists(lvwViewer.List(sRow)) = True Then
                    ' Method การลบโฟลเดอร์
                    FSO.DeleteFolder lvwViewer.List(sRow), True
                    ' ลบรายการออกจาก ListView
                    lvwViewer.RemoveItem sRow
                End If
            End If
        End If
    Next
End Sub

' โปรแกรมย่อยในการเลือกไฟล์ทั้งหมด
Private Sub cmdSelectALL_Click()
Dim sRow As Integer
    On Error Resume Next
    For sRow = 0 To lvwViewer.ListCount - 1
        lvwViewer.ListIndex = sRow
        lvwViewer.Selected(sRow) = True
    Next
    lvwViewer.ListIndex = 0
End Sub

' โปรแกรมย่อยในการไม่เลือกไฟล์ทั้งหมด
Private Sub cmdDeselectALL_Click()
    On Error Resume Next
    Dim sRow As Integer
    For sRow = 0 To lvwViewer.ListCount - 1
        lvwViewer.ListIndex = sRow
        lvwViewer.Selected(sRow) = Not lvwViewer.Selected(sRow)
    Next
    lvwViewer.ListIndex = 0
End Sub

' โปรแกรมย่อยในการแสดงผลไฟล์ และ โฟลเดอร์ทั้งหมด
Private Sub mnuViewALL_Click()
    lvwViewer.Clear
    fraViewer.Caption = ""
    Call ViewFiles
    Call ViewFolders
End Sub

' โปรแกรมย่อยในการแสดงผลเฉพาะชื่อไฟล์
Private Sub mnuViewFiles_Click()
    lvwViewer.Clear
    fraViewer.Caption = ""
    Call ViewFiles
End Sub

' โปรแกรมย่อยในการแสดงผลเฉพาะโฟลเดอร์
Private Sub mnuViewFolders_Click()
    lvwViewer.Clear
    fraViewer.Caption = ""
    Call ViewFolders
End Sub
  1. เวลาที่สั่งให้โปรแกรมทำงานแล้วไม่มีผลใดๆเกิดขึ้น ให้ลองยกเลิกคำสั่ง On Error Resume Next ที่โปรแกรมย่อย ViewFiles หรือ ViewFolders ออกก่อนน่ะครับ หากได้ Error
    Run-Time Error '429'
    ActiveX component can't create object
  2. การแก้ไข ให้ไปที่ Start --> Run และพิมพ์คำสั่ง regsvr32 "c:\windows\system32\scrrun.dll" ... ก็จะช่วยแก้ไขปัญหาได้ครับผม
Conclusion:
สำหรับภาค 1 ก็เอาไว้เท่านี้ก่อนครับพี่น้อง ภาคต่อไปก็จะเป็นการนำเสนอ ด้วยการฝังโปรแกรมอันสุดประเสริฐของเราเข้าไปสู่ระบบ หากเวลาใดที่เสียบพวก Remove Drive เข้ามา โปรแกรมก็จะโผล่ขึ้นมาทำงาน เพื่อให้เรา (หรือผู้ใช้งาน) ได้เลือกลบ หรือ กำจัดไฟล์อันไม่พึงปรารถนาออกไปจากไดรฟ์ก่อนที่วายร้าย - ไวรัสมันจะเริ่มต้นทำงานได้ ... ไม่ต้องคอยมาง้อโปรแกรมกำจัดไวรัสซ่ะให้ยุ่งยาก และ สิ้นเปลือง
จี ทู จี เน็ต ดอต คอม - g2gNet Dot Com
เลขทะเบียนพาณิชย์อิเล็กทรอนิกส์ 0407314800231
CopyLeft © 2004 - 2099 g2gNet.Com All rights reserved.
Email: [email protected] หรือ โทร. 08-6862-6560