블로그에 질문을 올리는 것도 가능하다. (응?)

나는 다음과 같은 코드를 작성하였다.

Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim bounds As Rectangle
        Dim screenshot, backup As System.Drawing.Bitmap
        Dim graph As Graphics
        Dim x, y, z, w As Integer
        x = 0
        bounds = Screen.PrimaryScreen.Bounds
        screenshot = New System.Drawing.Bitmap(bounds.Width, bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
        backup = New System.Drawing.Bitmap(bounds.Width, bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
        graph = Graphics.FromImage(screenshot)
        graph.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy)
        Do While True
            backup = screenshot
            graph = Graphics.FromImage(screenshot)
            graph.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size, CopyPixelOperation.SourceCopy)
            Dim i, j As Integer
            For i = 1 To 10
                For j = 1 To 10
                    y = System.Math.Abs(CInt(backup.GetPixel(i, j).R - screenshot.GetPixel(i, j).R Mod 256))
                    z = System.Math.Abs(CInt(backup.GetPixel(i, j).G - screenshot.GetPixel(i, j).G Mod 256))
                    w = System.Math.Abs(CInt(backup.GetPixel(i, j).B - screenshot.GetPixel(i, j).B Mod 256))
                    x = x + y + z + w
                Next
            Next
            If Not (x = 0) Then
                MsgBox(x)
                Exit Do
            End If
        Loop

    End Sub
End Class

앞발로 짠 코드이므로 가독성이나 그런건 전혀 신경 안쓰고 막 두들겼다.

이 코드가 하는 일은 다음과 같다.
1. 모니터 화면의 특정 영역을 감시한다. (이 예제 코드에서는 0,0에서 10,10까지의 왼쪽 상단 모서리)
2. 특정 영역에 변화가 생기면
3. 알림 팝업을 띄운다.

이걸 왜 만드는가...
그것은, 월급 400만원 받는 사람이 모니터를 뚫어지게 바라보고 있다가 특정 영역에 변화가 생기면 마우스를 클릭하는, 그런 일을 하고 있기 때문이다. 그 사람에게 다른 일을 시키기 위해서 이 부분을 자동화 시켜야 한다.
물론...이 프로그램을 만든다고 해서 절약된 돈 400만원의 일부가 나에게 성과급으로 돌아올 것인가...그건 전혀 기대할 수 없다.

아무튼.

요점은, 위의 코드를 실행하는 Form1에는 버튼이 하나 있고, 그 버튼을 클릭하면 저 프로그램의 코드가 작동을 시작하도록 되어 있다.
문제는 저 코드를 실행시키면 예상대로 무한루프에는 빠져 들어가는데, 화면이 변해도 감지를 못한다는 점이다. 무한루프 자체에 너무 빠져버린 듯...

그래서 - 화면을 감시하는 프로그램은 대체 알고리즘이 어떻게 되어 있는 걸까?

일단은 그런 알고리즘을 찾는다는 핑계로 인터넷 서핑을 하고 있었다. 정신을 차려보니 네이버 뉴스와 올블로그를 돌아다니는 나를 발견, 급히 이 글을 작성해 둔다.
by snowall 2009. 1. 14. 16:26