C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[51844] Re:다른 프로그램의 리스트뷰의 아이템을 가져오는법...
장성호 [nasilso] 2085 읽음    2008-01-09 16:52
원칙적으로 안됩니다.
왜냐하면 프로세서간에 메모리가 기본적으로 공유되지는 않기때문이죠

대상프로그램의 ListView에서는 LVM_GETITEMTEXT 라는 GetItemText 메세지를 받습니다
하지만
parameter로 넘어온 주소에 해당하는 자신의 메모리 영역에서 access하려고 합니다.
호출한 프로그램의 메모리가 아니라..

대상프로그래에서는 그 영역을 사용하지 않는 영역이라면 access voilation이 나게되고
혹 사용하는 영역이라 하더라도 그영역에 엉뚱한 내용이 쓰려지게 되므로
대상프로그램이 이상하게 돌아갈수가 있겠죠


[방법1]
  대상프로그램을 수정할수 있다면?
  리스트뷰가 LVM_GETITEMTEXT 를 수신할때  해당 item의 내용을 파일로 기록한다던가...
  공유메모리 영역을 만들어(CreateFileMapping) 쓴다던가 하고
  호출한곳에서도 파일이나 공유메모리에서 가져오면 됩니다.

  기타 프로세서간에 통신하는 여러가지 방법을 이용할수 있죠


[방법2]
  대상 프로그램을 수정할수 없다면?

  "dll인젝션" 인가? "쓰레드 인젝션" 인가? 뭐 그런것( CreateRemoteThread )을 이용하여
  다른 프로세서 안에 쓰레드를 심은 다음
  그 쓰레드에서 "방법1" 등을 통해 item의 캡션을 찾아 보내면 됩니다.

  
[방법3]
  대상 프로그램을 수정할수 없는경우?
 
  C++Builder나 Delphi 에서는 디버깅시에 내가 만든 프로그램의 특정 메모리에 내용을 정확하게 가져옵니다.

  대상프로그램을 디버깅권한글 가지고 OpenProcess(..ALL_ACCESS..)하여 접근하는 방법도 있을것 같습니다.

  이방법은 저도  해보지는 않았습니다.   (이론적으로 가능하다는것만..)

  [기타]
   ....


그럼...




김형기 님이 쓰신 글 :
: 다른프로그램의 리스트뷰의 아이템을 가져오고 싶은데...잘 안되네요...
: 리스트뷰의 핸들을 얻은다음 ListView_GetItemText를 이용하여 아이템을 가져오면 될거 같았는데...
: 일단 제가 한 방법은 이렇습니다.
:
: HWND hWndTarget = ::FindWindow(NULL, "targetProgram"); //targetProgram은 대상 프로그램의 캡션(타이틀)입니다.
:
: char szTemp[255] = {0,};
: ListView_GetItemText(GetDlgItem(hWndMain, 1005), 0, 1, szTemp, 255); //1005는 대상 프로그램의 리스트뷰의 ID입니다.(0,1의 아이템의 텍스트를 얻고자 했습니다.)
:
: ShowMessage((String)szTemp); //확인용...
:
: 근데 이 방법으로 대상 프로그램이 같은 프로그램에서는 잘 되는데 대상프로그램이 다른 프로그램에서는 안되네요...
: 다른 프로그램의 리스트뷰의 텍스트를 얻을 방법은 없는것인가요...
: 고수님들 도움 부탁드립니다....(__) 꾸벅...

+ -

관련 글 리스트
51842 다른 프로그램의 리스트뷰의 아이템을 가져오는법... 김형기 1117 2008/01/09
51844     Re:다른 프로그램의 리스트뷰의 아이템을 가져오는법... 장성호 2085 2008/01/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.