Win32 사막 플러그인 dm 호출dll 자습서

2701 단어 CC++
사막 플러그인: 다운로드 주소
알림: 관리자로 실행해야 합니다. 그렇지 않으면regsvr32.exe dm.dll가 실패합니다.
먼저 stdafx.h에 다음 코드를 넣고 dm를 가져옵니다.dll
#import "dm.dll" no_namespace

2. win32에서 응용 프로그램 초기화에 이 코드를 삽입합니다
	WinExec("regsvr32.exe dm.dll /s", SW_HIDE);
	CoInitialize(NULL);
	CLSID clsid;
	CLSIDFromProgID(OLESTR("dm.dmsoft"), &clsid);
	Idmsoft* dme;
	CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER,__uuidof(Idmsoft), (LPVOID*)&dme);

간단한 호출 코드는 다음과 같습니다.
	dme->KeyDown('A');
	dme->MoveTo(100, 100);

3. MFC
1. App::InitInstance 함수는 다음과 같습니다.
	WinExec("regsvr32.exe dm.dll /s", SW_HIDE);
	CoInitialize(NULL);

2. App::ExitInstance 함수는 다음과 같습니다.
4
	CoUninitialize();
3 대화 상자의 초기화 함수:
4
	CLSID clsid;
	CLSIDFromProgID(OLESTR("dm.dmsoft"), &clsid);
	CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, __uuidof(Idmsoft), (LPVOID*)&dme);
4 대화 상자 클래스에 구성원 변수를 추가합니다.
4
	Idmsoft* dme;
5 호출 방법은 다음과 같다.
	dme->MoveTo(100, 100);
	dme->LeftClick();

6. 자주 사용하는 순환 찾기, 색 찾기, 글자 찾기 함수는 다음과 같이 봉인한다.
BOOL findBmp(LPCSTR bmp, CPoint & pt, double timeout) {
	VARIANT x, y;
	time_t t_start, t_end;
	time(&t_start);

	while (true)
	{
		dme->FindPic(0,0,2000,2000,bmp,"000000",0.9,0,&x,&y);
		if (x.intVal > 0 && y.intVal > 0) {
			pt.x = x.intVal;
			pt.y = y.intVal;
			return TRUE;
		}
		//       
		time(&t_end);
		if (timeout < difftime(t_end, t_start)) {
			pt.x = 0;
			pt.y = 0;
			return FALSE;
		}
		Sleep(50);
	}
}
BOOL findColor(LPCSTR color, CPoint & pt, double timeout) {
	VARIANT x, y;
	time_t t_start, t_end;
	time(&t_start);

	while (true)
	{
		dme->FindColor(0, 0, 2000, 2000, color, 0.9, 0, &x, &y);
		if (x.intVal > 0 && y.intVal > 0) {
			pt.x = x.intVal;
			pt.y = y.intVal;
			return TRUE;
		}
		//       
		time(&t_end);
		if (timeout < difftime(t_end, t_start)) {
			pt.x = 0;
			pt.y = 0;
			return FALSE;
		}
		Sleep(50);
	}
}
BOOL findStr(LPCSTR str, LPCSTR color, CPoint & pt, double timeout) {
	VARIANT x, y;
	time_t t_start, t_end;
	time(&t_start);

	while (true)
	{
		dme->FindStr(0, 0, 2000, 2000, str, color, 0.9, &x, &y);
		if (x.intVal > 0 && y.intVal > 0) {
			pt.x = x.intVal;
			pt.y = y.intVal;
			return TRUE;
		}
		//       
		time(&t_end);
		if (timeout < difftime(t_end, t_start)) {
			pt.x = 0;
			pt.y = 0;
			return FALSE;
		}
		Sleep(50);
	}
}

좋은 웹페이지 즐겨찾기