#comments-start

  Скрипт добавляет функцию перелистывания страниц колесиком мыши (непрерывный скроллинг) в DjVuViewer.exe от LizardTech.
  Скрипт должен находится в одной папке с DjVuViewer.exe.
  Использование: Выделить djvu-файл, вызвать котекстное мень, "Открыть с помошью...", выбрать djvu_scroll4.exe. Если перелистывания не происходит, то возможно в настройках мыши нужно указать режим IntelliMouse.
  Недостатки: при пролистывании страниц происходит как бы небольшое дополнительное прокручивание колесика.
  Автор идеи: Astra55
  Благодарности: _Kurt - за описание hook на форуме AutoIt, Astra55 - за помощь в отладке и тестировании скрипта.
                                                                     U235
                                                                         18.11.08
#comments-end

#include <GUIScrollBars.au3>
#include <ScrollBarConstants.au3>
#include <WinAPI.au3>
TraySetIcon("DjVuViewer.exe",1)
Global Const $WM_MOUSEWHEEL = 0x020A
Global Const $MSLLHOOKSTRUCT = $tagPOINT & ";dword mouseData;dword flags;dword time;ulong_ptr dwExtraInfo"
Global  $Pos
$hKey_Proc = DllCallbackRegister("_Mouse_Proc", "int", "int;ptr;ptr")
$hM_Module = DllCall("kernel32.dll", "hwnd", "GetModuleHandle", "ptr", 0)
$hM_Hook = DllCall("user32.dll", "hwnd", "SetWindowsHookEx", "int", $WH_MOUSE_LL, "ptr", DllCallbackGetPtr($hKey_Proc), "hwnd", $hM_Module[0], "dword", 0)
Run('DjVuViewer.exe '& $CmdLine [1], '', @SW_MAXIMIZE)

$handle2 = ControlGetHandle("DjVu Viewer", '', "[CLASS:ScrollBar; INSTANCE:2]")

$Pos=_GUIScrollBars_GetScrollPos($handle2,   $SB_CTL )
While 1
    Sleep(50)
   If ProcessExists ( "DjVuViewer.exe" )=0 Then Exit
WEnd

Func _Mouse_Proc($nCode, $wParam, $lParam)
    Local $info, $ptx, $pty, $mouseData, $flags, $time, $dwExtraInfo
    Local $xevent = "Unknown", $xmouseData = ""
   
    If $nCode < 0 Then
        $ret = DllCall("user32.dll", "long", "CallNextHookEx", "hwnd", $hM_Hook[0], _
                "int", $nCode, "ptr", $wParam, "ptr", $lParam)
        Return $ret[0]
    EndIf
   
    $info = DllStructCreate($MSLLHOOKSTRUCT, $lParam)
    $mouseData = DllStructGetData($info, 3)
    Select
          Case $wParam = $WM_MOUSEWHEEL
                If _WinAPI_HiWord($mouseData) > 0 Then
                 If _GUIScrollBars_GetScrollPos($handle2,   $SB_CTL )=$Pos Then ControlSend("DjVu Viewer", "", "[CLASS:DjVuImageWindow; INSTANCE:1]", "{PGUP}")
                Else
                  If _GUIScrollBars_GetScrollPos($handle2,   $SB_CTL )=$Pos Then ControlSend("DjVu Viewer", "", "[CLASS:DjVuImageWindow; INSTANCE:1]", "{PGDN}")
                $Pos=_GUIScrollBars_GetScrollPos($handle2,   $SB_CTL )
            EndIf
    EndSelect
   
    $ret = DllCall("user32.dll", "long", "CallNextHookEx", "hwnd", $hM_Hook[0], _
            "int", $nCode, "ptr", $wParam, "ptr", $lParam)
    Return $ret[0]
EndFunc   ;==>_Mouse_Proc

Func OnAutoItExit()
    DllCall("user32.dll", "int", "UnhookWindowsHookEx", "hwnd", $hM_Hook[0])
    $hM_Hook[0] = 0
    DllCallbackFree($hKey_Proc)
    $hKey_Proc = 0
EndFunc   ;==>OnAutoItExit
Hosted by uCoz