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

📄 rmecleaner.asm

📁 Real文件弹出广告修复器v1.0.Win32汇编源代码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
.386
.model	flat, stdcall
option	casemap :none

include		RMeCleaner.inc
include		macros.inc


.code
start:
	invoke GetModuleHandle, NULL
	mov	m_hInstance,eax
	invoke InitCommonControls
	invoke DialogBoxParam, m_hInstance,IDD_MAIN,NULL,offset DlgProc,0

	
	invoke ExitProcess, eax

DlgProc proc hWnd:DWORD,uMsg:DWORD,wParam:DWORD,lParam:DWORD

;	stStartUp STARTUPINFO <?> 
;	stProcInfo PROCESS_INFORMATION <?>
;	... 
;
;	invoke GetStartupInfo,addr stStartUp
;	invoke CreateProcess,NULL,addr szFileName,NULL,NULL,NULL,NORMAL_PRIORITY_CLASS,NULL,NULL,offset stStartUp,offset stProcInfo
;	invoke TerminateProcess,stProcInfo.hProcess,0
;	invoke GetExitCodeProcess, stProcInfo.hProcess,addr lpExitCode		;lpExitCode != STILL_ACTIVE
;	invoke WaitForSingleObject,stProcInfo.hProcess,1000					;等待 1 秒钟
;	invoke WaitForSingleObject,stProcInfo.hProcess,INFINITE				;等到进程结束 	
;	invoke CloseHandle,stProcInfo.hProcess
;	invoke CloseHandle,stProcInfo.hThread

	LOCAL lpPattern		:DWORD
	LOCAL lpFilePath	:DWORD
	LOCAL szBuffer[260]	:BYTE

	;设置背景颜色
;	LOCAL hBrush		:DWORD
;	LOCAL rect			:RECT
;	LOCAL LogBrush		:LOGBRUSH

	mov	eax,uMsg
	.if	eax == WM_INITDIALOG
		mov eax,hWnd
		mov	m_hWndMain,eax
		invoke LoadIcon, m_hInstance,IDI_MAIN
		invoke SendMessage, hWnd,WM_SETICON,0,eax
		;--------------------------------------------

	;设置背景颜色
;	.ELSEIF EAX==WM_ERASEBKGND
;		mov LogBrush.lbStyle,BS_SOLID
;		RGB 85,160,124
;		mov LogBrush.lbColor,eax
;		invoke CreateBrushIndirect,addr LogBrush
;		mov hBrush,eax
;		invoke GetClientRect,hWnd,addr rect
;		invoke FillRect,wParam,addr rect,hBrush	
		
		;初始化窗体句柄
		mov m_hWndProgress,FUNC(GetDlgItem,hWnd,IDC_PROGRESSBAR)
		mov m_hWndEditPath,FUNC(GetDlgItem,hWnd,IDC_EDIT_FILEPATH)
		mov m_hWndBtnBrower,FUNC(GetDlgItem,hWnd,IDC_BUTTON_BROWER)
		mov m_hWndBtnRepair,FUNC(GetDlgItem,hWnd,IDC_BUTTON_REPAIR)

		invoke CreateFont,14,6,0,0,FW_BOLD,0,0,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_CHARACTER_PRECIS,DEFAULT_QUALITY,FF_MODERN,CTEXT("MS Sans Serif")
		invoke SendMessage, m_hWndBtnRepair,WM_SETFONT,eax,0

		;初始化临时目录
		invoke GetTempPath, 255,offset m_szRMecTmpDir
		invoke lstrcat, offset m_szRMecTmpDir,CTEXT("rmecTmp\")
		invoke lstrcpy, offset m_szRMecToolsDir, offset m_szRMecTmpDir
		invoke lstrcat, offset m_szRMecToolsDir,CTEXT("tools\")
		;初始化文件
		invoke lstrcpy, offset m_szExecFilePath, offset m_szRMecTmpDir
		invoke lstrcat, offset m_szExecFilePath,CTEXT("rmec.exe")
		invoke lstrcpy, offset m_szDllFilePath, offset m_szRMecToolsDir
		invoke lstrcat, offset m_szDllFilePath,CTEXT("rmtools.dll")
		invoke lstrcpy, offset m_szEventsFilePath, offset m_szRMecToolsDir
		invoke lstrcat, offset m_szEventsFilePath,CTEXT("events")

		;--------------------------------------------
    .elseif eax == WM_DROPFILES
        invoke DragQueryFile, wParam,0,addr szBuffer,256
		invoke SendMessage, m_hWndEditPath,WM_SETTEXT,0, addr szBuffer
		ret
	.elseif eax == WM_LBUTTONDOWN
		;移动窗体
		invoke UpdateWindow, hWnd
		invoke ReleaseCapture
		invoke SendMessage, hWnd,WM_NCLBUTTONDOWN,HTCAPTION, 0
	.elseif eax == WM_COMMAND
		mov	eax,wParam
		.if	ax == IDC_EDIT_FILEPATH
			mov eax, lParam
			.if	eax == m_hWndEditPath
				;-------------------------------------------------------------------
				;文本发生改变
				invoke	GetDlgItemText, hWnd,IDC_EDIT_FILEPATH,addr szBuffer,sizeof szBuffer
				.if szBuffer[0] == 0
					;文本为空,屏蔽[开始修复]
					invoke EnableWindow, m_hWndBtnRepair,FALSE
				.else
					;文本不为空,激活[开始修复]
					invoke lstrcpy, offset m_szSrcFilePath,addr szBuffer
					invoke EnableWindow, m_hWndBtnRepair,TRUE
				.endif
				;-------------------------------------------------------------------
			.endif
		.elseif	eax == IDC_BUTTON_REPAIR
			;准备开始修复	
			invoke RepairRmEvents
;			invoke SendMessage, hWnd, WM_CLOSE, 0, 0
		.elseif	eax == IDC_BUTTON_BROWER
			;打开对话框
	        mov lpPattern, chr$("Real files (*.rm;*.rmvb)",0,"*.rm;*.rmvb",0,"All files (*.*)",0,"*.*",0,0)
	        mov lpFilePath,FUNC(OpenFileDialog,hWnd,m_hInstance,reparg("请选择要修复的文件"),reparg(lpPattern))
	        cmp BYTE PTR [eax], 0
	        jne @F	;已经选择文件
	        xor eax, eax
	        ret
		@@:
			;已经选择文件,设置EditPath为选择文件路径
			invoke SendMessage,m_hWndEditPath,WM_SETTEXT,0,lpFilePath
		.endif
	.elseIf eax == WM_CTLCOLORSTATIC || eax == WM_CTLCOLOREDIT
		;设置文字颜色
		invoke GetDlgCtrlID,lParam
		.if eax == IDC_STATIC_MSG
			RGB 0,0,255
			invoke SetTextColor,wParam,eax
			invoke SetBkColor,wParam,FUNC(GetSysColor, COLOR_BTNFACE)
			invoke GetStockObject,NULL_BRUSH
		.else
			mov eax,FALSE
			ret
		.endif	
		ret
	.elseif eax == WM_TIMER
		;计时器事件处理
		invoke OnTimer
	.elseif eax == WM_DESTROY
		;退出前关闭计时器
		invoke PostQuitMessage, NULL
		.if m_dwTimerID != 0
			invoke KillTimer, hWnd,m_dwTimerID
		.endif
	.elseif	eax == WM_CLOSE
		.if m_dwProcessID == 0
			invoke DelTempFiles
			invoke	EndDialog, hWnd, 0
		.else
			.if FUNC(MessageBox, m_hWndMain,CTEXT("程序正在执行任务中, 终止程序将会导致修复文件失败, 确认要取消修复文件并关闭程序吗?  "),CTEXT("警告"),MB_ICONWARNING or MB_YESNO) == IDYES
				invoke OpenProcess, PROCESS_TERMINATE,TRUE,m_dwProcessID	;得到该进程的句柄
				mov edx,eax
				invoke TerminateProcess, eax,0
				invoke CloseHandle, edx
				invoke Sleep, 500
				invoke	EndDialog, hWnd, 0
			    invoke DeleteFile, addr m_szTempFilePath
				invoke DelTempFiles
			.else
				mov eax,0
			.endif
		.endif
		ret
	.endif
	xor	eax,eax
	ret
DlgProc endp

RepairRmEvents proc
	LOCAL szTempBuffer[260]		:BYTE
	LOCAL szExecParameters[260]	:BYTE
	LOCAL hFileHandle			:HANDLE
	LOCAL hResHandle			:HRSRC
	LOCAL dwResSize				:DWORD

	;判断源文件是否存在
	invoke lstrcpy, addr szTempBuffer,CTEXT("您选择的文件: ")
	invoke lstrcat, addr szTempBuffer,offset m_szSrcFilePath
	invoke lstrcat, addr szTempBuffer,CTEXT(" 不存在!  ")
	.if FUNC(FileExists, offset m_szSrcFilePath) == FALSE
		invoke	MessageBox, m_hWndMain,addr szTempBuffer,CTEXT("打开文件错误"),MB_ICONERROR
		ret
	.endif

	;获得源文件长度
	invoke CreateFile, offset m_szSrcFilePath, NULL, FILE_SHARE_READ or FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL
	mov hFileHandle, eax
	invoke GetFileSize,	eax, NULL
	mov m_dwSrcFileLength, eax
	invoke CloseHandle, hFileHandle

	;建立目录
	invoke CreateDirectory, offset m_szRMecTmpDir, NULL
	invoke CreateDirectory, addr m_szRMecToolsDir, NULL

	;释放资源文件
	;----------------------------------------------------------------------------------------------
	.if FUNC(SaveResourceToFile, m_hInstance,CTEXT("rmec"),CTEXT("rmecfile"),addr m_szExecFilePath) == TRUE && \
		FUNC(SaveResourceToFile, m_hInstance,CTEXT("events"),CTEXT("rmecfile"),addr m_szEventsFilePath) == TRUE	&& \
		FUNC(SaveResourceToFile, m_hInstance,CTEXT("rmtools"),CTEXT("rmecfile"),addr m_szDllFilePath) == TRUE
		jmp @ReadResourceSucceed
	.else
		;释放文件失败
		;删除文件和目录
		invoke DelTempFiles
		invoke MessageBox, m_hWndMain,CTEXT("系统错误(13200): 程序初始化数据时遇到不可忽略的错误!  "),CTEXT("程序错误"),MB_ICONERROR
		invoke SendMessage, m_hWndMain, WM_SYSCOMMAND, SC_CLOSE, NULL
		ret
	.endif

  @ReadResourceSucceed:
	;判断修复文件是否存在
	.if FUNC(FileExists,addr m_szExecFilePath) == FALSE || FUNC(FileExists,addr m_szDllFilePath) == FALSE ||  FUNC(FileExists,addr m_szEventsFilePath) == FALSE
		;不存在则退出
		invoke MessageBox, m_hWndMain, CTEXT("系统错误(13201): 程序初始化数据时遇到不可忽略的错误!  "),CTEXT("程序错误"), MB_ICONERROR
		invoke SendMessage, m_hWndMain, WM_SYSCOMMAND, SC_CLOSE, NULL
		ret
	.endif
	
	;生成临时文件名
	;-----------------------------------------------------------------------------------
	invoke lstrcpy, offset m_szTempFilePath, offset m_szSrcFilePath
	invoke lstrcat, offset m_szTempFilePath, CTEXT(".TMP")
	;-----------------------------------------------------------------------------------
	;生成运行参数
	invoke lstrcpy, addr szExecParameters, CTEXT('-i "')
	invoke lstrcat, addr szExecParameters, offset m_szSrcFilePath
	invoke lstrcat, addr szExecParameters, CTEXT('" -o "')
	invoke lstrcat, addr szExecParameters, addr m_szTempFilePath
	invoke lstrcat, addr szExecParameters, CTEXT('" -e "')
	invoke lstrcat, addr szExecParameters, addr m_szEventsFilePath
	invoke lstrcat, addr szExecParameters, CTEXT('"')
	;-----------------------------------------------------------------------------------
	invoke ShellExecute, NULL,NULL,addr m_szExecFilePath,addr szExecParameters,NULL,SW_HIDE

	.if FUNC(IsRmEventRunning) == FALSE
		invoke DelTempFiles
		invoke MessageBox, m_hWndMain,CTEXT("系统错误(13203): 程序初始化数据时遇到不可忽略的错误!  "),CTEXT("程序错误"),MB_ICONERROR
		invoke SendMessage, m_hWndMain, WM_SYSCOMMAND, SC_CLOSE, NULL
		ret
	.endif

	invoke SendMessage, m_hWndProgress,PBM_SETRANGE32,0,m_dwSrcFileLength		;范围
	invoke SendMessage, m_hWndProgress,PBM_SETPOS,10,0			;位置
	RGB 66,215,69
	invoke SendMessage, m_hWndProgress,PBM_SETBARCOLOR,0,eax	;颜色
	RGB 255,255,255
	invoke SendMessage, m_hWndProgress,PBM_SETBKCOLOR,0,eax		;背景颜色
	invoke ShowWindow, m_hWndProgress,SW_SHOW
	invoke SendMessage, m_hWndMain,WM_SETTEXT,0,CTEXT("Real 文件弹出广告修复器 v1.0 - 正在初始化")
	;打开计时器
	invoke SetTimer,m_hWndMain, IDC_TIMER, 10, NULL
	mov m_dwTimerID,eax

	;屏蔽窗体状态
	invoke EnableWindow, m_hWndBtnBrower,FALSE
	invoke EnableWindow, m_hWndBtnRepair,FALSE
	invoke EnableWindow, m_hWndEditPath,FALSE
	invoke LoadCursor, 0, IDC_WAIT
	invoke SetClassLong, m_hWndMain,GCL_HCURSOR,eax

	Ret
RepairRmEvents EndP

OnTimer proc

	LOCAL hFileHandle		:HANDLE
	LOCAL szTempBuffer[260]	:BYTE
	LOCAL szStrTemp[32]		:BYTE
	LOCAL dwTempLength		:DWORD
	LOCAL hProcess			:DWORD

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -