매크로

질문
2018.10.23 10:22

postmessage로 dragNdrop

조회 수 268 추천 0 댓글 7
dropfiles 커멘드에 wparam값으로 파일핸들을 넘겨줘야되는걸로 msdn에 나오는데 외국포럼에 찾아봐도 미해결로 나오네요..
비활성으로 이미지파일을 카톡에 보내려고 하는데 어떻게 하면 좋을까요. 오핫 프로그래밍 고수분의 조언을 기다립니다.
클립보드로 이미지를 비활성으로 보내는거는 구현했는데 클립보드를 안거치고 파일형태로 넘기는 방법을 찾고있습니다.

  • Hangoon 2018.10.23 12:40
    HDrop(fnames,x=0,y=0) 
    {
       characterSize := A_IsUnicode ? 2 : 1
       fns:=RegExReplace(fnames,"\n$")
       fns:=RegExReplace(fns,"^\n")
       hDrop:=DllCall("GlobalAlloc","UInt",0x42,"UInt",20+(StrLen(fns)*characterSize)+characterSize*2)
       p:=DllCall("GlobalLock","UInt",hDrop)
       NumPut(20, p+0)  ;offset
       NumPut(x,  p+4)  ;pt.x
       NumPut(y,  p+8)  ;pt.y
       NumPut(0,  p+12) ;fNC
       NumPut(A_IsUnicode ? 1 : 0,  p+16) ;fWide

       p2:=p+20
       Loop,Parse,fns,`n,`r
       {
          DllCall("RtlMoveMemory","UInt",p2,"Str",A_LoopField,"UInt",StrLen(A_LoopField)*characterSize)
          p2+=StrLen(A_LoopField)*characterSize + characterSize
       }
       DllCall("GlobalUnlock","UInt",hDrop)
       Return hDrop
    }

    예제 (그림판 켜놓은 상태)
    fname=Green.png
    PostMessage, 0x233, HDrop(fname), 0,, ahk_class MSPaintApp

    함수 첫번째 파라메터에 파일명 리스트를 라인피드로 구분해서 작성하면 여러 파일도 한번에 전달이 됩니다.
  • sama 2018.10.23 15:51

    fname=test.bmp ; 이미지 파일만 test.bmp 만들어서 넣었는데 요렇게 오류가 나와요ㅠ, 이미지파일은 스크립트랑 같은폴더에 있어요

  • Hangoon 2018.10.23 17:01

    밑 스샷에 정답이 있네요
    파일 이름을 절대경로로 입력해줘야되는데 제가 예제에 깜빡하고 작성을 안했네요 ㅎㅎ


    fname=%A_ScriptDir%\Green.png
    PostMessage, 0x233, HDrop(fname), 0,, ahk_class MSPaintApp

    이걸로 해보시지요
  • sama 2018.10.23 17:15
    완벽히 작동되네요! 절대경로였군요
    오핫포럼에 있는거는 원본이 일본사람이 만든걸로 유니코드도 지원안되고 고물이었는데..
    혹시 천재신가요? 농담입니다 ㅋㅋ
    지금 당장 필요한건 아니지만 복수개 파일을 넘길때 라인피드로 구분해서 입력하면 된다고 하셨는데. 라인피드가 /n/r말씀하시는거죠? 근데 이거 fname변수에 어떻게 입력해야되나요? 똑같이 절대경로포함해서 넣어줘야 되는거면 많이 길어 질거 같아서요.
  • Hangoon 2018.10.23 17:55
    저도 그 포럼 봤는데 거기서 퍼온거에요. 뒷페이지로 넘기니까 누가 개선해놓은게 있더라구요
    라인피드는 오토핫키에서 `n 입니다.
    fnames=%A_ScriptDir%\Green.png`n%A_ScriptDir%\BALLOON2.png
    이런식으로요

    너무 길어질거 같으면 변수입력시에는 파일명만 입력하고
    경로는 함수내에서 입력할 수 있도록 처리해주면 되죠

    위 함수의 fns:=RegExReplace(fns,"^\n") 바로 아랫라인에 아래 코드를 삽입해 보세요

    Loop,Parse,fns,`n,`r
    {
    SplitPath, A_LoopField,OutFileName, OutDir, OutExtension, OutNameNoExt, OutDrive
    tmp := (!OutDrive ? A_ScriptDir "\" : "" ) A_LoopField (!OutExtension ? ".png" : "")
    fns := (A_Index=1) ? tmp : fns "`n" tmp
    }

    절대경로인 경우는 그대로 사용
    상대경로인 경우는 스크립트 경로를 앞에 추가
    확장자가 없으면 .png 추가 하는 스크립트입니다
  • sama 2018.10.23 18:01
    많이 배우네요. 프로그램짜는게 요새 왤케 재밌죠 ㅎㅎ
  • sama 2018.10.23 15:52


    P339pNk.png


List of Articles
분류 제목 글쓴이 최근변경 추천
질문 작동을 안하네요 ㅠㅠ 도와주세요.. 1 제작의뢰 2018.11.15 0/0
질문 오토핫키 스크립트 두개를 한번에 실행하는 법이 있나... 4 호놀룰로 2019.01.22 0/0
질문 (간단한?)매크로하나 만들고픈데 제작의뢰가능한가요? 2 더기더기1 2018.11.21 0/0
질문 혹시 움직이는 대상 이미지서치를 쉽게 하는방법있을까요 1 쿠쿠다스4 2018.11.15 0/0
질문 비활성 이미지 범위지정 오류?? 2 달리니닷 2018.11.24 0/0
질문 초보입니다 도움좀 구할게요.. loop 또는 while 2 쿠쿠다스4 2018.11.15 0/0
질문 메이플 소스 제작좀 해보고싶은데 입구컷을 당하네요 딴규 2018.11.16 0/0
질문 특정이미지 서치시 파일실행 해주는 스크립트가 궁금합... 2 딩딩이 2018.11.17 0/0
질문 간단한 보안숫자보고 입력하는 매크로아시나용 ?? 3 퉁키댜 2019.04.12 0/0
질문 이미지서치 이미지를 자꾸 못 찾아요.. 2 NekoNya 2018.12.09 0/0
질문 이미지 변경이나 움직임을 캐치할 방법이 있을까요? 2 매튜스 2018.11.19 0/0
질문 스크립트를 리로드 하지않고 처음으로 가려면? 5 크퀘 2019.01.22 0/0
질문 GUI 요소중 Button에 대한 질문입니다. 3 펭귄륌 2018.11.22 0/0
질문 녹스 화면축소 관련 1 제발등업좀2 2018.11.23 0/0
질문 비활성 매크로시 마우스 이동안됨 문제 해결방법아시는... 1 mchobo 2018.11.28 0/0
질문 앱플레이어 메모리리드 문의드립니다~ 고수님둘 도와주... 1 다찾을께 2019.09.29 0/0
질문 gui Listview에관한 질문입니다 배키배키찬 2018.11.24 0/0
질문 이미지 서치 전체화면 말고~ 게임창 안에서 검색하고 ... 3 미르태풍 2019.02.27 0/0
질문 오토핫키 스크립트 질문입니다. 3 제작의뢰 2018.11.26 0/0
질문 아랫글에 이어서 질문 입니다. 2 제작의뢰 2018.11.26 0/0
Board Pagination Prev 1 ... 129130131132133134135136137 ... 173 Next
/ 173

전체 최신 인기글

전체 주간 인기글