글
블로그에 질문을 올리는 것도 가능하다. (응?)
나는 다음과 같은 코드를 작성하였다.
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
앞발로 짠 코드이므로 가독성이나 그런건 전혀 신경 안쓰고 막 두들겼다.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에는 버튼이 하나 있고, 그 버튼을 클릭하면 저 프로그램의 코드가 작동을 시작하도록 되어 있다.
문제는 저 코드를 실행시키면 예상대로 무한루프에는 빠져 들어가는데, 화면이 변해도 감지를 못한다는 점이다. 무한루프 자체에 너무 빠져버린 듯...
그래서 - 화면을 감시하는 프로그램은 대체 알고리즘이 어떻게 되어 있는 걸까?
일단은 그런 알고리즘을 찾는다는 핑계로 인터넷 서핑을 하고 있었다. 정신을 차려보니 네이버 뉴스와 올블로그를 돌아다니는 나를 발견, 급히 이 글을 작성해 둔다.
RECENT COMMENT