Q&A

  • 다른 어플리케이션의 데이타를 읽고 싶습니다. 흑...며칠째...잠도 못자고...부탁드립니다.
현재...델파이로 작성된 A라는 프로그램 내에 StringGrid 가 하나 있습니다.
그 안에 데이타도 있는데..
특정 셀(예를 들면 col=1, row=3)의 데이타를 B라는 프로그램에서 읽어들이고 싶습니다.
텍스트나 패널 같은 경우는 SendMessage의 WM_GETTEXT 등을 이용해서 읽어들이고 있는데
이 StringGrid와 같은 혹은 일반 그리드의 경우는..
어떤 식으로 읽어들여와야 하는지..해당 api 및 파라미터를 알고 싶습니다.

즉, B라는 프로그램에서 A라는 프로그램 내에 있는 텍스트 박스, 패널, 리스트박스, StringGrid 등에 있는
값(Catpion)을 읽어오고 싶은데 나머지는 읽어들이고 있습니다.
그러나 그리드 내에 있는 값은 읽어올 수 가 없습니다.
같은 프로그램이 아니라 다른 프로그램의 데이타를 읽어오는 것입니다.
..
벌써 며칠째 고생하고 있습니다.
정말 아시는 분은 답변좀 부탁드립니다..
이거 급한데..아주 속만 바짝바짝 타들어가네요...
인터넷 다 뒤져도 안나오고 별의별 검색 다 해봤는데..질문조차 찾기 힘드네요.. 도와주시면
은혜 잊지 않겠습니다..
...
다시한번 부탁드립니다.
4  COMMENTS
  • Profile
    최용일 2005.08.09 21:03
    안녕하세요. 최용일입니다.

    델파이의 그리드는 Windows의 Common Control처럼 윈도우메세지를 이용해서 데이터를 다루지 않습니다.

    델파이 고유의 컨트롤이구, 데이터를 다룰때는 메소드를 호출하거나 속성을 억세스합니다.

    같은 프로그램이 아니라 다른 프로그램이라면, 딱히 방법이 없을듯 하네요...

    ^^ 항상 즐코하세요...

  • Profile
    심요섭 2005.08.10 00:18
    답변 정말 감사드립니다...
    ...
    델파이의 다른 컨트롤들은 윈도우 메시지를 이용해서 데이터를 다루지 않습니다.
    또한 델파이 뿐 아니라 ms의 그리드 기타 그리드들 역시 그런가봅니다.
    ...도저히 방법을 찾지 못하겠습니다....
    그러나...
    yahoo.co.kr 사이트에서 현재 제공하는 야후 미니사전이라고 있습니다.
    그걸로 테스트 해보면 델파이의 그리드건 ms의 db그리드건 대부분 원하는 위치의 데이타를 읽어들이고 있습니다. 참 신기하더군요...
    근데 제가 해야할 것은 특정한 위치에 입력되어 있는 문자열을 가져와야 하는데..
    그걸 못해서 현재 고생하고 있습니다.
    ...
    델파이 고유의 컨트롤이라고 하더라도 분명히 외부에서 읽어들일 방법이 있을텐데...
    그 방법을 찾기가 어렵네요..
    ...
    어찌 안될까요?
    ...
    여하튼 답변 주셔서 정말 감사드립니다.

  • Profile
    최용일 2005.08.10 03:15
    안녕하세요. 최용일입니다.

    그 프로그램은 API 후킹하는것 같네요...

    DrawText와 같이 화면에 글씨를 뿌려주는 API를 후킹해서 위치정보와 텍스트내용을 저장하고 있다가 클릭하면 밑줄을 그려주고 사전에서 찾아주는것 같군요... 윈도우 메세지로 데이터를 얻어오는것은 아닙니다.

    이렇게 하면 그리드의 텍스트를 얻을 수는 있겠지만...

    이렇게 데이터를 얻는다 할지라도 그 데이터가 그리드의 몇번째 열이고 몇번째 행인지는 알기 힘듭니다.
    또 그리드의 내용이 많아서 스크롤이 생긴다면, 보이지 않은 부분의 데이터도 얻기 힘들죠... 다른 윈도우에 의해서 화면이 가려질때도 마찬가지구요...

    어느 정도 원하는 값들을 얻을 수는 있겠지만... 님께서 원하는 방식은 아닌듯 하네요...

    ^^ 항상 즐코하세요...

  • Profile
    심요섭 2005.08.10 03:41
    안녕하세요..심요섭이라고 합니다.
    연이어지는 답변 정말 감사드립니다.

    해당 프로그램은 후킹을 하는 것 같습니다.
    마우스로 콕~찍은 위치에 해당하는 부분에 해당 윈도우에 다시 PAINT 메시지를 보내서
    텍스트를 찍도록 한 후..
    텍스트를 찍는 과정을 후킹하는 것이네요..
    말씀하신대로 메시지는 아니네요..
    그렇더라도 원하는 데이타를 얻을 수 있겠네요..
    그리드의 로우수 컬럼 수는 한정되어 있고 그중 몇번째 몇번째 로우 컬럼의 데이타를
    지정해서 읽어오려구 하는거니까요..
    즉, 마우스가 위치한 혹은 특정위치를 알고 있으니까..해당하는 지점에 있는 데이타를
    후킹을 하던 메시지를 받던...가져오고 싶은데..
    여기서 메시지로만 해결하려고 했는데...
    후킹을 해야한다니..난감하네요.. 이를 어찌 처리해야 할지...
    아..
    누군가 말하는 대략난감~이라는 단어가 생각납니다.
    무슨 수를 써서라도 해결해야 하는데..참..걱정입니다..
    ...
    감사합니다..