我有以下 Visual Basic 2010 代码:
Function GetScreenPixel(ByVal Location As Point) As Color
Dim C As Color
Using Bmp As New Bitmap(1, 1)
Using G As Graphics = Graphics.FromImage(Bmp)
G.CopyFromScreen(Location, Point.Empty, Bmp.Size)
C = Bmp.GetPixel(0, 0)
End Using
End Using
Return C
End Function
获取屏幕上像素的颜色。
然后我使用类似的东西:
Public Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal cButtons As Integer, ByVal dwExtraInfo As Integer)
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If GetScreenPixel(New Point(650, 728)).ToString = "Color [A=255, R=255, G=255, B=255]" Then
Cursor.Position = New Point(955, 548)
mouse_event(&H2, 0, 0, 0, 0)
mouse_event(&H4, 0, 0, 0, 0)
End If
End Sub
获取屏幕上的某个按钮是否显示并处于活动状态(如果为 true,则像素 650、728 将为白色),如果是,则单击它。
这工作正常。我的问题是,如果我能以某种方式扩展代码,以便获取像素颜色的函数和单击鼠标的代码都可以应用于非活动窗口。这样我就可以让我的应用程序运行并在必要时单击按钮,并且我还可以同时将我的计算机用于其他事情。
我听说过一种叫做:
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
但是,我很难让它与上面显示的示例代码一起工作 - 它仍然没有提供在非活动窗口上获取像素颜色的解决方案。
谢谢。