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.