출처: http://blog.naver.com/134686/220944621041
첨부되어 있는 파일은 오토핫키의 imagesearch.dll 입니다.
하도 오토핫키만하다가 질리는감이 있어서 C#으로 잠깐 눈을 돌렸는데.. 이거 너무재밌네요
하나하나 찾아서 기능구현하는 재미도있고
오토핫키와 비슷한듯 다른매력. 강의가 아닌 일방적인 소스 해석코드만 적어두겠습니다.
하나하나 파헤쳐둔거라 해석하기에 어렵진않을겁니다.
System.Runtime.InteropServices; 을 추가시키고
class 안에
[DllImport("ImageSearchDLL.dll")]
private static extern IntPtr ImageSearch(int x, int y, int right, int bottom, [MarshalAs(UnmanagedType.LPStr)]string imagePath);
이라고 dll임포트와 사용함수를 적어줍니다.
사용시에는
string[] search = UseImageSearch("*30 img\\img.png");
//UseImageSearch("*오차값 이미지파일.png"); 로 오토핫키에서의 사용법과 동일합니다.
if (search == null)
return; //서치실패의 경우 return
int[] search_ = new int[search.Length];
for (int j = 0; j < search.Length; j++)
{
search_[j] = Convert.ToInt32(search[j]);
}
MessageBox.Show(search_[1]+","+search_[2]);
//함수부분. 물론 함수를 사용하지않고 다이렉트로 해도 상관없음.
public static String[] UseImageSearch(string imgPath)
{
int right = Screen.PrimaryScreen.WorkingArea.Right;
int bottom = Screen.PrimaryScreen.WorkingArea.Bottom;
IntPtr result = ImageSearch(0, 0, right, bottom, imgPath);
String res = Marshal.PtrToStringAnsi(result);
//이미지 서치 결과값 0번 = 결과 성공1 실패0 1,2번 = x,y 3,4번 = 이미지의 세로가로길이
//res = 한자씩 나눠져있음
if (res[0] == '0') //res를 이용하여 이미지여부 확인
{
MessageBox.Show("Not found");
return null;
}
String[] data = res.Split('|'); // |로 결과 값을 조각
int x; int y;
int.TryParse(data[1], out x); //x좌표
int.TryParse(data[2], out y); //y좌표
//for(int i=0; i<5; i++)
// MessageBox.Show(i + "번째 " + data[i]);
return data;
}
이제는 오토핫키대신 C#을 이용해봅시다~~
퍼가든 뭘하든 상관없습니다.
'언어 > C#' 카테고리의 다른 글
네트윅 Ping 감시용 프로그램(수천대의 네트윅 감시용으로 만듬) (0) | 2018.03.10 |
---|---|
미로그리기 소스 (0) | 2018.03.10 |
비활성창 매크로 만들기 (0) | 2018.03.09 |
ZylSerialPort.NET define (0) | 2018.02.19 |
ini파일 다루기 (0) | 2018.02.19 |