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

Các điều hành viên: tungcan5diop, QUANITGROBEST

Đăng trả lời
Hình đại diện của thành viên
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: Chủ nhật 17/07/2005 1:40 am
Has thanked: 13 times
Been thanked: 87 times
Tiếp xúc:

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

Gửi bài by vo_minhdat2007 »

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)


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: Thứ 3 21/04/2009 5:24 pm

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

Gửi bài by volcano2409 »

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 thành viên
TheDark
Guru
Guru
Bài viết: 188
Ngày tham gia: Thứ 5 04/11/2010 3:56 pm
Đến từ: Mang Thít - Vĩnh Long
Has thanked: 6 times
Been thanked: 33 times

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

Gửi bài by TheDark »

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 thành viên
VuVanHoanh
Thành viên danh dự
Thành viên danh dự
Bài viết: 1259
Ngày tham gia: Thứ 5 03/06/2010 9:23 pm
Đến từ: Kim Sơn - Đông Triều - Quảng Ninh
Has thanked: 22 times
Been thanked: 138 times
Tiếp xúc:

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

Gửi bài by VuVanHoanh »

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 thành viên
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: Chủ nhật 17/07/2005 1:40 am
Has thanked: 13 times
Been thanked: 87 times
Tiếp xúc:

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

Gửi bài by vo_minhdat2007 »

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.
Đăng trả lời

Quay về