回复 4# happytc
通过粗略的搜索Autoit官方站点,发现这个问题Autoit一直没有官方正面解决,大部分方法都是大家自己研究出来的,目前主要的解决办法有几种,分别如下:
1、关闭DWM,关闭的方法主要有以下几种
- 切换win7主题,面右键 -> 个性化 -> 选择window7 Basic桌面主题
- 直接任务管理器Kill dwm.exe进程2次
- 停止Desktop Window Manager服务
- 或者在软件中加入调用如下代码,自动检测是否开启了dwm,然后临时关闭,软件退出后自动恢复If _DwmIsEnabled() = True Then DllCall("dwmapi.dll", "uint", "DwmEnableComposition", "int", 'False')
Func _DwmIsEnabled()
If FileExists(@SystemDir & "\dwmapi.dll") Then
$Receiver = DllStructCreate("int")
$aTemp = DllCall("dwmapi.dll", "uint", "DwmIsCompositionEnabled", "ptr", DllStructGetPtr($Receiver, 1))
$Receiver2 = DllStructCreate("int", $aTemp[1])
If DllStructGetData($Receiver2, 1) = True Then
Return 1
Else
Return SetError(1, 0, 0)
EndIf
Else
Return SetError(2, 0, 0)
EndIf
EndFunc
2、通过ScreenCapture截取屏幕到内存,然后直接从内存中读取相应点的像素
- 这个我具体没有时间测试效率如何,感觉应该也很快,代码和例子发布出来大家可以一起研究研究
3、另外happytc 的用_GDIPlus_BitmapLockBits替代PixelGetColor的方法应该也是可行的,具体的效率我还没有测试,一起总结进来
http://www.autoitx.com/forum.php ... FC%BF%CB&page=2 |