|
|
#2
sych2025-12-11 10:12
|
希望实现将指定jpg文件载入win10系统粘贴板,并进行诸如旋转180度,高度缩小xx,宽度缩小xx,再旋转180度
(1)以下第一步载入到win10系统粘贴板就报错,
(2)后面旋转180度,高度缩小xx,宽度缩小xx,再旋转180度,保存操作查到的代码各种报错。
下面是将"D:\01\clipboard_001.jpg"载入操作系统粘贴板的代码,其余代码因为也报错,暂不张贴。
谢谢!
LOCAL lcImagePath
lcImagePath = "D:\01\clipboard_001.jpg"
IF NOT FILE(lcImagePath)
MESSAGEBOX("图片不存在:" + lcImagePath, 16, "错误")
RETURN
ENDIF
* 声明API
DECLARE INTEGER OpenClipboard IN user32.dll INTEGER hwnd
DECLARE INTEGER EmptyClipboard IN user32.dll
DECLARE INTEGER CloseClipboard IN user32.dll
DECLARE INTEGER SetClipboardData IN user32.dll INTEGER uFormat, INTEGER hMem
DECLARE INTEGER GlobalAlloc IN kernel32.dll INTEGER uFlags, INTEGER dwBytes
DECLARE INTEGER GlobalLock IN kernel32.dll INTEGER hMem
DECLARE INTEGER GlobalUnlock IN kernel32.dll INTEGER hMem
DECLARE INTEGER GetFileSize IN kernel32.dll INTEGER hFile, INTEGER lpFileSizeHigh
DECLARE INTEGER CreateFile IN kernel32.dll STRING lpFileName, INTEGER dwDesiredAccess, ;
INTEGER dwShareMode, INTEGER lpSecurityAttributes, INTEGER dwCreationDisposition, ;
INTEGER dwFlagsAndAttributes, INTEGER hTemplateFile
DECLARE INTEGER ReadFile IN kernel32.dll INTEGER hFile, STRING @lpBuffer, INTEGER nNumberOfBytesToRead, ;
INTEGER @lpNumberOfBytesRead, INTEGER lpOverlapped
DECLARE INTEGER CloseHandle IN kernel32.dll INTEGER hObject
* 打开剪贴板
IF OpenClipboard(0) = 0
MESSAGEBOX("打开剪贴板失败", 16)
RETURN
ENDIF
EmptyClipboard()
* 读取图片文件
hFile = CreateFile(lcImagePath, 1, 3, 0, 3, 128, 0)
IF hFile = -1
MESSAGEBOX("打开文件失败", 16)
CloseClipboard()
RETURN
ENDIF
nFileSize = GetFileSize(hFile, 0)
cBuffer = REPLICATE(CHR(0), nFileSize)
ReadFile(hFile, @cBuffer, nFileSize, @nReadBytes, 0)
CloseHandle(hFile)
* 写入剪贴板
hGlobal = GlobalAlloc(64, nFileSize)
lpGlobal = GlobalLock(hGlobal)
SYS(2600, lpGlobal, nFileSize, cBuffer)
GlobalUnlock(hGlobal)
SetClipboardData(8, hGlobal)
* 关闭剪贴板
CloseClipboard()
* 清理
CLEAR DLLS
MESSAGEBOX("图片已载入剪贴板!", 64)
SET SAFETY ON
RETURN