아마 초등학교 2학년때인가, 학교 방과후 수업의 일환으로 워드프로세서 및 컴퓨터 기초 활용 능력을 배웠던 적이 있다. 그때 처음 Ctrl + C / Ctrl + V와 클립보드의 존재를 배웠었다.

 

클립보드는 복사, 붙여넣기를 할 때 복사를 한 데이터가 운영체제 레벨에서 저장되는 공간이다. 근데 우리는 이렇게 간편하게 클립보드를 사용해서 다양한 데이터들을 복사 및 붙여넣기를 하면서도 정작 클립보드가 어떻게 생겨먹었는지는 잘 모르고 있긴 하다.

 

서식이 있는 텍스트를 복사 붙여넣기 할 때, 서식을 날리기 위해 잠시 메모장에다가 복붙을 하는 경우, 이미지를 복사한 경우 PC버전 카카오톡에 붙여넣기를 하면 바로 이미지가 전송이 되기도 한다. 파일 자체를 복사하는 경우도 있고 이렇게 다양하게 활용을 하고 있는데, 클립보드에는 데이터가 어떻게 저장이 되길래 그렇게 동작하는지 다소 궁금해서 찾아보게 되었다.

 

클립보드 데이터 확인

http://www.peterbuettner.de/develop/tools/clipview/

 

Windows clipboard raw viewer

A developer tool This is a little tool to inspect the windows clipboard in a raw/text way, i use it to find bugs in applications. There is only little help now: Hover with the mouse over the image below, in the application you must hover over the elements.

www.peterbuettner.de

클립보드이 데이터를 볼 수 있는 프로그램이다.

 

좀 오래된 프로그램이긴 하지만, 뭔가를 복사를 한 상태에서 저 프로그램에서 확인 버튼을 누르면 좌측에 현재 클립보드에 있는 데이터의 포맷들이 보이고, 이 포맷들을 누를 시 그 포맷에서 어떻게 데이터가 보이는지 Text 형태로 보여지게 된다.

 

이로서 Format - Text 형태의 Pair들이 여러개 묶여있는 식으로 클립보드에 저장된다는 것을 알 수 있다.

 

그리고 어플리케이션에 붙여넣기를 하면 해당 어플리케이션이 자신이 받아들일 수 있는 포맷 넘버를 기반으로 데이터를 받아서 처리를 하는 것으로 예상된다.

 

위 프로그램의 경우 클립보드의 데이터를 보는 것만 잘 동작하는 것 같다. 그렇다면 클립보드에 내가 원하는 형식의 데이터(crafted data)를 집어넣을수는 없을까?

 

win32clipboard python api

python api중에 win32clipboard라는 녀석이 있다. pywin32라는 걸 설치를 하면 같이 설치가 되는 모양이다.

스택오버플로의 한 부분인데 위와 같이 설치를 해 볼 수 있겠다.

그리고 있는 api들을 사용해보면서 데이터를 써넣을 수 있다.

아래와 같이 코드를 짜보자.

#!/usr/bin/env python3
import win32clipboard

win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardText("plaintext", win32clipboard.CF_TEXT)
win32clipboard.CloseClipboard()

win32clipboard.GetClipboardData(win32clipboard.CF_HDROP)

OpenClipboard를 호출을 하게 되면 다른 앱에서 클립보드를 사용할 수 없게 잠기는 모양이다. 그래서 다시 풀어줘야 한다.

자세한 API 리스트들은 아래 Reference에 링크가 있으므로 거기를 참고해보자.

 

그리고 이 pywin32 api는 결과적으로는 Win32 api를 파이썬으로 포팅한 것이므로, Win32 API를 이용하면 클립보드를 제어할 수 있다는 뜻이다.

 

이 클립보드를 제어 스크립트를 통해서 먼가 재미있는 장난질들을 할 수 있을것도 같은데, 일단은 포스팅은 여기서 줄이도록 하겠다.

 

References

stackoverflow.com/questions/15310121/trying-to-install-module-win32clipboard/15310362

docs.microsoft.com/en-us/windows/win32/dataxchg/clipboard

timgolden.me.uk/pywin32-docs/win32clipboard__GetClipboardData_meth.html

timgolden.me.uk/pywin32-docs/win32clipboard.html

m.blog.naver.com/popqser2/221358295907

www.peterbuettner.de/develop/tools/clipview/

+ Recent posts