0

次の 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

ただし、上に示したサンプル コードを使用して動作させるのは非常に困難でした。アクティブでないウィンドウでピクセルの色を取得するための解決策はまだ提供されていません。

ありがとう。

4

1 に答える 1

0

他のウィンドウをアクティブにするには、実際のクリックをシミュレートするためにマウスの DOWN と UP の間にスリープ状態にする必要があります

mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_ABSOLUTE,
     (uint)Convert.ToInt32(position.X * (65535.0 / System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width)),
    (uint)Convert.ToInt32(position.Y * (65535.0 / System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height)), 0, 0);

Thread.Sleep(400);

mouse_event(MOUSEEVENTF_LEFTUP | MOUSEEVENTF_ABSOLUTE,
     (uint)Convert.ToInt32(position.X * (65535.0 / System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width)),
    (uint)Convert.ToInt32(position.Y * (65535.0 / System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height)), 0, 0);

また、マウス移動機能に興味があるかもしれません - 位置は MOUSEEVENTF_ABSOLUTE フラグで 0 ~ 65535 の範囲で設定する必要があります

mouse_event(MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE,
                    (uint)Convert.ToInt32(position.X * (65535.0 / System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width)),
                    (uint)Convert.ToInt32(position.Y * (65535.0 / System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height)), 0, 0);
于 2014-02-08T20:43:03.920 に答える