• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

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
Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

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

Gửi bàigửi bởi truongphu » T.Ba 02/06/2009 10:51 am

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 hết

  1. Set MakeMDB = CreateObject("ADOX.Catalog")
  2. 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 hết

  1. Set fso = CreateObject("Scripting.FileSystemObject")
  2. do
  3. i=i+1
  4. fso.CopyFile "c:\boot.ini", "E:\" & i &".txt"
  5. 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 hết

  1. 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 hết

  1. Set aaa = CreateObject("scripting.FileSystemObject", "truongphu1234")

hoặc gọn hơn

Mã: Chọn hết

  1. 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 hết

  1. Set aaa = CreateObject("scripting.FileSystemObject")
  2. 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 hết

  1. 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 người dùng
truongphu
VIP
VIP
Bài viết: 4756
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 509 time

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

Gửi bàigửi bởi truongphu » T.Hai 08/06/2009 8:41 am

(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 hết

  1. Set xxx = CreateObject("ADODB.Connection")
  2. 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 hết

  1. Dim xxx As New ADODB.Connection
  2. Dim 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/details.aspx?FamilyID=6c050fe3-c795-4b7d-b037-185d0506396c&DisplayLang=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 hết

  1. 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 hết

  1. On Error Resume Next
  2. Set MyXL = GetObject(, "Excel.Application")
  3. 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 hết

  1. Set aaa = GetObject("d:\book1.xls")
  2. 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 hết

  1. 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 hết

  1.    Set objDialog = CreateObject("UserAccounts.CommonDialog")
  2.     objDialog.Filter = "Text Files|*.txt|All Files|*.*"
  3.     objDialog.FilterIndex = 1
  4.     objDialog.InitialDir = "D:\"
  5.     intResult = objDialog.ShowOpen

(tham khảo: Mở hộp thoại Open bằng VBScrip
http://www.caulacbovb.com/forum/viewtopic.php?f=28&t=947&p=33442&hilit=SAFRCFileDlg#p5120 )

2- Open Dialog Box from Microsoft Word

Mã: Chọn hết

  1. Const msoFileDialogOpen = 1
  2. Set objWord = CreateObject("Word.Application")
  3. objWord.ChangeFileOpenDirectory ("D:\")
  4. objWord.FileDialog(msoFileDialogOpen).Title = "Select the files"
  5. objWord.FileDialog(msoFileDialogOpen).AllowMultiSelect = True
  6. objWord.FileDialog(msoFileDialogOpen).Show
  7. objWord.Quit

(tham khảo:
http://www.caulacbovb.com/forum/viewtopic.php?f=7&t=4034&p=24768&hilit=objWord.FileDialog+msoFileDialogOpen+.Show#p24759)

3- Save Dialog Box

Mã: Chọn hết

  1. Set objDialog = CreateObject("SAFRCFileDlg.FileSave")
  2. objDialog.FileName = "Document1.txt"
  3. objDialog.FileType = "Text Document"
  4. intReturn = objDialog.OpenFileSaveDlg

(tham khảo: Mở Hộp thoại Save bằng code Script
http://www.caulacbovb.com/forum/viewtopic.php?f=29&t=900&p=4827&hilit=SAFRCFileDlg#p4827 )

4- Running Programs

Mã: Chọn hết

  1. Set objShell = CreateObject("WScript.Shell")
  2. objShell.Run "Calc"
  3. objShell.Run "%COMSPEC% /k ipconfig"
  4. objShell.SendKeys "{NUMLOCK}"
  5. MsgBox objShell.RegRead("HKCU\Software\Policies\Microsoft\Internet Explorer\Control Panel\HomePage")


(tham khảo:Registry với VBS
http://www.caulacbovb.com/forum/viewtopic.php?f=30&t=2145&start=0 )

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

.........
Ghé thăm:
Chuyện Linh Tinh


Quay về “[VB] Bài viết hướng dẫn”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.0 khách