Trang 1 trên 1

Tạo chương trình ứng dụng phục vụ cho Windows

Đã gửi: T.Sáu 11/04/2008 8:43 am
gửi bởi QuangHoa
Thủ thuật: Tạo chương trình ứng dụng phục vụ cho Windows
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

  1. Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
  2. 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
  3. Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
  4.  
  5. ' Hằng số của khóa HKEY_CLASSES_ROOT
  6. Private Const HKEY_CLASSES_ROOT = &H80000000
  7.  

Hàm chính:

Mã: Chọn hết

  1. Public Sub MyAppDefault(ByVal sAppName As String, ByVal sEXE As String, ByVal sExt As String)
  2.    On Error GoTo TrapIt
  3.    Dim lRegKey As Long
  4.    Call RegCreateKey(HKEY_CLASSES_ROOT, sExt, lRegKey)
  5.    Call RegSetValueEx(lRegKey, "", 0&, 1, ByVal sAppName, Len(sAppName))
  6.    Call RegCloseKey(lRegKey)
  7.   ' adds info into the shell open command
  8.    Call RegCreateKey(HKEY_CLASSES_ROOT, sAppName & "\Shell\Play\Command", lRegKey)
  9.    Call RegSetValueEx(lRegKey, "", 0&, 1, ByVal sEXE, Len(sEXE))
  10.    Call RegCloseKey(lRegKey)
  11.    Exit Sub
  12.    TrapIt: MsgBox Err.Description,, " Error"
  13. End Sub
  14.  

Thêm vào trong Form 1 commandbutton (CmdDangky)

Mã: Chọn hết

  1. Private Sub CmdDangky_Click()
  2.   ' Làm cho ứng dụng của bạn thành mặc định khi mở file .mp3
  3.     MyAppDefault "My MP3 Player", chr(34) & App.Path & "\" & App.EXEName _
  4.     & ".exe" & chr(34) & " " & chr(34) & "%1" & chr(34), ".mp3"
  5. 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

  1. Private Sub Form_Load()
  2.    Dim sFile As String
  3.   ' Lay tham so truyen vao
  4.    sFile = Command$()
  5.    MsgBox "Tập tin được mở là:" & sFile
  6. End Sub
  7.  
[/quote]
Thêm Menu con vào Menu hệ thống :>
Chuẩn bị

Mã: Chọn hết

  1. Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" ( _
  2.     ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
  3. Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" ( _
  4.     ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, _
  5.     ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
  6. Private Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long
  7. Public Sub luu(key As String)
  8.         Call RegCreateKey(&H80000000, key, hKey)
  9.         Call RegCreateKey(&H80000000, key & "\command", hKey)
  10.         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"))
  11.         SetValue = RegCloseKey(hKey)
  12. End Sub
  13.  

Nếu muốn thêm vào menu của ổ đĩa

Mã: Chọn hết

  1. luu ("Drive\shell\" & chuoihientrenmenu)

Nếu muốn hiện trên Menu của thư mục

Mã: Chọn hết

  1. 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 ! =D>

Re: Tạo chương trình ứng dụng phục vụ cho Windows

Đã gửi: T.Tư 14/01/2009 10:55 pm
gửi bởi newbi
Anh QuangHoa ơi ! chương trình này chỉ OK với những đuôi chưa được đăng kí bắt buộc thôi.Chứ khi đã đăng kí rồi thì pó tay, không thể nào giành quyền phục vụ được đâu.
Cụ thể:
Trong code anh thay đuôi .mp3 bằng .mp6 chẳng hạn(đuôi mp6 chưa bị đăng kí bắt buộc).Xong biên dịch chương trình của anh thành ra file EXE.
Chạy chương trình EXE của anh.Bấm vào Cmddangki ( đăng kí cho đuôi .mp6)
Tạo ta một file.mp6 bất kì có đuôi là .mp6
Kích đúp vào file đó.Chương trình của anh sẽ được gọi ra. ---->> OK
*Sau đó anh đăng kí bắt buộc cho đuôi .mp6 bằng cách
File.mp6 ---> chuột phải ---> open with ---> choose program ---> chọn chương trình bất kì khác , chọn mục Alway use selected program ---> OK
(đuôi .mp6 đã bị đăng kí bắt buộc)
*Kích đúp vào file.mp6 chương trình anh đã chọn sẽ chạy
*Chạy lại chương trình EXE của anh
Nhấn vào Cmddangki (đăng kí lại cho .mp6)
*Kích đúp vào file.mp6 lúc nãy ----> chương trình của anh không chạy ra nữa mà là chương trình anh đã đăng kí bắt buôc.
Em đã thử nhiều code để tạo chương trình mặc định nhưng kết quả vẫn vậy.
Có gì anh giúp em với nha.Nói sai anh đừng cười nha.
Cảm ơn anh.(Newbi)

Re: Tạo chương trình ứng dụng phục vụ cho Windows

Đã gửi: T.Bảy 17/01/2009 7:30 pm
gửi bởi clarkkent
sửa cái khóa default của nó lại, vì cái default đã bị chiếm bởi chuơng trình khác

Re: Tạo chương trình ứng dụng phục vụ cho Windows

Đã gửi: T.Sáu 23/01/2009 9:01 pm
gửi bởi newbi
Ý anh là sửa Defaut bằng code VB hay là trong máy tính.Nếu sửa bằng code anh chỉ giúp em với.E không tìm đâu ra chỗ đổi defaut trong đoạn code trên hết.Con sửa trên máy thì eo ơi.Nói làm gì nữa!

Re: Tạo chương trình ứng dụng phục vụ cho Windows

Đã gửi: T.Năm 29/01/2009 10:15 am
gửi bởi QuangHoa
Default là giá trị mặc định rùi, để sửa nó ta dùng ""

Re: Tạo chương trình ứng dụng phục vụ cho Windows

Đã gửi: T.Năm 12/02/2009 11:31 am
gửi bởi newbi
Chắc chắn giá trị defaut lưu trong registry, có điều tui không tìm ra vì rất lộn xộn.Ai có nhiều kinh nghiệm phá regedit thì chỉ giúp với nha.Cảm ơn !

Re: Tạo chương trình ứng dụng phục vụ cho Windows

Đã gửi: T.Năm 12/02/2009 11:40 am
gửi bởi newbi
Làm theo cách này được chết liền. Test lại thử coi. Chọn trong Property rồi thì không làm gì được nữa đâu. Tìm cách khác đi(rà lại toàn bộ regisstry thử, tui làm thử rồi ---> pó tay )

Re: Tạo chương trình ứng dụng phục vụ cho Windows

Đã gửi: T.Ba 17/02/2009 12:18 pm
gửi bởi clarkkent
newbi đã viết:Chắc chắn giá trị defaut lưu trong registry, có điều tui không tìm ra vì rất lộn xộn.Ai có nhiều kinh nghiệm phá regedit thì chỉ giúp với nha.Cảm ơn !

Bạn có thể nói rõ hơn là bạn cần cái gì. Hình như bạn đã làm dc 1 ctr nghe nhạc vào có 1 cái context menu rồi mà....

Đây là default, thường thì nó sẽ bị chiếm bởi khóa khác ở đây là mp3file (HKEY_CLASSES_ROOT\mp3file)
Hình ảnh

Re: Tạo chương trình ứng dụng phục vụ cho Windows

Đã gửi: T.Ba 17/02/2009 6:24 pm
gửi bởi newbi
Cảm ơn anh nha.

Re: Tạo chương trình ứng dụng phục vụ cho Windows

Đã gửi: T.Bảy 28/02/2009 4:08 pm
gửi bởi newbi
Cuối cùng mình cũng tìm ra chỗ thiếu trong các key đăng kí cho registry. Cách này mới hiệu lực chứ chỉ viết vào registry vài khóa như QuangHoa thì không hiệu quả.Chỉ cần import(code hay .reg đều được) các key này vào registry thì ok(chính xác như mô tả đến từng khoảng trống)
Các key tìm được:(giả sử đuôi cần đăng kí là .Dat, đường dẫn bên dưới)

[HKEY_CURRENT_USER\Software\Classes\Applications\ten chuong trinh.exe\shell\open\command]
@="\"C:\\Documents and Settings\\QUANG\\Desktop\\ten chuong trinh.exe\" \"%1\""

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.DAT]
"Application"="ten chuong trinh.exe"

[HKEY_USERS\S-1-5-21-1606980848-1844237615-725345543-1003\Software\Classes\Applications\ten chuong trinh.exe\shell\open\command]
@="\"C:\\Documents and Settings\\QUANG\\Desktop\\ten chuong trinh.exe\" \"%1\""

[HKEY_USERS\S-1-5-21-1606980848-1844237615-725345543-1003_Classes\Applications\ten chuong trinh.exe\shell\open\command]
@="\"C:\\Documents and Settings\\QUANG\\Desktop\\ten chuong trinh.exe\" \"%1\""


chú ý là muốn đăng kí mặc định thì chương trình phải tồn tại.Nếu không trong bảng open With nó sẽ báo là Unknown Application.

Re: Tạo chương trình ứng dụng phục vụ cho Windows

Đã gửi: T.Sáu 06/03/2009 4:19 pm
gửi bởi clarkkent
Ví dụ file .dat

ta tìm đến HKEY_CLASSES_ROOT\.dat
ví dụ ở máy tui thấy default là totalplayer.file

tui thay totalplayer.file bằng mofile.dat (lưu ý nên sao lưu cái khóa totalplayer.file nếu ko xài ctr của mình nữa thì backup lại totalplayer.file)

sau đó tạo key HKEY_CLASSES_ROOT\mofile.dat

tiếp tục tạo như sau:
HKEY_CLASSES_ROOT\mofile.dat\shell\open\command

Tại HKEY_CLASSES_ROOT\mofile.dat\shell\open\command ở giá trị default sửa thành ["đường dẫn chương trình sẽ mở file .dat" %1] là xong

còn muốn thêm icon thì tạo HKEY_CLASSES_ROOT\mofile.dat\DefaultIcon rồi ở Default thay thành icon

Re: Tạo chương trình ứng dụng phục vụ cho Windows

Đã gửi: T.Tư 11/03/2009 12:14 am
gửi bởi newbi
Anh xem lại thử đi. Cách của anh giống 99,9% của anh QH. Có điều anh ấy code còn anh registry thui.

Re: Tạo chương trình ứng dụng phục vụ cho Windows

Đã gửi: T.Hai 23/11/2009 5:54 pm
gửi bởi binhbnt
Cái này ko áp dụng cho vb.net
Ai biết làm từ Vb6 sang VB.net ko chỉ giùm mình với
Vì mình muốn tạo chương trình gì đó như mp3 made in tui chằng hạn để chơi thay cho WMP hay các chương trình khác...
Thanks :)

Re: Tạo chương trình ứng dụng phục vụ cho Windows

Đã gửi: T.Hai 23/11/2009 6:11 pm
gửi bởi Superman
binhbnt đã viết:Cái này ko áp dụng cho vb.net
Ai biết làm từ Vb6 sang VB.net ko chỉ giùm mình với
Vì mình muốn tạo chương trình gì đó như mp3 made in tui chằng hạn để chơi thay cho WMP hay các chương trình khác...
Thanks :)

cách thức cũng tương tự thôi bạn nhưng khác là ở phần nhận Command Line, bạn thử xem:

Mã: Chọn hết

  1. Environment.GetCommandLineArgs()

Re: Tạo chương trình ứng dụng phục vụ cho Windows

Đã gửi: T.Ba 19/10/2010 3:47 pm
gửi bởi ico
QuangHoa đã viết:Thêm Menu con vào Menu hệ thống :>
Chuẩn bị

Mã: Chọn tất cả

1. Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" ( _
2. ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
3. Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" ( _
4. ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, _
5. ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
6. Private Declare Function RegCloseKey Lib "advapi32" (ByVal hKey As Long) As Long
7. Public Sub luu(key As String)
8. Call RegCreateKey(&H80000000, key, hKey)
9. Call RegCreateKey(&H80000000, key & "\command", hKey)
10. 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"))
11. SetValue = RegCloseKey(hKey)
12. End Sub
13.


Nếu muốn thêm vào menu của ổ đĩa

Mã: Chọn tất cả

1. luu ("Drive\shell\" & chuoihientrenmenu)


Nếu muốn hiện trên Menu của thư mục

Mã: Chọn tất cả

1. 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 ! =D>


Thế Còn Thêm Menu con vào menu của File Thì Sao Ạ??

Re: Tạo chương trình ứng dụng phục vụ cho Windows

Đã gửi: T.Năm 15/12/2011 3:10 pm
gửi bởi vantienpros
Các bác xem lại xem code chạy đc trên VB2005 không ạ? em làm rồi khi chạy nó toàn báo lỗi thôi. không chạy được. cho dù thêm trực tiếp vào Resgetry cũng ko chạy đcj.
Thanks các bác nhiều nhé

Re: Tạo chương trình ứng dụng phục vụ cho Windows

Đã gửi: T.Sáu 23/01/2015 5:18 am
gửi bởi NTN
Cho em hỏi khi thông báo nó hiện thế này :
"C:\Users\Welcome\Desktop\a.btn"
Mình muốn bỏ dấu ngoặc ra thì làm sau ?