Yazılım | Programlama C#'da resource dosyasından jpg çıkarmak ve onu wallpaper yapmak istiyorum

Xr00tgh0st

Katılımcı Üye
4 Haz 2015
475
3
C:/Windows/
evet başlıkta belirttiğim gibi proje dosyalarımın içinde bulunan jpg dosyasını, proje çalıştırıldığında wallpaper olarak ayarlamak istiyorum. Teşekkürler yarıdmlarınızı bekliyorum..
 

zztri

Yaşayan Forum Efsanesi
9 Tem 2015
10,053
4
390
Ankara
.NET standart mı?

Eğer UWP projesi ise Windows.System.UserProfile'ın zaten fonksiyonu var TrySetWallpaperImageAsync diye..

Yok .NET Standard ise zorunlu pinvoke yapacaksın.

C#:
[DllImport("user32.dll", CharSet = CharSet.Auto)]
static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni);

Öncelikle projeye eklediğin imajın özelliklerine gelip, "Copy to Output Directory" özelliğini değiştiriyoruz ki, son ürünümüzde de olsun bu dosya.

Senin istediğin sabitlere bakalım MSDN'den; duvar kağıdı değiştirme 20, uparam yok, lparam yeni dosyanın path'i... Son parametre olarak da 1 | 2, yani 3 diyeceğiz ki hem winIni değerlerini değiştirecek, hem de yenilik yapıldığına dair mesaj gönderecek.

Mesela diyelim dosyamızın adı osman.jpg, yeri de o anda çalışan programımızın ana modülünün klasörü olur.

C#:
SystemParametersInfo(20,0,System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName),"osman.jpg"),3);
 

Xr00tgh0st

Katılımcı Üye
4 Haz 2015
475
3
C:/Windows/
yanıtarınız için çok teşekkür ederim. cevabınız çok detaylı çok güzel olmuş. Aslında istemiş olduğum şey projemdeki Resource klasöründe bulundan resmi wallpaper yapmak istemekti. Şuan bir çözüm buldum fakat win7 de çalışmıyor incelerseniz bırakayım
C#:
        [DllImport("user32.dll", CharSet = CharSet.Auto)]

        private static extern Int32 SystemParametersInfo(UInt32 uiAction, UInt32 uiParam, String pvParam, UInt32 fWinIni);

        private static UInt32 SPI_SETDESKWALLPAPER = 20;

        private static UInt32 SPIF_UPDATEINIFILE = 0x1;


        [DllImport("user32.dll")]

        static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);


        // Wallpaper Değiştirme Metodu

        public static void changewallpaper()

        {

            try

            {



                Directory.CreateDirectory(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\ex");

                string imgpath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\ex\\wallpaper.jpg";

                Resource1.wallpaper.Save(imgpath);

                SystemParametersInfo(SPI_SETDESKWALLPAPER, 1, imgpath, SPIF_UPDATEINIFILE);

            }

            catch

            {

                WebClient webClient = new WebClient();

                string imgpath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\ex\\wallpaper.jpg";

                webClient.DownloadFile("resim urli", imgpath); // Eğer wallpaper resmini sitenizden alacaksanız.

                SystemParametersInfo(SPI_SETDESKWALLPAPER, 1, imgpath, SPIF_UPDATEINIFILE);

            }


        }
 

zztri

Yaşayan Forum Efsanesi
9 Tem 2015
10,053
4
390
Ankara
.NET tam gereksiz bir şey değil mi ya. UWP de öyle.
.NET 20 yıldan fazla süredir geliştirilen, oturmuş bir sistemdir. Hedef kitleniz Windows ise kodlama zamanınızı alternatiflere göre inanılmaz miktarda azaltır. C ve C++ ile mükemmel uyum sağlar.

UWP ben de kullanmıyorum. Standart .NET Forms applikasyonları hala mükemmelen çalışırken neden kullanmalıyız bilmiyorum da.

Ama bir yazılımın business logic dediğimiz standart mantığını tek bir dll olarak yazdıktan sonra .NET bunu hem web, hem masaüstü, hem mono sayesinde MacOS ve Unix platformları, son olarak da Xamarin sayesinde azıcık uğraşla mobil applikasyonlarda kullanılmasını sağlar.
yanıtarınız için çok teşekkür ederim. cevabınız çok detaylı çok güzel olmuş. Aslında istemiş olduğum şey projemdeki Resource klasöründe bulundan resmi wallpaper yapmak istemekti. Şuan bir çözüm buldum fakat win7 de çalışmıyor incelerseniz bırakayım
C#:
        [DllImport("user32.dll", CharSet = CharSet.Auto)]

        private static extern Int32 SystemParametersInfo(UInt32 uiAction, UInt32 uiParam, String pvParam, UInt32 fWinIni);

        private static UInt32 SPI_SETDESKWALLPAPER = 20;

        private static UInt32 SPIF_UPDATEINIFILE = 0x1;


        [DllImport("user32.dll")]

        static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);


        // Wallpaper Değiştirme Metodu

        public static void changewallpaper()

        {

            try

            {



                Directory.CreateDirectory(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\ex");

                string imgpath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\ex\\wallpaper.jpg";

                Resource1.wallpaper.Save(imgpath);

                SystemParametersInfo(SPI_SETDESKWALLPAPER, 1, imgpath, SPIF_UPDATEINIFILE);

            }

            catch

            {

                WebClient webClient = new WebClient();

                string imgpath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\ex\\wallpaper.jpg";

                webClient.DownloadFile("resim urli", imgpath); // Eğer wallpaper resmini sitenizden alacaksanız.

                SystemParametersInfo(SPI_SETDESKWALLPAPER, 1, imgpath, SPIF_UPDATEINIFILE);

            }


        }
Üstad iş cihazındayım. Yani Windows 7 için ISO'm veya sanal makinem yok. Ama bu kodun çalışması lazım. Hata nedir? Hiç bir şey yapmıyor mu, ki hiç zannetmem. Compile mı etmiyor, yoksa bir hata mı veriyor?
 

Xr00tgh0st

Katılımcı Üye
4 Haz 2015
475
3
C:/Windows/
.NET 20 yıldan fazla süredir geliştirilen, oturmuş bir sistemdir. Hedef kitleniz Windows ise kodlama zamanınızı alternatiflere göre inanılmaz miktarda azaltır. C ve C++ ile mükemmel uyum sağlar.

UWP ben de kullanmıyorum. Standart .NET Forms applikasyonları hala mükemmelen çalışırken neden kullanmalıyız bilmiyorum da.

Ama bir yazılımın business logic dediğimiz standart mantığını tek bir dll olarak yazdıktan sonra .NET bunu hem web, hem masaüstü, hem mono sayesinde MacOS ve Unix platformları, son olarak da Xamarin sayesinde azıcık uğraşla mobil applikasyonlarda kullanılmasını sağlar.

Üstad iş cihazındayım. Yani Windows 7 için ISO'm veya sanal makinem yok. Ama bu kodun çalışması lazım. Hata nedir? Hiç bir şey yapmıyor mu, ki hiç zannetmem. Compile mı etmiyor, yoksa bir hata mı veriyor?
Hayır hata vermiyor. Program kendisi çalışıyor çok güzel bir şekilde. any.run sitesinden test ettim fakat arka plan değişmiyor. Kendi sanal makinemde test ettiğimde hatta kendi pcm de çalışıyor. Sorun şu ki başka wallpaper değiştiren programlar denediğimde any.run'da çalışıyor.
 

Xr00tgh0st

Katılımcı Üye
4 Haz 2015
475
3
C:/Windows/
.NET 20 yıldan fazla süredir geliştirilen, oturmuş bir sistemdir. Hedef kitleniz Windows ise kodlama zamanınızı alternatiflere göre inanılmaz miktarda azaltır. C ve C++ ile mükemmel uyum sağlar.

UWP ben de kullanmıyorum. Standart .NET Forms applikasyonları hala mükemmelen çalışırken neden kullanmalıyız bilmiyorum da.

Ama bir yazılımın business logic dediğimiz standart mantığını tek bir dll olarak yazdıktan sonra .NET bunu hem web, hem masaüstü, hem mono sayesinde MacOS ve Unix platformları, son olarak da Xamarin sayesinde azıcık uğraşla mobil applikasyonlarda kullanılmasını sağlar.

Üstad iş cihazındayım. Yani Windows 7 için ISO'm veya sanal makinem yok. Ama bu kodun çalışması lazım. Hata nedir? Hiç bir şey yapmıyor mu, ki hiç zannetmem. Compile mı etmiyor, yoksa bir hata mı veriyor?
Hayır hata vermiyor. Program kendisi çalışıyor çok güzel bir şekilde. any.run sitesinden test ettim fakat arka plan değişmiyor. Kendi sanal makinemde test ettiğimde hatta kendi pcm de çalışıyor. Sorun şu ki başka wallpaper değiştiren programlar denediğimde any.run'da çalışıyor.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.