Тема: AHK: Как можно поместить фото в буффер
Здравствуйте, у меня есть фото оно находится к примеру по пути: "C:\Users\RaDley\Documents\Lightshot\Screenshot_10.png"
Как можно поместить это изображение в Clipboard?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Здравствуйте, у меня есть фото оно находится к примеру по пути: "C:\Users\RaDley\Documents\Lightshot\Screenshot_10.png"
Как можно поместить это изображение в Clipboard?
Открыть в Paint(можно без отображения окна), потом ^A^C.
Примерно так:
F2:: ; 1 нажатие: Сохранить картинку в буфер, 2 нажатие: Открыть Paint и вставить её из буфера.
F++
If (F = 1){
Clipboard=
FileName := C:\Users\RaDley\Documents\Lightshot\Screenshot_10.png
Run, MSPaint %FileName%
WinWait, ahk_class MSPaintApp
Sleep, 100
Send, ^{a}
Sleep, 100
Send, ^{c}
ToolTip, Картинка в буфере
PostMessage, 0x111, 57665, 0,, ahk_class MSPaintApp
Sleep, 500
WinWaitClose
ToolTip
}
If (F = 2){
ToolTip, Картинка из буфера
Run, MSPaint
WinWait, ahk_class MSPaintApp
Sleep, 100
Send, ^{v}
F := 0
Sleep, 500
ToolTip
}
Return
А без пайнта никак?
Зачем нам лёгкие пути? Мы любим посложнее.
filePath := "C:\Users\RaDley\Documents\Lightshot\Screenshot_10.png"
GDIp := new GDIplus
pBitmam := GDIp.CreateBitmapFromFile(filePath)
GDIp.SetBitmapToClipboard(pBitmam)
GDIp.DisposeImage(pBitmap)
class GDIplus {
__New() {
this.hLib := DllCall("LoadLibrary", "Str", "gdiplus", "Ptr")
VarSetCapacity(si, 8 + A_PtrSize*2, 0), si := Chr(1)
DllCall("gdiplus\GdiplusStartup", "PtrP", pToken, "Ptr", &si, "Ptr", 0)
this.token := pToken
}
__Delete() {
DllCall("gdiplus\GdiplusShutdown", "Ptr", this.token)
DllCall("FreeLibrary", "Ptr", this.hLib)
}
CreateBitmapFromFile(sFile) {
DllCall("gdiplus\GdipCreateBitmapFromFile", "WStr", sFile, "PtrP", pBitmap)
Return pBitmap
}
SetBitmapToClipboard(pBitmap) {
hBitmap := this.CreateHBITMAPFromBitmap(pBitmap)
off1 := A_PtrSize = 8 ? 52 : 44, off2 := A_PtrSize = 8 ? 32 : 24
DllCall("GetObject", "Ptr", hBitmap, "int", VarSetCapacity(oi, A_PtrSize = 8 ? 104 : 84, 0), "Ptr", &oi)
hdib := DllCall("GlobalAlloc", "UInt", 2, "Ptr", 40+NumGet(oi, off1, "UInt"), "Ptr")
pdib := DllCall("GlobalLock", "Ptr", hdib, "Ptr")
DllCall("RtlMoveMemory", "Ptr", pdib, "Ptr", &oi+off2, "Ptr", 40)
DllCall("RtlMoveMemory", "Ptr", pdib+40, "Ptr", NumGet(oi, off2 - A_PtrSize, "Ptr"), "Ptr", NumGet(oi, off1, "UInt"))
DllCall("GlobalUnlock", "Ptr", hdib)
DllCall("DeleteObject", "Ptr", hBitmap)
DllCall("OpenClipboard", "Ptr", 0)
DllCall("EmptyClipboard")
DllCall("SetClipboardData", "UInt", 8, "Ptr", hdib)
DllCall("CloseClipboard")
}
CreateHBITMAPFromBitmap(pBitmap, Background=0xffffffff) {
DllCall("gdiplus\GdipCreateHBITMAPFromBitmap", "Ptr", pBitmap, "PtrP", hbm, "Int", Background)
return hbm
}
DisposeImage(pBitmap) {
return DllCall("gdiplus\GdipDisposeImage", "Ptr", pBitmap)
}
}
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться