回复 3# gapkiller
原来如此,刚发完2#的回复,我就想到可能会是第三方窗口创建的。假若那是一个标准的Progress控件,同样可以通过发送PBM_GETPOS消息获取其百分比,只是须调用SendMessage函数。
1.au3
Const $PBM_SETRANGE = 0x401
GUICreate("Progress test", 400, 300)
GUICtrlCreateProgress(20, 40, 360, 20)
GUICtrlSetData(-1, 100)
; 设置最大进度值为300。
GUICtrlSendMsg(-1, $PBM_SETRANGE, 0, 0x10000 * 300 + 0)
GUISetState()
While GUIGetMsg() + 3
WEnd
2.au3
#include <SendMessage.au3>
Const $PBM_GETRANGE = 0x407
Const $PBM_GETPOS = 0x408
; 获取进度条控件的句柄。
Local $hProgress = ControlGetHandle("Progress test", "", "msctls_progress321")
; 获取进度条当前位置。
Local $iPosition = _SendMessage($hProgress, $PBM_GETPOS, 0, 0, 0, "long", "long", "long")
; 获取最大进度值。
Local $iRange = _SendMessage($hProgress, $PBM_GETRANGE, 0, 0, 0, "long", "long", "long")
; 百分比。
Local $iPercent = $iPosition / $iRange * 100
MsgBox(0, "Current percent", StringFormat("%.2f%%", $iPercent))
先运行1.au3。 |