1

Тема: Ahk: Мастер очистки рабочего стола 2

Выкладываю скрипт на тестирование. Программа-заставка "Мастер очистки рабочего стола 2"
Ищу недочёты  и ошибки. Интересует и мнение об уровне громкости.
Скрипт и прилагаемые файлы в архиве. http://files.mail.ru/Q6EMV6

Внимание! Для завершения работы скрипта нужно нажать Escape.

2

Re: Ahk: Мастер очистки рабочего стола 2

А описание скрипта где?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: Ahk: Мастер очистки рабочего стола 2

Описание: пользователь видит, как на экране появляется персонаж и "убирает" с рабочего стола все имеющиеся объекты. Сам скрипт немного сыроват (β-версия): в коде присутствуют лишние закомментированные строки, где-то наоборот, не хватает пояснений. И работает всё это пока при стандартных размерах значков. Нет возможности изменить громкость (выключить) звук.
Вопрос, как сделать этот скрип  заставкой пока не рассматривался.

4

Re: Ahk: Мастер очистки рабочего стола 2

В смысле,  "убирает"? Мне нужны мои объекты!

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: Ahk: Мастер очистки рабочего стола 2

Так Вы ещё не запускали его?
Объекты ни куда не деваются. Просто поверх рабочего стола появляются несколько окон, создаётся впечатление постепенной очистки рабочего стола. По нажатию клавиши Esc окна закрываются, и мы видим, что все объекты остались на своих местах.

6

Re: Ahk: Мастер очистки рабочего стола 2

Нужно было просто пояснить, что это программа-шутка. Попробовал — выглядит несколько архаично, такие лет 10 назад писали. Принципиальные ошибки: у персонажа непрозрачный фон; использование paint'а для получения файла скриншота. Эти темы здесь уже разбирались. Кстати, файл скриншота вообще не нужен, достаточно получить bitmap.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: Ahk: Мастер очистки рабочего стола 2

Непрозрачный фон - это поправимо.

Кстати, файл скриншота вообще не нужен, достаточно получить bitmap.

Хорошо, поищу по форуму способ обойтись без файлов.
Кстати, поначалу думал сделать полезную программу, а не просто шутку. Например, если человек отлучился от компьютера на 2 минуты, и нужно скрыть рабочий стол от посторонних глаз. Вот только один "юнит" будет долго трудиться, а вызвать толпу - у меня не хватило терпения. В общем пока вот так, когда время появится - будут катапульты и т. д.

8

Re: Ahk: Мастер очистки рабочего стола 2

ypppu пишет:

Хорошо, поищу по форуму способ обойтись без файлов.

Искать лучше всего здесь.
Вот тебе в помощь рабочий примерчик. Скрипт получает bitmap экрана, предварительно на время скрыв развёрнутые окна, и помещает полученную картинку в GUI. Требует наличия в пользовательской библиотеке скрипта Gdip.ahk

   SetBatchLines, -1

   Gui, Add, Pic
      , % "x0 y0 w" A_ScreenWidth/3 " h" A_ScreenHeight/3 " hwndhPic +0xE" ; SS_BITMAP := 0xE

   If !pToken := Gdip_Startup()
   {
      MsgBox, 48, Ошибка GDI+!
         , Убедитесь в наличии gdiplus.dll в вашей системе!
      ExitApp
   }
   
   WinGet, List, List
   Loop % List
   {
      WinGet, MinMax, MinMax, % "ahk_id " List%A_Index%
      if (MinMax = -1 || List%A_Index% = WinExist("Program Manager ahk_class Progman")
         || List%A_Index% = WinExist("ahk_class Shell_TrayWnd"))
         Continue
      WinList .= List%A_Index% . "`n"
   }
   StringTrimRight, WinList, WinList, 1

   Loop, parse, WinList, `n
      WinHide, ahk_id %A_LoopField%

   pBitmap := Gdip_BitmapFromScreen()

   Sort, WinList, F ReverseDirection D`n

   Loop, parse, WinList, `n
   {
      WinShow, ahk_id %A_LoopField%
      WinActivate, ahk_id %A_LoopField%
   }

   SetImageToControl(pBitmap, hPic)
   Gdip_DisposeImage(pBitmap)
   Gdip_Shutdown(pToken)
   
   Gui, Show, % "w" A_ScreenWidth/3 " h" A_ScreenHeight/3
   Return
   
GuiClose:
   ExitApp
   
ReverseDirection(a1, a2, offset)
{
   return offset
}

SetImageToControl(pBitmap, hwnd)
{
   ControlGetPos,,, W, H,, ahk_id %hwnd%
   hBitmapPic := CreateDIBSection(W, H)
   pBitmapPic := Gdip_CreateBitmapFromHBITMAP(hBitmapPic)
   G := Gdip_GraphicsFromImage(pBitmapPic)
   Gdip_SetInterpolationMode(G, 7)
   Width := Gdip_GetImageWidth(pBitmap), Height := Gdip_GetImageHeight(pBitmap)
   Gdip_DrawImage(G, pBitmap, 0, 0, W, H, 0, 0, Width, Height)
   DeleteObject(hBitmapPic)

   hBitmapPic := Gdip_CreateHBITMAPFromBitmap(pBitmapPic)
   SetImage(hwnd, hBitmapPic)

   Gdip_DeleteGraphics(G)
   Gdip_DisposeImage(pBitmapPic)
   DeleteObject(hBitmapPic)
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder