想学好vb6的一只小白 2023-02-25 10:27 采纳率: 100%
浏览 27
已结题

visual basic 6

Private Declare Function WinExec Lib "kernel32" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Const MOUSEEVENTF_MOVE = &H1
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) 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 Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hDC As Long) As Long
'不知道Findcolor能不能在Click指令内运行[尝试过hDC = GetDC(0)显示限制或不支持]
'请问只能单独运行嘛?加入到循环中可以吗(还未尝试)
'学校的书里api的用法没有关于此方面的教学(大部分代码是一位大佬告知的)
Private Sub Findcolor(ByVal r As Byte, ByVal g As Byte, ByVal b As Byte)
Dim x As Long, y As Long, col As Long
Dim hDC As Long, w As Long, h As Long
hDC = GetDC(0)
w = Screen.Width / Screen.TwipsPerPixelX
h = Screen.Height / Screen.TwipsPerPixelY
Findcolor 255, 0, 0'调用findcolor函数时传入需要查找的颜色RGB分量的位置和用法不知道对不对
For x = 0 To w - 1'获取全屏像素不是很理解,请问如何改成范围的
For y = 0 To h - 1'请问这个1是屏幕最大的宽和高吗,0.5w和0.5h就是缩减一半嘛
col = GetPixel(hDC, x, y)'x,y固定对比获取最左上角的像素颜色的坐标
If col = RGB(r, g, b) Then
SetCursorPos x, y'不知道怎么用指针指令使用获取到的颜色坐标
End If
Next
Next
ReleaseDC 0, hDC
End Sub
'谢谢
  • 写回答

1条回答 默认 最新

  • MarkHan_ 2023-02-25 11:47
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ
    这段代码主要实现的功能是在全屏中查找指定的颜色,并将鼠标指针移动到第一个匹配的像素点处。

    首先,Findcolor 函数接收三个参数,分别是需要查找的颜色的 RGB 分量值。在函数内部,使用 GetDC(0) 获取屏幕的设备上下文句柄,然后计算出屏幕的宽度和高度,接着通过两个嵌套的循环遍历屏幕上的所有像素点,使用 GetPixel 函数获取每个像素点的颜色值,并将其与传入的颜色值进行比较。如果找到了匹配的颜色,使用 SetCursorPos 函数将鼠标指针移动到该像素点的位置。

    至于你的问题:

    1. Findcolor 函数调用自身是没有意义的,因为这样会导致函数陷入死循环。正确的做法是将需要查找的颜色作为参数传入函数。
    2. GetDC(0) 获取的是整个屏幕的设备上下文句柄,你需要通过循环遍历获取屏幕上的所有像素点,因此没有办法使用限制或不支持的方式来获取指定范围内的像素颜色。如果你只想获取某个窗口的像素颜色,可以使用 FindWindow 和 GetWindowDC 函数来获取窗口的设备上下文句柄。
    3. w 和 h 分别表示屏幕的宽度和高度,0 和 1 分别表示屏幕最左上角的坐标和最右下角的坐标。如果你想缩小搜索范围,可以将 w 和 h 分别除以一个缩小比例,比如将其除以 2 表示只搜索屏幕的一半。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月5日
  • 已采纳回答 2月25日
  • 修改了问题 2月25日
  • 修改了问题 2月25日
  • 展开全部

悬赏问题

  • ¥200 如何使用postGis实现最短领规划?
  • ¥15 pyinstaller打包错误
  • ¥20 cesm的气溶胶排放文件
  • ¥15 逐月累计,月份不连续,补齐月份
  • ¥15 应用简单的Python代码完成一个学生成绩管理系统
  • ¥15 用matlab求微分方程初值问题
  • ¥15 vscode下编写第三方库opencv与pcl代码时没有代码提示
  • ¥15 能够跑通不报错,如何解决?(标签-matlab)
  • ¥15 MOS在RDS较大,频率高时开关波形异常
  • ¥15 SCENIC分析报错求解答