คอมพิวเตอร์ หน้าต่าง อินเทอร์เน็ต

ตัวอย่างโปรแกรม Vb6 บทช่วยสอนที่มีภาพประกอบบน Visual Basic.NET วาดบนแบบฟอร์ม

สวัสดีทุกคน ในบทความนี้ฉันต้องการแสดงรหัสที่มีประโยชน์สำหรับโปรแกรมขนาดเล็ก ซึ่งคุณสามารถใช้เขียนโปรแกรมที่จริงจังมากขึ้นของคุณเอง หรือคุณกำลังมองหาฟังก์ชันเหล่านี้ตามที่อธิบายไว้ที่นี่

รหัสทั้งหมดถูกใช้ในสภาพแวดล้อมการเขียนโปรแกรม Microsoft Visual Basic v6.0

ออกด้วยการยืนยัน

โปรแกรมประเภทแรก บ่อน้ำหรือฟังก์ชัน คือทางออกที่มีข้อความยืนยันการออก โดยทั่วไป ให้เปิดสภาพแวดล้อมการเขียนโปรแกรม Visual Basic สร้างโครงการมาตรฐาน จากนั้นวางปุ่มหนึ่งปุ่มบนแบบฟอร์ม คลิกที่ปุ่ม แล้วคุณจะเปิดหน้าต่างการแก้ไขโค้ด และคุณต้องวางโค้ดต่อไปนี้:

ข้อความบี๊บ Dim เป็นปุ่ม Dim สตริงและไอคอน เป็นชื่อ Integer Dim เป็นการตอบสนอง Dim สตริง เป็นข้อความ String = "คุณต้องการออกหรือไม่" title = "ออก" buttonasicons = vbYesNo + vbQuestion response = MsgBox(message, buttonasicons, title) If response = vbYes Then End End If !}

รหัสผ่านเพื่อเริ่มโปรแกรม

Dim Password, Pword PassWord = "12345" Pword = InputBox("ป้อนรหัสผ่าน") ถ้า Pword<>รหัสผ่าน จากนั้น MsgBox "รหัสผ่านไม่ถูกต้อง" สิ้นสุด สิ้นสุด ถ้า

โดยที่ 12345 คือรหัสผ่านในการรันโปรแกรม แต่รหัสนี้สามารถใช้ได้ทุกที่ที่คุณต้องการ

เอาต์พุตข้อความ

หากคุณต้องการแสดงข้อความสำหรับบางสิ่ง ให้ใส่สิ่งนี้ใน:

เสียงปี๊บ Dim ข้อความ As String Dim ปุ่มและไอคอน As Integer Dim title As String message = "Message" title = "Message" buttonasicons = vbOKOnly + vbexciamation MsgBox message, buttonsandicons, title !}

วาดบนแบบฟอร์ม

ส่วนตัว Sub Form_MouseDown(ปุ่มเป็นจำนวนเต็ม, Shift เป็นจำนวนเต็ม, X ​​เป็นจำนวนเต็ม, Y เป็นค่าเดียว) Form1.CurrentX = X Form1.CurrentY = Y End Sub ส่วนตัว Sub Form_MouseMove(ปุ่มเป็นจำนวนเต็ม, Shift เป็นจำนวนเต็ม, X ​​เป็นค่าเดียว, Y เป็น เดี่ยว) ถ้าปุ่ม = 1 จากนั้นบรรทัด (Form1.CurrentX, Form1.CurrentY)-(X, Y), QBColor(0) สิ้นสุดหากสิ้นสุดย่อย

คุณสามารถเปลี่ยนสีได้โดยใช้พารามิเตอร์ QBColor(0) เช่น แทนที่ 0 ด้วยตัวเลขอื่น

รีสตาร์ทคอมพิวเตอร์

ในการรีสตาร์ทคอมพิวเตอร์: วางปุ่มและวางรหัสต่อไปนี้:

Dim strComputer เป็นสตริง strComputer = "." ตั้งค่า objWMIService = GetObject("winmgmts:" & "(impersonationLevel=impersonate, (ปิดเครื่อง))!\\" _ & strComputer & "\root\cimv2") ตั้งค่า colOperatingSystems = objWMIService.ExecQuery("เลือก * จาก Win32_OperatingSystem") สำหรับ แต่ละ ObjOperatingSystem ใน colOperatingSystems ObjOperatingSystem.Reboot " เพื่อรีบูต ถัดไป

เรียกใช้โปรแกรมในสำเนาเดียว

ตัวอย่างต่อไปนี้จะช่วยให้คุณเรียกใช้โปรแกรมเพียงครั้งเดียว เช่น ในกรณีที่รีสตาร์ท มันจะส่งข้อความที่เกี่ยวข้อง วางรหัสแบบฟอร์ม:

Private Sub Form_Load() ถ้า App.PrevInstance = True จากนั้น MsgBox "เริ่มโครงการแล้ว!" สิ้นสุด สิ้นสุด ถ้า

การปิดเครื่องคอมพิวเตอร์

หากต้องการปิดคอมพิวเตอร์ คุณสามารถใช้รหัสต่อไปนี้:

Dim strComputer เป็นสตริง strComputer = "." ตั้งค่า objWMIService = GetObject("winmgmts:" & "(impersonationLevel=impersonate,(Shutdown))!\\" _ & strComputer & "\root\cimv2") Set colOperatingSystems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem") For แต่ละ ObjOperatingSystem ใน colOperatingSystems ObjOperatingSystem.ShutDown "เพื่อปิดเครื่องถัดไป

ยุติกระบวนการใดๆ

เพื่อสิ้นสุดกระบวนการ คุณสามารถใช้รหัสต่อไปนี้:

เชลล์ "Cmd /x/c taskkill /f /im ICQlite.exe", vbvhite

โดยที่แทนที่จะเป็น ICQlite.exe อาจมีกระบวนการใดก็ได้

คอมพิวเตอร์ทำงานนานแค่ไหน

ต่อไปนี้คือตัวอย่างวิธีการกำหนดสถานะการออนไลน์ของคอมพิวเตอร์ วิธีนี้ขึ้นอยู่กับการใช้ไลบรารี kernel32 ดังนั้นที่จุดเริ่มต้นของโค้ดแบบฟอร์ม ให้รวม DLL นี้ไว้ด้วย

ฟังก์ชันประกาศส่วนตัว GetTickCount Lib "kernel32" () ตราบ "และในโค้ดปุ่ม: Dim a_hour, a_minute, a_second a = Format(GetTickCount() / 1000, "0") "total seconds a_days = Int(a / 86400) a = a - a_days * 86400 a_hour = Int(a / 3600) a = a - a_hour * 3600 a_minute = Int(a / 60) a_second = a - a_minute * 60 MsgBox "คอมพิวเตอร์ของคุณกำลังทำงานอยู่" & Str(a_days) & " วัน " & Str(a_hour) _ & " ชั่วโมง " & Str(a_minute) & " นาที" & Str(a_second) & " วินาที"

เราได้กล่าวถึงคุณสมบัติง่ายๆ ที่สามารถใช้ได้เกือบทุกที่ ตอนนี้ มาดูตัวอย่างที่จริงจังมากขึ้น และสิ่งเหล่านี้สามารถช่วยคุณเขียนโครงการขนาดใหญ่ของคุณได้อย่างมาก

ตัวอย่างโฟลเดอร์

ลบไดเรกทอรี

ฟังก์ชันการประกาศส่วนตัว RemoveDirectory& Lib _ "kernel32" Alias ​​"RemoveDirectoryA" (ByVal lpPathName As String) "การลบไดเร็กทอรี (ว่าง!) PathName$ = "D:\t" code& = RemoveDirectory(PathName) ถ้า code& = 0 แล้วก็ "Error ลบไดเร็กทอรี Else "ไดเร็กทอรีถูกลบ End If

สร้างไดเร็กทอรี

Sub MakeDir (dirname As String) Dim i As Long, เส้นทาง As String Do i = InStr (i + 1, dirname & "\", "\") path = Left$(dirname, i - 1) If Right$(path , 1)<>":" และ Dir$(path, vbDirectory) = "" จากนั้นเส้นทาง MkDir จะสิ้นสุดหากวนซ้ำจนกว่า i >= Len(dirname) End Sub Private Sub Command1_Click() Call MakeDir("C:\Soft\1\2\3\ ") จบซับ

แสดงรายการโฟลเดอร์ทั้งหมดที่มีโฟลเดอร์ย่อย

เราเพิ่มช่องข้อความ 2 ช่องและปุ่มลงในแบบฟอร์ม ชื่อของช่องข้อความแรกคือ StartText ชื่อของช่องข้อความที่สองคือ OutText คุณสมบัติหลายบรรทัด = จริง ชื่อปุ่ม = CmdStart

การทำงานแบบคงที่ As Boolean Dim AllDirs As New Collection Dim next_dir As Integer Dim dir_name As String Dim sub_dir As String Dim i As Integer Dim txt As String หากรัน จากนั้นรัน = False CmdStart.Enabled = False CmdStart.Caption = "Stopping" Else running = True MousePointer = vbHourglass CmdStart.Caption = "หยุด" OutText.Text = "" DoEvents next_dir = 1 AllDirs.Add StartText.Text Do while next_dir<= AllDirs.Count dir_name = AllDirs(next_dir) next_dir = next_dir + 1 sub_dir = Dir$(dir_name & "\*", vbDirectory) Do While sub_dir <>"" ถ้า UCase$(sub_dir)<>"PAGEFILE.SYS" และ sub_dir<>"." และ sub_dir<>".." จากนั้น sub_dir = dir_name & "\" & sub_dir เมื่อเกิดข้อผิดพลาด ให้ดำเนินการต่อ ถัดไป หาก GetAttr(sub_dir) และ vbDirectory จากนั้น AllDirs.Add sub_dir End หาก sub_dir = Dir$(, vbDirectory) วนซ้ำ DoEvents หากไม่ทำงาน ให้ออกจาก Do Loop txt = "" สำหรับ i = 1 ถึง AllDirs.Count txt = txt & AllDirs(i) & vbCrLf Next i OutText.Text = txt MousePointer = vbDefault unning = False End If

ตอนนี้เราเรียกใช้โปรแกรมในฟิลด์ข้อความ StartText เราเขียน: C:\windows และคลิกที่ปุ่ม

ขนาดไดเร็กทอรี

Const MAX_PATH = 260 ประเภทส่วนตัว FILETIME dwLowDateTime As Long dwHighDateTime As Long End Type ประเภทส่วนตัว WIN32_FIND_DATA dwFileAttributes As Long ftCreationTime As Long ftLastAccessTime As FILETIME ftLastWriteTime As FILETIME nFileSizeHigh As Long nFileSizeTH As Long dwReserved0 Long dwFiserved1 Name cternate * Alternate String As Long dwReserved0 Long dwFiserved1ame * 14 End Type ฟังก์ชันประกาศส่วนตัว FindFirstFile Lib _ "kernel32" Alias ​​"FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long Private Declare Function FindNextFile Lib _ "kernel32" Alias ​​"FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long Private Declare Function FindClose Lib _ "kernel32" (ByVal hFindFile As Long) As Long Public Function SizeOf(ByVal DirPath As String) As Double Dim hFind As Long Dim fdata As WIN32_FIND_DATA Dim dblSize As Double Dim sName As String Dim x ตราบเท่าที่เกิดข้อผิดพลาด Resume Next x = GetAttr(DirPath) ถ้า Err แล้ว SizeOf = 0: ออกจากฟังก์ชัน ถ้า (x และ vbDirectory) = vbDirectory จากนั้น dblSize = 0 Err.Clear sName = Dir$(EndSlash(DirPath) & "*.*", vbSystem Or vbHidden Or vbDirectory) ถ้า Err.Number = 0 จากนั้น hFind = FindFirstFile(EndSlash(DirPath) & "*.*", fdata) ถ้า hFind = 0 จากนั้นออกจากฟังก์ชัน Do If (fdata.dwFileAttributes And vbDirectory) = vbDirectory จากนั้น sName = Left$(fdata.cFileName, InStr(fdata.cFileName, vbNullChar) - 1) ถ้า sName<>"." และชื่อ<>".." จากนั้น dblSize = dblSize + SizeOf(EndSlash(DirPath) & sName) End If Else dblSize = dblSize + fdata.nFileSizeHigh * 65536 + fdata.nFileSizeLow End หาก DoEvents วนซ้ำในขณะที่ FindNextFile (hFind, fdata)<>0 hFind = FindClose(hFind) End If Else On Error Resume Next dblSize = FileLen(DirPath) End If SizeOf = dblSize End Function Private Function EndSlash(ByVal PathIn As String) As String If Right$(PathIn, 1) = "\" จากนั้น EndSlash = PathIn Else EndSlash = PathIn & "\" End If End Function Private Sub Form_Load() "แทนที่ "D:\soft" ด้วยไดเร็กทอรีที่คุณต้องการทราบขนาดของ MsgBox SizeOf("D:\soft") / 1000000 จบซับ

ตัวอย่างการทำงานกับไฟล์

สำเนา

สมมติว่าเรามีไฟล์ชื่อ 1.txt ในโฟลเดอร์ C:\1\ และเราต้องคัดลอกไปที่ C:\2\ เราเขียนรหัสต่อไปนี้:

สำเนาไฟล์ "C:\1\1.txt","C:\2\1.txt"

บันทึก! หากไดเร็กทอรี 2 มีไฟล์ชื่อ 1.txt อยู่แล้ว ไฟล์นั้นจะถูกแทนที่ด้วย 1.txt จากไดเร็กทอรี 1

ฟังก์ชันประกาศส่วนตัว CopyFile Lib _ "kernel32.dll" นามแฝง "CopyFileA" _ (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long Private Sub Command1_Click() " คัดลอกไฟล์ C:\1.txt ถึง D :\1.txt Dim retval As Long " return value "คัดลอกไฟล์ retval = CopyFile("C:\1.txt", "D:\1.txt", 1) ถ้า retval = 0 แล้วก็ "ถ้า MsgBox ล้มเหลว" ไม่สามารถคัดลอก" อื่น ๆ "ถ้าตกลง MsgBox "ไฟล์ถูกคัดลอก" สิ้นสุด ถ้า สิ้นสุด Sub

การกำจัด

ตัวอย่างเช่น เราต้องการลบไฟล์ 1.txt จาก root ของไดรฟ์ C:\

ฆ่า ("C:\1.txt")

ทาง API

ฟังก์ชันการประกาศส่วนตัว DeleteFile Lib _ "kernel32.dll" นามแฝง "DeleteFileA" (ByVal lpFileName As String) As Long Private Sub Command1_Click() "Delete File C:\Samples\anyfile.txt Dim retval As Long" Return Value retval = DeleteFile( "C:\1.txt") ถ้า retval = 1 จากนั้น MsgBox "ลบไฟล์เรียบร้อยแล้ว" จบย่อย

ย้าย

ตัวอย่างเช่น คุณสามารถย้ายได้ดังนี้:

สำเนาไฟล์ "C:\1.txt","C:\2\1.txt" ฆ่า ("C:\1.txt")

แต่จะดีกว่านี้ (ผ่าน API):

ฟังก์ชันการประกาศส่วนตัว MoveFile Lib _ "kernel32.dll" นามแฝง "MoveFileA" _ (ByVal lpExistingFileName As String, ByVal lpNewFileName As String) As Long Private Sub Command1_Click() Dim retval As Long "Return Value retval = MoveFile("C: \1 .txt", "C:\2\1.txt") ถ้า retval = 1 จากนั้น MsgBox "ย้ายสำเร็จ" อื่น MsgBox "ผิดพลาด" จบ ถ้าจบย่อย

กำลังเปลี่ยนชื่อ

ในการเปลี่ยนชื่อไฟล์ 1.txt ที่อยู่ใน C:\ เป็น 2.txt คุณสามารถใช้รหัสต่อไปนี้:

สำเนาไฟล์ "C:\1.txt","C:\2.txt" ฆ่า ("C:\1.txt")

ทาง API

ฟังก์ชันการประกาศส่วนตัว MoveFile Lib _ "kernel32.dll" นามแฝง "MoveFileA" _ (ByVal lpExistingFileName As String, ByVal lpNewFileName As String) As Long Private Sub Command1_Click() Dim retval As Long " return value retval = MoveFile("C: \1 .txt", "C:\2.txt") ถ้า retval = 1 จากนั้น MsgBox "สำเร็จ" อย่างอื่น MsgBox "ผิดพลาด" จบ ถ้าจบย่อย

กำหนดขนาดไฟล์

สามารถกำหนดขนาดไฟล์ได้สองวิธี:

หากไฟล์สามารถเปิดได้ด้วยฟังก์ชัน OPEN คุณสามารถใช้ฟังก์ชัน LOF ได้

Dim FileFree เป็นจำนวนเต็ม Dim FileSize ยาว FileFree = FreeFile เปิด "C:\WIN\GENERAL.TXT" สำหรับอินพุตเป็น FileFree FileSize = LOF (FileFree) ปิด FileFree

หรือใช้ฟังก์ชัน FileLen

Dim lFileSize As Long FileSize = FileLen("C:\WIN\GENERAL.TXT")

ซ่อนนาฬิกาโดยทางโปรแกรม

เพิ่ม 2 ปุ่มและวางรหัส:

ตัวเลือกการประกาศส่วนตัวที่ชัดเจนฟังก์ชัน FindWindow Lib _ "user32" นามแฝง "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long ฟังก์ชันประกาศส่วนตัว FindWindowEx Lib _ "user32" นามแฝง "FindWindowExA" _ (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Private Declare Function ShowWindow Lib _ "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long Dim hnd As Long Private Sub Command1_Click() ShowWindow hnd, 0 End Sub Private Sub Command2_Click() ShowWindow hnd, 1 End Sub Private Sub Form_Load() hnd = FindWindow("Shell_TrayWnd", vbNullString) hnd = FindWindowEx(hnd, 0, "TrayNotifyWnd", vbNullString) hnd = FindWindowEx( hnd, 0, "TrayClockWClass", vbNullString) Command1.Caption = "ซ่อนนาฬิกา" Command2.Caption = "แสดงนาฬิกา" End Sub

เพิ่มไอคอนลงในถาด

เพิ่มโมดูล วางโค้ดลงไป:

ประกาศฟังก์ชัน Shell_NotifyIconA Lib _ "SHELL32" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Integer Public Const NIM_ADD = 0 Public Const NIM_MODIFY = 1 Public Const NIM_DELETE = 2 Public Const NIF_MESSAGE = 1 Public Const NIF_ICON = 2 Public Const NIF_TIP = 4 พิมพ์ NOTIFYICONDATA cbSize As Long hWnd As Long uID As Long uFlags As Long uCallbackMessage As Long hIcon As Long szTip As String * 64 End Type Public Function SetTrayIcon(Mode As Long, hWnd As Long, Icon As Long, tip As String) As Long Dim nidTemp เป็น NOTIFYICONDATA nidTemp.cbSize = Len(nidTemp) nidTemp.hWnd = hWnd nidTemp.uID = 0& nidTemp.uFlags = NIF_ICON หรือ NIF_TIP nidTemp.uCallbackMessage = 0& nidTemp.hIcon = ไอคอน nidTemp.szTip = เคล็ดลับ & Chray$(0) = Shell_NotifyIconA (โหมด, nidTemp) สิ้นสุดฟังก์ชัน

หากต้องการใช้การวางในรหัสแบบฟอร์ม:

Private Sub Form_Load() SetTrayIcon NIM_ADD, Me.hWnd, Me.Icon, "Test" End Sub "เพื่อลบ Private Sub Command1_Click() SetTrayIcon NIM_DELETE, Me.hWnd, 0&, "" End Sub

การปิดกั้นปุ่มเริ่มต้น

ฟังก์ชันประกาศส่วนตัว FindWindow Lib "user32" Alias ​​"FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As Long ฟังก์ชันประกาศส่วนตัว FindWindowEx Lib "user32" Alias ​​"FindWindowExA" _ (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) ตราบใดที่ฟังก์ชันประกาศส่วนตัว EnableWindow Lib "user32" _ (ByVal hwnd As Long, ByVal fEnable As Long) ตราบใดที่สาธารณะ Sub EnableStartButton (ตัวเลือก เปิดใช้งานเป็น Boolean = True) Dim lHwnd ตราบเท่าที่ " find hWnd lHwnd& = FindWindowEx(FindWindow("Shell_TrayWnd", ""), 0&, "Button", vbNullString) Call EnableWindow(lHwnd&, CLng(Enabled)) End Sub Private Sub Command1_Click() EnableStartButton False "ปุ่มเริ่ม ปิดใช้งาน End Sub Private Sub Command2_Click() EnableStartButton True "ปุ่ม Start ไม่ได้ถูกปิดใช้งาน End Sub

การอ่านพารามิเตอร์จากไฟล์ INI

โปรแกรมเชื่อมต่อกับ FTP และพารามิเตอร์ถูกเขียนในไฟล์ ini - เซิร์ฟเวอร์, ล็อกอิน, พอร์ต, รหัสผ่าน

ขั้นแรก สร้างไฟล์ INI:

ชื่อเซิร์ฟเวอร์ = ผู้ใช้เซิร์ฟเวอร์ = เข้าสู่ระบบ pwd = รหัสผ่าน พอร์ต = พอร์ต

จะต้องอยู่ในโฟลเดอร์ที่มีโปรแกรม ถัดไป ใส่เข้าไปในโมดูล:

ฟังก์ชันการประกาศส่วนตัว WritePrivateProfileString Lib _ "kernel32" นามแฝง "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, _ ByVal lpString As String, ByVal lpFileName As String) ตราบใดที่ฟังก์ชันประกาศส่วนตัว GetPrivateProfileString Lib _ "kernel32" นามแฝง "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, _ ByVal lpDefault As String, ByVal lpReturnedString As String, _ ByVal nSize As Long, ByVal lpFileName As String) ฟังก์ชันสาธารณะที่ยาว ReadIni (Razdel As String, Param) As สตริง ReadIni = GetValue (Razdel, Param, App.Path & "\test.ini", "0") สิ้นสุดฟังก์ชัน ฟังก์ชันส่วนตัว GetValue (ส่วน ByVal เป็นสตริง, _ ByVal คีย์เป็นสตริง, ByVal fFileName เป็นสตริง, เลือกได้ ByVal DefaultValue เป็น String = vbNullString) As String Dim Data As String Data = String$(1000, Chr$(0)) ถ้า GetPrivateProfileString(Section, Key, DefaultValue, Data, 1000, fFileName) > 0 แล้ว GetValue = Left$(Data, InStr( ข้อมูล$, Chr $(0)) - 1 ) อื่น GetValue = DefaultValue End ถ้าออกจากฟังก์ชัน End Function

จากนั้นวางรหัสแบบฟอร์ม:

ฟังก์ชันประกาศส่วนตัว InternetOpen Lib _ "wininet.dll" นามแฝง "InternetOpenA" (ByVal sAgent As String, ByVal nAccessType As Long, ByVal sProxyName As String, _ ByVal sProxyBypass As String, ByVal nFlags As Long) As Long ฟังก์ชันการประกาศส่วนตัว InternetConnect Lib _ "wininet.dll" นามแฝง "InternetConnectA" (ByVal hInternetSession As Long, ByVal sServerName As String, _ ByVal nServerPort As Integer, ByVal sUserName As String, ByVal sPassword As String, ByVal nService As Long, _ ByVal dwFlags As Long , ByVal dwContext As Long) As Long Private Declare Function FtpPutFile Lib _ "wininet.dll" Alias ​​"FtpPutFileA" (ByVal hFtpSession As Long, ByVal lpszLocalFile As String, _ ByVal lpszRemoteFile As String, ByVal dwFlags As Long, ByVal dwContext As Long) As Boolean Private Declare Function FtpGetFile Lib _ "wininet.dll" Alias ​​"FtpGetFileA" (ByVal hFtpSession As Long, ByVal lpszRemoteFile As String, _ ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, ByVal dwFlagsAndAttributes As Long, _ ByVal dwFlags ตราบเท่าที่ ByVal dwContext ตราบเท่าที่) เนื่องจากฟังก์ชันประกาศส่วนตัวแบบบูลีน InternetCloseHandle Lib _ "wininet.dll" (ByVal hInet ตราบเท่าที่) เป็นจำนวนเต็ม Dim rc& Dim rs&

และในรหัสปุ่ม:

rc& = InternetOpen("", 0, vbNullString, vbNullString, 0) rs& = InternetConnect(rc&, ReadIni("ทั่วไป", "ชื่อบริการ"), "0", _ ReadIni("ทั่วไป", "ผู้ใช้"), ReadIni( "ทั่วไป", "pwd"), 1, 0, 0) ถ้า FtpGetFile(rs&, "Your file.txt", "path", False, 0, 1, 0) = False จากนั้นวางสาย InternetCloseHandle(rs&) โทร InternetCloseHandle (อาร์ค&)

รายการกระบวนการที่กำลังทำงานอยู่

เพิ่มกล่องรายการและปุ่ม 1 วางรหัสต่อไปนี้:

ตัวเลือกประกาศส่วนตัวที่ชัดเจนฟังก์ชั่น CreateToolhelpSnapshot Lib _ "Kernel32" นามแฝง "CreateToolhelp32Snapshot" _ (ByVal lFlags ตราบเท่าที่ ByVal lProcessID ตราบ) ตราบที่ประกาศส่วนตัวฟังก์ชั่น ProcessFirst Lib _ "Kernel32" นามแฝง "Process32First" _ (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long Private Declare Function ProcessNext Lib _ "Kernel32" Alias ​​"Process32Next" _ (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long Private Declare Sub CloseHandle Lib "Kernel32" (ByVal hPass As Long ) Const ส่วนตัว TH32CS_SNAPPROCESS As Long = 2 & Private Const MAX_PATH As Integer = 260 ประเภทส่วนตัว PROCESSENTRY32 dwSize As Long cntUsage As Long th32ProcessID As Long th32DefaultHeapID As Long th32ModuleID As Long cntThreads As Long th32ParentProcessID As Long pcPriClassBase As Long dwFlags As Long Max_PA String ประเภทสิ้นสุดSnapho DimSnaphot Dim uProcess As PROCESSENTRY32 Dim r As Long Private Sub Command1_Click() List1.Clear hSnapShot = Cre ateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&) ถ้า hSnapShot = 0 จากนั้น Exit Sub End ถ้า uProcess.dwSize = Len(uProcess) r = ProcessFirst(hSnapShot, uProcess) Do while r List1.AddItem uProcess.szExeFile r = ProcessNext(hSnapShot, uProcess) Loop Call CloseHandle (hSnapShot) สิ้นสุดการย่อย

วางโปรแกรมเมื่อเริ่มต้น

เพื่อให้โปรแกรมโหลดด้วย Windows เช่นเดียวกับโปรแกรมอื่นๆ คุณสามารถใช้รีจิสทรีได้:

เพิ่ม 2 ปุ่มและรหัสต่อไปนี้:

Private Sub Command1_Click() "Registry Write Set Reg = CreateObject("WScript.Shell") Reg.RegWrite "HKLM\Software\Microsoft\Windows\CurrentVersion\Run\Name of your program", _ "เส้นทางไปยังโปรแกรมของคุณ" End Sub Private Sub Command2_Click() "ลบออกจากรีจิสตรี Set Reg = CreateObject("WScript.Shell") Reg.RegDelete "HKLM\Software\Microsoft\Windows\CurrentVersion\Run\Name of your program" End Sub

และเพื่อให้โปรแกรมโหลดด้วย Windows แม้ในเซฟโหมด โค้ดต่อไปนี้:

สำหรับผู้เริ่มต้นเป็นวิธีที่จริงจังกว่า (ทำสำเนาสำรองของรีจิสทรีในกรณี)

Private Sub Command1_Click() Set Reg = CreateObject("WScript.Shell") Reg.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon\Shell", _ "เส้นทางไปยังโปรแกรมของคุณ" จบ Sub Private Sub Command2_Click()" นี่สำหรับการกู้คืน Set Reg = CreateObject("WScript.Shell") Reg.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon\Shell", _ "Explorer.exe," End Sub

วิธีที่ง่าย

ส่วนตัว Sub Command1_Click() ตั้งค่า Reg = CreateObject("WScript.Shell") Reg.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon\Userinit", _ "C:\\WINDOWS\\system32\\userinit.exe ,พาธไปยังโปรแกรมของคุณ" End Sub Private Sub Command2_Click()"To restore Set Reg = CreateObject("WScript.Shell") Reg.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon\Userinit", _ "C: \\WINDOWS\\system32\\userinit.exe" ปิดท้าย

ซ่อนแถบงาน

เพิ่ม 2 ปุ่มและวางรหัส:

ฟังก์ชันการประกาศส่วนตัว SetWindowPos Lib "user32" (ByVal hwnd ตราบเท่าที่, _ ByVal hWndInsertAfter ตราบเท่าที่, ByVal x ตราบเท่าที่, ByVal y ตราบเท่าที่, _ ByVal cx ตราบเท่าที่, ByVal cy ตราบเท่าที่, ByVal wFlags ตราบเท่าที่) ตราบที่ประกาศส่วนตัว ฟังก์ชัน FindWindow Lib "user32" นามแฝง "FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) Const SWP_HIDEWINDOW = &H80 Const SWP_SHOWWINDOW = &H40 "ซ่อน Private Sub Command1_Click() hwnd1 = FindWindow("Shell_traywnd", " ") โทร SetWindowPos(hwnd1, 0, 0, 0, 0, 0, SWP_HIDEWINDOW) End Sub "แสดงส่วนตัว Sub Command2_Click() hwnd1 = FindWindow("Shell_traywnd", "") โทร SetWindowPos(hwnd1, 0, 0, 0, 0, 0, SWP_SHOWWINDOW) สิ้นสุดการย่อย

เปิดเครื่องรูดไฟล์เก็บถาวร RAR

ในการแตกไฟล์เก็บถาวร RAR คุณสามารถใช้รหัสต่อไปนี้:

WinRarApp = "C:\Program Files\WinRAR\WinRAR.exe x -o+" iPath = "C:\" iArhivName = "ชื่อไฟล์.rar" adr = WinRarApp & " """ & iPath & iArhivName & """ " "" & iPath & """ " RetVal = เชลล์(adr, vbHide)

มี RAM เท่าใดในคอมพิวเตอร์

เพิ่มปุ่มเดียวและวางรหัสต่อไปนี้:

เอกชนประกาศย่อย GlobalMemorystatus lib "Kernel32" (lpbuffer เป็น tmemorystatus) ประเภทส่วนตัว tmemorystatus dwlength ยาว dwmemoryload long dwtotalphys longatalfys ยาวตามยาว ประเภท Long End Dimmory ) ms.dwLength = Len(ms) Call GlobalMemoryStatus(ms) MsgBox "Total:" & ms.dwTotalPhys & vbCr & "Free:" _ & ms.dwAvailPhys & vbCr & "ใช้ใน % :" & ms.dwMemoryLoad สิ้นสุด Sub

ซ่อนไอคอนเดสก์ท็อป

ทำได้ด้วยวิธีต่อไปนี้ เพิ่ม 2 ปุ่มและวางรหัสต่อไปนี้:

ฟังก์ชันประกาศส่วนตัว ShowWindow& Lib "user32" (ByVal hwnd&, ByVal nCmdShow&) ฟังก์ชันประกาศส่วนตัว FindWindow Lib _ "user32" นามแฝง "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) Const SW_HIDE = 0 Const SW_NORMAL = 1 Private Sub Command1_Click() Dim hHandle As Long hHandle = FindWindow("progman", vbNullString) Call ShowWindow(hHandle, SW_HIDE) End Sub Private Sub Command2_Click() Dim hHandle As Long hHandle = FindWindow("progman", vbNullString) โทร ShowWindow (hHandle , SW_NORMAL) สิ้นสุดการย่อย

เมื่อใช้ปุ่ม Command1 ไอคอนจะถูกซ่อน Command2 - จะปรากฏขึ้น

นั่นคือทั้งหมดที่ฉันมี ฉันหวังว่าตัวอย่างข้างต้นจะเป็นประโยชน์กับคุณ ลาก่อน!

การใช้ฟังก์ชัน Split ใน VBA Excel ไวยากรณ์และตัวเลือกต่างๆ ค่าที่ส่งคืนโดยฟังก์ชัน Split ตัวอย่างการใช้.

ฟังก์ชัน Split ได้รับการออกแบบใน VBA Excel เพื่อแยกสตริงออกเป็นสตริงย่อยด้วยเครื่องหมายพิเศษ - ตัวคั่น ตัวคั่นสามารถเป็นได้ทั้งอักขระเดี่ยวหรือสตริงอักขระหลายตัว ฟังก์ชัน Split เป็นส่วนผกผันของฟังก์ชันที่สร้างสตริงเดียวจากอาร์เรย์ของสตริงย่อย

ไวยากรณ์ของฟังก์ชัน

แยก (นิพจน์ ,,,)

พารามิเตอร์ที่จำเป็นของฟังก์ชัน Split คือ Expression - หากไม่ได้ระบุพารามิเตอร์อื่นอย่างชัดเจน จะใช้ค่าเริ่มต้น

พารามิเตอร์ของฟังก์ชัน

*หากใช้การเปรียบเทียบแบบไบนารี (0 หรือ CompareMethod.Binary) ฟังก์ชันจะพิจารณาตัวพิมพ์เล็กและใหญ่ หากใช้การเปรียบเทียบข้อความ (1 หรือ CompareMethod.Text) ฟังก์ชันจะไม่พิจารณาตัวพิมพ์เล็กและใหญ่

คืนค่า

ฟังก์ชัน Split ส่งคืนอาร์เรย์หนึ่งมิติที่เป็นศูนย์ซึ่งมีข้อมูลที่ระบุ จำกัดจำนวนสตริงย่อย บ่อยที่สุด ฟังก์ชัน Split ใช้กับค่าพารามิเตอร์ จำกัดตามค่าเริ่มต้น เท่ากับ -1 เมื่อสตริงย่อยทั้งหมดที่พบในสตริงต้นทางถูกส่งคืน

ตัวอย่างที่ 1

Sub Test1() Dim a() As String a = Split("vremya ne zhdet") MsgBox a(0) & vbNewLine & a(1) & vbNewLine & a(2) จบผลลัพธ์ย่อยใน MsgBox: เวลา เน่ ซเด็ต

ตัวอย่างแรกใช้ ตัวคั่นและ จำกัดค่าเริ่มต้น.

ตัวอย่างที่ 2

Sub Test2() Dim a() As String a = Split("vremya-ne-zhdet","-", 2) MsgBox a(0) & vbNewLine & a(1) จบผลลัพธ์ย่อยใน MsgBox: เวลา ne-zhdet

ในตัวอย่างที่สอง ตัวคั่น= "-" และ จำกัด = 2.

การกำหนดผลลัพธ์ของฟังก์ชัน Split จะใช้ข้อความที่ประกาศไว้ล่วงหน้า ซึ่งสามารถใช้ในสตริงการกำหนดโดยมีหรือไม่มีวงเล็บว่างก็ได้ ในตัวอย่างข้างต้น อาร์เรย์ถูกระบุโดยไม่มีวงเล็บ

คุณสามารถคัดลอกรหัสจากตัวอย่างที่กำหนดลงในโมดูล VBA ของสมุดงาน Excel ของคุณและดูวิธีการทำงาน ทดลองแทนที่ข้อมูลของคุณเพื่อรับประสบการณ์จริงด้วยฟังก์ชัน Split

บทนี้จะแนะนำ "คลังแสง" พื้นฐานของ VB.NET เนื้อหาส่วนใหญ่ถูกย่อให้เป็นภาพรวมโดยย่อของแนวคิดที่มีอยู่ในภาษาโปรแกรมทั้งหมด (เช่น ตัวแปรและคำสั่งวนซ้ำ) และคำอธิบายของประเภทข้อมูลพื้นฐาน ส่วนใหญ่เป็นตัวเลขและสตริงต่างๆ ผู้อ่านที่คุ้นเคยกับ VB6 สามารถอ่านผ่านบทนี้ได้

ตัวอย่างบางส่วนในบทนี้แสดงโค้ดจริงที่สามารถใช้ในโปรแกรม VB.NET ที่จริงจังได้ ความจริงก็คือไม่มีโปรแกรม VB.NET ที่จริงจังสมบูรณ์หากไม่มีวัตถุ templated ที่เรียกว่าคลาส และหัวข้อนั้นจะกล่าวถึงในบทที่ 4 เราจะเริ่มต้นด้วยการสร้างภาษาพื้นฐาน เพราะไม่เช่นนั้นเราจะต้องจำกัดตัวเองให้อยู่ในคลาสดั้งเดิมที่ไม่มี ค่าปฏิบัติ บทนี้ไม่ครอบคลุมถึงคลาสที่ผู้ใช้กำหนด และแสดงเฉพาะตัวอย่างที่ง่ายที่สุดของวิธีใช้คลาส .NET Framework ในตัว ซึ่งมีประสิทธิภาพมาก

อะไรต่อจากนี้? น่าแปลกที่โปรแกรมที่เขียนในบทนี้มีสไตล์ที่คล้ายคลึงกันมากกับการเขียนโปรแกรมแบบดั้งเดิมจากยุค BASIC ยุคแรกๆ และแม้แต่ยุค Fortran และ COBOL ที่มาก่อน (ยกเว้นโครงสร้างไวยากรณ์ที่แปลกแต่จำเป็น) โดยเฉพาะอย่างยิ่ง ไม่เหมือนกับโปรแกรมในบทต่อๆ มา โปรแกรมเหล่านี้มักจะมีจุดเริ่มต้นและจุดสิ้นสุดที่ชัดเจน และการควบคุมจะถูกถ่ายโอนตั้งแต่ต้นจนจบ (แม้ว่าการควบคุมอาจถูกถ่ายโอนด้วยคำสั่งพิเศษ)

ตามที่กล่าวไว้ในบทนำ เราจะพยายามจัดเตรียมโปรแกรมที่เขียนในรูปแบบ .NET ปกติ โดยหลีกเลี่ยงความเข้ากันได้เทียมกับ VB6 ทุกครั้งที่ทำได้

ทุกแอปพลิเคชัน VB.NET ต้องมีจุดเริ่มต้น จุดเริ่มต้นประกอบด้วยรหัสที่ดำเนินการโดยอัตโนมัติเมื่อเริ่มต้นระบบ หลังจากนั้นการควบคุมจะถูกถ่ายโอนไปยังรหัสโปรแกรมที่เหลือ ในแอปพลิเคชันกราฟิกที่ค่อนข้างง่าย จุดเข้าใช้งานสามารถเชื่อมโยงกับรูปแบบเริ่มต้นได้ เช่นเดียวกับใน VB6 แต่อย่างที่คุณเห็นในบทที่ 1 โค้ด Windows Forms ค่อนข้างซับซ้อน และการค้นหาจุดเริ่มต้นอาจเป็นเรื่องยาก บทนี้ครอบคลุมเฉพาะคอนโซลแอ็พพลิเคชันที่ทำงานในหน้าต่างคอนโซล (เช่น หน้าต่างเซสชัน DOS) ใช่ VB.NET ทำให้การสร้างแอปพลิเคชันคอนโซลแบบเดิมที่มักใช้ในสคริปต์ฝั่งเซิร์ฟเวอร์เป็นเรื่องง่าย

จุดเริ่มต้นของคอนโซลแอ็พพลิเคชันคือขั้นตอน ย่อยหลักโมดูล (คล้ายกับขั้นตอน ย่อยหลักใน VB6) หากคุณเลือกไอคอนแอปพลิเคชันคอนโซลในกล่องโต้ตอบโครงการใหม่ ( แอปพลิเคชันคอนโซล) VB.NET จะสร้างแอปพลิเคชัน "โครงกระดูก" โดยอัตโนมัติโดยมีจุดเริ่มต้น - ขั้นตอน ย่อยหลัก:

โมดูล Module1 Sub Main() End Sub End Module

ไม่เหมือนกับ VB6 บรรทัดแรกระบุชื่อของโมดูล (คำสั่งเป็นตัวหนา) ในตัวอย่างนี้ จะใช้ชื่อดีฟอลต์คือ Modul el ตามกฎแล้วชื่อโมดูลต้องตรงกับชื่อไฟล์ สมมติว่าคุณเปลี่ยนชื่อโมดูลในบรรทัดแรก: Module Test1 เมื่อพยายามเรียกใช้คอนโซลแอ็พพลิเคชัน ข้อความแสดงข้อผิดพลาดจะแสดงขึ้น:

มีการระบุรหัสเริ่มต้น "Sub Main" ใน "Test.Modulel" แต่ไม่พบ "Test.Module"

การเปลี่ยนชื่อโมดูลหลังจากสร้างเสร็จดังนี้:

  1. เปลี่ยนชื่อโมดูลในหน้าต่างโปรแกรม
  2. เปลี่ยนชื่อไฟล์โมดูลในหน้าต่างโซลูชัน
  3. คลิกขวาที่บรรทัด แอปพลิเคชันคอนโซลหน้าต่างโซลูชัน และเลือกคำสั่งจากเมนูบริบท คุณสมบัติ.
  4. ตรวจสอบให้แน่ใจว่าอยู่ในรายการ วัตถุเริ่มต้นในกล่องโต้ตอบที่ปรากฏ (รูปที่ 3.1) ชื่อโมดูลจะถูกเลือก

โดยการเปรียบเทียบกับ VB6 โปรแกรม VB.NET (โซลูชัน) สามารถประกอบด้วยหลายโมดูล แต่มีขั้นตอน ย่อยหลักอนุญาตในโมดูลเดียวเท่านั้น แอปพลิเคชันจะหยุดทำงานเมื่อถึงคำสั่ง จบย่อยขั้นตอน ย่อยหลัก. ตัวอย่างเช่นโปรแกรม "Hello world" ในตำนานมีลักษณะดังนี้:

โมดูล Modul el Sub Main() Console.WriteLine("Hello world") End Sub End Module

หากคุณเรียกใช้โปรแกรมนี้ใน IDE หน้าต่าง DOS ที่มีคำว่า "Hello world" จะกะพริบบนหน้าจออย่างรวดเร็ว (และหายไปทันที) หน้าต่างจะปิดลงเมื่อประมวลผลคำสั่ง จบย่อย.

ฟังก์ชันส่งคืนอาร์เรย์หนึ่งมิติที่มีสตริงย่อยจำนวนหนึ่ง ฟังก์ชันนี้เป็นสิ่งที่ตรงกันข้ามกับฟังก์ชันการรวม

ไวยากรณ์

แยก( นิพจน์[, ตัวคั่น[, ขีด จำกัด [, เปรียบเทียบ]])

ตัวเลือก

การแสดงออก- นิพจน์ประเภทสตริงที่มีสตริงย่อยที่มีตัวคั่น
ตัวคั่น- นิพจน์ประเภท Variant (String) ที่ระบุอักขระที่จะใช้เป็นตัวคั่น หากไม่ระบุอาร์กิวเมนต์ จะใช้อักขระเว้นวรรค (" ")
จำกัดเป็นนิพจน์แบบยาวที่ระบุจำนวนองค์ประกอบที่จะส่งคืน ค่าเริ่มต้นคือ -1 (ส่งคืนองค์ประกอบทั้งหมด)
เปรียบเทียบ- พารามิเตอร์ตัวเลขที่ระบุวิธีการเปรียบเทียบ

พารามิเตอร์ เปรียบเทียบสามารถรับค่าต่อไปนี้:

คืนค่า

ส่งกลับอาร์เรย์หนึ่งมิติประเภท Variant (String)
ถ้าพารามิเตอร์ Expression มีความยาวเป็นศูนย์ ฟังก์ชันจะส่งคืนอาร์เรย์ว่าง ถ้าพารามิเตอร์ Delimiter มีความยาวเป็นศูนย์ ฟังก์ชันจะส่งคืนอาร์เรย์ที่มีองค์ประกอบ Expression หนึ่งรายการ

ตัวอย่างการใช้งาน

Private Sub Form_Load() Dim arrMyArray() As String Dim strMyString As String strMyString = "สวัสดี สบายดีไหม" arrMyArray = Split(strMyString) "คืนค่า "สวัสดี!" Debug.Print arrMyArray(0) End Sub

ดูสิ่งนี้ด้วย:อาร์เรย์ ,
สวัสดีทุกคน!
วันนี้ฉันอยากจะพูดเกี่ยวกับการเข้ารหัส ฉันทำตัวอย่างการใช้การเข้ารหัสพิเศษ - ซูรินาเม วิธีนี้จะซ่อนความจริงของการเข้ารหัสข้อมูล ซูรินาเมมีหลายประเภท ฉันต้องการพูดคุยเกี่ยวกับวิธี LBS ซึ่งข้อมูลถูกซ่อนอยู่ในบิตต่ำของข้อมูลเสียง ดูเหมือนว่าผู้ใช้กำลังแลกเปลี่ยนไฟล์เสียง แต่จริงๆ แล้วพวกเขากำลังแลกเปลี่ยนข้อมูลลับ ผู้ที่ไม่ทราบเกี่ยวกับวิธีนี้จะไม่สงสัยเกี่ยวกับการแลกเปลี่ยนข้อมูลลับ ในบางกรณีอาจมีประโยชน์มาก
มันทำงานอย่างไร?
ไฟล์ WAVE-PCM (ไม่มีการบีบอัด) มีข้อมูลเสียง อันที่จริง เสียงเป็นเหตุการณ์แบบแอนะล็อก กล่าวคือ ต่อเนื่อง. ในการทำให้เป็นดิจิทัล คุณต้องหาปริมาณด้วยการสูญเสียบางส่วน กระบวนการนี้มีพารามิเตอร์สองตัว: ความลึกของบิตและอัตราการสุ่มตัวอย่าง ความลึกของบิตจะส่งผลต่อจำนวนระดับสัญญาณที่สามารถบรรจุได้ในแต่ละตัวอย่าง อัตราตัวอย่างจะส่งผลต่อความถี่สูงสุดที่มีอยู่ในข้อมูลเสียง:

ในกรณีของเรา เราสนใจเฉพาะความลึกบิตของข้อมูลเสียงเท่านั้น สามารถเป็น 32, 24, 16, ... บิตต่อตัวอย่าง แนวคิดหลักของซูรินาเม (ในกรณีของเรา) คือการเขียนข้อมูลเสียงต่ำอีกครั้ง ยิ่งเราใช้บิตมากเท่าไหร่ การบิดเบือนก็จะยิ่งมากขึ้นเท่านั้น
ชัดเจน:


ดังที่เห็นได้จากรูป เมธอดนี้เก็บข้อมูลที่เข้ารหัสไว้ในข้อมูลเสียงบางบิต (ในกรณีนี้คือ 4 บิตต่อตัวอย่าง) โปรดทราบว่าในการบันทึกข้อมูล คุณต้องใช้ไฟล์เสียงที่มีขนาดใหญ่กว่าไฟล์ที่เข้ารหัส ตัวอย่างเช่น หากเราใช้การเข้ารหัส 3 บิต ไฟล์เสียงจะต้องมีขนาดใหญ่กว่าไฟล์ที่ถูกเข้ารหัสอย่างน้อย 16/3 เท่า ฉันพูดว่า 16 เพราะฉันใช้ 16 บิตต่อตัวอย่างในตัวอย่างของฉัน
ในตัวอย่างที่แนบมา ฉันยังเก็บชื่อไฟล์เดิมไว้ รูปแบบข้อมูลมีความชัดเจน:


เมื่อการบรรจุเกิดขึ้น แต่ละไบต์จะถูกดึงมาจากไฟล์ที่เข้ารหัส จากนั้นบิตที่จำเป็นจะถูกแยกออกจากไบต์ถัดไป และบิตที่เกี่ยวข้องในข้อมูลเสียงจะถูกล้างด้วย บิตเหล่านี้จะถูกตั้งค่าโดยใช้การดำเนินการระดับบิตหรือ มาสก์และชิฟต์ใช้เพื่อแยกบิตที่จำเป็น มาสก์จะทิ้งบิตที่จำเป็นไว้ และ Shift จะวางไว้ที่จุดเริ่มต้นของไบต์
การแกะกล่องเป็นสิ่งที่ตรงกันข้าม บิตถูกแยกออกจากไฟล์เสียงและประกอบไฟล์ต้นฉบับ สเปกตรัมของไฟล์เสียงขึ้นอยู่กับความลึกของบิต:

หวังว่ารีวิวเล็ก ๆ นี้จะเป็นประโยชน์
ขอขอบคุณสำหรับความสนใจของคุณ.