请 十豆三 帮忙看一下 为什么获取不到 QQ宠物 的前景色

梦林 2011-09-05 02:00:06
原帖: http://topic.csdn.net/u/20110901/15/13beebc0-2008-49a1-9d89-a74cc3b15e5e.html?75589


使用API函数 GetDC,SetCapture,GetCursorPos 及 mm_color = GetPixel(hdc,Int(X_X),Int(Y_Y))
获取屏幕鼠标所在点的颜色, 发现桌面/网页/窗体的任意点颜色都能正常取得,
但 QQ宠物(就那个会做操的小企鹅)的颜色却不能得到,
只获得了被宠物遮挡的原背景颜色,不明白,是不是应该处理一下 设备场景之类的东西(我不太懂!!!猜测...),
望路过的高人指点一下...

VFP部分代码:

以下代码: (自定义表单INIT)



Declare integer GetCursorPos IN win32api string
DECLARE INTEGER SetCursorPos IN WIN32API INTEGER dx,INTEGER dy

DECLARE INTEGER GetPixel IN WIN32API INTEGER hDC,INTEGER xx,INTEGER yx
DECLARE INTEGER GetDC IN user32 INTEGER hwnd

DECLARE INTEGER SetCapture IN user32 INTEGER hwnd
DECLARE INTEGER GetCapture IN user32 INTEGER hwnd



PUBLIC hdc

hdc=GetDC(0)
SetCapture(hdc)



(按钮事件)

DO WHILE .T. && 显示鼠标坐标及颜色
p1=Repl(Chr(0),8)
GetCursorPos(@p1)
Dime num[8]
For i=1 To 8
Trans(Asc(Substr(p1,i,1)),"@0")
num[i]=Right(Trans(Asc(Substr(p1,i,1)),"@0"),2)
Endfor
X_X=Val("0x"+num[4]+num[3]+num[2]+num[1])
Y_Y=Val("0x"+num[8]+num[7]+num[6]+num[5])
mm_color = GetPixel(hdc,Int(X_X),Int(Y_Y))
thisform.Caption = 'QQ 吹泡泡 '+ 'X='+ALLTRIM(STR(Int(X_X),5))+' '+'Y='+ALLTRIM(STR(Int(Y_Y),5))+' Color='+STR(mm_color)
IF INT(X_X)<10 AND INT(Y_Y)<10
EXIT
ENDIF
ENDDO
...全文
38 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
梦林 2011-09-15
  • 打赏
  • 举报
回复
暂时没办法了, 不过还是谢谢 十豆三 指教!
十豆三 2011-09-06
  • 打赏
  • 举报
回复
如果其他软件也取不到颜色,那就不是这段代码问题,也是方法的问题。

要弄清QQ宠物的原理后再下手吧。
梦林 2011-09-06
  • 打赏
  • 举报
回复
已测试过,上述代码仍然取不到QQ宠物的颜色,只取到了所在位置后面的颜色;
网上也下载了屏幕取色器软件, 也不行!
像是 直接透过QQ宠物,不管QQ宠物后面是什么背景(网页/桌面/快捷方式/其它软件...)都能直接取到颜色,偏偏QQ宠物本身颜色取不到!
十豆三 2011-09-05
  • 打赏
  • 举报
回复
你用其他取色软件(网上很多的),试试能否取到颜色。

我没弄赤 QQ宠物 ,你试一下吧。
十豆三 2011-09-05
  • 打赏
  • 举报
回复
取得当前鼠标所在屏幕位置的RGB色
*------------------------------

Declare Short GetCursorPos In user32 String @lpPoint
Declare Integer WindowFromPoint In user32 Integer,Integer
Declare Integer ScreenToClient In user32 Integer HWnd,String @lpPoint
Declare Long GetPixel In gdi32 Long hdc,Long x,Long Y
Declare Integer GetDC In user32 Integer HWnd
cBuffer=Replicate(Chr(0),8)
GetCursorPos(@cBuffer)
lnX=CToBin(Substr(cBuffer,1,4),'4rs')
lnY=CToBin(Substr(cBuffer,5,4),'4rs')
myhDC=GetDC(0)
lnColor=getpixel(myhDC,lnX,lnY) && lnColor 可以直接覆给 vfp 的颜色属性
lnR=Int(Min(Max(Mod(lnColor,256),0),255))
lnG=Int(Min(Max(Mod((lnColor/256),256),0),255))
lnB=Int(Min(Max(lnColor/65535,0),255))
?Alltrim(Str(lnR))+','+Alltrim(Str(lnG))+','+Alltrim(Str(lnB))

2,722

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧