1. Khái quát
Khi cấu trúc của Windows được tạo ra, Microsoft có ý định tạo ra một số lớn các chức năng lập trình có giá trị cho mọi chương trình dựa trên nền Windows. Chiến thuật này phục vụ hai mục đích, cung cấp ứng dụng Windows một cái nhìn và cảm giác nhất quán cũng như khiến cho người lập trình khỏi phải sao chép lại các hàm mà đã được mã hóa và debug. Những hàm này được lưu trữ trong một dãy các thư viện liên kết động ( DLL ) và được biết như là giao diện lập trình ứng dụng ( API ). Từ khi phát triển thành hệ điều hành 32bit, Windows 95’ những phiên bản mới được biết đến như Win32 API. Một vài hàm trong Win32 API thì có giá trị như những lệnh Visual Basic, nhưng phần lớn thì được truy cập chỉ bằng cách gọi hàm API.
2. Các hàm API cơ bản dùng để quản lí File và Folder
2.1 Hàm truy xuất File
* GetLogicalDrives
Ý nghĩa: Xác định các kí tự của tất cả ổ đĩa luận lí trên hệ thống.
Khai báo:
Mã PHP:
Declare Function GetLogicalDrives Lib "kernel32" Alias "GetLogicalDrives" ( ) As Long
Giá trị trả về: Các bit trong kết quả này chỉ định các ổ đĩa luận lí tồn tại trên hệ thống.
* GetDriveType
Ý nghĩa: Hàm này cho biết loại của một đĩa cụ thể cho trước. Sử dụng kèm với hàm GetLogicalDriveStrings để biết được loại của những đĩa do hàm GetLogicalDriveStrings tìm được.
Khai báo:
Mã PHP:
Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Tham số
Mô tả
Ndrive
Một chuỗi chứa đường dẫn đến thư mục gốc của đĩa.
Các hằng số:
Mã PHP:
Const DRIVE_REMOVABLE = 2
Const DRIVE_FIXED = 3
Const DRIVE_REMOTE = 4
Const DRIVE_CDROM = 5
Const DRIVE_RAMDISK = 6
Giá trị trả về: 0 nếu đĩa không thể xác định được, 1 nếu thư mục đã chỉ định không tồn tại. Một trong số các hằng chỉ ra loại đĩa được mô tả bên trên thì thành công.
* FindFirstFile
Ý nghĩa: Tìm File - Folder dựa trên tên File đã cho.
Khai báo:
Mã PHP:
Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Tham số
Ý nghĩa
LpFileName
Tên File cần tìm. Có thể bao gồm các kí tự tìm kiếm ( *, ? ). Có thể bao gồm đường dẫn đầy đủ.
LpFindFileData
Một cấu trúc dữ liệu dùng để lưu trữ thông tin về File tìm được.
Kiểu dữ liệu:
Mã PHP:
Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type
Giá trị trả về: Một điều quản tìm kiếm nếu thành công, INVALID_HANDLE_VALUE nếu có lỗi. Điều quản này nên được đóng bởi hàm FindClose khi nó không còn cần thiết.
Điều quản trả về từ hàm này được sử dụng như một tham số cho hàm FindNextFile. Điều này cho phép ta lấy tất cả các File mà được so sánh với tên File đã được chỉ định bởi tham số lpFileName.
* FindNextFile
Ý nghĩa: Sử dụng kết hợp với hàm FindFirstFile để tìm File kế tiếp trong đường dẫn được chỉ ra trong hàm FindFirstFile. Hàm này tìm File kế tiếp ngay sau File đầu tiên hoặc File sau File được tìm thấy ở lần gọi hàm FindNextFile trước đó và được gọi lại nhiều lần cho đến khi tìm ra hết tất cả các File.
Khai báo:
Mã PHP:
Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Tham số
Ý nghĩa
HfindFile
Handle trả về từ hàm FindFirstFile.
LpFindFileData
Một cấu trúc dữ liệu dùng để lưu trữ thông tin của File tìm được.
Giá trị trả về: True (số khác 0 nếu thành công), 0 nếu có lỗi. Thiết lập GetLastError thành ERROR_NO_MORE_FILES khi không còn File nào để lấy.
* FindClose
Ý nghĩa: Chấm dứt việc tìm File đã được gọi bởi hàm FindFirstFile.
Khai báo:
Mã PHP:
Declare Function FindClose Lib "kernel32" Alias "FindClose" (ByVal hFindFile As Long) As Long
Tham số
Ý nghĩa
HfindFile
Một Handle được cung cấp bởi hàm FindFirstFile.
Giá trị trả về: số khác 0 nếu thành công, 0 nếu có lỗi.
* ExtractIcon
Ý nghĩa: Lấy một Icon trong các File.ICO,.EXE,.DLL
Khai báo:
Mã PHP:
Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long
Tham số
Ý nghĩa
Hlnst
Con số chỉ định
LpszExeFileName
Tên của File chứa Icon
NiconIndex
Chỉ số của Icon trong các File.ICO,.EXE,.DLL
* GetDiskFreeSpace
Ý nghĩa: lấy thông tin về sự tổ chức của đĩa và không gian còn trống.
Khai báo:
Mã PHP:
Private Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTotalNumberOfClusters As Long) As Long
Tham số
Mô tả
LpRootPathName: Đường dẫn gốc của ổ đĩa mà không phải là tên của ổ đĩa.
LpSectorsPerCluster: Một biến chứa số Sector trong một Cluster.
LpBytesPerSector: Một biến chứa số Byte trong một Sector.
LpNumberOfFreeCluster:Một bién chứa số Cluster trống trên đĩa.
LpTotalNumberOfCluster:Một biến chứa số Cluster trên đĩa.
Giá trị trả về: Số khác 0 nếu thành công, 0 nếu có lỗi. Hàm này không nên sử dụng trên Win ’95 cho ổ đĩa lớn hơn 2 GB
* GetFileAttributes
Ý nghĩa: xác định thuộc tính của một File cụ thể.
Khai báo:
Mã PHP:
Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
Tham số
Mô tả
LpFileName
Tên của File cần lấy thuộc tính
Hằng số:
Mã PHP:
FILE_ATTRIBUTE_ARCHIVE = &H20
FILE_ATTRIBUTE_COMPRESSED = &H800
FILE_ATTRIBUTE_DIRECTORY = &H10
FILE_ATTRIBUTE_HIDDEN = &H2
FILE_ATTRIBUTE_NORMAL = &H80
FILE_ATTRIBUTE_READONLY = &H1
FILE_ATTRIBUTE_SYSTEM = &H4
FILE_ATTRIBUTE_TEMPORARY = &H100
Giá trị trả về: -1 nếu có lỗi. Một giá trị chứa bit cờ cụ thể thuộc tính của File với bit cờ là một hằng số.
* GetFileSize
Ý nghĩa: Xác định kích cỡ của File.
Khai báo:
Mã PHP:
Private Declare Function GetFileSize Lib "kernel32" Alias "GetFileSize" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long
Tham số
Mô tả
HFile:Handle của File
LpFileSizeHigh:Giá trị số được nạp với 32 bit cao của 64 bit kích cỡ File. Có thể Null (thay đổi bởi Byval), nếu kích cỡ thì không tối thiểu bằng 2^32 Byte.
Giá trị trả về: Kích cỡ của File. &HFFFFFFFF nếu có lỗi. Nếu lpFileSizeHigh không phải là Null và kết quả là &HFFFFFFFF thì phải gọi GetLastError để xác định, nếu một lỗi thực sự xảy ra thì giá trị này là kết quả hợp lệ.
* GetFileTime
Ý nghĩa: Lấy thông tin thời gian của File đã được chỉ định.
Khai báo:
Mã PHP:
Private Declare Function GetFileTime Lib "kernel32" Alias "GetFileTime" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long
Tham số
Mô tả
Hfile
Một Handle của File
LpCreateTime:Một cấu trúc dữ liệu chứa thới gian tạo lập của File
LpLastAccessTime:Một cấu trúc dữ liệu chứa thời gian truy cập lần cuối của File (không được hổ trợ bởi hệ thống File FAT)
LpLastWriteTime:Một cấu trúc dữ liệu chứa thời gian cập nhật lần cuối của File
Giá trị trả về: số khác 0 nếu thành công, 0 nếu có lỗi.
* GetLogicalDriveString
Ý nghĩa: Lấy một chuỗi chứa đường dẫn ổ đĩa gốc của tất cả ổ đĩa luận lí tồn tại trên hệ thống.
Khai báo:
Mã PHP:
Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Tham số
Mô tả
- nBufferLengh:Chiều dài của chuỗi lpBuffer
- lpBuffer:Một chuỗi chứa tên các đĩa Logic. Mỗi tên được ngăn cách bởi kí tự Null, tên cuối cùng theo sau bởi 2 kí tự Null.
Giá trị trả về: số kí tự được nạp vào lpBuffer (ngoại trừ kí tự Null kết thúc ). Nếu Buffer không đủ dài để chứa đường dẫn, giá trị trả về sẽ là kích cở của Buffer cần thiết. 0 nếu có lỗi.
2.2 Hàm truy xuất Registry
a) Giới thiệu
Registry lưu trữ các dữ liệu liên quan đến hệ thống và các ứng dụng. Registry bao gồm một số tập tin mà hệ thống và các ứng dụng có thể truy cập đến và sử dụng để hiệu chỉnh thông tin cấu hình. Có ba loại tập tin mà lưu trữ tất cả các thông tin Registry là: System.dat, User.dat và các tập tin Policy.
Trong Win’95 Folder và mỗi một File được tạo ra bởi một chương trình khác nhau thì sẽ có các Icon khác nhau được lưu trữ trong các File liên kết hoãc các File chương trình. Các chương trình khi được cài đặt trên máy tính sẽ phải đăng kí Registry và đồng thời Registry lưu trữ các thông tin này để các ứng dụng khác có thể sử dụng để tham khảo khi cần thiết. Chúng ta có thể sử dụng chương trình Regedit của Win ’95 để xem và hiệu chỉnh Registry.
Thông tin trong Registry cũng được lưu trữ có cấp bậc và có các Key nắm giữ các thông tin khác nhau. Hình 3-1 minh họa cách lưu trữ trong Registry thông qua chương trình Regedit.
· Các loại thông tin lưu trữ trong Registry.
Registry có ba loại dữ liệu của các đối tượng là Key, Value, và Data.
KEY: Một Key có thể chứa các Key và các Value.
VALUE: Registry có thể có ba loại dữ liệu: chuỗi, thông tin nhị phân và giá trị DWORD. Giá trị mặc định thường là chuỗi, mặc dù nó xuất hiện như "(value not set)" cho đến khi nó chứa dữ liệu. Nếu dữ liệu bị loại bỏ thì nó chứa chuỗi rỗng "" thay vì "(value not set)".
DATA: Dữ liệu Registry thì thường đuợc chứa trong một value. Một mẫu dữ liệu thì thường không lớn hơn 64KB.
· Cách truy xuất Registry để lấy thông tin của các Icon chương trình.
Như chúng ta đã biết một File được lưu trữ sẽ có hai phần: phần tên và phần mở rộng, phần mở rộng này dùng để xác định kiểu của File. Trong Registry muốn biết được Icon tương ứng của một File chúng ta có thể lấy được thông tin về chương trình tạo ra File đó và từ đó có thể truy xuất đến key tương ứng để lấy được thông tin về icon mặc định ( đường dẫn chỉ vị trí File chứa Icon chương trình đó trên đĩa ) của chương trình.
B) Một số hàm API liên quan đến việc truy xuất Registry
* RegCloseKey
Ý nghĩa: Đóng một Registry key mà trước đó đã được mở bởi hàm API. Bạn phải đóng Registry key khi chấm dứt làm việc với nó.
Khai báo:
Declare Function RegCloseKey Lib "advapi32.dll" Alias "RegCloseKey" (ByVal hKey As Long) As Long
Tham số
Mô tả
hKey
Từ khóa để đóng có kiểu dữ liệu là Long
Giá trị trả về: trả về con số kiểu Long, 0 ( ERROR_SUCCESS) thì thành công. Tất cả các giá trị khác thì có lỗi trong mã.
* RegConnectRegistry
Ý nghĩa: Cho phép bạn truy cập vào một phần của Registry trên máy mạng
Khai báo:
Declare Function RegConnectRegistry Lib "advapi32.dll" Alias "RegConnectRegistryA" (ByVal lpMachineName As String, ByVal hKey As Long, phkResult As Long) As Long
Tham số
Mô tả
LpMachineName
Tên của hệ thống để connect tới có kiểu dữ liệu là kiểu chuỗi.
Hkey
Là HKEY_LOCAL_MAHCINE hoặc HKEY_USER kiểu dữ liệu Long.
PhkResult
Biến dùng để Load Handle với một khóa cụ thể.
Giá trị trả về: trả về con số kiểu Long, 0 ( ERROR_SUCCESS) thì thành công. Tất cả các giá trị khác thì có lỗi trong mã.
* RegCreateKey
Ý nghĩa: Cho phép bạn tạo một từ khóa mới trong Registry. Nếu từ khóa với cùng các thuộc tính có sẵn đã được mở.
Khai báo:
Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Tham số
Mô tả
hKey
Kiểu Long. Handle của một Key đã mở hoặc một số tiêu chuẩn của tên Key.
lpSubKey
Kiểu chuỗi. Tên của một SubKey mới để tạo. Bạn có thể tạo nhiều khóa cùng một lúc bởi dấu gạch chéo ngược giữa chúng.
VD: level1\level2\newkey
phkResult
Kiểu Long. Biến dùng để Load một Handle với subkey mới.
Giá trị trả về: Kiểu Long. 0 ( ERROR_SUCCESS) thì thành công. Tất cả các giá trị khác thì có lỗi trong mã.
* RegCreateKeyEx
Ý nghĩa: Hàm này cho phép bạn thêm vào thông tin bảo mật mà có thể được đặt trên thực thể Registry.
Khai báo:
Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult As Long, lpdwDisposition As Long) As Long
Tham số
Mô tả
HKey
Kiểu Long. Handle của một Key đã mở hoặc một số tiêu chuẩn của tên Key.
LpSubKey
Kiểu chuỗi. Tên của một SubKey mới để tạo. Bạn có thể tạo nhiều khóa cùng một lúc bởi dấu gạch chéo ngược giữa chúng.
VD: level1\level2\newkey
Reserved
Kiểu Long. Được thiết lập bằng 0.
LpClass
Kiễu chuỗi. Tên một lớp cho Key.
DwOptions
Kiểu Long. Bằng 0 hoặc hằng số sau: REG_OPITON_VOLATILE. Khóa này thì không lưu giữ lại mà biến mất sau khi khởi động lại hệ thống.
samDesired
Kiểu Long. Một hoặc nhiều hằng số có tiếp đầu ngữ là KEY_?? kết hợp với mô tả của mỗi tác vụ cho Key này.
lpSecurityAttributes
SECRUITY ATTRIBUTES. Mô tả cấu trúc bảo vệ cho Key này.
phkResult
Kiểu Long. Biến để Load một Handle với một subkey mới.
LpdwDisposition
Kiểu Long. Biến để Load một trong số ngững hằng số sau:
· REG_CREATED_NEW_KEY. Một Key mới vừa được tạo.
· REG_OPENED_EXISTING_KEY.Một Key đã có đượ mở.
Giá trị trả về: Kiểu Long. 0 ( ERROR_SUCCESS ) thì thành công. Tất cả các giá trị khác thì có lỗi trong mã.
Kiểu dữ liệu:
Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
* RegDeleteKey
Ý nghĩa: Xóa một Registry key và giá trị kết hợp của nó
Khai báo:
Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
Tham số
Mô tả
HKey
Kiểu Long. handle của một Key được mở hoặc một số tiêu chuẩn của tên Key.
LpSubKey
Kiểu chuỗi. Tên của một Key để Delete. Mọi subkeys của key đều được xóa.
Giá trị trả về: Kiểu Long. 0 ( ERROR_SUCCESS ) thì thành công. Tất cả các giá trị khác thì có lỗi trong mã.
* RegDeleteValue
Ý nghĩa: Xóa giá trị của một Registry key
Khai báo:
Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
Tham số
Mô tả
hKey
Kiểu Long. handle của một key được mở hoặc một số tiêu chuẩn của tên key.
lpValueName
Kiểu chuỗi. Tên của giá trị cần xóa. Có thể là vbNullString hoặc một chuỗi rổng cần xóa giá trị mặc định cho Key.
Giá trị trả về: Kiểu Long. 0 ( ERROR_SUCCESS ) thì thành công. Tất cả các giá trị khác thì có lỗi trong mã.
* RegEnumKey / RegEnumKeyEx
Ý nghĩa: Cho phép bạn truy xuất mỗi tên từng bước một của một subkey được định vị dưới một từ khóa cụ thể.
Khai báo:
Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long
Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As FILETIME) As Long
Tham số
Mô tả
Hkey
Kiểu Long. handle của một Key được mở hoặc một số tiêu chuẩn của tên Key.
DwIndex
Kiểu Long. Chỉ số của giá trị được lấy, giá trị đàu tiên là số 0.
LpName
Kiểu chuỗi. một buffer dùng để Load tên của key tại một chỉ số cụ thể.
lpcbName
Kiểu Long. một biến có chiều dài được định bởi lpName (bao gồm cả ký tự Null). Trả về một con số của ký tự được Load vào trong lpName hiện thời.
lpReserved
Kiểu Long. Không sử dụng, được thiết lập bằng 0.
lpClass
Kiểu chuỗi. Tên của một lớp được sử dụng cho Key. Có thể là vbNullString.
lpcbClass
Kiểu Long. một biến có chiều dài được định bởi lpClass. Trả về một con số của ký tự được Load vào trong buffer.
lpftLastWriteTime
FILETIME. thời gian sửa đổi lần cuối cùng của subkey được lấy.
Giá trị trả về: Kiểu Long. 0 ( ERROR_SUCCESS ) thì thành công. Tất cả các giá trị khác thì có lỗi trong mã.
Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
* RegEnumValue
Ý nghĩa: Cho phép bạn truy xuất mỗi tên từng bước một của một subkey được định vị dưới một từ khóa cụ thể.
Khai báo:
Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long
Tham số
Mô tả
hKey
Kiểu Long. handle của một Key được mở hoặc một số tiêu chuẩn của tên Key.
dwIndex
Kiểu Long. Chỉ số của giá trị được lấy, giá trị đàu tiên là số 0.
lpValueName
Kiểu chuỗi. một buffer dùng để Load tên của giá trị tại một chỉ số cụ thể.
lpcbValueName
Kiểu Long. một biến có chiều dài được định bởi lpValueName. Trả về một con số của ký tự được Load vào trong buffer.
lpReserved
Kiểu Long. không sử dụng, được thiết lập bằng 0.
lpType
Kiểu Long. Một biến dùng Load giá trị của loại mã.
lpData
Byte. Buffer dùng để Load dữ liệu dành cho giá trị.
lpcbData
Kiểu Long. một biến có chiều dài được định bởi lpData. Trả về một con số của byte được Load vào trong buffer.
Giá trị trả về: Kiểu Long. 0 (ERROR_SUCCESS ) thì thành công. Các giá trị khác thì lỗi.
* RegFlushKey
Ý nghĩa: Ghi thông tin vào Registry ngay lập tức.
Khai báo:
Declare Function RegFlushKey Lib "advapi32.dll" Alias "RegFlushKey" (ByVal hKey As Long) As Long
Tham số
Mô tả
hKey
Kiểu Long. Một Handle của một Key dùng để Flush.
Giá trị trả về: Kiểu Long. 0 (ERROR_SUCCESS ) thì thành công. Các giá trị khác thì bị lỗi.
* RegLoadKey
Ý nghĩa: Nạp thông tin Registry từ một tập tin đã được tạo trước đó bởi RegSaveKey.
Khai báo:
Declare Function RegLoadKey Lib "advapi32.dll" Alias "RegLoadKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpFile As String) As Long
Tham số
Mô tả
hKey
Kiểu Long. HKEY_LOCAL_MACHINE, HKEY_USERS hoặc một Key được tạo sử dụng RegConnectRegistry.
lpSubKey
Kiểu chuỗi. Tên của một subKey mới được tạo.
lpFile
Kiểu chuỗi. một tên File đã đăng ký.
Giá trị trả về: Kiểu Long. 0 (ERROR_SUCCESS ) thì thành công. Các giá trị khác thì bị lỗi.
* RegNotifyChangeKeyValue
Ý nghĩa: Cho phép ứng dụng của bạn quan sát việc đăng ký từ khóa và nhận được thông báo khi từ khóa bị thay đổi.
Khai báo:
Declare Function RegNotifyChangeKeyValue Lib "advapi32.dll" Alias "RegNotifyChangeKeyValue" (ByVal hKey As Long, ByVal bWatchSubtree As Long, ByVal dwNotifyFilter As Long, ByVal hEvent As Long, ByVal fAsynchronus As Long) As Long
Tham số
Mô tả
hKey
Kiểu Long. một handle của Key dùng để xem.
bWatchSubtree
Kiểu Long. TRUE (nonzero ) sẽ thất được subkey tương tự như một Key cụ thể.
dwNotifyFilter
Kiểu Long. Một hoặc nhiều hằng số sau đây: REG_NOTIFY_CHANGE_NAME:nhận biết việc đổi tên, tạo hoặc xóa một Key.
REG_NOTIFY_CHANGE_ATTRIBUTES: nhận biết việc thay đổi thuộc tính.
REG_NOTIFY_CHANGE_LAST_SET: xác định thời gian sửa đổi cuối cùng.
REG_NOTIFY_CHANGE_SECURITY: nhận biết việc thay đổi của việc bảo mật.
hEvent
Kiểu Long.Một Handle đến một Event. nếu bỏ qua thì fAsynchronus bằng False.
fAsynchronus
Kiểu Long.Nếu bằng 0 thì hàm không trả về cho đến khi một sự thay đổi được nhận biết. Nếu khác 0 thì hàm sẽ trả về và sự kiện của hEvent sẽ báo hiệu khi có sự thay đổi.
Giá trị trả về: Kiểu Long. 0 (ERROR_SUCCESS ) thì thành công. Các giá trị khác thì bị lỗi.
* RegOpenKey/ RegOpenKeyEx
Ý nghĩa: Mở một từ khóa được chỉ định. RegOpenKeyEx cũng mở một từ khóa nhưng thêm vào các tham số bảo mật.
Khai báo:
Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Tham số
Mô tả
hKey
Kiểu Long. handle của một Key được mở
lpSubKey
Kiểu chuỗi. tên của key để mở.
ulOptions
Kiểu Long. Không sử dụng và được thiết lập bằng 0.
samDesired
Kiểu Long. Một hoặc nhiều hằng số có tiếp đầu ngữ là KEY_?? kết hợp với việc mô tả mỗi tác vụ được cho phép đối với key.
phkResult
Kiểu Long. Biến để Load một Handle đến Key đượ mở.
Giá trị trả về: Kiểu Long. 0 (ERROR_SUCCESS ) thì thành công. Các giá trị khác thì bị lỗi.
* RegQueryInfoKey
Ý nghĩa: Cho phép ứng dụng của bạn lấy được thông tin về từ khóa.
Khai báo:
Declare Function RegQueryInfoKey Lib "advapi32.dll" Alias "RegQueryInfoKeyA" (ByVal hKey As Long, ByVal lpClass As String, lpcbClass As Long, lpReserved As Long, lpcSubKeys As Long, lpcbMaxSubKeyLen As Long, lpcbMaxClassLen As Long, lpcValues As Long, lpcbMaxValueNameLen As Long, lpcbMaxValueLen As Long, lpcbSecurityDescriptor As Long, lpftLastWriteTime As FILETIME) As Long
Tham số
Mô tả
Hkey
Kiểu Long. handle của Key được mở.
LpClass
Kiểu chuỗi. Một chuỗi để Load tên lớp cho Key
LpcbClass
Kiểu Long.Một biến mà chiều dài được xác định bởi lpClass. Trả về sẽ thiết lập con số kiểu Byte thực sự, Load vào buffer.
LpReserved
Kiểu Long. Không sử dụng và được thiết lập bằng 0.
LpSubKeys
Kiểu Long. một biến để Load con số của SubKey cho key này.
LpcbMaxSubKeyLen
Kiểu Long. Một biến dùng để Load chiều dài dài nhất của subkey name cho key này (không bao gồm ký tự NULL )
LpcbMaxClassLen
Kiểu Long. Một biến dùng để Load chiều dài dài nhất của tên lớp của subkey cho key này (không bao gồm ký tự NULL )
LpcValues
Kiểu Long. Một biến dùng để Load con số giá trị cho Key.
LpcbMaxValueNameLen
Kiểu Long. một biến dùng để Load giá trị tên với chiều dài lớn nhất của subkey cho Key (không bao gồm ký tự NULL )
LpcbMaxValueLen
Kiểu Long. Một biến để Load với kích cở yêu cầu của buffer để giữ giá trị dữ liệu lớn nhất cho Key này.
LpcbSecurityDescriptor
Kiểu Long. một biến dùng để Load có chiều dài bằng mô tả bảo mật của Key.
lpftLastWriteTime
Kiểu FILETIME. Một cấu trúc dùng để Load I gian tạo lập cuối cùng cho Key.
Giá trị trả về: Kiểu Long. Bằng 0 (ERROR_SUCCESS ) thì thành công. Các giá trị khác thì bị lỗi. Hàm trả về ERROR_MORE_DATA nếu như một trong các buffer không có đủ chi62u dài để chứa dữ liệu trả về.
* RegQueryValue/ RegQueryValueEx
Ý nghĩa: Lấy giá trị mặc định cho từ khóa. RegQueryValueEx lấy thông tin bảo mật của từ khóa.
Khai báo:
Declare Function RegQueryValue Lib "advapi32.dll" Alias "RegQueryValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpValue As String, lpcbValue As Long) As Long
Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Tham số
Mô tả
hKey
Kiểu Long. Handle của một Key được mở.
lpValueName
Kiểu chuỗi. Tên của giá cần lấy.
lpReserved
Kiểu Long.Không được sử dụng và được thiết lập bằng 0.
lpType
Kiểu Long.Một biến dùng để Load có kiểu dữ liệu cần tìm.
lpData
Mọi kiểu dữ liệu. Một buffer dùng để Load với một giá trị cụ thể.
lpcbData
Kiểu Long.Một biến mà có chiều dài được định bởi lpData. Khi trả về thì thiết lập con số kiểu Byte để Load vào bộ đệm
Giá trị trả về: Kiểu Long. 0 (ERROR_SUCCESS ) thì thành công, các giá trị khác thì bị lỗi.
* RegReplaceKey
Ý nghĩa: Thay đổi thông tin Registry của một File và tạo File Backup của thông tin đã thay đổi.
Khai báo:
Declare Function RegReplaceKey Lib "advapi32.dll" Alias "RegReplaceKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpNewFile As String, ByVal lpOldFile As String) As Long
Tham số
Mô tả
HKey
Kiểu Long. handle của một key được mở.
LpSubKey
Kiểu chuỗi. tên của subkey cần Replace, nó phải là thư mục nằm trong HKEY_LOCAL_MACHINE hoặc HKEY_USERS.
LpNewFile
Kiểu chuỗi. Tên của File chứa thông tin đăng ký, File này được tạo bằng cách sử dụng hàm RegSaveKey.
LpOldFile
Kiểu chuỗi. Tên của File khi Backup thông tin đăng ký hiện tại.
Giá trị trả về: Kiểu Long. 0 ( ERROR_SUCCESS ) thì thành công, các giá trị khác thì bị lỗi.
* RegRestoreKey
Ý nghĩa: Khôi phục thông tin từ một tập tin mà đã được tạo bởi hàm RegReplaceKey.
Khai báo:
Declare Function RegRestoreKey Lib "advapi32.dll" Alias "RegRestoreKeyA" (ByVal hKey As Long, ByVal lpFile As String, ByVal dwFlags As Long) As Long
Tham số
Mô tả
Hkey
Kiểu Long. handle của một Key mở.
LpFIle
Kiểu chuỗi. Tên của File cần Restore thông tin.
dwFlags
Kiểu Long. 0 thì trả lại giá trị như cũ. REG_WHOLE_HIVE_VOLATIVE dùng để khôi phục lại thông tin tạm thời ( chưa Save khi hệ thống khởi động lại ). Trong trường hợp này thì hKey phải tham khỏa đến HKEY_LOCAL_MACHINE hoặc HKEY_USERS.
Giá trị trả về: Kiểu Long. 0 ( ERROR_SUCCESS ) thì thành công, các giá trị khác thì bị lỗi.
* RegSaveKey
Ý nghĩa: Lưu một Registry key cũng như tất cả các subkey của nó lên một File trên đĩa. Tập tin này có thể được sử dụng sau đó bởi hàm RegLoadKey.
Khai báo:
Declare Function RegSaveKey Lib "advapi32.dll" Alias "RegSaveKeyA" (ByVal hKey As Long, ByVal lpFile As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
Tham số
Mô tả
HKey
Kiểu Long. Handle của một Key mở.
LpFIle
Kiểu chuỗi. Tên của Disk để lưu giữ thông tin cần đăng ký.
LpSecurityAttributes
SECRITY_ATTRIBUTES. Thông tin bảo mật cho thông tin vừa được lưu. Có thể là Null để mặc định thông tin bảo mật
Giá trị trả về: Kiểu Long. bằng 0 (ERROR_SUCCESS ) thì thành công. Các giá trị khác thì bị lỗi.
* RegSetValue/ RegSetValueEx
Ý nghĩa: Thay đổi giá trị của một từ khóa cụ thể.
Khai báo:
Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long
Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
Tham số
Mô tả
HKey
Kiểu Long. handle của một Key mở
LpValueName
Kiểu chuỗi. Tên của giá trị được thiết lập.
Reserved
Kiểu Long. Không sử dụng và được thiết lập bằng 0.
DwType
Kiểu Long. Kiểu dữ liệu để thiết lập.
LpData
Kiểu Byte. Byte đầu tiên trong trong buffer chứa dữ liệu.
CbData
Kiểu Long. chiều dài của buffer lpData.
Giá trị trả về: Kiểu Long. bằng 0 (ERROR_SUCCESS ) thì thành công. Các giá trị khác thì bị lỗi.
* RegUnloadKey
Ý nghĩa: Đóng và loại bỏ khỏi bộ nhớ một từ khóa đã được mở trước đó bởi hàm RegLoadKey.
Khai báo:
Declare Function RegUnLoadKey Lib "advapi32.dll" Alias "RegUnLoadKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
Tham số
Mô tả
HKey
Kiểu Long. HKEY_LOCAL_MACHINE, HKEY_USERS, hoặc một Key đã được mở sử dụng hàm RegConnectRegistry.
LpSubKey
Kiểu chuỗi. tên của SubKey để UnLoad. Phải được Load trước đó bằng hàm RegLoadKey.
Giá trị trả về: Kiểu Long. bằng 0 (ERROR_SUCCESS ) thì thành công. Các giá trị khác thì bị lỗi.
Nguồn :
http://www.echip.com.vn
Tiếp tục....
VB có 6 lệnh tương tác trực tiếp với hệ điều hành:
ChDrive (Drive as String) ' thay đổi ổ đĩa đăng nhập đối với hệ điều hành nền
VD: ChDrive ("D:\")
ChDir (Path as String) ' thay đổi thư mục hiện hành
VD: ChDir ("C:\Windows\Temp")
MkDir (Path as String) ' tạo mới thư mục
VD: MkDir ("C:\MyDir") ' tạo mới thư mục MyDir trên ổ C
RmDir ("Path as String") ' loại bỏ một thư mục
VD: RmDir ("C:\MyDir")
Name [Source] As [Dest] ' đổi tên và di chuyển tập tin
VD: Name "C:\myFile.txt" As "D:\FileChua.txt" sẽ move tập tin myFile.txt từ C:\ đến D:\ với tên mới: FileChua.txt
Kill (PathName as String) ' xoá tập tin với tham số PathName chấp nhận ký tự đại diên (như Dos)
VD: Kill ("C:\*.txt") sẽ xoá tất cả tập tin có phần mở rộng là txt trong thư mục gốc của ổ C
-------------------------------------------------------------------------------------------------------
Ôn lại một chút về khái niệm "hiện hành" có từ thời của Dos để hiểu rõ hơn về 6 lệnh này của Vb vì thực sự chúng rất mạnh.
Ví dụ khi file thực thi của bạn nằm tại "C:\MyDir\MyFile.exe" thì lệnh MkDir ("NewDir") sẽ tạo mới một Path: "C:\MyDir\NewDir" tức là thư mục NewDir nằm cùng cấp với MyFile.exe. Nhưng nếu trước đó có câu lệnh ChDir ("C:\Windows") thì lệnh trên sẽ tạo Path: "C:\Windows\NewDir". Tương tự như vậy với lệnh ChDrive. Quan trọng là bạn phải biết "mình đang ở đâu?" bằng không với câu lệnh không chỉ rõ Path: Kill (*.*) sẽ bụp sạch các File không mong muốn nếu trước đó đã xài ChDir mà quên.
--------------------------------------------------------------------------------------------------------
CurDir (Drive) ' trả về một chuỗi với tên đầy đủ của ổ đĩa hiện hành nếu tham số Drive để trống ( )
VD:
CurDir ( ) ---> tên ổ đĩa hiện hành
CurDir ( "D") ---> tên đầy đủ "D:\"
CurDir ("X") ---> sẽ báo lỗi nếu hệ thống không có tới ổ thứ X này
Dir (PathName, Attributes) ' tìm kiếm tập tin với đường dẫn đặt tại tham số 1. Tham số 2(Attributs) tùy chọn để chuyên biệt thuộc tính tìm kiếm. Mặc định la vbNormal
VD:
tmp = Dir ("C:\boot.ini") ---> tmp = ""
tmp = Dir ("C:\boot.ini", vbHidden) ---> tmp = "boot.ini"
FileCopy (Source as String, Destination as String) ' sao chép tập tin từ đường dẫn nguồn (Source) đến đường dẫn khác (Destination)
VD:
Filecopy "C:\Config.sys", "D:\Config.sys"
Filelen (PathNam As String) As Long ' trả về kích thước của tập tin
FileDateTime (PathName as string) ' trả về ngày tháng và thời gian tập tin đã được tạo ra hoặc được chỉnh sữa lần gần nhất.
VD:
Msgbox FileDateTime ("C:\Config.sys")
GetAttr (PathName as String) as Integer ' trả về một số nguyên là trị thuộc tính của File
Các hằng thuộc tính gồm:
vbNormal = 0
vbReadOnly = 1
vbHiden = 2
vbSystem = 4
vbVolume = 8
vbDirectory = 16
vbArchive = 32
VD:
GetAttr "C:\boot.ini" = 35 (file Boot.ini mang các thuộc tính sau: ReadOnly(1) + Hiden(2) + Archive(32)
SetAttr (PathName as String, Attributes as vbFileAttribute) ' Xác lập thông tin thuộc tính của File. Sử dụng các hằng thuộc tính hoặc các giá trị ở bảng trên cho tham số Attributes
VD:
SetAttr "C:\Boot.ini, 0" ---> xác lập file boot.ini chỉ mang một thuộc tính là Normal
SetAttr "C:\Boot.ini,3" ---> xác lập boot.ini mang thuộc tính chỉ đọc và ẩn.
FreeFile ' trả về một số integer là chỉ số (ID) để HDH theo dõi và quản lý các file đang mở (Open). Dùng một biến nguyên để lưu giá trị này dùng cho các cuôc gọi lệnh Open (file). Khi đó ta không cần quan tâm đến các chỉ số(ID) này nữa. FreeFile sẽ theo dõi và cung cấp cho ta các chỉ số(ID) chưa dùng.
VD:
Mã PHP:
Dim Filenum#
FileNum = FreeFile
Open [PathName] For Output As #Filenum
Open [PathName as String] For [Mode] As [ID File] ' Mỗi khi thấy lệnh Open, VB sẽ sẵn sàng cho các thao tác đọc và ghi lên File được cung cấp ở tham số [PathName]. Có năm chế độ mở tập tin được đặt ở tham số [Mode], và [ID File] dĩ nhiên là chỉ số của tập tin đang mở.
Các dạng thức cơ bản của lệnh Open:
Open [Pathname] For Input As Filenum ' mở File và chỉ đọc được thông tin, không ghi lên được.
Open [PathName] For Output As Filenum ' mở File để xuất thông tin. Khi được mở theo dạng này mọi thông tin cũ trên File sẽ bị mất.
Open [PathName] For Append As Filenum ' mở File để đọc và ghi tiếp lên được.
Open [PathName] For Random As Filenum ' mở và truy cập ngẫu nhiên các bản ghi và các trường trên File (phải biết được cấu trúc của các bản ghi)
Open [PathName] For Binary As Filenum ' đọc ghi theo Byte. Đây là dạng tổng quát và linh hoạt nhất.
Input [Number, #Filenum] ' đọc nội dung File với số lượng xác định ở tham số Number
VD: Str = Input (10, #Filenum) ' đọc 10 ký tự vào biến Str.
Dạng khác của Input:
Input [#Filenum, Str] ' ở đây biến Str thường ở dạng Variant
Line Input [#FileNum, Str] ' đọc thông tin theo từng dòng vào biến Str. Thường kết hợp với hàm EOF để lấy hết thông tin
EOF (Filenum) ' trả về vị trí chấm dứt của File khi đang mở
VD:
Mã PHP:
Do While Not EOF (Filenum) ' lập nếu không phải ở end of file
Line Input #Filenum, Str ' đọc từng dòng vào biến Str
Loop
LOF (Filenum) ' trả về kích thước của File khi đang mở.
VD:
Mã PHP:
Str = Input (LOF(Filenum), #Filenum)
' sẽ lấy hết nội dung của File (không nên sử dụng với File có kích thước vài Mb sẽ bị lỗi "out of memory")
Write [#Filenum, Expression] ' ghi lên File
VD:
Write #FileNum, "12345" ---> "12345"
Write #Filenum, 12345 --->12345
Print [#Filenum, Expression] ' làm việc chính xác như khi Print lên Form
VD:
---> 123 456
Get [#Filenum, position, ByteArray] ' lấy thông tin từ tập tin được mở theo Binary tại vị trí xác định bởi Position và lưu vào ByteArray. Số byte lấy ra tùy thuộc vào kích thước của mảng ByteArray. Mỗi khi lấy ra 1 byte con trỏ tập tin tự động chuyển tới vị trí byte kế tiếp.
VD:
Get #Filenum, 3, Str ---> lấy 4 byte bắt đầu từ byte thứ 3 lưu vào Str.
(nếu có câu lệnh Get tiếp theo mà tham số Position bỏ trống, thì vị trí bắt đầu lấy ra sẽ là byte thứ 8)
Loc (#Filenum) ' Trả về vị trí byte đọc/ghi hiện tại trong tập tin đang mở.
Seek [#Filenum, Position] ' dịch chuyển con trỏ tập tin đến vị trí qui định bởi tham số Position
VD:
Seek #Filenum, 3
Get #Filenum, , Str ---> vị trí lấy ra sẽ bắt đầu tại byte thứ 3
Seek (#Filenum) ' trả về vị trí hiện tại của con trỏ tập tin
Put [#Filenum, Position, ByteArray] ' đặt nội dung của mảng ByteArray vào vị trí byte thứ[Position].
Lệnh Put se ghi đè lên mọi thứ và chỉ dùng cho truy cập Random và Binary
VD: Put #filenum, , Str ---> sẽ ghi 4 byte bắt đầu ở vị trí byte thứ 1
Reset ' Đóng tất cả các tập tin đã được mở bằng lệnh Open
Code:
Mã PHP:
Option Explicit
Private Sub Form_Load()
Dim FileNumber
For FileNumber = 1 To 5
Open "TEST" & FileNumber For Output As #FileNumber ' Mở file
Write #FileNumber, "Hello World" ' Ghi dữ liệu vào file.
Next FileNumber
Reset ' Đóng file và cập nhật dữ liệu vào file
End Sub
Close (#Filenum) ' Đóng tập tin đã được mở bằng lệnh Open.
Lock [#Filenum, Expression] ' khoá tập tin không cho người khác truy cập khi App của bạn đang mở. Tham số thứ hai chuyên biệt vị trí khoá. Nếu bỏ qua tham số tùy chọn này, lệnh Lock sẽ khoá toàn bộ tập tin. Đối với các tập tin mở theo truy cập tuần tự lệnh Lock sẽ khoá toàn bộ tập tin bất kể khoảng do tham số 2 qui định.
VD:
Lock #Filenum, 1 To 100 ---> sẽ khoá 100 byte từ byte thứ 1
Unlock [#Filenum, Expression] ' mở khoá tập tin, tham số sử dụng như Lock.
Chú ý: cần bảo đảm loại bỏ tất cả các khoá với câu lệnh Unlock tương ứng trước khi đóng tập tin hoặc thoát khỏi chương trình(các đối số phải tương hợp chính xác). Nếu không tập tin có thể bị rối loạn.
----------------------------------------------------------------------------------------------------------
Để điều khiển sự chia sẽ tập tin vào thời gian bạn mở tập tin. Có thể dùng câu lệnh tổng quát nhất của lệnh Open
Cú pháp:
Open PathName [For mode] [Access access] [Lock] As #Filenum [Len=reclength] ' trong đó:
PathName là chuỗi chứa đường dẫn đến tập tin
Mode là từ khoá chuyên biệt chế độ tập tin như Input, Append, Random...
Access là từ khoá chuyên biệt các thao tác được phép trên tập tin mở. Có ba thao tác: Read, Write, ReadWrite VD:Open PathName For Binary Access Read As #Filenum --> cho phép bạn đọc nhưng không cho phép thực hiện các thay đổi đối với tập tin.
Lock là từ khoá chuyên biệt các thao tác được phép trên tập tin mở đối với các quá trình khác.
Khác với Access : điều khiển cách thức chương trình bạn làm việc với tập tin. Với từ khoá Lock có bốn khả năng:
1- [Shared] các quá trình khác có thể đọc và viết vào tập tin mặc dù chương trình của bạn đang làm việc với tập tin đó.
2- [LockRead] chương trình khác không thể mở để đọc tập tin, trong khi chương trình của bạn đang làm việc với tập tin đó.
3- [LockWrite] không thể mở để viết lên tập tin trong khi chương trình bạn đang làm việc với tập tin đó.
4- [LockReadWrite] chương trình khác không thể làm việc với tập tin trong khi chương trình bạn đang làm việc với tập tin đó.
VD: Open PathName For binary Access Lock Read #Filenum ---> sẽ ngăn chận các chương trình khác sử dụng tập tin khi bạn đang làm việc với tập tin đó.
Reclength đây là số nguyên từ 1 đến 32767. Đối các tập tin mở ở chế độ Random số này đưa ra chiều dài bản ghi. Đối với các tập tin chuỗi thứ tự, giá trị này là số lượng các ký tự đươc đệm trong hệ điều hành