darklight 发表于 2009-7-15 16:46:36

怎么才能获得在占用焦点的情况下,获得窗口的某点的像素值呢?

本帖最后由 darklight 于 2009-7-17 17:15 编辑

正在做一个程序,想在这个窗口不激活的情况下(运行中),获得这个窗口的像素值
$var = PixelGetColor($窗口,100,100)
我用了,但是貌似不能添加窗口句柄,不能正确获取值,麻烦各位看能否用PixelGetColor实现或者有没有其他方法?

cnsnc 发表于 2009-7-15 17:57:13

可以用于特定窗口,注意下格式

darklight 发表于 2009-7-16 07:55:08

本帖最后由 darklight 于 2009-7-16 07:57 编辑

帮助上 的 PixelGetColor ( X坐标 , Y坐标[, 句柄] )
自动补全上PixelGetColor ([句柄 ,]X坐标 , Y坐标)
但是无论哪种都似乎不能实现获取特定窗口的像素
可以做实例函数如下:(打开一个空白的IE浏览器)
;大家有没有好方法帮我解决一下获取特定窗口某点的像素问题啊,谢谢啦~~~
$TdxTitle = "about:blank "
$TdxTitle = WinGetTitle($TdxTitle)

$var1 = PixelGetColor($TdxTitle,10,10)
$var2 = PixelGetColor(10,10,$TdxTitle)
GUICreate("My GUI color text"); will create a dialog box that when displayed is centered
GUICtrlCreateLabel("my var1", 10, 20)
GUICtrlSetColor(-1, $var1); Red
GUICtrlCreateLabel("my var2", 20, 30)
GUICtrlSetColor(-1, $var2); Red

GUISetState()
MsgBox(0,"","over")

darklight 发表于 2009-7-16 10:44:48

大家有会的么?给点提示和建议吧,谢谢啦

cnsnc 发表于 2009-7-16 20:59:19

帮助上 的 PixelGetColor ( X坐标 , Y坐标[, 句柄] )
$TdxTitle是句柄吗?

lynfr8 发表于 2009-7-16 23:04:01

本帖最后由 lynfr8 于 2009-7-17 00:18 编辑

想在这个窗口不激活的情况下(运行中),获得这个窗口的像素值
可以做到的!
目标窗口不需要winactive激活,但是需要满足以下条件:
1.窗口没有最小化到任务栏
2.目标窗口位置在屏幕可见范围内的任意位置
3.目标窗口没有被其他窗口挡住
4.坐标必须设定以下模式获取


在满足以上条件情况下,以下代码测试成功$TdxTitle = "新浪首页 - Microsoft Internet Explorer"
$Handle = WinGetHandle($TdxTitle)
AutoItSetOption ("PixelCoordMode",2);此句乃关键!!!
$Color = PixelGetColor(126,292,$Handle);坐标参照条件3
GUICreate("My GUI color text")
GUICtrlCreateLabel("TEST", 50, 70)
GUICtrlSetColor(-1, $Color)
GUISetState()
MsgBox(0,"",$Color)

darklight 发表于 2009-7-16 23:06:31

可能不是,那修改一下,貌似还是得不到正确结果,依然是获取屏幕的绝对坐标
$TdxTitle = "about:blank "
$TdxTitle = WinGetTitle($TdxTitle)

$handle = WinGetHandle("about:blank","")

$var1 = PixelGetColor($handle,10,10)
$var2 = PixelGetColor(10,10,$handle)

GUICreate("My GUI color text"); will create a dialog box that when displayed is centered
GUICtrlCreateLabel("my var1", 10, 20)
GUICtrlSetColor(-1, $var1); Red
GUICtrlCreateLabel("my var2", 20, 30)
GUICtrlSetColor(-1, $var2); Red

GUISetState()
MsgBox(0,"","over")

lynfr8 发表于 2009-7-16 23:17:25

仔细看下我代码的第三行
再查下帮助文件看看是什么意思
我已经测试过了
是可以的

sxd 发表于 2009-7-17 00:06:14

以前也遇到过这个问题 然后放弃了

意思是 给出"句柄"参数后 坐标就变成 客户区坐标了 而不管opt("PixelCoordMode")的设置了?

lynfr8 发表于 2009-7-17 00:09:51

AutoItSetOption ("PixelCoordMode",2)
在这里起到很关键的作用
楼上测试下我的代码就知道了
的确可以成功获取目标窗口指定坐标的像素

darklight 发表于 2009-7-17 11:09:08

搞定了,重新写了比较直观的测试程序,再次感谢lynfr8的帮助~~
想要运行成功的条件如lynfr8所说:
1.窗口没有最小化到任务栏
2.目标窗口位置在屏幕可见范围内的任意位置
3.目标窗口没有被其他窗口挡住
4.坐标必须设定以下模式获取

#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
$child = GUICreate("My Draw")
$a = GUICtrlCreateGraphic(20, 50, 200, 200)

$TdxTitle = "新浪首页 - Microsoft Internet Explorer"
$TdxTitle = WinGetText($TdxTitle)
;MsgBox(0,"",$TdxTitle)
$Handle = WinGetHandle("新浪首页","")
;MsgBox(0,"",$TdxTitle)
MsgBox(0,"",$Handle)
AutoItSetOption ("PixelCoordMode",2);此句乃关键!!!
                If WinActive($TdxTitle) <> 0 Then
                        ControlFocus($TdxTitle,"",41477)
                EndIf
                ;WinWaitActive($TdxTitle)
For $i = 1 to 200
        For $j =1 to 200
                $Color = PixelGetColor($i,$j,$Handle);坐标参照条件3
                GUICtrlSetBkColor(-1, 0xffffff)
                GUICtrlSetColor(-1, 0)
                GUICtrlSetGraphic(-1, $GUI_GR_COLOR,$Color)
                GUICtrlSetGraphic(-1, $GUI_GR_Pixel,$i,$j)       
        Next
Next
                GUISetState()
                MsgBox(0,"","over")
页: [1]
查看完整版本: 怎么才能获得在占用焦点的情况下,获得窗口的某点的像素值呢?