主题:[原创][原创]我做了个吉大课件的批量修复程序。
呵呵,放假了,到网上找点课件视频看看,结果到了美河,课件还真不少,自己选了个吉林大学的《高级语言程序设计》课件下载(我在后面会提供下载地址^_^),我的ADSL下载速度可以到200Kb每秒,本来是高兴极了,下载了第一个课件后就立即打开看看,晕·······,不能播放;于是再到论坛看了相关帖子,帖子说可以用UltraEdit打开CSF文件,然后把离文件头的第六个字节由原来的06改为04就可以播放了。于是立即试了一下,确实是可以的,不过使用UltraEdit打开一个60多M的文件已经够慢了,修改保存它还会自动备份一个出来。可能原意是好的,不过这对于我本来就不多的硬盘来说却不可容忍了。网上也有人做了这方面的修改程序,但我个人觉得不好用,使用也不够直观和功能不强。于是自己便拿起了许久未动的Win32汇编,动了一个晚上,终于觉得满意了。现在特献给大家:
程序的目标大家都很清晰:将CSF文件的从文件头开始的第六个字节由原来的06改为04。从技术角度来说这很容易解决:用CreateFile创建一个写权限的文件句柄,然后用SetFilePointer将文件指针移到第六个字节处,跟着用WriteFile函数直接将04写入此处即可冲洗掉原来的06,核心代码如下:
;--------------------------------------------------------------------------------
_EditCSFFile proc lpszCSFFile:ptr byte, @dwEditPos:dword, @dbEditBit:byte
;功能:修改CSF文件指定位置的一个字节
;参数:
; lpszCSFFile:CSF文件路径的地址。
; @dwEditPos: 待修改的位置
; @dbEditBit: 新值
;返回值:没有
;--------------------------------------------------------------------------------
LOCAL @hFile:dword
LOCAL @WrittenBits:dword
;--------------------------------------------------------------------------------
invoke CreateFile, lpszCSFFile, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0
.if eax != INVALID_HANDLE_VALUE
mov @hFile, eax
.else
invoke _ShowError, hWinMain
.endif
;移动文件指针到dwEditPos的位置.
invoke SetFilePointer, @hFile, @dwEditPos, NULL, FILE_BEGIN
.if eax == INVALID_HANDLE_VALUE
invoke _ShowError, hWinMain ;如果移动有错则显示错误
.else
invoke WriteFile, @hFile, addr @dbEditBit, sizeof @dbEditBit, addr @WrittenBits, NULL
.if !eax
;如果写入有错则解释错误
invoke _ShowError, hWinMain
.else
invoke lstrlen, lpszCSFFile
mov ebx, 8
mul ebx
;为列表框设置水平滚动条
invoke SendDlgItemMessage, hWinMain, IDC_LST_MODIFIEDCSF, 194h, eax, 0
;无错则加入到成功修改列表框中
invoke SendDlgItemMessage, hWinMain, IDC_LST_MODIFIEDCSF, LB_ADDSTRING, 0, lpszCSFFile
;显示条目总数
invoke SendDlgItemMessage, hWinMain, IDC_LST_MODIFIEDCSF, LB_GETCOUNT, 0, 0
invoke SetDlgItemInt, hWinMain, IDC_EDT_CHANGEFILECOUNT, eax, FALSE
.endif
.endif
invoke CloseHandle, @hFile
;--------------------------------------------------------------------------------
ret
_EditCSFFile endp
网上的程序基本上这个核心是做到了,但界面操作的灵活性和功能的通用性就差了,在此我不便多言,还是说说自己的程序吧:单击程序的“添加CSF文件”按钮,将待修改CSF文件添加进来,支持多选和单选。选择完后程序会将CSF文件的路径添加到列表框中,用户还可以对CSF文件进行选择,跟着可以在“修改选项”中填写需要修改那个字节,改为什么内容”,选好后即可单击“修改选定项”按钮来对CSF文件进行修复。成功修改后CSF文件会添加到“成功修改的CSF文件”列表框中,双击一个条目即可打开修改后CSF文件来进行播放测试。一切的操作都是直观而容易的。
最后再介绍一下代码:
开发环境:Windows2000 + RadAsm2.2 + MASMV8.2
测试环境:Windows2000sp4
运行环境:应该Win9X系列和WinNt系列都没问题。
文件内容:一张程序界面图片、源代码、程序。单一个程序为6.5kb,整个压缩包为61Kb
有需要的朋友可以下载该程序使用,如果当前没这个需要的朋友也可以下载看看程序源代码,因为关于Win32Asm的开发实例现在实在是太难找了,从该实例中可以学习到在ASM中列表控件的操作,文件读写的操作和代码风格等等的知识,这也就是为什么只有不断的写程序、读程序才会不断提高自己的原因了。哦,差点忘了,高级语言程序设计课件的下载地址:
http://218.17.221.219/csmedia/计算机科学与技术专业/高级语言程序设计/第01讲.csf
http://218.17.221.219/csmedia/计算机科学与技术专业/高级语言程序设计/第02讲.csf
http://218.17.221.219/csmedia/计算机科学与技术专业/高级语言程序设计/第03讲.csf
。。。。。。。。自己按这个顺序加
http://218.17.221.219/csmedia/计算机科学与技术专业/高级语言程序设计/第64讲.csf
http://218.17.221.219/csmedia/计算机科学与技术专业/高级语言程序设计/辅导1.csf
http://218.17.221.219/csmedia/计算机科学与技术专业/高级语言程序设计/辅导2.csf
http://218.17.221.219/csmedia/计算机科学与技术专业/高级语言程序设计/辅导3.csf
http://218.17.221.219/csmedia/计算机科学与技术专业/高级语言程序设计/辅导4.csf
程序界面
[img]http://www.52inter.net/images/upload/2006/01/20/211912.jpg[/img]
程序和源代码
[url=http://www.52inter.net/images/upload/2006/01/20/212116.rar]212116.rar[/url]
程序的目标大家都很清晰:将CSF文件的从文件头开始的第六个字节由原来的06改为04。从技术角度来说这很容易解决:用CreateFile创建一个写权限的文件句柄,然后用SetFilePointer将文件指针移到第六个字节处,跟着用WriteFile函数直接将04写入此处即可冲洗掉原来的06,核心代码如下:
;--------------------------------------------------------------------------------
_EditCSFFile proc lpszCSFFile:ptr byte, @dwEditPos:dword, @dbEditBit:byte
;功能:修改CSF文件指定位置的一个字节
;参数:
; lpszCSFFile:CSF文件路径的地址。
; @dwEditPos: 待修改的位置
; @dbEditBit: 新值
;返回值:没有
;--------------------------------------------------------------------------------
LOCAL @hFile:dword
LOCAL @WrittenBits:dword
;--------------------------------------------------------------------------------
invoke CreateFile, lpszCSFFile, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0
.if eax != INVALID_HANDLE_VALUE
mov @hFile, eax
.else
invoke _ShowError, hWinMain
.endif
;移动文件指针到dwEditPos的位置.
invoke SetFilePointer, @hFile, @dwEditPos, NULL, FILE_BEGIN
.if eax == INVALID_HANDLE_VALUE
invoke _ShowError, hWinMain ;如果移动有错则显示错误
.else
invoke WriteFile, @hFile, addr @dbEditBit, sizeof @dbEditBit, addr @WrittenBits, NULL
.if !eax
;如果写入有错则解释错误
invoke _ShowError, hWinMain
.else
invoke lstrlen, lpszCSFFile
mov ebx, 8
mul ebx
;为列表框设置水平滚动条
invoke SendDlgItemMessage, hWinMain, IDC_LST_MODIFIEDCSF, 194h, eax, 0
;无错则加入到成功修改列表框中
invoke SendDlgItemMessage, hWinMain, IDC_LST_MODIFIEDCSF, LB_ADDSTRING, 0, lpszCSFFile
;显示条目总数
invoke SendDlgItemMessage, hWinMain, IDC_LST_MODIFIEDCSF, LB_GETCOUNT, 0, 0
invoke SetDlgItemInt, hWinMain, IDC_EDT_CHANGEFILECOUNT, eax, FALSE
.endif
.endif
invoke CloseHandle, @hFile
;--------------------------------------------------------------------------------
ret
_EditCSFFile endp
网上的程序基本上这个核心是做到了,但界面操作的灵活性和功能的通用性就差了,在此我不便多言,还是说说自己的程序吧:单击程序的“添加CSF文件”按钮,将待修改CSF文件添加进来,支持多选和单选。选择完后程序会将CSF文件的路径添加到列表框中,用户还可以对CSF文件进行选择,跟着可以在“修改选项”中填写需要修改那个字节,改为什么内容”,选好后即可单击“修改选定项”按钮来对CSF文件进行修复。成功修改后CSF文件会添加到“成功修改的CSF文件”列表框中,双击一个条目即可打开修改后CSF文件来进行播放测试。一切的操作都是直观而容易的。
最后再介绍一下代码:
开发环境:Windows2000 + RadAsm2.2 + MASMV8.2
测试环境:Windows2000sp4
运行环境:应该Win9X系列和WinNt系列都没问题。
文件内容:一张程序界面图片、源代码、程序。单一个程序为6.5kb,整个压缩包为61Kb
有需要的朋友可以下载该程序使用,如果当前没这个需要的朋友也可以下载看看程序源代码,因为关于Win32Asm的开发实例现在实在是太难找了,从该实例中可以学习到在ASM中列表控件的操作,文件读写的操作和代码风格等等的知识,这也就是为什么只有不断的写程序、读程序才会不断提高自己的原因了。哦,差点忘了,高级语言程序设计课件的下载地址:
http://218.17.221.219/csmedia/计算机科学与技术专业/高级语言程序设计/第01讲.csf
http://218.17.221.219/csmedia/计算机科学与技术专业/高级语言程序设计/第02讲.csf
http://218.17.221.219/csmedia/计算机科学与技术专业/高级语言程序设计/第03讲.csf
。。。。。。。。自己按这个顺序加
http://218.17.221.219/csmedia/计算机科学与技术专业/高级语言程序设计/第64讲.csf
http://218.17.221.219/csmedia/计算机科学与技术专业/高级语言程序设计/辅导1.csf
http://218.17.221.219/csmedia/计算机科学与技术专业/高级语言程序设计/辅导2.csf
http://218.17.221.219/csmedia/计算机科学与技术专业/高级语言程序设计/辅导3.csf
http://218.17.221.219/csmedia/计算机科学与技术专业/高级语言程序设计/辅导4.csf
程序界面
[img]http://www.52inter.net/images/upload/2006/01/20/211912.jpg[/img]
程序和源代码
[url=http://www.52inter.net/images/upload/2006/01/20/212116.rar]212116.rar[/url]