📄 insert_fromclipboard.asm
字号:
.data
szClipBoardNames db "CF_TEXT",0
db "CF_BITMAP",0
db "CF_METAFILEPICT",0
db "CF_SYLK",0
db "CF_DIF",0
db "CF_TIFF",0
db "CF_OEMTEXT",0
db "CF_DIB",0
db "CF_PALETTE",0
db "CF_PENDATA",0
db "CF_RIFF",0
db "CF_WAVE",0
db "CF_UNICODETEXT",0
db "CF_ENHMETAFILE",0
db "CF_HDROP",0
db "CF_LOCALE",0
db 0
_GetClipboardFormatName proto:DWORD
_DlgFromCBProc proto :DWORD,:DWORD,:DWORD,:DWORD
.CODE
_DlgFromCBProc proc @hDlg,uMsg,wParam,lParam
local @szBuf[255]:BYTE
mov eax,uMsg
.if eax==WM_INITDIALOG
invoke _GetClipboardFormatName,@hDlg
.elseif eax==WM_COMMAND
pushad
mov eax,wParam
.if ax==1000
xor ebx,ebx;ebx标记是否有插入;mov ebx,FALSE
invoke OpenClipboard,@hDlg
__senddlgmessage 1001,CB_GETCURSEL
cmp eax,-1
jz _close_
__senddlgmessage 1001,CB_GETITEMDATA,eax
invoke GetClipboardData,eax
.if eax==0
call _ShowError
.else
mov esi, eax;for GlobalUnlock
invoke GlobalLock,eax
.if eax
mov edi,eax
invoke GlobalSize,eax
.if eax
mov ecx,eax
mov eax,lpMemFile
add eax,dwBlockStart
invoke _PushUndo,eax,UNDO_INSERT,ecx,edi
inc ebx;mov ebx,TRUE
and FLAG_ALL,not FLAG_BLOCKSEL
.endif
invoke GlobalUnlock,esi
.else
call _ShowError
.endif
.endif
_close_:
invoke CloseClipboard
.if ebx
invoke SendMessage,@hDlg,WM_CLOSE ,0,0
.endif
.elseif ax==1003
invoke _GetClipboardFormatName,@hDlg
.endif
popad
.elseif eax==WM_CLOSE
invoke EndDialog,@hDlg,0
.else
xor eax,eax
ret
.endif
mov eax,TRUE
ret
_DlgFromCBProc endp
;-------------------------------------------------
;取得剪切板上可用的格式的名称
_GetClipboardFormatName proc @hDlg
local @szBuf[255]:BYTE
pushad
__senddlgmessage 1001,CB_RESETCONTENT
invoke OpenClipboard,@hDlg
xor esi,esi
lea ebx,@szBuf
.while TRUE
invoke EnumClipboardFormats,esi
.break .if eax==0
mov esi,eax
.if eax>=CF_TEXT && eax<CF_MAX
push esi
lea esi,szClipBoardNames
xor edi,edi
.while edi<eax
push eax
mov ebx,esi
invoke lstrlen,esi
inc eax
add esi,eax
inc edi
pop eax
.endw
pop esi
.else
invoke GetClipboardFormatName,esi,ebx,255
.endif
__senddlgmessage 1001,CB_FINDSTRINGEXACT ,-1,ebx
.if eax==-1
__senddlgmessage 1001,CB_ADDSTRING ,0,ebx
__senddlgmessage 1001,CB_SETITEMDATA ,eax,esi
.endif
.endw
invoke CloseClipboard
__senddlgmessage 1001,CB_SETCURSEL
popad
ret
_GetClipboardFormatName endp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -