<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK/CMD: Смена обоев рабочего стола]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=5414&amp;type=atom" />
	<updated>2011-01-25T10:01:56Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=5414</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK/CMD: Смена обоев рабочего стола]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44392#p44392" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>YMP пишет:</cite><blockquote><p>Попробовал, кстати, закомментировать вот эту строчку:<br /></p><div class="codebox"><pre><code>RegWrite, REG_SZ, HKCU, Control Panel\Desktop, Wallpaper, %dFile%</code></pre></div><p>Работает и без неё, путь в реестре всё равно появляется.</p></blockquote></div><p>Да, у меня тоже.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2011-01-25T10:01:56Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44392#p44392</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK/CMD: Смена обоев рабочего стола]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44386#p44386" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Так работает?</p></blockquote></div><p>Да, так работает нормально. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Правда в первый раз Винда зачем-то перекодировала рисунок обратно в jpg и поместила в папку, где она хранит обои для текущей темы. Соответственно и в реестре путь указывал туда. Хотя в диалоге выбора обоев был путь к твоему файлу bmp. Но при последующих запусках скрипта такого уже не было. Попробовал, кстати, закомментировать вот эту строчку:<br /></p><div class="codebox"><pre><code>RegWrite, REG_SZ, HKCU, Control Panel\Desktop, Wallpaper, %dFile%</code></pre></div><p>Работает и без неё, путь в реестре всё равно появляется.</p><p>Да, и вот это не совсем правильно, наверно:<br /></p><div class="quotebox"><blockquote><p>Функция меняет заставку рабочего стола.</p></blockquote></div><p>Т.к. провоцирует путаницу с заставкой экрана.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2011-01-25T03:47:44Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44386#p44386</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK/CMD: Смена обоев рабочего стола]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44384#p44384" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>YMP пишет:</cite><blockquote><p>Наверно, bTile и iStyle можно объединить в один параметр, проще будет.</p></blockquote></div><p>Здравая идея!<br /></p><div class="quotebox"><cite>YMP пишет:</cite><blockquote><p>Так что, наверно, в %AppData% приложение должно создать свою папку и туда такие вещи сохранять. Это если строго по идеологии. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p></blockquote></div><p>Ну, раз в Windows не пускают, пусть в %AppData% полежит. Так работает?<br /></p><div class="codebox"><pre><code>SetWallpaper(sWallpaperPath, nStyle = 3)
{
/*
Функция меняет заставку рабочего стола.

sWallpaperPath — путь к файлу с изображением

nStyle = 1 — по центру
nStyle = 2 — замостить
nStyle = 3 — растянуть

Только для Win 7:
nStyle = 4 — по размеру
nStyle = 5 — заполнение

Требует наличия Gdip.ahk в пользовательской библиотеке.
http://www.autohotkey.net/~tic/Gdip.ahk
*/

   SPI_SETDESKWALLPAPER = 0x14
   SPIF_SENDWININICHANGE = 0x2
   SPIF_UPDATEINIFILE = 0x1

   bTile := nStyle = 2 ? 1 : 0
   iStyle := (nStyle = 1 || nStyle = 2) ? 0 : nStyle = 4 ? 6 : nStyle = 5 ? 10 : 2

   if !FileExist(A_AppData &quot;\Wallpaper&quot;)
      FileCreateDir, %A_AppData%\Wallpaper
   dFile := A_AppData &quot;\Wallpaper\Wallpaper.bmp&quot;

   SplitPath, sWallpaperPath,,, OutExtension
   if OutExtension != bmp
   {
      if !pToken := Gdip_Startup()
      {
         MsgBox, 48, Ошибка GDI+, Убедитесь в наличии gdiplus.dll в вашей системе!
         ExitApp
      }
      if !pBitmap := Gdip_CreateBitmapFromFile(sWallpaperPath)
      {
         MsgBox, 48, Ошибка GDI+, Невозможно извлечь изображение из файла.
         Gdip_Shutdown(pToken)
         ExitApp
      }
      Gdip_SaveBitmapToFile(pBitmap, dFile)
      Gdip_DisposeImage(pBitmap)
      Gdip_Shutdown(pToken)
   }
   Else
      FileMove, %sWallpaperPath%, %dFile%, 1

   RegWrite, REG_SZ, HKCU, Control Panel\Desktop, Wallpaper, %dFile%
   RegWrite, REG_SZ, HKCU, Control Panel\Desktop, TileWallpaper, %bTile%
   RegWrite, Reg_SZ, HKCU, Control Panel\Desktop, WallpaperStyle, %iStyle%

   DllCall(&quot;SystemParametersInfo&quot;, UInt, SPI_SETDESKWALLPAPER, UInt, 0
      , Str, dFile, UInt, SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE)
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2011-01-24T21:18:30Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44384#p44384</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK/CMD: Смена обоев рабочего стола]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44375#p44375" />
			<content type="html"><![CDATA[<p>По идее, эта преобразованная копия картинки — данные приложения, а не самого пользователя. Так что, наверно, в %AppData% приложение должно создать свою папку и туда такие вещи сохранять. Это если строго по идеологии. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2011-01-24T10:04:49Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44375#p44375</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK/CMD: Смена обоев рабочего стола]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44374#p44374" />
			<content type="html"><![CDATA[<p>А куда правильнее сохранять? В &quot;Мои документы&quot;?</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2011-01-24T09:03:05Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44374#p44374</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK/CMD: Смена обоев рабочего стола]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44371#p44371" />
			<content type="html"><![CDATA[<p>Наверно, bTile и iStyle можно объединить в один параметр, проще будет.</p><p>При растягивании картинка может исказиться, если соотношение сторон не такое же как у экрана. Если выбрать &quot;по размеру&quot;, то она растягивается только до тех пор, пока по вертикали или горизонтали не упрётся в края экрана. Часть экрана может остаться незакрытой. При заполнении она продолжает увеличиваться, пока весь экран не заполнится, при этом где-то она может вылезти за пределы, если не вписывается точно в экран. Но искажения в обоих случаях нет.</p><p>Сохранять что-то в папку Windows вообще-то идеологически неправильно. Семёрка, кстати, всё равно туда не пустит. По видимости картинка сохранится туда, а фактически в папку пользователя — C:\Users\User\AppData\Local\VirtualStore\Windows. Поначалу всё нормально, но после перезагрузки обои не находятся. Та же история с Program Files.</p><p>Про эту виртуализацию есть в статье Руссиновича — <a href="http://technet.microsoft.com/ru-ru/magazine/2007.06.uac.aspx">Управление учетными записями пользователей Windows Vista: взгляд изнутри</a>.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2011-01-24T05:41:49Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44371#p44371</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK/CMD: Смена обоев рабочего стола]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44366#p44366" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>YMP пишет:</cite><blockquote><p>Кстати, есть ещё параметр WallpaperStyle. Если выбрать &quot;растянуть&quot;, то он меняется с 0 на 2. Можно, наверно, и его задействовать. В семёрке ещё добавились для него значения &quot;по размеру&quot; (6) и &quot;заполнение&quot; (10).</p></blockquote></div><p>Да, я про него забыл, почему-то. Тогда так:<br /></p><div class="codebox"><pre><code>SetWallpaper(sWallpaperPath, bTile = 0, iStyle = 0)
{
/*
Функция меняет заставку рабочего стола.
sWallpaperPath — путь к файлу с изображением
bTile = 0 — по центру
bTile = 1 — &quot;замостить&quot;

iStyle = 0 — по центру
iStyle = 2 — растянуть при bTile = 0

Только для Win 7 при bTile = 0:
iStyle = 6 — по размеру
iStyle = 10 — заполнение

Требует наличия Gdip.ahk в пользовательской библиотеке.
http://www.autohotkey.net/~tic/Gdip.ahk
*/

   SPI_SETDESKWALLPAPER = 0x14
   SPIF_SENDWININICHANGE = 0x2
   SPIF_UPDATEINIFILE = 0x1

   dFile := A_WinDir &quot;\ACD Wallpaper.bmp&quot;
   
   SplitPath, sWallpaperPath,,, OutExtension
   if OutExtension != bmp
   {
      if !pToken := Gdip_Startup()
      {
         MsgBox, 48, Ошибка GDI+!, Убедитесь в наличии gdiplus.dll в вашей системе!
         ExitApp
      }
      pBitmap := Gdip_CreateBitmapFromFile(sWallpaperPath)
      Gdip_SaveBitmapToFile(pBitmap, dFile)
      Gdip_DisposeImage(pBitmap)
      Gdip_Shutdown(pToken)
   }
   Else
      FileMove, %sWallpaperPath%, %dFile%, 1

   RegWrite, REG_SZ, HKCU, Control Panel\Desktop, Wallpaper, %dFile%
   RegWrite, REG_SZ, HKCU, Control Panel\Desktop, TileWallpaper, %bTile%
   RegWrite, Reg_SZ, HKCU, Control Panel\Desktop, WallpaperStyle, %iStyle%

   DllCall(&quot;SystemParametersInfo&quot;, UInt, SPI_SETDESKWALLPAPER, UInt, 0
      , Str, dFile, UInt, SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE)
}</code></pre></div><p>А чем отличается &quot;по размеру&quot; от &quot;по центру&quot;? И что такое &quot;заполнение&quot;?</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2011-01-23T19:38:17Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44366#p44366</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK/CMD: Смена обоев рабочего стола]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44365#p44365" />
			<content type="html"><![CDATA[<p><strong>Евген</strong>, не понял вопроса. Что значит «привести к такому же формату» и зачем? Если «как то же самое сделать через cmd», то не знаю.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2011-01-23T19:05:03Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44365#p44365</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK/CMD: Смена обоев рабочего стола]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44354#p44354" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>teadrinker пишет:</cite><blockquote><p>Мой код работает с любыми.</p></blockquote></div><p>а можно Вашу строчку<br /></p><div class="codebox"><pre><code>DllCall(&quot;SystemParametersInfo&quot;, UInt, SPI_SETDESKWALLPAPER, UInt, 0, Str, File, UInt, SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE)}</code></pre></div><p>привести к такому же формату<br /></p><div class="codebox"><pre><code>RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters ,1 ,True</code></pre></div><p>?</p>]]></content>
			<author>
				<name><![CDATA[Евген]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25253</uri>
			</author>
			<updated>2011-01-23T14:32:53Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44354#p44354</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK/CMD: Смена обоев рабочего стола]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44349#p44349" />
			<content type="html"><![CDATA[<p><strong>teadrinker</strong><br />В W7 работает. Кстати, есть ещё параметр WallpaperStyle. Если выбрать &quot;растянуть&quot;, то он меняется с 0 на 2. Можно, наверно, и его задействовать. В семёрке ещё добавились для него значения &quot;по размеру&quot; (6) и &quot;заполнение&quot; (10).</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2011-01-23T13:53:43Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44349#p44349</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK/CMD: Смена обоев рабочего стола]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44341#p44341" />
			<content type="html"><![CDATA[<p>Мой код работает с любыми.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2011-01-23T11:53:16Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44341#p44341</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK/CMD: Смена обоев рабочего стола]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44340#p44340" />
			<content type="html"><![CDATA[<p>Потому что работает только с BMP файлами !</p>]]></content>
			<author>
				<name><![CDATA[Евген]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=25253</uri>
			</author>
			<updated>2011-01-23T11:51:27Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44340#p44340</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK/CMD: Смена обоев рабочего стола]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44339#p44339" />
			<content type="html"><![CDATA[<p>Спасибо <strong>teadrinker</strong>, подойдет.</p><p>Вот искал и нашел команды, но в результате только синий экран почему то: <img src="//forum.script-coding.com/img/smilies/sad.png" width="15" height="15" /><br /></p><div class="codebox"><pre><code>REG ADD &quot;HKCU\Control Panel\Desktop&quot; /v Wallpaper /d &quot;D:\Picture\Pic.JPG&quot; /f
RUNDLL32.EXE USER32.DLL,UpdatePerUserSystemParameters ,1 ,True</code></pre></div>]]></content>
			<author>
				<name><![CDATA[avens]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24487</uri>
			</author>
			<updated>2011-01-23T11:44:16Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44339#p44339</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK/CMD: Смена обоев рабочего стола]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44338#p44338" />
			<content type="html"><![CDATA[<p>Но это для XP, не знаю, будет ли в семёрке работать. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2011-01-23T11:20:52Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44338#p44338</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK/CMD: Смена обоев рабочего стола]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=44337#p44337" />
			<content type="html"><![CDATA[<p>Писал такое когда-то. Требует наличия <a href="http://www.autohotkey.net/~tic/Gdip.ahk">Gdip.ahk</a> в пользовательской библиотеке.<br /></p><div class="codebox"><pre><code>SetWallpaper(sWallpaperPath, bTile = 0)
{
/*
Функция меняет заставку рабочего стола.
sWallpaperPath — путь к файлу с изображением
bTile = 0 — по центру
bTile = 1 — &quot;замостить&quot;
Требует наличия Gdip.ahk в пользовательской библиотеке.
http://www.autohotkey.net/~tic/Gdip.ahk
*/

    SPI_SETDESKWALLPAPER = 0x14
    SPIF_SENDWININICHANGE = 0x2
    SPIF_UPDATEINIFILE = 0x1

    SplitPath, sWallpaperPath,,, OutExtension
    if OutExtension != bmp
    {
        File := A_WinDir &quot;\ACD Wallpaper.bmp&quot;
        FileDelete, % File
        if !pToken := Gdip_Startup()
        {
            MsgBox, 48, Ошибка GDI+!, Убедитесь в наличии gdiplus.dll в вашей системе!
            ExitApp
        }
        pBitmap := Gdip_CreateBitmapFromFile(sWallpaperPath)
        Gdip_SaveBitmapToFile(pBitmap, File)
        Gdip_DisposeImage(pBitmap)
        Gdip_Shutdown(pToken)
    }
    Else
        File := sWallpaperPath

    RegRead, Value1, HKCU, Control Panel\Desktop, Wallpaper
    RegRead, Value2, HKCU, Control Panel\Desktop, TileWallpaper
    if (Value1 = &quot;&quot; || Value2 = &quot;&quot;)
    {
        MsgBox, 48, Несоответствие ключей реестра!
            , % &quot;Ключи реестра, с которыми работает программа,&quot;
            .    &quot;`nне существуют в Вашей системе!&quot;
        ExitApp
    }

    RegWrite, REG_SZ, HKCU, Control Panel\Desktop, Wallpaper, %File%
    RegWrite, REG_SZ, HKCU, Control Panel\Desktop, TileWallpaper, %bTile%

    DllCall(&quot;SystemParametersInfo&quot;, UInt, SPI_SETDESKWALLPAPER, UInt, 0
        , Str, File, UInt, SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE)
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2011-01-23T11:10:48Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=44337#p44337</id>
		</entry>
</feed>
