2010-03-11 4 views
1

윈도우와 richEdit 컨트롤에 대한 핸들이 있습니다. 나는 그 컨트롤을 내 컨트롤 중 하나로 대체 할 수 있습니까? 원래대로, 즉 창 등의 일부가 될 것처럼 행동하고 싶습니다.런타임에 윈도우 컨트롤을 다른 컨트롤로 바꾸기

나는이 시나리오를 더 자세히 설명 할 것이다. 현재 텍스트 편집기를 사용하고있는 애플리케이션을 분해하고있다. 내 현재 (제한된) 환경에는 프로 시저에 대한 다양한 후크가 있으며 그 중 하나는 편집기 창 핸들을 생성합니다. 또 하나는 RichEdit20A에 대한 핸들을 조달하여 윈도우 호스트를 제어 할 수있게 해줍니다.

내가 뭘하고 싶은지 - 내 자신 (그 .NET 동등한 아마도)와 컨트롤을 덮어 쓰고 새로운 하나를 사용하여 응용 프로그램의 GetWindowText 호출을 패치. 이를 구현하기 위해 C#/managed C++에서 클래스 라이브러리를 작성하고 내 앱 (관리되지 않는 C++로 작성 됨)으로 가져올 계획입니다.

또한 텍스트 편집기의 임의의 수의 인스턴스가있을 수 있습니다.

+0

다른 창 핸들을 사용해야한다는 것을 앱에 알릴 방법이 없습니다. 또는 관리되는 코드를 관리되지 않는 프로그램에 삽입하십시오. –

+0

현재의 훅을 사용하면 GetWindowTextA 호출 (asm 래퍼가있는 알몸 함수) 바로 전에 호출 스택을 수정할 수 있으며 관리되는 코드 자체를 주입 할 계획이 없습니다. 알겠지만 내 앱은 앱을 패치하는 관리되지 않는 래퍼 역할을합니다. 후자의 텍스트를 설정/가져 오기 위해 클래스 라이브러리의 메서드를 호출하는 것 외에는 아무 것도하지 않습니다. – shadeMe

답변

0

너무 복잡해 보입니다. 단지 WndProc (GWL_WNDPROC)을 대체하고 아무 것도 전송하지 않은 다음 HWND를 무효화하십시오. 그렇게하면 다시 그리기 (WM_PAINT)가 강제로 캡처됩니다. 물론 주인은 알지도 못합니다. (물론 그 사람이 푹 빠지지 않았다면)

관련 문제