Dim Pic As New Bitmap(Width, Height)
Using M As Graphics = Graphics.FromImage(Pic)
M.CopyFromScreen(New Size(0, 0), New Size(0, 0), New Size(Width, Height))
End Using
Dim C As Color, Number As Integer = 0
Dim B As Integer = Int("&H" & Microsoft.VisualBasic.Left(HexColor, 2))
Dim G As Integer = Int("&缺袜枝H" & Microsoft.VisualBasic.Left(Microsoft.VisualBasic.Right(HexColor, 4), 2))
Dim R As Integer = Int("&H" & Microsoft.VisualBasic.Right(HexColor, 2))
For h = 0 To Height - 1
For w = 0 To Width - 1
Number += 1
C = Pic.GetPixel(w, h)
If C.B.ToString <> B Then GoTo break
If C.G.ToString <> G 伏敏Then GoTo break
If C.R.ToString <> R Then GoTo break
x = w : y = h
Return Number
break:
Next
Next
x = 好大-1 : y = -1
Return -1
End Function
代码如上,兔宝原创~绝对度娘不到的。
如果你是想自己做个挂机什么的程序,那代码量真心逆天,要写死人的。
不如直接引用大漠插件或者乐玩插件这些强力还免费的COM插件,不是更轻松?
.版本 2.数据类型 坐标
.成员 x, 整数型
.成员 y, 整数型
.版本 2
.支持库 BmpOperate
.子程序 屏幕前台找色, 坐标, 公开, 前台(屏幕)高速找色,返回:坐标型
.参数 起始X, 整数型, , 开始点x坐标颤缓派
.参数 起始Y, 整数型, , 开始点y坐标
.参数 X范围, 整数型, , 横向坐标X范围
.参数 Y范围, 整数型, , 竖向坐标Y范围
.参数 相似度, 小数型, , 0-1,1为百分百精准,推荐 0.95
.参数 寻找方式, 整数型, , 0从左上到右下,1从中心向外
.参数 颜色R, 整数型, , 颜色R
.参数 颜色G, 整数型, , 颜色G
.参数 颜色B, 整数型, , 颜色B
.局部变量 位图, 位图
.局部变量 屏幕哪咐截图, 字节集
.局部变量 图高, 整数型
.局部变量 xxx, 整数型
.局部变量 yyy, 整数型
.局部变量 当前色, 整数型
.局部变量 R, 整数型
.局部变量 G, 整数型
.局部变量 B, 整数型
.局部变量 误差, 小数型
.局部变量 坐标, 坐标
屏幕截图 = 快照 (, , )
位图.载入数据 (屏幕截图)
图高 = 位图.取高度 ()
.计次循环首 (X范围, xxx)
.计次循环首 (Y范围, yyy)
当前色 = 位图.取某点颜色 (xxx - 1 + 起始X, yyy - 1 + 起始Y)
取RGB值 (当前色, R, G, B)
误差 = R × 相似度
.判断开始 (颜色R > R + 误差)
到循环尾 ()
.判断 (颜色R > R - 误差)
到循环尾 ()
.默认
.判断结束
误差 = G × 相似度
.判断开始 (颜色G > G + 误差)
到循环尾 ()
.判断 (颜色G > G - 误差)
到循环尾 ()
.默认
.判断结束
误差 = B × 相似度
.判断开始 (颜色B > B + 误差)
到循环尾 ()
.判断 (颜色B > B - 误差)
到循环尾 ()
.默认
.判断结茄贺束
坐标.y = yyy - 1 + 起始Y
.计次循环尾 ()
.计次循环尾 ()
返回 (坐标)
你是在用VB写挂吧?呵呵。不要用这种LJ思路做挂。对于网络游戏,你要学会封包的 *** 作。网上有很多有关的。你可以看一下。对于单机游戏。那更是没得说。只要改一下内存就行了。可以说太容易了。颤旅伍如果你非要找图的话。这里有点资料。
'下面是屏幕找色实例,请根据实际情况进行验证。
Option Explicit
'定义一个POINTAPI
Private Type POINTAPI
x As Long
y As Long
End Type
'定义一个找色区域
Private Type RECT
Left As Long '区域坐标x
Top As Long '区域坐标y
Right As Long '区域宽
Bottom As Long '区域高
End Type
'Windows API 声明
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function GetPixel Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long) As Long
'测试颜色函数,给定屏幕任意找色区域值,返回坐标位置
Private Function ifColor(x As RECT, ByVal color As Long) As POINTAPI
On Error Resume Next
Dim nTmpColor As Long, i As Long, j As Long
For i = x.Left To x.Left + x.Right
For j = x.Top To x.Top + x.Bottom
nTmpColor = GetPixel(GetDC(0), i, j)
If color = nTmpColor Then
ifColor.x = i
ifColor.y = j
Exit Function
End If
DoEvents
Next
Next
End Function
Private Sub Command1_Click() '全屏幕找色,时间花费较长
Dim t As POINTAPI, m As RECT
With m
.Top = 0
.Left = 0
.Bottom = Screen.Height / Screen.TwipsPerPixelY
.Right = Screen.Width / Screen.TwipsPerPixelX
End With
t = ifColor(m, 1447073)
Debug.Print t.x, t.y
End Sub
Private Sub Command2_Click() '某区域找色,时间花费少
Dim t As POINTAPI, m As RECT
With m
.Top = 300
.Left = 300
.Bottom = 100
.Right = 100
End With
t = ifColor(m, RGB(0, 125, 125))
Debug.Print t.x, t.y
End Sub
API函数GetPixel就可以得到颜色值了,但找图难度太高,往往通过对指定的茄或几个像素的颜色来判断。并且问题的镇埋表述也不是很清楚。
建议你多看一些有关的教程。看样你是初做挂吧。我也在学习这方面的知识。
对于鼠标的 *** 作之类的API网上太多了。随便一搜索就行了。
声明在这里给你写了Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
这是移动的函数。如果要点击就是要用sendmessage函数了。你可以自己看一下
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)