• 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ạo chương trình ứng dụng phục vụ cho Windows

Các thủ thuật về hệ thống, thư mục, tập tin và mạng
QuangHoa
Guru
Guru
Bài viết: 542
Ngày tham gia: T.Năm 27/03/2008 9:02 am
Đến từ: Quê hương Đại tướng Võ Nguyên Giáp
Been thanked: 5 time
Liên hệ:

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

Gửi bàigửi bởi QuangHoa » T.Sáu 11/04/2008 8:43 am

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>


朋友
这些年一个人风也过雨也走,有过泪有过错还记得坚持什么。
真爱过才会懂会记没会回手,终有梦中有你在心中。
朋友一生一起走那些日子不再有,一句话一辈子一生情一杯九。
朋友不曾孤单过一声朋友你会懂,还有伤还有痛还要走还有我。

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: Tạo chương trình ứng dụng phục vụ cho Windows

Gửi bàigửi bởi newbi » T.Tư 14/01/2009 10:55 pm

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)

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ệ:

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

Gửi bàigửi bởi clarkkent » T.Bảy 17/01/2009 7:30 pm

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
• 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: Tạo chương trình ứng dụng phục vụ cho Windows

Gửi bàigửi bởi newbi » T.Sáu 23/01/2009 9:01 pm

Ý 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!

QuangHoa
Guru
Guru
Bài viết: 542
Ngày tham gia: T.Năm 27/03/2008 9:02 am
Đến từ: Quê hương Đại tướng Võ Nguyên Giáp
Been thanked: 5 time
Liên hệ:

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

Gửi bàigửi bởi QuangHoa » T.Năm 29/01/2009 10:15 am

Default là giá trị mặc định rùi, để sửa nó ta dùng ""
朋友
这些年一个人风也过雨也走,有过泪有过错还记得坚持什么。
真爱过才会懂会记没会回手,终有梦中有你在心中。
朋友一生一起走那些日子不再有,一句话一辈子一生情一杯九。
朋友不曾孤单过一声朋友你会懂,还有伤还有痛还要走还有我。

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: Tạo chương trình ứng dụng phục vụ cho Windows

Gửi bàigửi bởi newbi » T.Năm 12/02/2009 11:31 am

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 !

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: Tạo chương trình ứng dụng phục vụ cho Windows

Gửi bàigửi bởi newbi » T.Năm 12/02/2009 11:40 am

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 )

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ệ:

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

Gửi bàigửi bởi clarkkent » T.Ba 17/02/2009 12:18 pm

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
• 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: Tạo chương trình ứng dụng phục vụ cho Windows

Gửi bàigửi bởi newbi » T.Ba 17/02/2009 6:24 pm

Cảm ơn anh nha.

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: Tạo chương trình ứng dụng phục vụ cho Windows

Gửi bàigửi bởi newbi » T.Bảy 28/02/2009 4:08 pm

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.

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ệ:

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

Gửi bàigửi bởi clarkkent » T.Sáu 06/03/2009 4:19 pm

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
• 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: Tạo chương trình ứng dụng phục vụ cho Windows

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

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.

binhbnt
Bài viết: 1
Ngày tham gia: T.Ba 09/12/2008 3:48 pm

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

Gửi bàigửi bởi binhbnt » T.Hai 23/11/2009 5:54 pm

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 :)

Superman
Mạnh Thường Quân
Mạnh Thường Quân
Bài viết: 232
Ngày tham gia: T.Năm 11/06/2009 8:27 am
Đến từ: nơi sẽ đến...
Has thanked: 1 time
Been thanked: 4 time
Liên hệ:

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

Gửi bàigửi bởi Superman » T.Hai 23/11/2009 6:11 pm

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()
my love wouldn't change...

Hình đại diện của người dùng
ico
Thành viên danh dự
Thành viên danh dự
Bài viết: 193
Ngày tham gia: T.Ba 20/07/2010 9:23 am
Đến từ: https://sites.google.com/site/icowaredownload
Has thanked: 1 time
Been thanked: 23 time
Liên hệ:

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

Gửi bàigửi bởi ico » T.Ba 19/10/2010 3:47 pm

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 Ạ??
Copy và Paste là 2 thành tựu hàng đầu thế giới và được các chuyên gia hàng đầu về tin học tin dùng

vantienpros
Bài viết: 9
Ngày tham gia: T.Năm 03/11/2011 10:09 am
Has thanked: 3 time

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

Gửi bàigửi bởi vantienpros » T.Năm 15/12/2011 3:10 pm

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é

Hình đại diện của người dùng
NTN
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 472
Ngày tham gia: T.Tư 05/02/2014 3:43 pm
Đến từ: Cao Lãnh, Đồng Tháp,Việt Nam
Has thanked: 19 time
Been thanked: 7 time
Liên hệ:

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

Gửi bàigửi bởi NTN » T.Sáu 23/01/2015 5:18 am

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 ?
Dongthapseo.com - Luutru360.com - Tình yêu của tôi <3


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.2 khách