happytc 发表于 2011-7-9 11:55:26

下面的代码为何得不到记事本滚动条信息?


#include <GUIConstants.au3>

Const $SB_VERT   = 1, $SIF_RANGE = 0x0001
Local $hWin, $hCtrl, $tInfo, $aResult

Run("Notepad")
Sleep(200)
$hWin = WinGetHandle("")

For $i = 1 To 30
        ControlSend($hWin, "", "Edit1", @CRLF)
Next

$hCtrl = ControlGetHandle("", "", "Edit1")

$tInfo = DllStructCreate("uint Size;uint Mask;int Min;int Max;uint Page;int Pos;int TrackPos")
$tInfo_Size = DllStructGetSize($tInfo)
$tInfo_Mask = $SIF_RANGE
$tInfo_Min = DllStructGetData($tInfo, 3)
$tInfo_Max = DllStructGetData($tInfo, 4)
$aResult = DllCall("User32.dll", "int", "GetScrollInfo", "hwnd", $hCtrl, "int", $SB_VERT, "ptr", DllStructGetPtr($tInfo))

if $aResult = 0 then
ConsoleWrite("GetScrollInfo Error" & @CR)
else
ConsoleWrite("Size: " & $tInfo_Size & @CRLF)
ConsoleWrite("Min : " & $tInfo_Min & @CRLF)
ConsoleWrite("Max : " & $tInfo_Max & @CRLF)
endif

netegg 发表于 2011-7-9 12:43:17

$tInfo_Size = DllStructGetSize($tInfo)
$tInfo_Min = DllStructGetData($tInfo, 3)
$tInfo_Max = DllStructGetData($tInfo, 4)
你这三句获取的是什么值

happytc 发表于 2011-7-9 12:45:52

$tInfo_Size = DllStructGetSize($tInfo)
$tInfo_Min = DllStructGetData($tInfo, 3)
$tInfo_Max = DllSt ...
netegg 发表于 2011-7-9 12:43 http://www.autoitx.com/images/common/back.gif

前面有定义呀

其实这三个不重要,根本没有用到,主要是为什么DLLCall返回值中为什么$aResult = 0老是零呀

pusofalse 发表于 2011-7-9 12:47:36

看下GetScollInfo函数的帮助吧,MSDN中有说明。

happytc 发表于 2011-7-9 13:29:00

搞定了。贴代码:

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StructureConstants.au3>
#include <GUIScrollBars.au3>
#include <ScrollBarConstants.au3>
#include <Array.au3>

Run("Notepad")
Sleep(200)
$hWin = WinGetHandle("")

For $i = 1 To 40
        ControlSend($hWin, "", "Edit1", @CRLF)
Next

$hCtrl = ControlGetHandle("", "", "Edit1")



Local $tSCROLLINFO = DllStructCreate($tagSCROLLINFO)
DllStructSetData($tSCROLLINFO, "cbSize", DllStructGetSize($tSCROLLINFO))
DllStructSetData($tSCROLLINFO, "fMask", $SIF_RANGE)
$Size = DllStructGetData($tSCROLLINFO, 2)


MsgBox(0,0, $Size)

Func _GetScrollInfo($hWnd, $fnBar, ByRef $tSCROLLINFO)
        If Not IsHWnd($hWnd) Then Return SetError(-2, -1, False)
        Local $aResult = DllCall("user32.dll", "bool", "GetScrollInfo", "hwnd", $hWnd, "int", $fnBar, "ptr", DllStructGetPtr($tSCROLLINFO))
        If @error Then Return SetError(@error, @extended, False)
        Return $aResult
EndFunc
页: [1]
查看完整版本: 下面的代码为何得不到记事本滚动条信息?