2013-04-23 1 views
3

win32 API 및 특히 WindowsFromDc에 대한 도움이 필요합니다.WindowsFromDc 반환 null

다른 응용 프로그램을 연결하는 응용 프로그램이 있습니다. 이 두 응용 프로그램은 NamedPipe에 의해 통신합니다. 두 번째 응용 프로그램에서는 DrawTextExW 함수를 후킹하고이 함수에서 HDC를 얻습니다.

그러나 DrawTextEx 함수에서 반환 한 DC로 WindowsFromDC를 수행 할 때 null 반환이 나타납니다.

그래서, 그것에 대해 질문이 있습니다. - HDC에 HDWN이 없을 수도 있습니까? - DrawTextEx를 호출하는 창의 HWND를 얻는 방법은 무엇입니까? 다른 방법이 있습니까?

감사합니다.

시는 : 프로세스 간을 통과 할 때 내 나쁜 영어 ...

+1

어떻게 연결하나요? DC가 두 번째 프로세스에서 유효하지 않을 수 있습니까? 또한 CreateDC 및 CreateCompatibleDC는 프린터와 관련된 DC 또는 메모리 DC가 될 수있는 DC를 만듭니다. 이것들은 그들과 연관된 창을 가지고 있지 않습니다. 걸려있는 응용 프로그램이 Windows의 DC로 그려지고 있습니까? –

+0

나는 Microsoft Detour 라이브러리와 연결하여 두 번째 응용 프로그램에 DLL을 주입합니다. 나는 DC가 정확하다고 생각하지만 주입 된 DLL에서 WindowFromDC를 수행하더라도 NULL 반환을 얻습니다. 창문의 DC에서 응용 프로그램을 그리는 경우 어떻게 확신 할 수 있습니까? –

답변

4

장치 컨텍스트 핸들 죄송는 유효하지 않습니다. 그래서 당신이하려는 것은 불가능합니다. 다른 질문에 대해서는

:

는 그것은 HWND과 관련되지 않은 HDC을 할 수 있습니까?

예, 완벽하게 가능합니다. 많은 장치 컨텍스트는 창과 관련이 없습니다.

어떻게 DrawTextEx를 호출하는 창 HWND을 얻을 수 있습니까?

Windows는 함수를 호출하지 않고 코드 호출 함수를 호출합니다. 그래서,이 질문은 실제로 아무 의미가 없습니다.

+0

예.하지만 우회 라이브러리를 사용하여 두 번째 응용 프로그램에 삽입 된 DLL로 DrawTextEx 함수를 연결합니다. 하지만 몇 번, 두 번째 응용 프로그램이 다른 창을 열어 2 일 수 있습니다. 그래서 두 번째 창의 DrawTextEx 결과도 얻었습니다. DrawTextEx가 그리는 윈도우를 어떻게 알 수 있습니까? –

+0

그것이 그 질문에 어떻게 왔는지는 아닙니다. 질문에서 IPC를 사용하여 통신하는 두 가지 프로세스에 대해 이야기했습니다. 드로잉이 끝나는 DC에서 추측하기가 어려울 것입니다. 나는이 문제에 대한 당신의 해결책이 효과가 없을 것이라고 생각합니다. 그러나 불행히도 문제에 대해 묻기보다는 해결책에 대한 질문을 던졌습니다. 이것은 XY 질문으로 알려져 있습니다. –

+3

알았어. 그래서 나는 좋은 것이라고 생각하는 해결책을 찾았습니다. 나는 또한 BeginPaint과 EndPaint를 걸었다. 응용 프로그램 코드에서 호출하는 프로세스는 BeginPaint -> DrawTextEx -> EndPaint입니다. 그래서 BeginPaint에 의해 주어진 HWND를 저장하고 그것을 다음 호출 DrawTextEx와 연관시킵니다. EndPaint가 호출되면 저장된 HWND를 지 웁니다. 나는 좋은 해결책이라고 생각한다. 제 사고 과정에 도움과 도움을 주셔서 대단히 감사합니다. 나는 다음 번에 더 잘하려고 노력할 것이다. –