0

画面の5箇所で色の変化をチェックするタイマーがあります。私のプログラムは電話システムアプリを監視し、5つのボタンのいずれかから新しい着信があるかどうかを確認します。私が投稿した別の質問に基づいて、次のコードを使用しています。 VisualBasicで特定の色の画面領域を監視する

Private Function CheckforCall()
    Try
        Dim queue1 As Integer = GetPixel(GetDC(0), 40, 573)
        Dim queue2 As Integer = GetPixel(GetDC(0), 140, 573)
        Dim queue3 As Integer = GetPixel(GetDC(0), 240, 573)
        Dim queue4 As Integer = GetPixel(GetDC(0), 340, 573)
        Dim queue5 As Integer = GetPixel(GetDC(0), 440, 573)
        ReleaseDC(0)

    <code snipped - Checks to see if the pixel color matches and 
       returns true or false>

    Catch ex As Exception
        Return False
    End Try
End Function

このコードを使用すると、GDIオブジェクトは非常に迅速かつ短い順序で急上昇し、OutOfMemory例外をスローします。DCを適切にリリースしていないと思いますが、他の方法を見つけることができないようです。

4

1 に答える 1

5

一度呼び出しGetDC(0)て変数に保存し、変数をReleaseDC次のように渡します。

Dim hDC As IntPtr = GetDC(0)
Try
    Dim queue1 As Integer = GetPixel(hDC, 40, 573)
    Dim queue2 As Integer = GetPixel(hDC, 140, 573)
    Dim queue3 As Integer = GetPixel(hDC, 240, 573)
    Dim queue4 As Integer = GetPixel(hDC, 340, 573)
    Dim queue5 As Integer = GetPixel(hDC, 440, 573)
    ...
Catch ex As Exception
    Return False
Finally
    ReleaseDC(0, hDC)
End Try

はとの 2 つの引数をReleaseDC取ることに注意してください。IntPtrhWndhDC

于 2012-04-06T20:18:54.420 に答える