#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