Tác giả: Sưu tầm
Mô tả: Làm cho ứng dụng của mình trở thành mặc định (default), chạy chương trình khi Windows gọi
Chạy với 1 file (khi DoubleClick vào 1 loại file thì file đó được chạy bởi phần mềm của mình)

Giới thiệu:
Bạn có muốn khi mình DoubleClick lên 1 file.mp3 nào đó, chương trình nghe nhạc do chính bạn viết sẽ nhảy ra phục vụ bạn?!.
Công việc đầu tiên là đăng ký chương trình của bạn với Registry, báo cho nó biết rằng loại file nào sẽ được mở với chương trình của bạn.
Ví dụ:
Các hàm API phục vụ cho truy xuất Registry:
Mã: Chọn hết
- Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
- Private 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
- Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
-
- ' Hằng số của khóa HKEY_CLASSES_ROOT
- Private Const HKEY_CLASSES_ROOT = &H80000000
-
Hàm chính:
Mã: Chọn hết
- Public Sub MyAppDefault(ByVal sAppName As String, ByVal sEXE As String, ByVal sExt As String)
- On Error GoTo TrapIt
- Dim lRegKey As Long
- Call RegCreateKey(HKEY_CLASSES_ROOT, sExt, lRegKey)
- Call RegSetValueEx(lRegKey, "", 0&, 1, ByVal sAppName, Len(sAppName))
- Call RegCloseKey(lRegKey)
- ' adds info into the shell open command
- Call RegCreateKey(HKEY_CLASSES_ROOT, sAppName & "\Shell\Play\Command", lRegKey)
- Call RegSetValueEx(lRegKey, "", 0&, 1, ByVal sEXE, Len(sEXE))
- Call RegCloseKey(lRegKey)
- Exit Sub
- TrapIt: MsgBox Err.Description,, " Error"
- End Sub
-
Thêm vào trong Form 1 commandbutton (CmdDangky)
Mã: Chọn hết
- Private Sub CmdDangky_Click()
- ' Làm cho ứng dụng của bạn thành mặc định khi mở file .mp3
- MyAppDefault "My MP3 Player", chr(34) & App.Path & "\" & App.EXEName _
- & ".exe" & chr(34) & " " & chr(34) & "%1" & chr(34), ".mp3"
- End Sub
Dịch và chạy thử chương trình, nhấn vào commandbutton. Bắt đầu từ bây giờ mỗi khi bạn DoubleClick lên bất kỳ file .mp3 nào, chương trình mà bạn đã đăng ký ở trên sẽ tự động được mở. Công việc còn lại của bạn là lấy tham số mà Windows truyền vào ứng dụng khi bạn double click lên file .mp3 đó (tham số = tên file .mp3).
Trong sự kiện Form_Load bạn thêm vào đoạn code lấy tham số được Windows truyền vào:
Mã: Chọn hết
- Private Sub Form_Load()
- Dim sFile As String
- ' Lay tham so truyen vao
- sFile = Command$()
- MsgBox "Tập tin được mở là:" & sFile
- End Sub
-
Thêm Menu con vào Menu hệ thống

Chuẩn bị
Mã: Chọn hết
- Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" ( _
- ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
- Private 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
- Private Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long
- Public Sub luu(key As String)
- Call RegCreateKey(&H80000000, key, hKey)
- Call RegCreateKey(&H80000000, key & "\command", hKey)
- SetValue = RegSetValueEx(hKey, "", 0&, 1, ByVal CStr(Chr(34) & App.Path & "\" & App.EXEName & ".exe" & Chr(34) & "%1" & Chr$(0)), Len(Chr(34) & App.Path & "\" & App.EXEName & ".ex11e" & Chr(34) & "%1"))
- SetValue = RegCloseKey(hKey)
- End Sub
-
Nếu muốn thêm vào menu của ổ đĩa
Mã: Chọn hết
- luu ("Drive\shell\" & chuoihientrenmenu)
Nếu muốn hiện trên Menu của thư mục
Mã: Chọn hết
- luu ("Directory\Shell\" & Chuoihientrenmenu)
Sử dụng : như trên thôi.

Cái này còn có cái hay là khi ứng dụng chưa được chạy nếu bạn Rê một thư mục, một file vào nó thì cũng có kết quả tương tự, Chúc thành công !
