2012-03-24 3 views
0

GUI 객체를 읽고 수정할 수 있도록 GUI 객체를 가져 오려고합니다. 지금 당장 생각해 볼 수있는 유일한 방법은 주사 (via)를 통해 주사하는 것입니다. 여기서 주사는 데이터를 많이 검색하고 원하는 것을 되돌려 보내는 것입니다. 주입 문제는 쉽게 디버깅 할 수 없으며 수행 할 작업을 파악하는 데 오랜 시간이 걸린다는 것입니다.다른 프로세스에서 GUI 객체 가져 오기

GUI 객체의 핸들을 찾을 수 있으므로 ReadProcessMemory() 또는 이와 비슷한 것을 사용할 수있는 방법이있어서 다른 프로세스의 메모리를 읽을 수 있고이 객체를 GUI 객체에 빌드 할 수 있습니다. 필요?

답변

2

당신이 그 GUI 객체의 내용을 수정하는 등 SetWindowText()로 일반의 Win32 API 함수를 호출 할 수 있습니다 (FindWindow() 참조) 적절한 권한이 특정 GUI 객체의 창 핸들 (HWND)을 얻을 수있는 방법을 가정 .

그러나 이렇게하면 다른 프로세스의 논리가 손상 될 수 있습니다! GUI 개체를 소유하고있는 프로세스가 일부 정보를 캐시하고 그 뒤에있는 원본을 수정하면 원하는 효과를 얻지 못할 수 있습니다.

+0

SetWindowText는 동일한 응용 프로그램의 GUI 개체에서만 작동합니까? 또한 나는 이것을 사용하여 필요한 모든 정보를 읽을 수 없습니다. 예를 들어, 콤보 상자의 항목 목록을 가져올 수 없습니다. – user1227708

+0

@ user1227708 : 직접'WM_SETTEXT '를 보내어 다른 프로그램의 텍스트를 수정하십시오. ComboBox 내용을 읽는 관점에서 보면 FindWindowEx를 통해 핸들을 가져와야합니다 (가져 오기 위해 클래스 이름 사용). 그 후, 내가 아는 한 일반 ComboBox 매크로 및 메시지를 사용하는 프로세스 간 제한 사항은 없습니다. http://msdn.microsoft.com/en-us/library/windows/desktop/ff485897(v=vs. 85) .aspx –

+0

@ user1227708 : ['PostMessage()'] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms644944.aspx)를 사용하여 메시지를 명시 적으로 보내야 할 수도 있습니다. ['PostThreadMessage()'] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms644946.aspx). –

관련 문제