Перейти к содержимому

Absurd

Пользователи
  • Публикации

    3
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные пользователем Absurd


  1. Попалась на глаза статья о поиске решения задачи по снятию и сохранению в папку с картинками скриншота желаемого размера в заданной области координат. Очевидно, что моё решение запоздало, но вдруг пригодится, сэкономит кому то время. Использую данный метод в своих AHK-скриптах.

     

    На диске С: создаю папочку "screens"

    В шапке прописываю:     

     file = C:\screens\file.bmp   

     

    И ниже функцию:

        screen(x,y,w,h, OutputFilePath, hwnd="") 
        {
            hwnd := (hwnd="") ? WinExist("A") : hwnd                     
            pBitmap := Gdip_BitmapFromScreen(0,raster)
            if (pBitmap < 1)
            pToken := Gdip_StartUp(), pBitmap := Gdip_BitmapFromScreen(0,raster)
            pBitmap2 := Gdip_CreateBitmap(w, h)
            G2 := Gdip_GraphicsFromImage(pBitmap2), Gdip_SetSmoothingMode(G2, 4), Gdip_SetInterpolationMode(G2, 7)
            Gdip_DrawImage(G2, pBitmap, 0, 0, w, h, x, y, w, h)
            Gdip_SaveBitmapToFile(pBitmap2, OutputFilePath)
            Gdip_DeleteGraphics(G2), Gdip_DisposeImage(pBitmap), Gdip_DisposeImage(pBitmap2)
            if (pToken != "")
            Gdip_ShutDown(pToken)
        } 

     

    и далее, когда мне где то в петле, нужен скриншот, чтобы с ним работать, я вызываю функцию:

     screen(780, 567, 25, 16, file, EVE - Negociant)  ; где первая пара - 780, 657 -это левая верхняя точка области снятия скриншота, вторая пара - 25, 16 - размер области в пикселях, file - произвольное название скриншота, а далее название активного окна, в моем случае, это окно Eve online. После вызова функции даю паузу секунды полторы на выполнение. Пауза тоже непростая, поскольку использую пару таймеров, потому во избежание багов использую такую функцию:

    my_sleep(a:=0, b:=0)
        {
            Random, pz, a, b
            end_timer := A_TickCount + pz
            while ( A_TickCount <= end_timer )
            {
                Sleep, 10
            }
            Return
        }

    потом повсюду в теле скрипта пишу, например

    my_sleep(1000, 1500)

     

×
×
  • Создать...