gapkiller 发表于 2013-3-25 12:09:32

[已解决] 如何获取windows窗口下progress的百分比

本帖最后由 gapkiller 于 2013-3-25 16:08 编辑

请问如何获取windows窗口下progress的百分比
没有找到相关函数...
请教一下.

pusofalse 发表于 2013-3-25 13:30:25

Const $PBM_GETPOS = 0x408

Local $hGUI = GUICreate("test", 400, 300)

GUICtrlCreateProgress(20, 40, 360, 20)
GUICtrlSetData(-1, 77)

GUISetState()

MsgBox(0, "Progress percent", GUICtrlSendMsg(-1, $PBM_GETPOS, 0, 0))

While GUIGetMsg() + 3
WEnd

gapkiller 发表于 2013-3-25 14:32:00

回复 2# pusofalse


    谢谢P大的回复, 不过好像理解有误, 我想得到的是别的程序窗口下的, 并非自己创建的GUI or Control, 所以GuiCtrl....可能行不通.. 不过你这个GUICtrlSendMsg确实相当牛逼...
    盼复.

pusofalse 发表于 2013-3-25 15:01:25

回复 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。

gapkiller 发表于 2013-3-25 16:05:41

回复 4# pusofalse


    正是这个, 测试了, pass!
    多谢P大!

huangwei 发表于 2013-5-1 13:30:48

楼主做个有按钮执行就显示进度条然后有提示的,能个完整的更好
页: [1]
查看完整版本: [已解决] 如何获取windows窗口下progress的百分比