1 (изменено: Dworkin, 2014-07-03 22:05:00)

Тема: AHK: Завершения цикла(таймера) через определенное время

Здрасте. Ниже кусочек кода моего скрипта.

#Include Gdip.ahk

F3::ExitApp

value := 0

SetTimer CheckExist, 500

Checkexist:
Process, Exist, process.exe
status = %ErrorLevel% 
if status = 0 
{ 
MsgBox, Запустите  приложение
exitapp 
}
else

;Дальше тут идет чтение памяти приложения и если оно по определенному адресу становится равно 0 то начинаются делаться скрины. Для удобства я сразу присвоил переменой value = 0

if (value = 0)
{
file = %a_tickcount%screen.png
Screenshot(file)
}
else if (value = 1)
{
}
return

Screenshot(outfile)
{
    pToken := Gdip_Startup()

    screen=0|0|%A_ScreenWidth%|%A_ScreenHeight%
    pBitmap := Gdip_BitmapFromScreen(screen)

    Gdip_SaveBitmapToFile(pBitmap, outfile, 100)
    Gdip_DisposeImage(pBitmap)
    Gdip_Shutdown(pToken)
}

Скриншоты делаются каждые пол секунды. Как сделать что бы скриншоты делались каждые пол секунды на протяжении 10 секунд? И по истечении 10 сек либо происходит exitapp или начинает заново считывать переменную value с целью узнать вдруг там уже 1, а не 0. У меня уже дым из ушей идет, не могу решить данную проблему. Помогите пожалуйста.

P.S. Нужен инклуд GDIp. Его можно скачать по этой ссылку http://www.autohotkey.net/~tic/Gdip.ahk

2

Re: AHK: Завершения цикла(таймера) через определенное время

Впихнуть это все в цикл и и выходить из него когда A_TickCount - стартовое время > 10000

3

Re: AHK: Завершения цикла(таймера) через определенное время

Malcev пишет:

Впихнуть это все в цикл и и выходить из него когда A_TickCount - стартовое время > 10000

Я так понял что имеется виду это:

start_time := A_TickCount
Sleep, 1000
elapsed_time := A_TickCount - start_time
MsgBox, прошло %elapsed_time% миллисекунд.

Я вот уже час пытаюсь и ничего не выходит(

4

Re: AHK: Завершения цикла(таймера) через определенное время

start_time := A_TickCount
loop
{
   tooltip, 123
   if (A_TickCount - start_time) > 10000
      break
}

5 (изменено: Dworkin, 2014-07-04 02:40:08)

Re: AHK: Завершения цикла(таймера) через определенное время

Спасибо.

6

Re: AHK: Завершения цикла(таймера) через определенное время

Если так:

#Include GDIp.ahk
start_time := A_TickCount
Loop
   {
      sleep 250
      file = %A_TickCount%screen.png
      Screenshot(file)
      if (D := A_TickCount - start_time) > 2000
         break 
ToolTip, %D%, 425, 250, 1
   }
return

F3::
exitapp
return

Screenshot(outfile)
{
    pToken := Gdip_Startup()

    screen=0|0|%A_ScreenWidth%|%A_ScreenHeight%
    pBitmap := Gdip_BitmapFromScreen(screen)

    Gdip_SaveBitmapToFile(pBitmap, outfile, 100)
    Gdip_DisposeImage(pBitmap)
    Gdip_Shutdown(pToken)
}

то нормально, делает 5 скринов.
А если так:

#Include GDIp.ahk
start_time := A_TickCount
Loop
   {
     IfWinActive, Калькулятор Плюс
      {
      sleep 250
      file = %A_TickCount%screen.png
      Screenshot(file)
      if (D := A_TickCount - start_time) > 2000
         break 
ToolTip, %D%, 425, 250, 1
      }
   }
return

F3::
exitapp
return

Screenshot(outfile)
{
    pToken := Gdip_Startup()

    screen=0|0|%A_ScreenWidth%|%A_ScreenHeight%
    pBitmap := Gdip_BitmapFromScreen(screen)

    Gdip_SaveBitmapToFile(pBitmap, outfile, 100)
    Gdip_DisposeImage(pBitmap)
    Gdip_Shutdown(pToken)
}

то делает 1 скрин, когда активируешь окно. Как исправить?

7 (изменено: Malcev, 2014-07-04 04:28:25)

Re: AHK: Завершения цикла(таймера) через определенное время

Не понимаю, что вы хотите добиться, но если вы хотите чтобы время засекалось только в активированном окне, то можете при активации этого окна прибавлять время и при деактивации   его вычитать.

8

Re: AHK: Завершения цикла(таймера) через определенное время

Я бы хотел бы что скрины делались, когда окно активно в течении 10 секунд.
Например активировал окно, скрины делаются, через 6 секунд свернул окно, скрины перестали делаться и далее опять развернул окно, и скрины опять начались делаться, но остальные 4 секунды.
Поэтому не понимаю зачем время вычитать

9

Re: AHK: Завершения цикла(таймера) через определенное время

Settitlematchmode, 2
loop
{
   IfWinActive, Notepad
   {  
      start_time := A_TickCount
      msgbox % finish_time
      loop
      { 
         ToolTip 123
         if (finish_time + A_TickCount - start_time) > 10000
         {
            msgbox done
            ExitApp
         }
         IfWinNotActive, Notepad
         {
            finish_time += A_TickCount - start_time
            break
         }
      }
   }
}

10

Re: AHK: Завершения цикла(таймера) через определенное время

Как сделать что бы скриншоты делались каждые пол секунды на протяжении 10 секунд?

Не проще привязать к количеству действий?


Loop 20
{
    WinWaitActive, ahk_class Notepad
    ToolTip % A_Index
    sleep 500
}

Но если к 10 секундам, то проще наверное так:


value := 0

Loop
{
    If (value != 0) ; Если value неравно 0
        Continue ; То снова проверяем его значение
        
    passed := 0 
    
    While passed < 10000
    {
        WinWaitActive, ahk_class Notepad
        start := A_TickCount
        ToolTip % A_Index "`n" passed
        Sleep 500  
        passed += A_TickCount - start
    }
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

11

Re: AHK: Завершения цикла(таймера) через определенное время

А где в коде value меняет свое значение?

12

Re: AHK: Завершения цикла(таймера) через определенное время

Странный вопрос, нигде не меняет.
Судя по комментарию в коде из шапки, ТС это не озадачит.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui