• 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

Chèn thêm chi tiết vào desktop

Các thủ thuật về truyền thông đa phương tiện, đồ họa

Điều hành viên: tungcan5diop, QUANITGROBEST

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Chèn thêm chi tiết vào desktop

Gửi bàigửi bởi vo_minhdat2007 » T.Tư 25/08/2010 5:11 pm

Thủ thuật: Chèn thêm chi tiết vào desktop
Tác giả: vo_minhdat2007
Mô tả: Có thể ứng dụng làm chương trình lịch, ...



Khởi đầu, Import 2 namespace cần dùng:

  1. Imports System.Runtime.InteropServices
  2. Imports Microsoft.Win32


Trước tiên, ta lấy đường dẫn wallpaper hiện tại (của Windows lưu riêng ra, không phải là file gốc đâu!). Có 2 cách: lấy trực tiếp bằng Registry (ngắn) và dùng API (cho biết thôi, không nên dùng :P)

Dùng Registry:

  1.     Dim UserWallpaper As RegistryKey = Registry.CurrentUser.OpenSubKey("Control Panel\Desktop", False)
  2.         'Lấy đường dẫn wallpaper hiện tại
  3.         Dim Path As String = UserWallpaper.GetValue("Wallpaper")


Dùng API:

  1.     <DllImport("user32.dll", CharSet:=CharSet.Auto)> _
  2.     Public Shared Function SystemParametersInfo(ByVal uAction As UInt32, ByVal uParam As Integer, ByVal lpvParam As String, ByVal fuWinIni As Integer) As Integer
  3.     End Function
  4.  
  5.     Public Function GetCurrentDesktopWallpaper() As String
  6.         Dim currentWallpaper As New String(ControlChars.NullChar, MAX_PATH)
  7.         SystemParametersInfo(SPI_GETDESKWALLPAPER, currentWallpaper.Length, currentWallpaper, 0)
  8.         Return currentWallpaper.Substring(0, currentWallpaper.IndexOf(ControlChars.NullChar))
  9.     End Function


Sau đó, dùng Graphics để thay đổi, vẽ vời gì đó tùy thích :P

  1.         'Tạo bitmap từ file đó và vẽ chuỗi lên
  2.         Dim bm As New Bitmap(Path)
  3.         Dim gr As Graphics = Graphics.FromImage(bm)
  4.         gr.DrawString("Made by vo_minhdat2007", Me.Font, Brushes.Red, 0, 0)


Tham khảo them về Graphics tại đây: viewtopic.php?f=23&t=3840

Cuối cùng, lưu lại và đặt nó làm Desktop mới:

Khai báo API này:

  1.     Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Integer, ByVal uParam As Integer, ByVal lpvParam As String, ByVal fuWinIni As Integer) As Integer
  2.     Private Const SPI_SETDESKWALLPAPER = 20
  3.     Private Const SPIF_UPDATEINIFILE = &H1


Code trong chương trình chính:

  1.         'Lưu lại
  2.         bm.Save("C:\Temp.bmp")
  3.         'Đặt làm hình nền mới
  4.         SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, "C:\Temp.bmp", SPIF_UPDATEINIFILE)
  5.  


Vậy là xong, đây là kết quả :D

Hình ảnh
Hình ảnh



volcano2409
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 92
Ngày tham gia: T.Ba 21/04/2009 5:24 pm

Re: Chèn thêm chi tiết vào desktop

Gửi bàigửi bởi volcano2409 » T.Tư 25/08/2010 6:10 pm

Nhưng mà làm sao có thể chèn một tấm hình nào đó từ form vào dc :-?

Hình đại diện của người dùng
TheDark
Guru
Guru
Bài viết: 188
Ngày tham gia: T.Năm 04/11/2010 3:56 pm
Đến từ: Mang Thít - Vĩnh Long
Has thanked: 6 time
Been thanked: 33 time

Re: Chèn thêm chi tiết vào desktop

Gửi bàigửi bởi TheDark » T.Sáu 20/01/2012 4:54 pm

Làm theo cách của mod Đạt dường như không ổn lắm.
Mình thấy thế này:
- Đâu tiên mình lấy file "C:\A.bmp" làm hình nền bằng tay.
- Sau đó chạy phần mềm. Điều hiển nhiên là Path = @"C:\.........\themes\........\ABC.jpg"; và ABC.jpg là một hình y chan A.bmp;
- Tiếp theo đó tạo đối tượng bitmap "bm" từ Path, sau đó vẽ vời lên nó. Ví dụ mình vẽ "ngày hôm nay" (ngày hôm nay là 20) lên. Xong rồi thì lưu lại với tên temp.bmp ở ổ đĩa C:\
- Dùng API set wallpaper = C:\temp.bmp
- Vì wallpaper đã thay đỗi. HĐH sẽ tạo ra file @"C:\.........\themes\........\ABC.jpg" , là một hình y chan temp.bmp;
Vấn đề bắt đầu khi mình chạy phần mềm vào ngày hôm sau.
- File mình lấy được từ Registry không phải là file hình nền y chang A.bmp nữa. Nó file đã được mình vẽ lên hôm qua temp.bmp. Và hôm nay mình vẽ lên nữa => Failed

Hình đại diện của người dùng
VuVanHoanh
Thành viên danh dự
Thành viên danh dự
Bài viết: 1259
Ngày tham gia: T.Năm 03/06/2010 9:23 pm
Đến từ: Kim Sơn - Đông Triều - Quảng Ninh
Has thanked: 22 time
Been thanked: 137 time
Liên hệ:

Re: Chèn thêm chi tiết vào desktop

Gửi bàigửi bởi VuVanHoanh » CN 22/01/2012 7:55 am

Cách anh Đạt nếu xài desktop Win 7, cho nhiều ảnh làm desktop thì có hoạt động được k anh?
Since 2008...
One love! :x

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Re: Chèn thêm chi tiết vào desktop

Gửi bàigửi bởi vo_minhdat2007 » CN 22/01/2012 8:37 am

TheDark đã viết:Làm theo cách của mod Đạt dường như không ổn lắm.
Mình thấy thế này:
- Đâu tiên mình lấy file "C:\A.bmp" làm hình nền bằng tay.
- Sau đó chạy phần mềm. Điều hiển nhiên là Path = @"C:\.........\themes\........\ABC.jpg"; và ABC.jpg là một hình y chan A.bmp;
- Tiếp theo đó tạo đối tượng bitmap "bm" từ Path, sau đó vẽ vời lên nó. Ví dụ mình vẽ "ngày hôm nay" (ngày hôm nay là 20) lên. Xong rồi thì lưu lại với tên temp.bmp ở ổ đĩa C:\
- Dùng API set wallpaper = C:\temp.bmp
- Vì wallpaper đã thay đỗi. HĐH sẽ tạo ra file @"C:\.........\themes\........\ABC.jpg" , là một hình y chan temp.bmp;
Vấn đề bắt đầu khi mình chạy phần mềm vào ngày hôm sau.
- File mình lấy được từ Registry không phải là file hình nền y chang A.bmp nữa. Nó file đã được mình vẽ lên hôm qua temp.bmp. Và hôm nay mình vẽ lên nữa => Failed


Ừ, trước mình làm phần mềm cũng gặp tình trạng đó, lúc đó mình tạm khắc phục như sau:

- Trước khi vẽ, lưu lại 1 bản cho chương trình.
- Sau khi set Wallpaper, lấy file từ C:\...\ABC.jpg, ghi vào đó 1 tag trong metadata là "MyProgramWallpaper".
- Ngày hôm sau, lấy C:\...\ABC.jpg, kiểm tra có tag metadata đó hay không:
  • Nếu có: lấy file đã lưu lại trước khi vẽ để vẽ tiếp.
  • Nếu không: user đã đổi Wallpaper, mình lấy wallpaper mới và thực hiện lại từ đầu.

VuVanHoanh đã viết:Cách anh Đạt nếu xài desktop Win 7, cho nhiều ảnh làm desktop thì có hoạt động được k anh?

Dùng API bắt sự kiện thay đổi Wallpaper của Windows là được.


Quay về “[.NET] Âm thanh và Đồ họa”

Đ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