
Windowsã®ã¯ãªããããŒãã«PNGãã³ãããã ïœPython x win32clipboardã§PNGã³ããããæ¹æ³ã調æ»ããŠã¿ãïœ
ããã«ã¡ã¯Rcatã§ãã
ä»åã¯Pythonã®win32clipboardã©ã€ãã©ãªã䜿ã£ãŠãWindowsã®ã¯ãªããããŒã(ã³ãã)ã«ã€ããŠã¿ãŠãããŸãã
çºç«¯ã¯ããããã°ã©ã ã§åºæ¥äžãã£ãç»åãä¿åã§ã¯ãªããã³ããŒããŠããã«äœ¿ããããã«ãããã
èªåã§èª¿ã¹ããããã£ãããŒã«èããããããšã¡ãããšåãã³ãŒããåºåããããèæ¯ãçœãã£ããé»ãã£ãããããã€ãŸãééæ
å ±ã倱ãããã
æå€ãšPNGããã®ãŸãŸã³ããããæ¹æ³ã¯èª¿ã¹ãŠãåºãŠããªãã£ãã®ã§ãè²ã
ãšå·¥å€«ããŠã¿ãŸããã®ã§ãèšäºã«ããŠã¿ãŸãã
ã¯ããã«
å©çšèŠçŽ
æ å ±ãäœåã®æŽ»çšæã¯äºåã«å©çšèŠçŽãã確èªãã ããã
ã³ã¡ã³ãã«ã€ããŠ
å©çšèŠçŽã®ã¬ã€ãã©ã€ã³ã確èªã®äžã³ã¡ã³ãããŠãã ãã
æŠèŠ
æŠèŠ
ãã€ããã¯ãŒãã€ã³ãã䜿ã£ãŠèæ¯ãééããç»åãªã©ãã³ããŒããŠãããããªè³æã§äœ¿ãåãããšãå€ãã£ãããåãããšãPythonã§ããããšãããã€ãŸãããŠããŸã£ããå ·äœçã«ã¯èæ¯ã®éæåºŠæ å ±ã倱ãããŠããŸãçœãŸãã¯é»ã«ãªã£ãŠããŸãã
äŸãã°ãã£ãããŒã«èããã®ãšåããããªæ å ±ããåºãŠãããã©ããããããªãã£ãã®ã§ããèªåã§èããããšã«ããã

ã¡ãªã¿ã«ããã®ã³ãŒãã®å Žåã¯ç»åããããããããšããŠä¿åãããããã¯ãªããããŒãã«ãã®ãŸãŸã³ããŒããŠãããã¡ãªã¿ã«ããããããã¯çŽæ¥ã³ããŒãå¯èœã
ãã ããããããããã¯èæ¯ééããµããŒãããŠããªãã®ã§ããã®æç¹ã§ãã®æ
å ±ã倱ãããŠããŸããããããããšãææããŠãæ²»ããªãã©ããããåããªãã³ãŒããåºåãããå§æ«ãã€ãŸããããã£ãæ
å ±ã¯åºåã£ãŠããªã=ãã£ãããŒã¯ç¥ããªããšæšæž¬ãããã
çµå±ãPNGã³ããã¯ã§ããã®ã§ããªãã®?
ã§ããŸãã
ä»åè²ã
調æ»ããŠããæ¹ãããããŸããã
ãã£ãšèª¿ã¹ãŠãåºãŠããªãã®ã§ãããããããšããŠã人ã¯ããªãã®ããªïŒãããšãèª¿ã¹æ¹ãæªãã®ãã
ãšããããã§ããã®èšäºã§ã¯ç§ãè²ã
ãã£ãçµæããŸãšããŠããŸãã
å°ãªããšããã¯ãã«å¯ŸããŠã³ããããããšãšããã©ãŠã¶ã«å¯ŸããŠè²Œãä»ããããšã¯åäœç¢ºèªãåããŠããŸãã
åæç¥èã®ç¢ºèª
Pythonã§ç»åã貌ãä»ãããã«ã¯?
ããããPythonã䜿ã£ãŠã°ãªããããŒãããç»åãååŸããæ¹æ³ã«ã€ããŠèŠãŠãããŸãããããç¥ããªããšãã®å æå³ãåãããŸããã
貌ãä»ããšè¡šçŸããŠããã®ã¯ãã¯ãªããããŒãããç»åãååŸããããšãã€ãŸãPythonã«è²Œãä»ãããšããæå³ã§äœ¿ã£ãŠããŸãã
ãšããããã§èª¿ã¹ããããã«åºãŠããäžè¬çãªã³ãŒããæç€ºããŸãã
ãŸãæåã«ã©ã€ãã©ãªãã€ã³ã¹ããŒã«ããŠãã ããã
ã¯ãªããããŒããæ±ãã©ã€ãã©ãªãšç»åã䜿ãã©ã€ãã©ãªã§ãã
pip install pywin32 pillowimport io
import win32clipboard
from PIL import Image
def CopySave():
try:
win32clipboard.OpenClipboard()
data = win32clipboard.GetClipboardData(win32clipboard.CF_DIB)
except:
print("ååŸã«å€±æããŸãã")
finally:
win32clipboard.CloseClipboard()
img = Image.open(io.BytesIO(data))
img.save("test.png")ãã®ã³ãŒãã䜿ãããšã§ãã³ããŒãããç»åãRGB圢åŒã§ååŸããããšãã§ããŸããããã§å€§äºãªã®ãRGBAã§ã¯ãªãããšã§ãã
ä»åã®æ©ã¿ãã€ã³ãã®1ã€ã§ãã
ã¡ãªã¿ã«ãããã§ã¯ãã¯ãŒãã€ã³ãã«é 眮ããå³åœ¢ãªããžã§ã¯ããéžæããç¶æ ã§å®è¡ããŠããŸãã

Pythonã§ç»åãã³ããŒããã«ã¯?
次ã«Pythonããã¯ãªããããŒãã«ç»åãæžã蟌ãããšãã³ããŒãšããŠèª¬æããŸãã
ãã¡ããäžè¬çãªã³ãŒããæç€ºããŸãã
import io
import win32clipboard
from PIL import Image
def WriteClipBoard():
img = Image.open("tmp.png")
output = io.BytesIO()
img.save(output, 'BMP')
data = output.getvalue()[14:]
win32clipboard.OpenClipboard()
try:
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardData(win32clipboard.CF_DIB, data)
except:
print("æžã蟌ã¿ã«å€±æããŸãã")
finally:
win32clipboard.CloseClipboard()ãã®ã³ãŒãã¯ç»åãéããŠãããããããšããŠä¿ååŸã³ããŒããŠããŸããããããŒã¯ã¹ãããããå¿ èŠãããããã§ã14ãã€ãã¯ã¹ãããããŠããŸãã


ããããä¿å圢åŒBMPããããããªããªãã ããPNGã«ããããšæã£ãŠä»¥äžã®ããã«æžãæããããªããšæããŸãããçµæã¯ãã¡ã
def WriteClipBoard():
img = Image.open("tmp.png")
output = io.BytesIO()
img.save(output, 'PNG')
win32clipboard.OpenClipboard()
try:
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardData(win32clipboard.CF_DIB, output.getvalue())
except:
print("æžã蟌ã¿ã«å€±æããŸãã")
finally:
win32clipboard.CloseClipboard()PowerPointã«è²Œãä»ããããšãããšãããªããŸãã
ãã以å€ã§ã¯ãããã貌ãä»ãããè¡ããªããªããŸãã
CF_DIBãCF_DIBV5ã«ããŠãåãã§ãããã¡ãã«ãããšãã¯ãã§ã貌ãä»ãããããšããã§ããªããªããŸãã

ã€ãŸããç¡çããPNGã§ã³ããããããšã¯ããç°¡åã«ã¯ãããªããšããã®ãçµè«ã§ãã
ã©ããããPNGãã³ããã§ããã調æ»ãã
ããããçŸå®åé¡ãã¯ãŒãã€ã³ãã§éžæããå³åœ¢ã貌ãä»ãããšãå³åœ¢ä»¥å€ã®éšåã¯ééãããŠè²Œãä»ããããšãã§ããŸãã
ãªã®ã§å®éã¯PNGãªããã¯ä»ã®ãã©ãŒãããã§èæ¯ã®ééã¯ãµããŒããããŠããããšã«ãªããŸãã
ãšããããã§ãããåãå£ã«èª¿ã¹ãŠãããŸãã
èª¿ã¹æ¹
èª¿ã¹æ¹ã¯åçŽã§ãã
ã¯ãªããããŒãã®äžã«äœãã³ããŒãããŠããã®ãã調ã¹ãŸãããŸãã
Pythonã®ã¯ãªããããŒãã©ã€ãã©ãªã¯ãWindowsã®APIãã®ãã®ãæã£ãŠããŠããããã§ãMicrosoftã®ããã¥ã¡ã³ããšã»ãŒåãæ±ããå¯èœãªããã§ãã
ãããŠããã®äžã«ã¯ã³ããŒãããŠãããªããžã§ã¯ããäœãªã®ã調ã¹ã颿°ãããããšãããããŸããã
ãšããããã§èª¿ã¹ããœãŒã¹ã³ãŒãããã¡ã
ããã䜿ããšãã©ãŒãããã®IDãšåœ¢åŒãååŸããããšãã§ããŸãã

ã¡ãªã¿ã«ã¯ãªããããŒãã«ã¯åœ¢åŒãšãããã®ããããæšæºåœ¢åŒãšãªãªãžãã«åœ¢åŒããããŸãã
æšæºåœ¢åŒã¯ä»¥äžã«èšèŒãããŠããã®ã§ãèå³ã®ããæ¹ã¯èŠãŠã¿ãŠãã ãããäžã§äœ¿ã£ã"CF_DIB"ã®ãããªãã®ãæšæºåœ¢åŒã§ãã
PowerPointã®ãªããžã§ã¯ããã³ããŒããæ
ãŸã調æ»ããã®ããã¡ããã¯ãŒãã€ã³ãã§ãã
以äžã®ããã«PowerPointã§å³åœ¢ã眮ããŠããã®2ã€ãéžæããŠãã貌ãä»ãçŽããšç»åãšããŠè²Œãä»ããããšãã§ããŸãããã
ããã©ãããä»çµã¿ãªãã ãã?ãšããããšã§äžèº«èŠãŠã¿ãŸããã

è§£æã®çµæã¯ãã¡ãã§ããäžèšé¢æ°ã«å ããäžèº«ã®ããŒã¿ã衚瀺ã§ããããã«ããŠã¿ãŸãããé·ãããããŒã¿ã¯20æåã§ã«ãããããŠããŸããããšããªãããšã©ãŒã«ãªã£ãŠãã®ããããŸããããŸãããã¯ç¡èŠããŸãããã
ãã®ãã¡"CF_"ã§ãå§ãŸããªãããŒã¿ã¯ã¢ããªã±ãŒã·ã§ã³ç¹æã®ããŒã¿ãã©ãŒãããã«ãªããŸããã»ãšãã©ãªãªãžãã«ãããªãã§ããâŠã
ID:49161 Name:DataObject Value:b'8\x08\x0f\x00'
ID:49401 Name:Preferred DropEffect Value:b'\x00\x00\x00\x00'
ID:49406 Name:InShellDragLoop Value:b'\x00\x00\x00\x00'
ID:49166 Name:Object Descriptor Value:b'd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
ID:49893 Name:PowerPoint 12.0 Internal Theme Value:b',\x1a\xec%'
ID:49894 Name:PowerPoint 12.0 Internal Color Scheme Value:b'0\x1a\xec%'
ID:49877 Name:PowerPoint 12.0 Internal Shapes Value:b'|\x18\xec%'
ID:49819 Name:Art::GVML ClipFormat Value:b'PK\x03\x04\x14\x00\x06\x00\x08\x00\x00\x00!\x00\xbb\xe5H\x94\x05\x01'
ID:49757 Name:image/svg+xml Value:b'<svg width="455" hei'
ID:49355 Name:PNG Value:b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x02\xc8'
ID:49354 Name:JFIF Value:b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x01\x00x\x00x\x00\x00'
ID:49353 Name:GIF Value:b'GIF89a\xc7\x01u\x01p\x00\x00!\xf9\x04\x05\x00\x00\n'
ID:2 Name:CF_BITMAP Value:1510281192
ID:14 Name:CF_ENHMETAFILE Value:b'\x01\x00\x00\x00l\x00\x00\x00\xe3\xff\xff\xff\xe3\xff\xff\xff<\x0b\x00\x00'
2025-03-30 14:54:06,471 ERROR ã¯ãªããããŒã (6, 'GetClipboardData:GetMetafileBitsEx(NULL)', 'ãã³ãã«ãç¡å¹ã§ãã')
ID:3 Name:CF_METAFILEPICT Value:None
ID:49171 Name:Ole Private Data Value:b'\x00\x00\x00\x00\xf8\x01\x00\x00\x01\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00'
ID:8 Name:CF_DIB Value:b'(\x00\x00\x00\xc7\x01\x00\x00u\x01\x00\x00\x01\x00 \x00\x03\x00\x00\x00'
ID:17 Name:CF_DIBV5 Value:b'|\x00\x00\x00\xc7\x01\x00\x00u\x01\x00\x00\x01\x00 \x00\x03\x00\x00\x00'ã§ããã®äžã§ç®ãåŒãã®ãçãäžããžãã«ãã"PNG"ã§ããããŒã¿èŠããšæãã£ãã0x89PNGããå§ãŸã£ãŠããŸããããPNGããŒã¿ã®ããããŒã§ããã€ãŸãçã®ããŒã¿ãå
¥ã£ãŠãããšããããšã§ãåžæãèŠããŠããŸããããã以å€ã«ãGIFãSVGãªã©ãããã¿ããã§ããã
ãªãã»ã©ããªãã£ã¹ã§"圢åŒãéžæããŠè²Œãä»ã"ãšããæ©èœããããŸãããããããããããã®åœ¢åŒã§ã³ããŒãããŠããããããã§ããããšãªãã§ããã
åãåã&ã¹ã±ããã§ã³ããŒããå Žå
次ã«äŸ¿å©æ©èœWindowsããŒ+ã·ããããŒ+Sã®ã¹ã¯ã·ã§æ©èœã䜿ã£ãå Žåã§ããããã¹ã¯ã·ã§ããç¬éã³ããŒããããã§ããããã®äžèº«ãèŠãŠã¿ãŸããã
ID:49161 Name:DataObject Value:b'\x00\x00\x00\x00\x00\x00\x00\x00'
ID:2 Name:CF_BITMAP Value:331567
ID:49355 Name:PNG Value:b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x02\xc0'
ID:49771 Name:CanUploadToCloudClipboard Value:b'\x01\x00\x00\x00'
ID:49772 Name:CanIncludeInClipboardHistory Value:b'\x01\x00\x00\x00'
ID:49171 Name:Ole Private Data Value:b'\x00\x00\x00\x008\x01\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00'
ID:8 Name:CF_DIB Value:b'(\x00\x00\x00\xc0\x02\x00\x00\t\x02\x00\x00\x01\x00 \x00\x03\x00\x00\x00'
ID:17 Name:CF_DIBV5 Value:b'|\x00\x00\x00\xc0\x02\x00\x00\t\x02\x00\x00\x01\x00 \x00\x03\x00\x00\x00'ãªããšãã¡ãã«ãPNGã®è¡šèšããããŸããåæ¹ã§åããã®ãå ¥ã£ãŠããã®ã§ãå€åãããããŒã¿ã§ééããªããšæãããŸãã
ã¯ãªããããŒãããPythonã«PNG圢åŒã§èªã¿æžããã
ç¶ãã¯ãã¡ã