|
api로는 안되는군요 답변 감사해요
방태윤 님이 쓰신 글 :
: 전에 답글을 한번 달았었는데...
:
: 제말이 신빙성이 없다고 생각하시는거 같은데 제 말이 맞습니다.다른 방법은 없어요.
:
:
:
: 일단 제일 중요한건 님이 다른 프로그램에 그림을 그린다는거 아닙니까,(팡야라면 게임이죠?)
:
: 다른 프로그램의 dc 를 얻어서 그릴수는 있습니다.
:
: 그런데 그리면 뭐해요? 다른 프로그램이 다시 랜더링 해버리는데요.
:
: 보통 게임은 15 fpt 이상 나올텐데...1초에 15번 다시 그려집니다.
:
: 그러니까 님이 그린 그림은 없어져 버리죠.
:
: 무한 루프로 그려봤자...그리면 지워지고,,,반복되니까...깜박거리는겁니다.
:
:
: 더블버퍼링은 내가 내 프로그램 만들때....깜벅거리는거 없애는 기법이지
:
: 남의 프로그램의 dc 얻어서 그리는 경우와는 전혀 상관이 없습니다.
:
:
:
: 해결책은...함수 후킹입니다만,,,
:
: 전에도 말했듯이 이쪽 부분이 녹녹한 분야가 아닙니다.
:
:
:
:
: 전에 답변드린 내용 참고하세요...
:
:
: 구글같은데서 directX hook 정도로 검색해보면 몇개의 예제들이 있을겁니다.
:
: 그런 예제를 바탕으로 간단하게 DX 프로그램 하나 만들어서 테스트하면 기능 구현이 가능합니다...
:
: 하지만 그걸 실제로 게임 화면에 적용하려면...여러 변수가 있어 딱 된다는 보장이 없습니다.
:
: 더군다나 요즘 대부분 게임들은 가드라는 해킹방지툴이 게임프로그램을 보호하고 있으므로.
:
: 예제에서 사용했던 관련 api 함수들이 대부분 후킹되어 작동을 안하기 때문입니다.
:
:
:
:
:
:
:
: 완전초보 님이 쓰신 글 :
: : 다른프로그램에 그림을 계속 그릴려고합니다
: : 일단 소스는 아래와같습니다
: : void bmp(int t)
: : HWND p; //프로그램 동작 종료를위한 dc
: : Graphics::TBitmap *wa1 =new Graphics::TBitmap;
: :
: : TResourceStream *ResStream1;//리소스에요 비트맵 파일들어잇는
: : HINSTANCE ImageDllInstance;
: : ImageDllInstance = LoadLibrary("pslib.dll"); //DLL에서 이미지들을 가지고 온다.
: : ResStream1 = new TResourceStream( (int)ImageDllInstance, "ID_800X600", RT_RCDATA );
: : wa1->LoadFromStream( dynamic_cast<TStream*>( ResStream1 ) );
: : HWND h = FindWindow(NULL,"팡야:시즌4");//두번쩨 윈도우 핸들 찾기
: : HDC dc = GetDC(h) ;dc를 얻음
: : do{
: : TransparentBlt(dc, 0,0, 800,600, wa1->Canvas->Handle,
: : 0,0,800,600,RGB(255,255,255));//dc에다가 투명 으로 그려줌
: : Application->ProcessMessages(); 메세지처리
: : Sleep(t);//처리시간의 여유를줌
: : p = FindWindow(NULL,"사용중"); // 첫번쩨프로그램 핸들
: : if(p == 0)
: : break; // 첫번쩨프로그램의 캡션이 사용중이아니면 무한반복동작 종료
: : }while(1); //동작종료를위한것임
: : delete p;
: : delete wa1;
: : delete ResStream1;
: : ReleaseDC(h,dc);
: : FreeLibrary(ImageDllInstance);
: : }
: : 우선 여기까지가 제가사용하고있던 소스에요
: : 이소스로는 계속 깜빡입니다
: : 그리고 이소스는 DLL 내에 넣어둿구요
: : 호출해서스고있습니다
: : 여기서 더블버퍼링을 하려고합니다
: : 이함수 호출하는 프로그램에서
: : DoubleBuffered = true;
: : 써준다고해서 되는게 아니더군요
: : 제가원하는건 프로그램 실행시킨다음 그려지고있는 프로그램 이 활성화 되어있을때도 계속
: : 그러줘야하거든요 그러니까
: : 프로그램이 2개있을때 첫번쩨에서 그려주는 프로그램이 동작하고
: : 두번쩨 프로그램을 사용중일때
: : 첫번쩨 프로그램이 계속 동작되는상태가 되야하거든요
: : OnPaint() 에 쓰면 첫번떼 윈도우가 활성화 안되면 안그려주고요
: : 한번그리고 그냥 멈추거든요 그렇다고 OnPaint()에 무한반복해버리면
: : 프로그램이 먹통이되구요 그래서 위소스처럼
: : 그래서 dll 넣고 호출해서쓰는중이에요
: : 설명이좀 난해할가모르겠네요 dll에서 함수넣고 하는방법이나
: : 온페인트 에 바로 쓰는방법이나 둘중에 깜빡이지않게함과동시에
: : 두번쩨프로그램이 사용중이 되더라도 첫번쩨 프로그램이 계속동작 하도록하는게
: : 제목적이거든요
: : 어떻게 더블버퍼링 하는방법좀 알려주실수없나요?
: : winapi.co.kr에서나온건 이해하기어렵네요 그거보고따라해도
: : 이해가안되네요
|