• 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

Xác định 1 file được mở bằng chương trình mặc định nào

Các thủ thuật về hệ thống, thư mục, tập tin và mạng
Hình đại diện của người dùng
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 1641
Ngày tham gia: T.Tư 16/04/2008 11:25 am
Đến từ: Chợ Lách - Bến Tre
Been thanked: 31 time
Liên hệ:

Xác định 1 file được mở bằng chương trình mặc định nào

Gửi bàigửi bởi clarkkent » T.Bảy 28/06/2008 2:19 pm

Thủ thuật: Xác định 1 file được mở bằng chương trình mặc định nào
Tác giả: Nguyễn Trung Tín
Mô tả: Xác định 1 file được mở bằng chương trình mặc định nào
Ví 1 file *.txt được mặc định mở bằng Notepad có đường dẩn C:\WINDOWS\system32\NOTEPAD.EXE


Module

Mã: Chọn hết

  1. Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" (ByVal lpFile As String, ByVal lpDirectory As String, ByVal lpResult As String) As Long
  2.  
  3. Declare Function GetTempFileName Lib "kernel32" Alias "GetTempFileNameA" (ByVal lpszPath As String, ByVal lpPrefixString As String, ByVal wUnique As Long, ByVal lpTempFileName As String) As Long
  4.  
  5. Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
  6.  


Trong Form cần 1 CommonDialog1, Text1, Command1, Label1
Label1 sẽ hiện đường dẫn của của chương trình sẽ mở file đã chọn trong CommonDialog... :D

Mã: Chọn hết

  1. Private Sub Command1_Click()
  2. On Error Resume Next
  3. CommonDialog1.DialogTitle = "Chon file"
  4. CommonDialog1.ShowOpen
  5. If CommonDialog1.FileName <> "" Then
  6. Text1.Text = CommonDialog1.FileName
  7. End If
  8. Dim FN, path As String
  9. Dim i As Integer
  10. For i = 1 To 10
  11. FN = Right(Text1.Text, i)
  12. If Left(FN, 1) = "." Then
  13. path = Right(FN, i - 1)
  14. Exit For
  15. End If
  16. Next
  17. Label1.Caption = GetAssociatedProgram(path)
  18. End Sub
  19. Public Function GetAssociatedProgram(ByVal Extension As String) As String
  20.     Dim path As String
  21.     Dim FileName As String
  22.     Dim nRet As Long
  23.     Const MAX_PATH As Long = 260
  24.    
  25.     path = String$(MAX_PATH, 0)
  26.    
  27.     If GetTempPath(MAX_PATH, path) Then
  28.         FileName = String$(MAX_PATH, 0)
  29.        
  30.         If GetTempFileName(path, "~", 0, FileName) Then
  31.             FileName = Left$(FileName, InStr(FileName, vbNullChar) - 1)
  32.            
  33.             Name FileName As Left$(FileName, InStr(FileName, ".")) & Extension
  34.             FileName = Left$(FileName, InStr(FileName, ".")) & Extension
  35.            
  36.             path = String$(MAX_PATH, 0)
  37.            
  38.             Call FindExecutable(FileName, vbNullString, path)
  39.             GetAssociatedProgram = Left$(path, InStr(path, vbNullChar) - 1)
  40.            
  41.             Kill FileName
  42.         End If
  43.     End If
  44. End Function
  45.  
Tập tin đính kèm
Open With.rar
Open with...
(6.6 KiB) Đã tải 514 lần


• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

newbi
Thành viên chính thức
Thành viên chính thức
Bài viết: 46
Ngày tham gia: T.Năm 20/11/2008 8:01 am

Re: Xác định 1 file được mở bằng chương trình mặc định nào

Gửi bàigửi bởi newbi » T.Năm 12/02/2009 12:09 pm

Anh chịu khó post dùm em cái code để tìm và xóa tất cả key liên quan đến chương trình đó với. Vì em muốn đăng kí mặc định cho chương trình nghe nhạc của mình, theo những cách trước đây nhưng khi đã chọn mặc định bằng property --> open with rồi thì các cách trước đây đều không được. Có lẽ sau khi xóa các key đi rồi thì Ok.Anh giúp em với nha.

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4762
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: 515 time

Re: Xác định 1 file được mở bằng chương trình mặc định nào

Gửi bàigửi bởi truongphu » T.Năm 12/02/2009 2:25 pm

1- Nhờ newbi lôi bài nầy ra, tôi mới biết ... :D
2- Đoạn code từ dòng 8 đến dòng 16 là dài lòng thòng, đề nghị clarkkent viết gọn lại
(Mục thủ thuật - mẹo vặt có)
3- Ta có thể viết code gọn hơn toàn bộ bài trên như sau:

Mã: Chọn hết

  1. Private Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" (ByVal lpFile As String, ByVal lpDirectory As String, ByVal lpResult As String) As Long
  2. Const MAX_FILENAME_LEN = 260
  3. Private Sub Command2_Click()
  4. Dim i As Integer, s2 As String
  5.  s2 = String(MAX_FILENAME_LEN, 32)
  6. i = FindExecutable("C:\1.txt", vbNullString, s2)
  7. If i > 32 Then MsgBox Left$(s2, InStr(s2, Chr$(0)) - 1) Else MsgBox "No association found !"
  8. End Sub


4- Khuyến mãi: Mở hộp thoại 'Open With'

Mã: Chọn hết

  1. Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
  2. Private Sub OpenWith(ByVal xFileName As String)
  3.     ShellExecute 0, vbNullString, "RUNDLL32.EXE", "shell32.dll,OpenAs_RunDLL " & xFileName, "", vbNormalFocus
  4. End Sub
  5. Private Sub Command1_Click()
  6. OpenWith "C:\1.txt"
  7. End Sub
o0o--truongphu--o0o

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

newbi
Thành viên chính thức
Thành viên chính thức
Bài viết: 46
Ngày tham gia: T.Năm 20/11/2008 8:01 am

Re: Xác định 1 file được mở bằng chương trình mặc định nào

Gửi bàigửi bởi newbi » T.Sáu 13/02/2009 11:47 am

vậy mà bác cũng không giúp em với.hay câu hỏi ngớ ngẩn quá nhỉ.
viewtopic.php?f=28&t=542

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4762
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: 515 time

Re: Xác định 1 file được mở bằng chương trình mặc định nào

Gửi bàigửi bởi truongphu » T.Sáu 13/02/2009 2:22 pm

newbi đã viết:vậy mà bác cũng không giúp em với.hay câu hỏi ngớ ngẩn quá nhỉ.
viewtopic.php?f=28&t=542

1- Câu hỏi bạn là bình thường, chỉ tiếc là tôi biết giúp thế nào? bạn đã đăng ký với Windows đuôi file nào đó, và liên kết mở ra với trình gì đó. Tôi làm sao biết được để giúp?
2- Chỉ có tác giả của chương trình phải lưu ý đến yêu cầu của bạn, để trong các phiên bản tiếp theo cho phép trở lại default ban đầu --> và viết code phục vụ công tác nầy. Còn yêu cầu của bạn, biết viết code gì nhỉ?
3- Dù sao bạn cũng đã yêu cầu trợ giúp. Tôi sẽ hướng dẫn bạn làm bằng tay:
* Start \ Run \ Gõ Regedit, nhấn Enter
* Registry Editor hiện ra. Nhấn vào nhánh đầu tiên: HKEY_CLASSES_ROOT. Cây thư mục sẽ sổ xuống một danh sách dài
* Dùng thanh trượt kéo xuống, chọn đuôi đã đăng ký: vd mp6. Bôi đen nó, nhấn chuột phải và chọn Delete
* Thoát Registry Editor, tìm file mp6, click double, vì bị xóa nên windows sẽ hiện ra bảng OpenWith
* Chọn trình mở mặc định, kiểm vào ô Always Open.. là xong
o0o--truongphu--o0o

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

newbi
Thành viên chính thức
Thành viên chính thức
Bài viết: 46
Ngày tham gia: T.Năm 20/11/2008 8:01 am

Re: Xác định 1 file được mở bằng chương trình mặc định nào

Gửi bàigửi bởi newbi » T.Tư 11/03/2009 12:07 am

Cảm ơn bác đã tận tình giúp đỡ nhưng hình như là em đã tìm ra các key của registry rồi. Trong defaut có 4 -5 key gì đó qui định, chứ không phải 1 đâu. Phải đổi tất cả các key đó thì chương trình của mình mói là defaut được. Em đã làm được cho chương trình của mình rồi, bằng cách dò bằng tay trong registry . Cảm ơn bác nhiều nha. Em cũng đã tìm ra một điều: Micrrosoft luôn ưu tiên cho Windows Media Player là chương trình mặc định và rất khó đổi khi chương trình này đang là mặc định.
Tập tin đính kèm
Media Player 11'.rar
(265.47 KiB) Đã tải 307 lần


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

Đ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