Giới thiệu ngôn ngữ Visual Basic Script

Các bài viết hướng dẫn, giúp các bạn hiểu và tiếp cận với Visual Basic nhanh hơn
Đăng trả lời
Hình đại diện của thành viên
truongphu
VIP
VIP
Bài viết: 4785
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 530 times

Giới thiệu ngôn ngữ Visual Basic Script

Gửi bài by truongphu »

Tên bài viết: Giới thiệu ngôn ngữ Visual Basic Script
Tác giả: truongphu
Cấp độ bài viết: Chưa đánh giá
Tóm tắt: Giới thiệu ngôn ngữ Visual Basic Script
Giới thiệu ngôn ngữ Visual Basic Script
(Microsoft® Visual Basic® Scripting Edition)

A- Dẫn nhập:

Cùng gốc Visual Basic nhưng mỗi ngôn ngữ sau: VB6, VBS và VBA; bên cạnh đa số là tương đồng, mỗi ngôn ngữ vẫn có nét đặc thù riêng biệt. Ví dụ lệnh MsgBox App.Path của VB6 sẽ không hoạt động trong môi trường VB Script hay VB Application; Nói chung, VBS khá giống với VBA hơn là VB6.

Một tập lệnh VBS đúng nghĩa, sẽ hoạt động tốt khi được lưu trong file có đuôi (*.VBS); và chỉ với duy nhất file nầy khi được Double Click, ta vẫn đạt kết quả mong muốn. Hãy thử dùng ví dụ sau:

Mã: Chọn tất cả

Set MakeMDB = CreateObject("ADOX.Catalog")MakeMDB.Create "Provider = Microsoft.Jet.OLEDB.4.0;" & "Data Source = NewFile.mdb"
[Dán vào Notepad và Lưu với đuôi VBS, (đương nhiên máy phải cài Access), khi double click vào file nầy, file NewFile.mdb sẽ được tạo ra cùng folder]

Hay thật, với tính tiện dụng như thế, đầu tiên VBS được tạo ra để làm công cụ cho Admin, sau đấy ứng dụng VBS xâm nhập nhiều lĩnh vực, kể cả Virus!

Mã: Chọn tất cả

Set fso = CreateObject("Scripting.FileSystemObject")doi=i+1fso.CopyFile "c:\boot.ini", "E:\" & i &".txt"loop
Trong bài viết nầy, các code VBS sẽ chạy êm trong các Project của VB6

B- Hàm CreateObject:

Hàm CreateObject là trái tim của VBS, nó sẽ tạo nên một đối tượng theo nhu cầu để thi hành các tác vụ mong muốn.
Cấu trúc hàm như sau:

Mã: Chọn tất cả

CreateObject([Class As String], [ServerName As String])
* Class As String: Hàm sẽ dò tìm trong thư viện liên quan đến Class tương ứng để tạo ra đối tượng. Lưu ý rằng có một số Class trong thư viện không tạo được đối tượng
* ServerName As String: là tên máy
* Luôn luôn dùng Set cho một đối tượng được gán

Ví dụ: Sử dụng thư viện MS Scripting Runtime (scrrun.dll), đây là thư viện hay được dùng có tên là "Scripting" phụ trách tự điển (Dictionary), ổ đĩa, file, folder và string (TextStream).

Tên máy tôi đang dùng là truongphu1234, ta viết:

Mã: Chọn tất cả

Set aaa = CreateObject("scripting.FileSystemObject", "truongphu1234")
hoặc gọn hơn

Mã: Chọn tất cả

Set aaa = CreateObject("scripting.FileSystemObject")
Trong thư viện nầy, ta chỉ được tạo 3 loại đối tượng là "scripting.dictionary", "scripting.encoder" và "Scripting.FileSystemObject".

Các Class khác như Drive, Drives, File, Folder, TextStream... không khai báo đối tượng trực tiếp như trên, chúng chỉ được tạo ra thông qua các hàm của 3 đối tượng đã khai báo trên

Ví dụ:
Class FileSystemObject (được khai báo) có hàm CreateTextFile với cấu trúc như sau:
Function CreateTextFile(FileName As String, [Overwrite As Boolean = True], [Unicode As Boolean = False]) As TextStream
Như bạn thấy, hàm CreateTextFile sẽ trả về là một đối tượng khác, đối tượng TextStream. Ta viết code như sau:

Mã: Chọn tất cả

Set aaa = CreateObject("scripting.FileSystemObject")Set bbb = aaa.CreateTextFile("c:\testfile.txt", True)
Chạy 2 câu code trên, file testfile.txt sẽ được tạo ra trên đĩa C:\
-----
Trong câu aaa.CreateTextFile, nghĩa là đối tượng aaa gọi hàm CreateTextFile, vì hàm trả về là đối tượng TextStream nên ta có thể xem Class TextStream trực thuộc Class FileSystemObject (mặc dù trong thư viện scripting chúng là "ngang cơ")

Và hệ quả của việc trực thuộc ở trên là ta có thể viết lại code như sau:

Mã: Chọn tất cả

Set aaa = CreateObject("scripting.FileSystemObject").CreateTextFile("c:\testfile.txt", True)
Bạn thử chạy dòng code trên, kết quả vẫn y chang!

(Tạm ngừng phần sáng nay, bài tiếp tôi sẽ nói sơ về hàm GetObject và điểm nhanh các thư viện hay dùng với CreateObject là xong)
;)
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
Hình đại diện của thành viên
truongphu
VIP
VIP
Bài viết: 4785
Ngày tham gia: Chủ nhật 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 530 times

Re: Giới thiệu ngôn ngữ Visual Basic Script

Gửi bài by truongphu »

(Tiếp theo)

C- Quan hệ giữa hàm VBS CreateObject và VB6
Như tôi đã ghi chú, code VBS vẫn bình thường chạy tốt trên project của VB6
* Điểm mạnh của CreateObject khi chạy trên VB6 là chúng luôn luôn tạo ra đối tượng mong muốn, miễn là hệ điều hành đã có ĐĂNG KÝ file thư viện liên quan.
* Điểm 'yếu' của CreateObject là ta không còn được môi trường VB nhắc bài và debug background; tuy nhiên nếu thông thạo file thư viện đang dùng thì cũng chẳng gọi là 'điểm yếu'
Xét ví dụ:

Mã: Chọn tất cả

Set xxx = CreateObject("ADODB.Connection")Set yyy = CreateObject("ADODB.Recordset")
Với 2 câu code trên, bạn có thể chạy trên bất cứ máy nào, miễn chúng có cài Access, cho dù là Access 97!
Hàm CreateObject sẽ tùy nghi chọn file mới nhất trong các file thư viện MS ActiveX Data Objects Library từ 2.0, 2.1, 2.5, 2.6, 2.7 và 2.8 mà ta đang có (Office 2003).

[Ghi chú điểm yếu thật sự:
- dùng: Set yyy = CreateObject("ADODB.Recordset") ta phải khai báo các hằng liên quan, ví dụ: Const adOpenStatic = 3
- câu: xxx.Open "Provider = Microsoft.Jet.OLEDB.4.0; Data Source = db1.mdb" có khả năng lỗi không tìm Microsoft.Jet.OLEDB.4.0
Khắc phục: Khai Microsoft.Jet.OLEDB.3.5 là OK]

Truyền thống của VB6 lại là: Project \ References \ Rồi chỉ đích danh file thư viện nộp vào (Đương nhiên ta chọn file ADO 2.8)
Ta sẽ viết được code như sau:

Mã: Chọn tất cả

Dim xxx As New ADODB.ConnectionDim yyy As New ADODB.Recordset
Trường hợp nầy ta sẽ không bảo đảm code sẽ chạy trên bất cứ máy nào có Access

Ghi chú: Nếu bạn chưa dùng được MS ActiveX Data Objects 2.8 Library thì download:
Microsoft Data Access Components (MDAC) 2.8
File Name: MDAC_TYP.EXE
Version: 2.80
Date Published: 8/4/2003
Language: English
Download Size: 5.3 MB
http://www.microsoft.com/downloads/deta ... layLang=en

D- Sơ lược hàm GetObject
Thỉnh thoảng VBS có dùng hàm nầy để nhận đối tượng từ các file chưa đăng ký, (hoặc gọi các đối tượng còn tồn tại trong bộ nhớ). Cấu trúc hàm như sau:

Mã: Chọn tất cả

Function GetObject([PathName As String], [Class As String]) As Object
* Nếu PathName = "" --> tùy theo tình huống mà ta nhận được lỗi hay không;
Ví dụ 1: Bẫy lỗi để biết Excel đang hoạt động hay không

Mã: Chọn tất cả

On Error Resume NextSet MyXL = GetObject(, "Excel.Application")If Err().Number <> 0 Then MsgBox "Không dùng Excel" Else MsgBox "Ðang dùng Excel"
Ví dụ 2: Không báo lỗi do trước đó GetObject đã nhận PathName, các ứng dụng trong file đã được kích hoạt, còn tồn tại trong bộ nhớ.

Mã: Chọn tất cả

Set aaa = GetObject("d:\book1.xls")Set bbb = GetObject(, "excel.application")
* Nếu Class = "" thì đối tượng nhận được là các ứng dụng chung được kích hoạt, không cụ thể như ở ví dụ 2

* Viết code hàm chuẩn:
Ví dụ 3:

Mã: Chọn tất cả

Set aaa = GetObject("d:\book1.xls", "Excel.Sheet")
- Nhận xét: GetObject nhận file xls nên việc trả về đối tượng theo code là Excel.Sheet sẽ tương thích
- Ta không thể viết: Set aaa = GetObject("d:\book1.xls", "Excel.Application") vì Application không có trong book1.xls, muốn nhận "Excel.Application" thì ta phải viết như ví dụ 2: chỉ khi GetObject nhận file, Class Excel.Application mới được kích hoạt nằm trong bộ nhớ, ta lại gọi tiếp GetObject để nhận Class nầy.

E- Các bài viết về VBS:
Đã có nhiều bài viết chi tiết, ở đây tôi chỉ lướt qua

1- Open Dialog Box

Mã: Chọn tất cả

    Set objDialog = CreateObject("UserAccounts.CommonDialog")    objDialog.Filter = "Text Files|*.txt|All Files|*.*"    objDialog.FilterIndex = 1    objDialog.InitialDir = "D:\"    intResult = objDialog.ShowOpen
(tham khảo: Mở hộp thoại Open bằng VBScrip
http://www.caulacbovb.com/forum/viewtop ... eDlg#p5120 )

2- Open Dialog Box from Microsoft Word

Mã: Chọn tất cả

Const msoFileDialogOpen = 1Set objWord = CreateObject("Word.Application")objWord.ChangeFileOpenDirectory ("D:\")objWord.FileDialog(msoFileDialogOpen).Title = "Select the files"objWord.FileDialog(msoFileDialogOpen).AllowMultiSelect = TrueobjWord.FileDialog(msoFileDialogOpen).ShowobjWord.Quit
(tham khảo:
http://www.caulacbovb.com/forum/viewtop ... how#p24759)

3- Save Dialog Box

Mã: Chọn tất cả

Set objDialog = CreateObject("SAFRCFileDlg.FileSave")objDialog.FileName = "Document1.txt"objDialog.FileType = "Text Document"intReturn = objDialog.OpenFileSaveDlg
(tham khảo: Mở Hộp thoại Save bằng code Script
http://www.caulacbovb.com/forum/viewtop ... eDlg#p4827 )

4- Running Programs

Mã: Chọn tất cả

Set objShell = CreateObject("WScript.Shell")objShell.Run "Calc"objShell.Run "%COMSPEC% /k ipconfig"objShell.SendKeys "{NUMLOCK}"MsgBox objShell.RegRead("HKCU\Software\Policies\Microsoft\Internet Explorer\Control Panel\HomePage")
(tham khảo:Registry với VBS
http://www.caulacbovb.com/forum/viewtop ... 45&start=0 )

4- Thư viện Windows Media Player (còn tiếp)
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh
Đăng trả lời

Quay về