⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 insert_fromclipboard.asm

📁 一个十六进制编辑器源代码,cool!
💻 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 + -