• 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

Tổng Quát về Các Lệnh Mở File

Các thủ thuật về hệ thống, thư mục, tập tin và mạng
User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 520 times

Tổng Quát về Các Lệnh Mở File

Postby truongphu » Wed 30/04/2008 10:10 am

Thủ thuật: Tổng Quát về Các Lệnh Mở File
Tác giả: truongphu
Mô tả: Tổng Quát về Các Lệnh Mở File. Mong được các bạn giúp đở thêm bài viết vì chữ Tổng Quát "to' quá


A- Lệnh gọi thi hành
A- 1) Lệnh Shell: tham khảo VBLib

* Gọi trình WinWord, Phải có path của WINWORD.EXE. Theo thói quen, có thể bỏ phần ".exe" Ví dụ:

Code: Select all

  1. aaa = Shell("D:\Office\Microsoft Office\Office10\WINWORD", 1)


* Gọi trình WinWord và mở file doc nào đó:

Code: Select all

  1. aaa = Shell("D:\Office\Microsoft Office\Office10\WINWORD  C:\MùaThu~1.doc", 1)


Lưu ý: tên file không được có space, ví dụ sau sẽ không chạy được:

Code: Select all

  1. NotRun = Shell("D:\Office\Microsoft Office\Office10\WINWORD.EXE" "C:\Mùa Thu Lá bay", 1)


* Ta có thể dùng trình văn bản để mở một file bất kỳ, đọc thấy toàn mã máy:

Code: Select all

  1. aaa = Shell("C:\Program Files\Windows NT\Accessories\wordpad  c:\windows\system32\calc.exe", 1)


* Khi Shell gọi một trình của MS Windows (ví dụ calc.exe) trong các thư mục gốc hay hệ thống (windows\ hay windows\system32), do khi khởi động, biến môi trường đã nộp vào bộ nhớ nên ta có thể bỏ qua đường dẫn, bất kể trên máy nào đó có cài winXP ở đâu!

Code: Select all

  1. aaa = Shell ("calc")


hoặc gọn hơn nữa

Code: Select all

  1. Shell "calc"


nguyên tắc gọn nầy cũng dùng với các trình khác:

Code: Select all

  1. Shell "D:\Office\Microsoft Office\Office10\WINWORD"
  2. Shell "D:\Office\Microsoft Office\Office10\WINWORD  C:\MùaThu~1.doc"


A- 2) Lệnh ShellExecute:
ShellExecute là tự chạy một yêu cầu, có thể là một file, hay một câu lệnh, VỚI ĐIỀU KIỆN LÀ FILE ĐÓ, HAY CÂU LỆNH ĐÓ ĐÃ ĐƯỢC KHAI BÁO TRONG WINDOWS LÀ MỞ VỚI TRÌNH NÀO
Vậy thì một file hay một câu lệnh chưa đăng ký "Open With" thì ShellExecute cũng vô tác dụng!

Vì lý do trên, ta nên cân nhắc khi gọi ShellExecute, ví dụ muốn xem nội dung một file không có đuôi mở rộng, ta chỉ cần gọi Shell để chạy Notepad hay Wordpad load file cần xem, tránh khai báo rườm rà không cần thiết.

Khai báo hàm API:

Code: Select all

  1. Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile
  2.  
  3. As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
  4. Private Sub Form_Load()
  5. ShellExecute Me.hwnd, vbNullString, "C:\Mùa Thu Lá Bay.doc", vbNullString, "C:\", 1
  6. End Sub

Nhận xét: Tên file tự do

A- 3) VBScript
* Gọi một ứng dụng
Các dòng lệnh sau tương đương với các dòng lệnh của Shell:
Set objShell = CreateObject("Wscript.Shell")

Code: Select all

  1. objShell.Run "calc"
  2. objShell.Run ("ping 10.0.0.2")
  3. objShell.Run "WINWORD"
  4. objShell.Run "EXCEL"

Nhận xét: Tốn một câu khai báo: "Set objShell =...", nhưng khi chạy các ứng dụng đã đăng ký, ví dụ WinWord thì khỏi khai path, khác với Shell
* Mở một file văn bản

Code: Select all

  1. Set objword = CreateObject("Word.Application").Documents.Open("C:\Mùa Thu Lá Bay.Doc", 1)


B- Lệnh mở và thao tác trên file với thao tác cơ bản là Đọc, Ghi. Trong bài viết nầy chỉ minh họa thao tác Đọc
B- 1) Lệnh Open: tham khảo VBLib

a- Chuyên mở file TXT
trích VBLib:

Code: Select all

  1. Private Sub Form_Load()
  2. Dim TextLine
  3.     Open "TESTFILE" For Input As #1' Mo file Ðê Ðoc.
  4.         Do While Not EOF(1)
  5.             Line Input #1, TextLine' Ðoc tung dòng gán vào biên TextLine
  6.             Debug.Print TextLine' In ra màn hình
  7.         Loop
  8.     Close #1' Ðóng file.
  9. End Sub


b- Đọc text Unicode
trích VBLib: (trong VBLib phần nầy còn sót vài thành phần. Code sau đây hoàn chỉnh hơn)

Code: Select all

  1. Private Sub Form_Load()
  2. Dim fNum As Long, B() As Byte, fp
  3.     fp = "C:\Mùa Thu Lá Bay.txt"
  4.     fNum = FreeFile()
  5.     Open fp For Binary Access Read As #fNum
  6.         ReDim B(LOF(fNum))
  7.     Get #fNum, , B
  8.     Close #fNum
  9.  
  10.     Dim arr, i As Integer, s As String
  11.     arr = Split(B, vbCrLf)
  12.      For i = 0 To UBound(arr)
  13.             s = s & arr(i) & vbCrLf
  14.      Next i
  15. TextBox1 = s
  16. End Sub


B- 2) VBScript cho TXT: Tham khảo thêm Mục Tip VB
Đọc bất kể mã unicode! quá gọn

Code: Select all

  1. Private Function ReadFileUni(FileName As String) As String
  2. Dim FSO
  3.    Set FSO = CreateObject("Scripting.FileSystemObject").OpenTextFile(FileName, 1, , -2)
  4.    ReadFileUni = FSO.Readall
  5.    Set FSO = Nothing
  6. End Function
  7.  
  8. Private Sub Form_Load()
  9. TextBox1 = ReadFileUni("C:\Mùa Thu Lá Bay.txt")
  10. End Sub


B- 3) VBScript cho Doc (hoặc dưới nó như RTF, TXT): Tham khảo thêm Mục Tip VB

Code: Select all

  1. Private Sub Form_Load()
  2. Set objWord = CreateObject("Word.Application")
  3. objWord.ChangeFileOpenDirectory ("C:\")
  4. objWord.FileDialog(1).Title = "Select the files"
  5.  
  6. If objWord.FileDialog(1).Show = -1 Then
  7.     For Each objFile In objWord.FileDialog(1).SelectedItems
  8.         Set objDoc = objWord.Documents.Open(objFile)
  9.         objDoc.Range.Copy
  10.     Next
  11. End If
  12.  
  13. TextBox1.Paste
  14. objWord.Quit
  15. End Sub

Sáng 30/4/08 rảnh, chiều có thể nghỉ bù! :D

Bổ sung: Đọc file txt từng dòng

Code: Select all

  1. Private Function ReadLineText(FileName As String) As String
  2. Const ForReading = 1, ForWriting = 2, TriStateTrue = -2
  3. Dim FSO:    Set FSO = CreateObject("Scripting.FileSystemObject").OpenTextFile(FileName, 1, False, -2)
  4.    Do Until FSO.AtEndOfStream
  5.     ReadLineText = ReadLineText & FSO.ReadLine & vbCrLf
  6.    Loop
  7.    Set FSO = Nothing
  8. End Function
  9.  
  10. Private Sub Form_Load()
  11. MsgBox ReadLineText("C:\Mùa Thu Lá Bay.txt")
  12. End Sub
Last edited by truongphu on Thu 01/05/2008 3:36 pm, edited 1 time in total.


o0o--truongphu--o0o

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

vinhphuoc91
Thành viên tích cực
Thành viên tích cực
Posts: 146
Joined: Wed 26/03/2008 5:52 pm
Location: Phú Yên
Been thanked: 15 times
Contact:

Re: Tổng Quát về Các Lệnh Mở File

Postby vinhphuoc91 » Thu 01/05/2008 2:12 pm

woa, cảm ơn pác truongphu, bài này nên đưa vào Các bài viết hướng dẫn, mà lần sau pác nhớ lồng thẻ code vào nhé :)
My website : http://tinthoitrang.net

User avatar
ngaymaikhongtan
Thành viên chính thức
Thành viên chính thức
Posts: 38
Joined: Sat 29/03/2008 12:05 pm
Location: Cà Mau
Contact:

Re: Tổng Quát về Các Lệnh Mở File

Postby ngaymaikhongtan » Thu 01/05/2008 2:27 pm

Xin bác giới thiệu về phần đọc file txt rỏ hơn tí àh, phần đọc từng chuổi của nó trên từng dòng, không phải là truy xuất cả dòng, em đang viết bên vb.net!
welcome to
http://gocnhinviet.com

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 520 times

Re: Tổng Quát về Các Lệnh Mở File

Postby truongphu » Thu 01/05/2008 3:41 pm

ngaymaikhongtan wrote:Xin bác giới thiệu về phần đọc file txt rỏ hơn tí àh, phần đọc từng chuổi của nó trên từng dòng, không phải là truy xuất cả dòng,

Lệnh FSO.Readall sẽ thành lệnh FSO.ReadLine
Thêm Do Until FSO.AtEndOfStream
...
Loop để duyệt từng dòng
Các code khác như cũ. Tôi đã bổ sung ở trên, phần cuối bài
o0o--truongphu--o0o

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

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 520 times

Re: Tổng Quát về Các Lệnh Mở File

Postby truongphu » Mon 12/10/2009 8:25 am

Dùng lệnh Shell gọi Word ra để mở một file doc nguyên tắc là OK
Tuy nhiên khi thực hành bằng code, rất nhiều bạn thất bại, lý do:

1- Khai báo code chưa đúng
2- Đường dẫn WinWord dài bao nhiêu cũng được, nhưng đường dẫn file doc TUYỆT ĐỐI PHẢI 8.3
3- chưa hổ trợ tên file (hay đường dẫn) có tiếng Việt

Để đơn giản hóa vấn đề, tôi viết một Project: Dùng CommonDialog (khai bằng code) gọi lần lượt WinWord và File Doc, giao cho SHELL xử lý

Code: Select all

  1. Private Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal lBuffer As Long) As Long
  2.  
  3. Private Sub Command1_Click()
  4. Dim WordPath$
  5. MsgBox "Tìm WinWord o' Ðâu ?"
  6. WordPath = CDL(3, "D:\Office\Microsoft Office\OFFICE11")
  7. If WordPath = "" Then Exit Sub
  8. MsgBox "Tìm thâ'y Word.EXE o':" & vbCrLf & WordPath & vbCrLf & "Mo' File Word o' Ðâu ?" & vbCrLf & "(KHÔNG HÔ TRO' FILENAME TIÊ'NG VIÊT)"
  9. Shell WordPath & " " & ShortPath(CDL(, "D:\MY DOCUMENTS")), vbNormalFocus
  10. End Sub
  11.  
  12. Private Function ShortPath(ByVal FileName As String) As String
  13.     Dim lngRes As Long, strPath As String
  14.     'Create a buffer
  15.     strPath = String$(165, 0)
  16.     'retrieve the short pathname
  17.     lngRes = GetShortPathName(FileName, strPath, 164)
  18.     'remove all unnecessary chr$(0)'s
  19.     ShortPath = Left$(strPath, lngRes)
  20. End Function
  21.  
  22. Private Function CDL(Optional ByVal FilterNum As Integer = 1, Optional ByVal FirstDir As String = "D:\") As String
  23. Set Dialog = CreateObject("UserAccounts.CommonDialog")
  24. Dialog.Filter = "Word Document|*.Doc|Text File|*.txt|All Files|*.*"  '<-- các file cân loc
  25. Dialog.filterIndex = FilterNum '<- 1 là doc, 2 là text nhu' o' trên Ðã khai
  26. Dialog.InitialDir = FirstDir  '<-- Thay Ðôi thu' muc mac Ðinh
  27. Dialog.ShowOpen
  28. CDL = Dialog.FileName
  29. End Function


các bạn có thể dùng ngay Project nhẹ hều:
Attachments
Shell WinWord và ShortPath.rar
(1.74 KiB) Downloaded 915 times
o0o--truongphu--o0o

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

LearningVBnet
Posts: 5
Joined: Wed 20/07/2011 12:00 am
Has thanked: 1 time

Re: Tổng Quát về Các Lệnh Mở File

Postby LearningVBnet » Wed 20/07/2011 12:49 am

Bạn truongphu, tôi thấy các bài và câu trả lời của bạn rất hữu ích, chứng tỏ bạn có kiến thức khá rộng về VB và VB.net. Trước tôi có biết chút ít về VB và đang tự học VB.net. bạn có thể cho tôi biết địa chỉ email để liên lạc với bạn k0 vì tôi có vài câu hỏi muốn hỏi bạn nhờ bạn trả lời. tôi đề nghị như vậy vì không muốn bị coi là gửi spam, khi làm được rồi tôi sẽ post bài lên forum để mọi người cùng trao đổi kinh nghiệm. Cảm ơn truongphu!
Email của tôi: vutienphong.cdt1b@gmail.com
-----------------------
Xin lỗi! để học hỏi chứ không có ý định spam.

nguyentrinhthu
Thành viên tích cực
Thành viên tích cực
Posts: 105
Joined: Wed 23/04/2008 8:43 am
Has thanked: 6 times
Been thanked: 1 time

Re: Tổng Quát về Các Lệnh Mở File

Postby nguyentrinhthu » Fri 25/11/2011 10:47 pm

công nhận bác truongphu siêu quá. Ai có tài chính đề nghị đóng góp cho diễn đàn để động viên các thành viên

Qsoft
Thành viên chính thức
Thành viên chính thức
Posts: 28
Joined: Tue 30/03/2010 4:14 pm

Re: Tổng Quát về Các Lệnh Mở File

Postby Qsoft » Sun 11/12/2011 1:32 pm

Cảm ơn bác truongphu, tôi thấy nó gắn gọn và rất hữu ích. Hy vọng bác sẽ có nhiều bài viết hay nữa.

User avatar
khoaakt
Thành viên năng nổ
Thành viên năng nổ
Posts: 75
Joined: Tue 19/06/2012 6:30 pm
Location: http://việtnam.vn/Kontum/Trường/THPT Chuyên Nguyễn Tất Thành.htm
Has thanked: 8 times
Been thanked: 7 times
Contact:

Re: Tổng Quát về Các Lệnh Mở File

Postby khoaakt » Thu 21/06/2012 5:55 pm

Bác Truongphu siêu ghê! Nhưng nếu ta dùng lệnh shell thì khi mở file exe thì cửa sổ lại để dạng Minimize?
Ai có cách khắc phục?

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 520 times

Re: Tổng Quát về Các Lệnh Mở File

Postby truongphu » Fri 22/06/2012 10:19 am

khoaakt wrote:khi mở file exe thì cửa sổ lại để dạng Minimize?

Code: Select all

Shell "PathName", vbNormalFocus
o0o--truongphu--o0o

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

vanthithuy91
Posts: 1
Joined: Wed 09/01/2013 4:31 pm

Re: Tổng Quát về Các Lệnh Mở File

Postby vanthithuy91 » Wed 09/01/2013 4:56 pm

Bác truongphu, em đang học cách giải một số bài toán trên vb. Em có một số thắc mắc muốn hỏi vì vậy em muốn xin địa chỉ email của bác không biết có được không? Nếu được bác gửi lại giúp em vào địa chỉ: bienxanhcuoi91@gmail.com mới ạ. Thanks!

tigerhn
Posts: 9
Joined: Fri 25/09/2009 1:52 pm

Re: Tổng Quát về Các Lệnh Mở File

Postby tigerhn » Mon 16/07/2018 11:00 am

Bác TruongPhu cho em hỏi chút:
Em đang lập 1 số dự toán công trình (có mẫu giống nhau), trước đây em lập 1 file mẫu trên Excel, sau đó em viết 1 tool nhỏ bằng VB6 để mở file mẫu, copy và paste dữ liệu vào file mẫu
Hiện tại do yêu cầu của Chủ đầu tư yêu cầu phải lập trên G8, mà dịnh dạng file kết quả của G8 là *.hce.

Bác có cách nào để mở file *.hce và paste số liệu vào đó không?
Cảm ơn bác nhiều!


Return to “[VB] Hệ thống - Tập tin - Thư mục và Mạng”

Who is online

Users browsing this forum: No registered users and 1 guest