Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Creat0R
Цитата Creat0R:
прикрепил новый UDF к посту »
у меня все работает без ошибок, могу предположить, что CallBack удаляется до обработки всех WM_TIMER, между прочим в MSDN сказано:
Цитата MSDN:
The KillTimer function does not remove WM_TIMER messages already posted to the message queue
попробуй такой вариант:
Код: Выделить весь код
Func OnAutoItExit()
    Local $aRet, $QS_TIMER = 0x0010

    If $uiTimer<>0 Then DllCall("user32.dll", "int", "KillTimer", "hwnd", 0, "int", $uiTimer)
    If $pTimerProc<>0 Then
        Do
            $aRet = DllCall("user32.dll", "dword", "GetQueueStatus", "uint", $QS_TIMER)
        Until BitAnd(BitRotate($aRet[0], 16, "D"), $QS_TIMER) =0
        DllCallbackFree($pTimerProc)
    EndIf
    $pTimerProc = 0
    $uiTimer = 0
EndFunc
ADD: хотя может достаточно просто поменять местами строки - сначала закрыть таймер и только потом CallBack?

Цитата Creat0R:
есть ещё и версия без DllCalbackRegister, на основе WM_TIMER, но там есть свои ограничения (привязка к фиктивному GUI). »
там тоже скрипт вылетает?
Цитата Creat0R:
лишний раз вызывать функции мне кажется лишним
зато хэндлы ставятся/удаляются только один раз при том же эффекте

Последний раз редактировалось amel27, 06-11-2008 в 06:38.


Отправлено: 04:05, 06-11-2008 | #1086