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
[55199] Re:바탕화면에서 파일 혹은 폴더에 마우스를 가져다대면
장성호 [nasilso] 2230 읽음    2008-11-17 00:06
가능합니다.

먼저 알아야 할 사실은

첫째.  바탕화면은 ListView라는것입니다.
      SysListView32 라는것으로 VCL의 TListView랑  거의 똑같은 놈이죠

둘째로. 바탕화면의 아이콘은 모두 실제로 파일이 존재하는 폴더가 있는데
      -   현재로그인 유저의 바탕화면 폴더와
      -   전체유저 공통의 바탕화면 폴더의 있는 내용이 함께 표시되는것이죠

      예를 들어 xp에서  administrator 로 로그인 한경우
      admin유저 바탕화면 폴더인 "C:\Documents and Settings\Administrator\바탕 화면" 폴더와
      전체 유저 바탕화면 폴더인   "C:\Documents and Settings\All Users\바탕 화면" 폴더에 있는
      파일및 폴더가 바탕화면에 나타나는것입니다.



위 두가지 사항이 기본적으로 알아야 할 사실이구요

이제 알아야 할 사실은
  -  마우스가 있는 위치에 어떤 ListView 의 아이콘이 있는지 확인해야 하구
  -  그 아이콘을 바탕화면의 폴더에서 찾으면 될것입니다.


바탕화면의 아이콘의 위치를 확인하는것은
바탕화면은 ListView이라고 했으니 아이콘은
ListView의  ListItem 이되겠쬬

즉 ListVeiw에서 item의 위치를 확인하는것이 아이콘의 위치를 찾는 것이 됩니다.

ListView에서 item의 위치를 찾는 방법은
ListView 메세지인 LVM_GETITEMPOSITION 이라는 메세지를 통해 위치를 확인할 수 있습니다.

ListView에서 Item의 갯수를 확인하려면   LVM_GETITEMCOUNT라는 메세지로 확인할 수 있구요

index를 이용하여 아이템의 정보(text , imageindex ..등의 정보...)를 가져오려면
LVM_GETITEM 이라는 메세지로 확인할 수 있습니다.



같은프로세서이면 위에 내용만 제대로 사용하면 원하는것을 찾는데 문제가 없을것입니다.
하지만 바탕화면과 현재 작업하고자 하는 프로세서가 다른놈이라는데 문제가 있습니다.

그렇다면 이제 다른 프로세서공간의 정보를 가져오는 방법만 알면 되겠죠

첫째로
   후킹중에 다른프로세서를 후킹하거나, 전역후킹을 할때
   후킹함수는 대게 dll로 만듭니다.

   dll로 만들어야 다른 프로세서공간에 load될수 있으니까요

   dll로 위 로직을 만들어서... 바탕화면프로그램즉 탐색기(explore.exe)에 load되도록해서
   확인하는 방법이 있을것입니다.
  
둘째로  window api 중에
   프로세서 공간에 메모리를 확보하고(new , alloc) , 내용을 읽고 쓰는 함수가 제공됩니다.
    VirtualAlloc  ,VirtualFreeEx
    WriteProcessMemory , ReadProcessMemory ..
  
   위 함수를 이용하여 다른 프로세서 공간에서 원하는 정볼르 얻어올수 있습니다.

그밖에도 다른 프로세서의 메모리 공간에서 원하는 내용을 얻어오는 방법은 무진장 많습니다.
저는 초보라서 잘 모르고요
 
 
이상입니다.


하지만 위 방법말고도 분명 방법은 여러가지가 있을것입니다.

예컨데..
리스트뷰의 아이콘을 아무데나 가져다 놓고 재부팅화면 정확히 그 위치에 다시 표시되듯이
분명히 DISK나 레지스터 어딘가에는 아이콘의 위치정보를 기억하고 있을것입니다.
그것이 어딘지만 알면 더욱 쉽게 원하는 정보를 얻을수 있겠죠
(요전 잘 모릅니다.)

그럼...                 



개발자 님이 쓰신 글 :
: 바탕화면에서 파일, 폴더에 마우스를 가져다대면
: 파일 혹은 폴더의 이름을
: 가져올 수 있나요?

+ -

관련 글 리스트
55196 바탕화면에서 파일 혹은 폴더에 마우스를 가져다대면 개발자 1429 2008/11/16
55199     Re:바탕화면에서 파일 혹은 폴더에 마우스를 가져다대면 장성호 2230 2008/11/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.