找回密码
 加入
搜索
查看: 2287|回复: 10

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

[复制链接]
发表于 2009-7-15 16:46:36 | 显示全部楼层 |阅读模式
本帖最后由 darklight 于 2009-7-17 17:15 编辑

正在做一个程序,想在这个窗口不激活的情况下(运行中),获得这个窗口的像素值
$var = PixelGetColor($窗口,100,100)
我用了,但是貌似不能添加窗口句柄,不能正确获取值,麻烦各位看能否用PixelGetColor实现或者有没有其他方法?
发表于 2009-7-15 17:57:13 | 显示全部楼层
可以用于特定窗口,注意下格式
 楼主| 发表于 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")
 楼主| 发表于 2009-7-16 10:44:48 | 显示全部楼层
大家有会的么?给点提示和建议吧,谢谢啦
发表于 2009-7-16 20:59:19 | 显示全部楼层
帮助上 的 PixelGetColor ( X坐标 , Y坐标[, 句柄] )
$TdxTitle是句柄吗?
发表于 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)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 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")
发表于 2009-7-16 23:17:25 | 显示全部楼层
仔细看下我代码的第三行
再查下帮助文件看看是什么意思
我已经测试过了
是可以的
发表于 2009-7-17 00:06:14 | 显示全部楼层
以前也遇到过这个问题 然后放弃了

意思是 给出"句柄"参数后 坐标就变成 客户区坐标了 而不管opt("PixelCoordMode")的设置了?
发表于 2009-7-17 00:09:51 | 显示全部楼层
AutoItSetOption ("PixelCoordMode",2)
在这里起到很关键的作用
楼上测试下我的代码就知道了
的确可以成功获取目标窗口指定坐标的像素
 楼主| 发表于 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")
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-3 06:29 , Processed in 0.078868 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表