如何删除ini文件中的某一项section和key?

bohut 2003-10-20 01:54:44
如何删除ini文件中的某一项section和key?
...全文
128 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿甘 2003-10-20
  • 打赏
  • 举报
回复
以利用下面函数写ini文件为例:
BOOL WritePrivateProfileString(
LPCTSTR lpAppName, // section name
LPCTSTR lpKeyName, // key name 如果赋值为NULL,则section整个删除,包括子项
LPCTSTR lpString, // string to add //如果为NULL,则删除这个key
LPCTSTR lpFileName // initialization file
);
PrintDefineFont() 功能定义打印作业使用的字体,对每个打印作业PowerBuilder支持八种字体。 语法PrintDefineFont(printjobnumber,fontnumber,facename,height,weight,fontpitch,fontfamily, italic,underline) 参数printjobnumber:用PrintOpen()函数打开的打印作业号fontnumber:指定赋给当前定义字体的编号,有效值在1到8之间 facename:string类型,指定字体名称,该字体应该是你的打印机支持的字体,比如“宋体”height:Integer类型,使用正值指定字体的高度,以千分之一英寸为单位;使用负值指定字体点数,比如,-18代表18点。一般来说,使用点数更精确些weight:指定字体的磅数,正常字体为400磅,粗体为700磅fontpitch:FontPitch枚举类型,指定字体标准。有效取值为:Default! - 缺省值;Fixed! - 固定形式;Variable! - 可变形式fontfamily:FontFamily枚举类型,指定字体系列。有效取值为:AnyFont!、Decorative!、Modern!、Roman!、Script!、Swiss!italic:boolean类型,指定是否使用斜体样式。有效取值为:TRUE - 使用斜体样式;FALSE - 不使用斜体样式。缺省值为FALSEunderline:boolean类型,指定是否加下划线。有效取值为:TRUE - 加下划线;FALSE - 不加下划线。缺省值为FALSE返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,PrintDefineFont()函数返回NULL。用法在一个打印作业,应用程序能够最多同时定义8种字体。当应用程序需要使用更多的字体时,可以在使用了某个字体号输出内容后使用PrintDefineFont()函数将该字体号对应的字体更换为其它字体。 -------------------------------------------------------------------------------- PrintLine() 功能在当前打印页上绘出指定厚度的一条线。 语法PrintLine ( printjobnumber, x1, y1, x2, y2, thickness ) 参数printjobnumber:用PrintOpen()函数打开的打印作业号x1:integer类型,指定直线起点的x坐标,以千分之一英寸为单位y1:integer类型,指定直线起点的y坐标,以千分之一英寸为单位x2:integer类型,指定直线终点的x坐标,以千分之一英寸为单位y2:integer类型,指定直线终点的y坐标,以千分之一英寸为单位thickness:integer类型,指定直线的厚度,以千分之一英寸为单位返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,PrintLine()函数返回NULL。用法应用程序执行了PrintLine()函数后,该函数并不改变打印光标的位置。 -------------------------------------------------------------------------------- PrintOpen() 功能启动打印作业并返回作业号。 语法PrintOpen ( { jobname } ) 参数jobname:string类型,可选项,指定要打开打印作业的名称,该名称将显示在打印管理器窗口返回值Long。函数执行成功时返回打印作业号,发生错误时返回-1。如果任何参数的值为NULL,PrintOpen()函数返回NULL。用法应用程序执行PrintOpen()函数后,启动新的打印作业并走纸到下一页,同时将打印机缺省字体设置为该打印作业的字体。打印光标的位置位于打印区的左上角。其它同组的打印函数使用PrintOpen()函数返回的作业号来标识作业。需要注意的是,使用PrintOpen()函数打开打印作业、使用同组的其它函数完成打印任务后,必须使用PrintClose()关闭打印作业,或根据需要使用PrintCancel()函数取消打印作业。 -------------------------------------------------------------------------------- PrintOval() 功能在指定位置以指定线宽绘制椭圆或圆。 语法PrintOval ( printjobnumber, x, y, width, height, thickness ) 参数printjobnumber:用PrintOpen()函数打开的打印作业号x:integer类型,指定椭圆或圆外形框左上角的x坐标,以千分之一英寸为单位y:integer类型,指定椭圆或圆外形框左上角的y坐标,以千分之一英寸为单位width:integer类型,指定椭圆或圆外形框的宽度,以千分之一英寸为单位height:integer类型,指定椭圆或圆外形框的高度,以千分之一英寸为单位thickness:integer类型,指定椭圆或圆外边线的厚度,以千分之一英寸为单位返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,PrintOval()函数返回NULL。用法应用程序执行了PrintOval()函数后,该函数并不改变打印光标的位置。PrintOval()函数绘出的椭圆或圆是实心的,也就是说,执行该函数后,椭圆或圆下面的文字或图像将完全被覆盖。如果想在椭圆或圆输出文字或图形,那么应用程序应该首先绘制椭圆或圆,然后使用其它函数在椭圆或圆输出文字或图形。 -------------------------------------------------------------------------------- PrintPage() 功能将当前页发送给打印机或打印池并在当前打印作业启动一个新的打印页。 语法PrintPage ( printjobnumber ) 参数printjobnumber:用PrintOpen()函数打开的打印作业号返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,PrintPage()函数返回NULL。 -------------------------------------------------------------------------------- PrintRect() 功能在指定位置以指定线宽打印矩形。 语法PrintRect ( printjobnumber, x, y, width, height, thickness ) 参数printjobnumber:用PrintOpen()函数打开的打印作业号x:integer类型,指定矩形左上角的x坐标,以千分之一英寸为单位y:integer类型,指定矩形左上角的y坐标,以千分之一英寸为单位width:integer类型,指定矩形的宽度,以千分之一英寸为单位height:integer类型,指定矩形的高度,以千分之一英寸为单位thickness:integer类型,指定矩形边线的厚度,以千分之一英寸为单位返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,PrintRect()函数返回NULL。用法应用程序执行了PrintRect()函数后,该函数并不改变打印光标的位置。PrintRect()函数绘出实心的矩形,也就是说,执行该函数后,矩形下面的文字或图像将完全被覆盖。如果想在矩形输出文字或图形,那么应用程序应该首先绘制矩形,然后使用其它函数在矩形输出文字或图形。 -------------------------------------------------------------------------------- PrintRoundRect() 功能在指定位置以指定线宽打印圆角矩形。 语法PrintRoundRect(printjobnumber,x,y,width,height,xradius,yradius,thickness) 参数printjobnumber:用PrintOpen()函数打开的打印作业号x:integer类型,指定圆角矩形左上角的x坐标,以千分之一英寸为单位y:integer类型,指定圆角矩形左上角的y坐标,以千分之一英寸为单位width:integer类型,指定圆角矩形的宽度,以千分之一英寸为单位height:integer类型,指定圆角矩形的高度,以千分之一英寸为单位xradius:integer类型,指定圆角矩形圆角部分的x半径,以千分之一英寸为单位yradius:integer类型,指定圆角矩形圆角部分的y半径,以千分之一英寸为单位thickness:integer类型,指定圆角矩形边线的厚度,以千分之一英寸为单位返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,PrintRoundRect()函数返回NULL。用法应用程序执行了PrintRoundRect()函数后,该函数并不改变打印光标的位置。PrintRoundRect()函数绘出实心的圆角矩形,也就是说,执行该函数后,圆角矩形下面的文字或图像将完全被覆盖。如果想在圆角矩形输出文字或图形,那么应用程序应该首先绘制圆角矩形,然后使用其它函数在圆角矩形输出文字或图形。 -------------------------------------------------------------------------------- PrintScreen() 功能在打印作业打印屏幕图像。 语法PrintScreen ( printjobnumber, x, y {, width, height } ) 参数printjobnumber:用PrintOpen()函数打开的打印作业号x:integer类型,指定要打印屏幕图像左上角在打印页上的x坐标,以千分之一英寸为单位y:integer类型,指定要打印屏幕图像左上角在打印页上的y坐标,以千分之一英寸为单位width:integer类型,可选项,指定屏幕图像的打印宽度,以千分之一英寸为单位。如果省略了该参数,那么PowerBuilder按屏幕的原始宽度打印屏幕图像。如果指定了该参数,必须同时指定height参数height:integer类型,可选项,指定屏幕图像的打印高度,以千分之一英寸为单位。如果省略了该参数,那么PowerBuilder按屏幕的原始高度打印屏幕图像返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,PrintScreen()函数返回NULL。 -------------------------------------------------------------------------------- PrintSend() 功能直接向打印机发送任意字符串,通常用于发送打印机的控制代码。 语法PrintSend ( printjobnumber, string {, zerochar } ) 参数printjobnumber:用PrintOpen()函数打开的打印作业号string:string类型,指定发送到打印机的字符串。在该字符串,使用非打印字符的ASCII码值表示非打印字符zerochar:integer类型,可选项,指定在string参数用于表示数值0的ASCII码值。有效取值在1到255之间返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,PrintSend()函数返回NULL。用法应用程序使用PrintSend()函数可以直接向打印机发送控制序列(换码序列),比如,设置打印文字的浓淡、打印页的四周空白等。不同类型的打印机使用不同的控制序列,你需要翻一翻你的打印机手册。由于PowerBuilder使用数值0(即ASCII码为0的字符)结束每个字符串,因此,如果打印控制序列包含了数值0,应用程序需要使用其它字符在参数string替代数值0,并用zerochar参数指明这个替代字符。一般来说,应该选择一个打印机控制序列不使用的字符作为0值字符的替代字符。通常情况下,按下述次序组织打印作业:1. 使用PrintOpen()函数打开打印作业2. 使用PrintSend()函数设置打印机特性,比如打印方向、四周空白等3. 使用PrintDefineFont()和PrintSetFont()函数设置该打印作业使用的字体4. 使用该组的其它函数打印输出文字或图形5. 执行PrintClose()函数关闭打印作业 -------------------------------------------------------------------------------- PrintSetFont() 功能设置当前打印作业使用的字体。 语法PrintSetFont ( printjobnumber, fontnumber ) 参数printjobnumber:用PrintOpen()函数打开的打印作业号fontnumber:指定该打印作业使用字体的字体编号,该编号与PrintDefineFont()函数定义的编号应该对应,字体编号的有效取值在1到8之间,0表示使用打印机的缺省字体返回值Integer。函数执行成功时返回当前字体的高度,发生错误时返回-1。如果任何参数的值为NULL,PrintSetFont()函数返回NULL。 -------------------------------------------------------------------------------- PrintSetSpacing() 功能设置行间距因子,打印函数将使用该因子来决定行间距。 语法PrintSetSpacing ( printjobnumber, spacingfactor ) 参数printjobnumber:用PrintOpen()函数打开的打印作业号spacingfactor:指定行间距因子,用字符高度的倍数表示,缺省值为1.2返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,PrintSetSpacing()函数返回NULL。用法在PowerBuilder应用程序,行间距与字符的高度成正比,缺省值为字符高度的1.2倍。当Print组函数生成新行时,系统自动把打印光标的x坐标位置设置为0,y坐标位置在原有基础上增加当前行距值。使用PrintSetSpacing()函数可以改变当前打印作业的行距。 -------------------------------------------------------------------------------- PrintSetup() 功能打开打印机设置对话框。 语法PrintSetup ( ) 返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,PrintSetup()函数返回NULL。用法当系统安装了多种打印机时,在Windows 95PrintSetup()函数打开如图2-1所示的对话框,单击“Setup”按钮设置打印机各种特性。如果系统只有一个打印机,则直接打开该打印机的打印设置对话框。需要注意的是,在Windows95和Windows NT 3.51以后的版本,使用PrintSetup()函数设置的打印机设置只对当前应用起作用,并不影响其它应用的打印机设置。对Windows 3.1来说,使用PrintSetup()函数设置的打印机设置影响系统的所有应用。 -------------------------------------------------------------------------------- PrintText() 功能在指定位置打印一行文本。 语法PrintText ( printjobnumber, string, x, y {, fontnumber } ) 参数printjobnumber:用PrintOpen()函数打开的打印作业号string:string类型,指定要打印的文本x:integer类型,指定文本开始打印位置的x坐标,以千分之一英寸为单位y:integer类型,指定文本开始打印位置的y坐标,以千分之一英寸为单位fontnumber:可选参数,指定打印文本使用的字体号,该编号由PrintDefineFont()函数确定。省略该参数时,以打印作业的当前字体打印文本返回值Integer。函数执行成功时返回文本打印后打印光标的x位置,即参数x的值加上打印文本的宽度。发生错误时返回-1。如果任何参数的值为NULL,PrintText()函数返回NULL。 -------------------------------------------------------------------------------- PrintWidth() 功能确定一个字符串在指定打印作业按当前字体所占的宽度,以千分之一英寸为单位。 语法PrintWidth ( printjobnumber, string ) 参数printjobnumber:用PrintOpen()函数打开的打印作业号string:string类型,指定要决定其打印宽度的字符串返回值Integer。函数执行成功时返回按当前字体计算的字符串打印宽度,以千分之一英寸为单位,发生错误时返回-1。如果任何参数的值为NULL,PrintWidth()函数返回NULL。 -------------------------------------------------------------------------------- PrintX() 功能返回打印光标的x坐标位置。 语法PrintX ( printjobnumber ) 参数printjobnumber:用PrintOpen()函数打开的打印作业号返回值Integer。函数执行成功时返回打印光标的x坐标位置,以千分之一英寸为单位,发生错误时返回-1。如果任何参数的值为NULL,PrintX()函数返回NULL。 -------------------------------------------------------------------------------- PrintY() 功能返回打印光标的y坐标位置。 语法PrintY ( printjobnumber ) 参数printjobnumber:用PrintOpen()函数打开的打印作业号返回值Integer。函数执行成功时返回打印光标的y坐标位置,以千分之一英寸为单位,发生错误时返回-1。如果任何参数的值为NULL,PrintY()函数返回NULL。  LibraryCreate() 功能创建一个空的PowerBuilder应用库,并可根据需要在创建应用库的同时添加库注解。 语法LibraryCreate ( libraryname{, comments } ) 参数libraryname:string类型,指定要创建应用库的名称,可以带上路径,不带路径时在当前目录下创建应用库comments:string类型,可选项,指定要创建的应用库的注解返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,LibraryCreate()函数返回NULL。用法LibraryCreate()函数在指定路径下创建一个空的PowerBuilder应用库(PBL)。如果在指定应用库名称时没有指定文件的扩展名,那么该函数自动加上扩展名.PBL。 -------------------------------------------------------------------------------- LibraryDelete() 功能删除应用库库文件或应用库的数据窗口对象。 语法LibraryDelete ( libraryname{, objectname, objecttype } ) 参数libraryname:string类型,指定库名,可以带上路径,不带路径时在系统搜索路径下查找应用库objectname:string类型,可选项,指定要从库删除的数据窗口对象的名称objecttype:LibImportType类型,可选项,指定要删除对象的类型,目前仅支持ImportDataWindow!返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,LibraryDelete()函数返回NULL。 用法执行LibraryDelete()函数时,如果未指定后两个参数,那么该函数删除指定的应用库;如果指定了后两个参数,那么该函数删除指定应用库指定的数据窗口对象。LibraryDelete()函数只能删除应用库的数据窗口对象,如果想删除其它对象,那么只能在PowerBuilder开发环境使用库管理画笔(Library Painter)来实现了。 -------------------------------------------------------------------------------- LibraryDirectory() 功能 得到应用库指定对象的信息列表,内容包括对象名称、最近修改日期和时间、以及对象的注释。 语法LibraryDirectory ( libraryname, objecttype ) 参数libraryname:string类型,指定PowerBuilder应用库的名称,如果名称未指定路径,那么该函数根据操作系统标准的文件搜索路径查找指定文件objecttype:LibDirType枚举类型,指定希望函数列出的对象类型,有效取值请参看用法。返回值String。函数执行成功时返回一个字符串,每个对象占用一行,行各信息之间使用Tab字符(~t)分隔。行信息格式为:对象名~t修改日期/时间~t注释~n发生错误时函数返回空字符串("")。如果任何参数的值为NULL,LibraryDirectory()函数返回NULL。 用法LibraryDirectory()函数的objecttype参数是个LibDirType枚举类型的量,其有效取值为:DirAll!得到所有对象的信息DirApplication!得到应用对象的信息DirDataWindow!得到所有数据窗口对象的信息DirFunction!得到所有函数对象的信息DirMenu!得到所有菜单对象的信息DirPipeline!得到所有数据管道对象的信息DirProject!得到工程对象的信息DirQuery!得到所有查询对象的信息DirStructure!得到所有结构对象的信息DirUserObject!得到所有用户对象的信息DirWindow!得到所有窗口对象的信息使用LibraryDirectory()函数得到指定对象的名称、修改日期/时间以及可能的注释后,应用程序既可以使用Pos()函数进行定位和字符串分割,也可以使用数据窗口的ImportString()函数将结果显示在数据窗口。 -------------------------------------------------------------------------------- LibraryExport() 功能从指定应用库以对象的语法定义格式卸出对象。 语法LibraryExport ( libraryname, objectname, objecttype ) 参数libraryname:string类型,指定要移出对象的应用库的名称,如果名称未指定路径,那么该函数根据操作系统标准的文件搜索路径查找指定文件objectname:string类型,指定要移出对象的名称objecttype :LibExportType枚举类型,指定要移出对象的类型,具体取值请参看用法返回值String。函数执行成功时返回指定对象的语法,该语法与使用库管理画笔(Library Painter)移出对象时的语法相同,区别在于LibraryExport()函数省略了移出语法的头部。如果发生错误,则函数返回空字符串("")。如果任何参数的值为NULL,LibraryExport()函数返回NULL。 用法LibraryExport()的objecttype参数的可能取值为: ExportApplication!应用对象ExportDataWindow!数据窗口对象ExportFunction!函数对象ExportMenu!菜单对象ExportPipeline!数据管道对象ExportProject!工程对象ExportQuery!查询对象ExportStructure!结构对象ExportUserObject!用户对象ExportWindow!窗口对象 -------------------------------------------------------------------------------- LibraryImport() 功能将以语法格式表示的数据窗口对象装入指定的应用库。 语法LibraryImport(libraryname,objectname,objecttype,syntax,errors{,comments } ) 参数libraryname:string类型,指定要移入对象的应用库的名称,如果名称未指定路径,那么该函数根据操作系统标准的文件搜索路径查找指定文件objectname:string类型,指定要移入的数据窗口对象的名称 objecttype:LibImportType枚举类型,指定要移入对象的类型,目前该函数只支持ImportDataWindow!,表示只能向应用库移入数据窗口对象syntax:string类型,指定要移入数据窗口对象的语法errors:string类型变量,用于在发生错误时保存出错信息comments:string类型,可选项,用于指定移入对象的注解返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,LibraryImport()函数返回NULL。 用法当应用程序在运行过程动态创建数据窗口对象后,可以使用LibraryImport()函数把动态数据窗口对象的定义保存到应用库,以后就可以直接使用该对象了。 FileClose() 功能关闭先前用FileOpen()函数打开的文件。 语法FileClose ( fileno ) 参数fileno:integer,指定要关闭文件文件句柄,该句柄使用FileOpen()函数打开文件时得到返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果fileno参数的值为NULL,那么FileClose()函数返回NULL。 -------------------------------------------------------------------------------- FileDelete() 功能删除指定的文件。 语法FileDelete ( filename ) 参数filename:string类型,指定要删除文件文件名,其可以包含路径返回值Boolean。函数执行成功时返回TRUE,发生错误时返回FALSE。如果filename参数的值为NULL,那么FileDelete()函数返回NULL。 -------------------------------------------------------------------------------- FileExists() 功能检查指定的文件是否存在。 语法FileExists ( filename ) 参数filename:string类型,指定要检查存在性的文件文件名,其可以包含路径返回值Boolean。如果指定文件存在时返回TRUE,不存在时返回FALSE。如果filename参数的值为NULL,那么FileExists()函数返回NULL。用法如果filename参数指定的文件被另一个应用加锁锁住,那么FileExists()函数也将返回FALSE。 -------------------------------------------------------------------------------- FileLength() 功能得到指定文件的长度(以字节为单位)。 语法FileLength ( filename ) 参数filename:string类型,指定要得到其长度的文件文件名,其可以包含路径返回值Long。函数执行成功时返回指定文件的长度(以字节为单位)。如果指定的文件不存在,函数返回-1。如果filename参数的值为NULL,那么FileLength()函数返回NULL。 -------------------------------------------------------------------------------- FileOpen() 功能以指定的读写方式打开指定的文件,同时返回该文件的句柄。 语法FileOpen(filename{,filemode{,fileaccess{,filelock{,writemode,{creator,filetype}}}}}) 参数filename:string类型,指定要打开文件的名称,其可以包含路径 filemode:FileMode枚举类型,可选项,指定文件打开方式。有效取值为:?LineMode! - 缺省值,行模式;?StreamMode! - 流模式fileaccess:FileAccess枚举类型,可选项,指定文件访问方式。有效取值为:?Read! - 缺省值,只读方式,这样打开的文件只能进行读操作;?Write! - 只写方式,这样打开的文件只能进行写操作?filelock:FileLock枚举类型,可选项,指定文件加锁方式。有效取值为:n LockReadWrite! - 缺省值,只有打开该文件的用户能够访问该文件,其它用 户对该文件的访问均被拒绝;n LockRead! - 只有打开该文件的用户能够读该文件,但其它任何用户均可写该文件;n LockWrite! - 只有打开该文件的用户能够写该文件,但其它任何用户均可读该文件;n Shared! - 所有用户均可读写该文件writemode:WriteMode枚举类型,可选项,当fileaccess参数指定为Write!时,该参数指定在指定文件已经存在时数据的添加方式。有效取值为:?Append! - 缺省值,将数据添加到原文件尾部;?Replace! - 覆盖原有数据creator:可选项,用于Macintosh机,使用四个字符的字符串指定文件的创建者。指定该参数后,必须同时指定filetype参数filetype:可选项,用于Macintosh机,使用四个字符的字符串指定文件类型返回值Integer。函数执行成功时返回打开文件的句柄,随后的文件操作函数利用该句柄完成对文件的操作。发生错误时函数返回-1。如果任何参数的值为NULL,那么FileOpen()函数返回NULL。用法当文件以行模式打开时,每执行一次FileRead()函数读取一行数据;每执行一次FileWrite()函数,该函数自动在写出的字符串末尾增加一个回车(CR)换行(LF)符(这是应用程序在Windows 系统运行时的情况,在UNIX下只加一个换行字符)。当文件以流模式打开时,执行一次FileRead()函数读取32,765个字节的数据,如果余下数据没有这么多,那么FileRead()函数就读取所有余下的数据;执行一次FileWrite()函数时,最多可写入32,765个字节的数据,并且不添加回车换行字符。当文件以写方式使用FileOpen()函数打开时,如果指定的文件不存在,那么FileOpen()函数创建该文件。 -------------------------------------------------------------------------------- FileRead() 功能从指定文件读取数据。 语法FileRead ( fileno, variable ) 参数fileno:integer类型,指定文件句柄(由FileOpen()函数得到)variable:string或blob类型的变量,用于保存读取的数据返回值Integer。函数执行成功时返回读取的字符数或字节数;如果在读取任何字符前读到了文件结束符(EOF),则FileRead()函数返回-100;当指定文件以行模式打开时,如果在读取任何字符之前遇到了回车(CR)或换行(LF)字符,则FileRead()函数返回0。如果发生其它错误,FileRead()函数返回-1。如果任何参数的值为NULL,那么FileRead()函数返回NULL。用法当指定文件以行模式(Line Mode)打开时,FileRead()函数一次读取一行数据,并把它保存到参数variable,然后跳过行结束符(回车换行符,操作系统不同,使用的字符也不同),把文件指针移动到下一行的起始位置。当文件以流模式(Stream Mode)打开时,FileRead()函数或一直读取到文件结尾,或读取32,765字节的数据,决定于两者哪个数据长度更短些。 -------------------------------------------------------------------------------- FileSeek() 功能将文件指针移动到指定位置。读写文件时相应函数会自动移动文件指针。 语法FileSeek ( fileno, position, origin ) 参数fileno: integer类型,指定文件句柄(由FileOpen()函数得到) position:long类型,指定相对于origin参数指定位置的新位置偏移量,以字节为单位 origin:SeekType枚举类型,指定从哪里开始移动文件指针,即指针移动的基准。有效取值为:?FromBeginning! - 缺省值,从文件开头移动指针;?FromCurrent! - 从当前位置移动文件指针;?FromEnd! - 从文件结尾处移动文件指针返回值Long。函数执行成功时返回指针移动后的指针位置。如果任何参数的值为NULL,那么FileSeek()函数返回NULL。 -------------------------------------------------------------------------------- FileWrite() 功能向指定文件写数据。 语法FileWrite (fileno , variable ) 参数fileno:integer类型,指定文件句柄(由FileOpen()函数得到)variable:string或blob类型,其值将写入fileno参数指定的文件返回值Integer。函数执行成功时返回写入文件的字符或字节数,发生错误时返回-1。如果任何参数的值为NULL,那么FileWrite()函数返回NULL。用法FileWrite()函数从当前文件指针开始写入指定数据,写入之后,将文件指针调整到刚刚写入数据的下一个字节位置。当文件以writemode参数设置为Replace!方式打开时,文件指针最初位于文件的开头位置;当文件以writemode参数设置为Append!方式打开时,文件指针最初位于文件的结尾位置。当文件以行模式打开时,执行FileWrite()函数时,该函数自动在每次写入数据的后面加上回车换行符,并把文件指针移动到回车换行符后面。当文件以流模式打开时,FileWrite()函数一次最多写入32,765个字节。如果variable参数数据的长度超过了32,765个字节,那么FileWrite()函数只向文件写入前32,765个字符并返回32,765。 -------------------------------------------------------------------------------- GetFileOpenName() 功能显示打开文件对话框,让用户选择要打开的文件。 语法GetFileOpenName(title,pathname,filename{,extension{,filter}}) 参数title:string类型,指定对话框的标题pathname:string类型变量,用于保存该对话框返回的文件路径及文件名filename:string类型变量,用于保存该对话框返回的文件名extension:string类型,可选项,使用1到3个字符指定缺省的扩展文件名 filter:string类型,可选项,其值为文件名掩码,指定显示在该对话框的列表框供用户选择的文件名满足的条件(比如*.*,*.TXT,*.EXE等)返回值Integer。函数执行成功时返回1;当用户单击了对话框上的“Cancel”按钮时函数返回0;发生错误时返回-1。如果任何参数的值为NULL,那么GetFileOpenName()函数返回NULL。 用法filter参数的格式为:description,*. ext缺省值为:"All Files (*.*),*.*"其,description说明扩展名的意义,比如“所有文件”、“文本文件”等。你可以根据需要指定在打开文件对话框显示的文件名类型。当需要指定多种文件类型时,各类型之间使用逗号分隔,例如:"PIF 文件, *.PIF, 批处理文件, *.BAT"需要注意的是,该函数只是得到一个文件名,而并没有打开文件,需要打开文件时,依然需要使用FileOpen()函数。 -------------------------------------------------------------------------------- GetFileSaveName() 功能显示保存文件对话框,让用户选择要保存到的文件。 语法GetFileSaveName(title,pathname,filename{,extension{,filter}}) 参数title:string类型,指定对话框的标题pathname:string类型变量,用于保存该对话框返回的文件路径及文件名filename:string类型变量,用于保存该对话框返回的文件名extension:string类型,可选项,使用1到3个字符指定缺省的扩展文件名filter:string类型,可选项,其值为文件名掩码,指定显示在该对话框的列表框供用户选择的文件名满足的条件(比如*.*,*.TXT,*.EXE等)返回值Integer。函数执行成功时返回1;当用户单击了对话框上的“Cancel”按钮时函数返回0;发生错误时返回-1。如果任何参数的值为NULL,那么GetFileSaveName()函数返回NULL。 用法filter参数的格式为:description,*. ext缺省值为:"All Files (*.*),*.*"其,description说明扩展名的意义,比如“所有文件”、“文本文件”等。你可以根据需要指定在打开文件对话框显示的文件名类型。当需要指定多种文件类型时,各类型之间使用逗号分隔,例如:"PIF 文件, *.PIF, 批处理文件, *.BAT"需要注意的是,该函数只是得到一个文件名,而并没有打开文件,需要打开文件时,依然需要使用FileOpen()函数。 GetCommandDDE() 功能得到DDE客户应用发送的命令。 语法GetCommandDDE ( string ) 参数string:string类型的变量,用于保存DDE客户应用发送的命令返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果string参数的值为NULL, GetCommandDDE()函数返回NULL。用法当DDE客户应用向DDE服务器应用发送一条命令时,这个动作将触发DDE服务器应用活动窗口的RemoteExec事件,在这个事件的事件处理程序,可以使用GetCommandDDE()函数得到DDE客户应用发送的命令。 -------------------------------------------------------------------------------- GetCommandDDEOrigin() 功能确定哪一个DDE客户应用向服务器发送了命令。 语法GetCommandDDEOrigin ( applstring ) 参数applstring:string变量,用于保存发送命令的DDE客户应用的名称返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果applstring参数的值为 NULL,GetCommandDDEOrigin()函数返回NULL。 -------------------------------------------------------------------------------- GetDataDDE() 功能得到DDE客户应用发送的数据。 语法GetDataDDE ( string ) 参数string:string类型变量,用于保存接收到的数据返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL, GetDataDDE()函数返回NULL。 -------------------------------------------------------------------------------- GetDataDDEOrigin()功能确定哪个DDE客户应用发送了数据。 语法GetDataDDEOrigin ( applstring, topicstring, itemstring ) 参数applstring:string类型变量,用于保存客户应用的名称topicstring:string类型变量,用于保存主题(比如,在Excel,主题可以是REGION.XLS)itemstring:string类型变量,用于保存数据项标识(比如,在Excel,数据项标识可能是R1C2)返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,GetDataDDEOrigin()函数返回NULL。 -------------------------------------------------------------------------------- RespondRemote() 功能向客户端应用指明最近的命令或数据是否已经接收。 语法RespondRemote ( boolean ) 参数boolean:其值为boolean量的逻辑表达式,TRUE表示接收先前收到的命令或数据,FALSE表示不接收先前收到的命令或数据返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果boolean参数的值为NULL,RespondRemote()函数返回NULL。 -------------------------------------------------------------------------------- SetDataDDE() 功能向DDE客户应用发送数据。 语法SetDataDDE ( string {, applname, topic, item } ) 参数string:指定要发送到DDE客户应用的数据applname:string类型,可选项,指定接收数据的客户应用的DDE名称topic:string类型,可选项,指定基础数据组item:string类型,可选项,指定基础数据组的数据项返回值Integer。函数执行成功时返回1,发生错误时返回下述值之一:-1函数调用的环境不对-2数据未被接收如果任何参数的值为NULL,SetDataDDE()函数返回NULL。 -------------------------------------------------------------------------------- StartServerDDE() 功能将当前应用设置为DDE服务器。 语法StartServerDDE ( { windowname, } applname, topic {, item } ) 参数windowname:可选项,指定服务器窗口名,缺省值为当前窗口applname:当前应用的DDE名称topic:string类型,指定DDE客户应用能够引用的基本数据组item:由逗号(,)分隔的一个或多个字符串,指定服务器应用支持的数据项返回值Integer。函数执行成功时返回1,发生错误时返回-1,表示当前应用已经设置为DDE服务器。如果任何参数的值为NULL,StartServerDDE()函数返回NULL。 -------------------------------------------------------------------------------- StopServerDDE() 功能停止当前应用的DDE服务器功能。执行该函数后,发给该应用的任何DDE客户应用请求都将失败。 语法StopServerDDE ( { windowname, } applname, topic ) 参数windowname:可选项,指定要关闭服务器功能的服务器窗口名,缺省值为当前窗口,如果当前应用有多个服务器窗口,那么必须指定该参数applname:当前应用的DDE名称topic:string类型,应该与StartServerDDE()对应参数相同返回值Integer。函数执行成功时返回1,发生错误时返回-1,表示当前应用未曾作为DDE服务器启动。如果任何参数的值为NULL,StopServerDDE()函数返回NULL。 CPU() 功能得到自当前应用程序启动后开始CPU所消耗的时间,以毫秒为单位。 语法CPU() 返回值Long。返回自当前应用程序启动后开始CPU所消耗的时间,以毫秒为单位。 -------------------------------------------------------------------------------- Idle() 功能该函数在用户每次活动(例如,按键盘、移动鼠标等)后重置定时器,n秒后触发应用对象的Idle事件。 语法Idle ( n ) 参数n:指定空闲时间间隔,以秒为单位。该参数的值设置为0时,停止空闲检测,不再触发应用对象的Idle事件返回值Integer。函数执行成功时返回1,此时启动定时器。如果不能启动定时器或定时器未启动而n的值指定为0时,函数返回-1。如果任何参数的值为NULL,Idle()函数返回NULL。用法利用Idle()函数,应用程序可以构造自己的屏幕保护程序,避免安全数据的泄露。当使用Idle()函数已经启动了定时器后,如果再次以非0参数调用Idle()函数,那么该函数重设时间间隔,但并不启动新的定时器。Idle()函数启动定时器后,如果在指定的时间间隔(从用户最近一次操作算起)内没有操作应用程序,那么就触发应用对象的Idle事件,在这个事件可以编写关闭窗口、退出数据库登录等一系列代码,然后使用Restart()函数重新启动应用程序,起到保密的目的。发生下述任何情况时,系统自动重置定时器(即重新开始计时):n 用户在该应用程序的任何窗口内移动鼠标或单击鼠标(双击鼠标时首先触发单击事件)n 在该应用程序的某个窗口是当前窗口时用户按下了任意一个或多个键n 在该应用程序的窗口最小化时,用户在该应用的图标上单击鼠标或移动鼠标n 在该应用程序的窗口最小化并且该应用程序是当前应用程序(应用名称被加亮显示)时,用户按了任何按键n 可视数据窗口检索数据时引起的编辑控件(指漂浮在数据窗口当前行/列上的编辑控件)重绘操作 -------------------------------------------------------------------------------- Timer() 功能 在指定的时间间隔内反复触发指定窗口的定时器事件。 语法Timer ( interval {, windowname } ) 参数interval:指定两次触发Timer事件之间的时间间隔,有效值在0到65之间。如果该参数的值指定为0,那么关闭定时器,不再触发指定窗口的Timer事件windowname:窗口名,指定时间间隔到时要触发哪个窗口的Timer事件。省略该参数时,触发当前窗口的Timer事件返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,Timer()函数返回NULL。用法使用Timer()函数可以周期性地触发指定窗口的Timer事件,这样,每当时间间隔过去时,应用程序都可以完成一些周期性的工作,比如绘制简单动画等。将Timer()的interval参数设置为非0值时启动定时器并开始计时;将该函数的interval参数设置为0时关闭定时器,终止计时任务。需要注意的是,在Microsoft Windows系统,该函数能够计时的最小时间间隔为0.055秒(约1/18秒),如果把interval参数的值设置小于0.055,那么该定时器将每隔0.055秒触发一次窗口的Timer事件。Microsoft Windows 3.x最多只支持系统同时启动16个定时器。 RegistryDelete() 功能删除Windows系统注册库的一个键或键的某个值。 语法RegistryDelete ( key, valuename ) 参数key:string类型,指定键名,将删除该键或删除该键的某个值valuename:string类型,指定要删除的值的名称。如果想删除键、键的值、以及其下的所有子键,那么将该参数指定为空字符串返回值Integer。函数执行成功时返回1,发生错误时返回-1。用法为了唯一地标识某个键,在key参数,可以从根键开始依次指定各级父键,各键之间使用反斜杠(\)分隔。 -------------------------------------------------------------------------------- RegistryGet() 功能从系统注册库得到指定键的值。 语法RegistryGet ( key, valuename, valuetype, valuevariable ) 参数key:string类型,指定键名valuename:string类型,指定要访问值的名称。每个键可以有一个未命名的值和多个命名的值。要访问未命名的值,把该参数指定为空字符串("")valuetype:RegistryValueType枚举类型,指定值的数据类型。有效取值请参看用法valuevariable:用于保存键值的变量,其数据类型应该与valuetype参数指定的类型相匹配返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果valuevariable的数据类型与valuetype参数指定的类型不匹配,将引发运行错误。 用法valuetype的可能取值为:RegString!以空字符结束的字符串RegExpandString!以空字符结束的字符串,其包括了对环境变量的非扩展应用RegBinary!二进制数据ReguLong!32位数据ReguLongBigEndian!32位大数据RegLink!Unicode符号链RegMultiString!动态字符串数组为了唯一地标识某个键,在key参数,可以从根键开始依次指定各级父键,各键之间使用反斜杠(\)分隔。 -------------------------------------------------------------------------------- RegistryKeys() 功能从系统注册库得到指定键的有效子键。 语法RegistryKeys ( key, subkeys ) 参数key:string类型,指定键名subkeys:字符串数组变量,用于保存各子键返回值Integer。函数执行成功时返回1,发生错误时返回-1。用法在subkeys参数可以使用定长数组,也可以使用动态数组。使用动态数组时,数组的上界反映了能够得到的子键个数。当使用定长数组时,其数组元素个数必须足够多,保证能够容纳所有子键,但是,在具体得到子键之前,没有办法能够预先知道实际子键个数。为了唯一地标识某个键,在key参数,可以从根键开始依次指定各级父键,各键之间使用反斜杠(\)分隔。 -------------------------------------------------------------------------------- RegistrySet() 功能在系统注册库设置或创建指定键。 语法RegistrySet ( key, valuename, valuetype, value ) 参数key:string类型,指定键名valuename:string类型,指定要访问值的名称。每个键可以有一个未命名的值和多个命名的值。要访问未命名的值,把该参数指定为空字符串("")。如果注册库不存在指定值名,该函数将创建新的值名valuetype:RegistryValueType枚举类型,指定值的数据类型。有效取值请参看用法value:要设置的值,其数据类型应该与valuetype参数指定的类型相匹配返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果valuevariable的数据类型与valuetype参数指定的类型不匹配,将引发运行错误。用法valuetype的可能取值为:RegString!以空字符结束的字符串RegExpandString!以空字符结束的字符串,其包括了对环境变量的非扩展应用RegBinary!二进制数据ReguLong!32位数据ReguLongBigEndian!32位大数据RegLink!Unicode符号链RegMultiString!动态字符串数组为了唯一地标识某个键,在key参数,可以从根键开始依次指定各级父键,各键之间使用反斜杠(\)分隔。 -------------------------------------------------------------------------------- RegistryValues() 功能得到与指定键相关的一组值名。该函数在Windows 3.1无效。 语法RegistryValues ( key, valuename ) 参数key:string类型,指定键名valuename:字符串数组变量,用于保存值名返回值Integer。函数执行成功时返回1,发生错误时返回-1。用法在valuename 参数可以使用定长数组,也可以使用动态数组。使用动态数组时,数组的上界反映了能够得到的值名个数。当使用定长数组时,其数组元素个数必须足够多,保证能够容纳所有值名,但是,在具体得到值名之前,没有办法能够预先知道实际值名个数。为了唯一地标识某个键,在key参数,可以从根键开始依次指定各级父键,各键之间使用反斜杠(\)分隔。  Clipboard() 功能提取或替换Windows系统剪贴板的文本内容。 语法Clipboard ( { string } ) 参数string:string类型,可选项,指定要复制到系统剪贴板上的文本。如果剪贴板上已有内容的话,该文本将取代剪贴板的当前内容返回值String。函数执行成功时,如果剪贴板上包含文本数据,那么函数返回剪贴板的当前内容;如果剪贴板上包含非文本数据(比如位图)或不包含任何数据,那么函数返回空字符串("")。如果string参数的值为NULL,Clipboard()函数返回NULL。用法无论是否指定string参数,Clipboard()都将返回剪贴板的当前内容。当指定string参数时,剪贴板的原有内容被string参数的值取代;省略string参数时,仅仅得到剪贴板的内容。 -------------------------------------------------------------------------------- CommandParm() 功能得到应用程序运行时指定的命令参数。 语法CommandParm ( ) 返回值String。函数执行成功时返回应用程序运行时的命令行参数,函数执行错误或没有命令行参数时函数返回空字符串("")。用法命令行参数是应用程序启动时跟在应用程序名称后面的任何参数,比如,在运行窗口输入了下述命令:MyAppl C:\EMPLOYEE\EMPLIST.TXT那么MyAppl应用程序使用CommandParm()函数得到的命令行参数为:C:\EMPLOYEE\EMPLIST.TXT当应用程序的命令行包含几个参数时,CommandParm()函数作为一个字符串返回所有参数。利用字符串操作函数可以分离各参数。在应用对象的Open事件没有必要执行CommandParm()函数。此时,Open事件的argument参数包含了命令行参数。 -------------------------------------------------------------------------------- DoScript() 功能执行AppleScript程序段,该函数只在Macintosh平台上有效。 语法DoScript ( script, result ) 参数script:string类型,指定要运行的程序段(script)result:string类型,由AppleScript程序段返回的结果信息或出错信息返回值Integer。返回由AppleScript返回的结果代码。如果任何参数的值为NULL,DoScript()函数返回NULL。 -------------------------------------------------------------------------------- GetApplication() 功能得到当前应用对象的句柄,这样你可以查询或设置应用对象的属性(通常用于编写通用代码)。 语法GetApplication ( ) 返回值Application。返回当前应用对象的句柄。 -------------------------------------------------------------------------------- GetEnvironment() 功能得到操作系统、处理器、屏幕显示等与系统相关的信息。 语法GetEnvironment ( environmentinfo ) 参数environmentinfo:Environment对象名,用于保存系统环境信息返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果参数environmentinfo的值为NULL,GetEnvironment()函数返回NULL。用法当开发交叉平台项目时,利用GetEnvironment()函数,应用程序能够得到当前运行的操作系统、使用的CPU类型、操作系统的版本、屏幕的大小以及颜色数等信息,这些信息的具体表示请参阅本书环境对象(Environment Object)的介绍。 -------------------------------------------------------------------------------- GetFocus() 功能确定当前焦点位于哪个控件上。 语法GetFocus ( ) 返回值GraphicObject。函数执行成功时返回当前得到焦点控件的引用,发生错误时返回无效引用。用法应用程序利用IsValid()函数可以检测GetFocus()是否返回有效的控件引用。同时,使用TypeOf()函数可以确定控件的类型。 -------------------------------------------------------------------------------- Post() 功能将指定消息加入到某个窗口的消息队列,这个窗口既可以是PowerBuilder应用的窗口,也可以是其它应用的窗口。 语法Post( handle, messageno, word, long ) 参数handle:long类型,指定窗口的系统句柄,将向该窗口邮寄消息messageno:UnsignedInteger类型,指定要邮寄的消息号 word:long类型,指定与消息一起邮寄的word类参数值。如果messageno参数指定的消息不使用该参数,那么将这个参数的值设置为0long:long类型或string,指定与消息一起邮寄的long型参数值或字符串返回值Boolean。如果任何参数的值为NULL,Post()函数返回NULL。 用法Post()函数用于向窗口发送非PowerBuilder预定义事件的消息,这个窗口可以是PowerBuilder应用的窗口,也可以是其它应用的窗口。Post()函数把发送的消息放置在指定窗口消息队列的尾部,然后返回到应用程序,它并不等待相应事件事件处理程序的执行。这一点与Send()函数不同,Send()函数直接触发指定窗口相应的事件,执行事件处理程序后返回到调用应用。因此,我们说Post()函数采用的是异步方式,Send()函数采用的是同步方式。Post()函数的参数handle指定接收消息的窗口句柄,对PowerBuilder窗口来说,使用Handle()函数可以得到该句柄。对其它应用程序的窗口来说,可以调用系统API函数查找窗口并得到相应窗口的句柄。如果应用程序要邮寄PowerBuilder定义事件(包括预定义事件和用户定义事件),那么使用PostEvent()函数既简单有方便。当应用程序在long参数位置指定一个字符串时,Post()函数复制一个该字符串的副本,然后将副本的地址传送给指定窗口。 -------------------------------------------------------------------------------- ProfileInt() 功能从初始化文件(.ini读取整型设置值。 语法ProfileInt ( filename, section, key, default ) 参数filename:string类型,指定初始化文件的名称,可以包括路径,省略路径时,该函数按操作系统的标准路径搜索指定文件section:string类型,指定要得到的值所在的节(Sectionkey:string类型,指定要得到的值的名称,不用区分大小写default:integer类型,当指定的文件、节名、项目名不存在或不能转换为整数时,函数返回该参数指定的值返回值Integer。函数执行成功时,在指定的文件、节名、项目名不存在任何错误的情况下,函数返回相应项的值;如果指定的文件、节名、项目名不存在或不能转换为整数时,函数返回default参数指定的缺省值。如果发生错误,函数返回-1。如果任何参数的值为NULL,ProfileInt()函数返回NULL。 -------------------------------------------------------------------------------- ProfileString() 功能从初始化文件(.ini读取字符串型设置值。 语法ProfileString ( filename, section, key, default ) 参数filename:string类型,指定初始化文件的名称,可以包括路径,省略路径时,该函数按操作系统的标准路径搜索指定文件section:string类型,指定要得到的值所在的节(Sectionkey:string类型,指定要得到的值的名称,不用区分大小写default:string类型,当指定的文件、节名、项目名不存在时,函数返回该参数指定的值返回值String。函数执行成功时,在指定的文件、节名、项目名不存在任何错误的情况下,函数返回相应项的值;如果指定的文件、节名、项目名不存在,函数返回default参数指定的缺省值。如果发生错误,函数返回空字符串。如果任何参数的值为NULL,ProfileString()函数返回NULL。 -------------------------------------------------------------------------------- Restart() 功能停止所有程序段的执行、关闭所有窗口、提交事务、断开与数据库的连接,然后重新启动应用程序。 语法Restart() 返回值Integer。函数执行成功时返回1,发生错误时返回-1。 -------------------------------------------------------------------------------- Run() 功能运行指定的应用程序。 语法Run ( string {, windowstate } ) 参数string:string类型,指定要运行的应用程序的名称,其可以包括路径以及相应的参数,就像在命令行键入的那样windowstate:WindowState枚举类型,可选项,指定程序运行时的窗口状态。有效取值为:Maximized! - 最大化窗口;Minimized! - 最小化窗口;Normal! - 缺省值,正常窗口返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,Run()函数返回NULL。 用法使用Run()函数,应用程序能够启动操作系统的任何程序。当在Run()参数指定了要启动应用程序的参数时,参数的意义、格式、个数等由具体的应用程序确定。如果在Run()函数的string参数指定了文件名但没有给出扩展名时,PowerBuilder认为该文件的扩展名为.EXE。要运行扩展名不是.EXE的应用程序(比如.BAT, .COM, 或.PIF),必须在Run()函数的参数指定文件的扩展名。 -------------------------------------------------------------------------------- Send() 功能向窗口发送指定的消息并立即执行相应的事件处理程序。 语法Send( handle, messageno, word, long ) 参数handle:long类型,指定窗口的系统句柄,将向该窗口发送消息messageno:UnsignedInteger类型,指定要发送的消息号word:long类型,指定与消息一起发送的word类参数值。如果messageno参数指定的消息不使用该参数,那么将这个参数的值设置为0long:long类型或string,指定与消息一起发送的long型参数值或字符串返回值Long。函数执行成功时返回Windows系统调用SendMessage()的返回值,发生错误时返回-1。如果任何参数的值为NULL,Send()函数返回NULL。 用法Send()函数用于向窗口发送非PowerBuilder预定义事件的消息,这个窗口可以是PowerBuilder应用的窗口,也可以是其它应用的窗口。Send()函数直接触发指定窗口相应的事件,执行事件处理程序后返回到调用应用,这一点与Post()函数不同,Post()函数把发送的消息放置在指定窗口消息队列的尾部,然后返回到应用程序,它并不等待相应事件事件处理程序的执行。因此,我们说Post()函数采用的是异步方式,Send()函数采用的是同步方式。Send()函数的参数handle指定接收消息的窗口句柄,对PowerBuilder窗口来说,使用Handle()函数可以得到该句柄。对其它应用程序的窗口来说,可以调用系统API函数查找窗口并得到相应窗口的句柄。实际上,Send()函数把它的各个参数直接传送给Windows的系统调用SendMessage()。在各种C++开发工具的WINDOWS.H文件可以查到各消息编号。如果应用程序要发送PowerBuilder定义事件(包括预定义事件和用户定义事件),那么使用TriggerEvent()函数既简单有方便。当应用程序在long参数位置指定一个字符串时,Send()函数复制一个该字符串的副本,然后将副本的地址传送给指定窗口。 -------------------------------------------------------------------------------- SetProfileString() 功能设置初始化文件指定项的值。 语法SetProfileString ( filename, section, key, value ) 参数filename:string类型,指定初始化文件的名称,可以包括路径,省略路径时,该函数按操作系统的标准路径搜索指定文件section:string类型,指定要设置的值所在的节(Sectionkey:string类型,指定要设置的值的名称,不用区分大小写default:string类型,指定要设置项的值返回值Integer。函数执行成功时返回1,指定的文件未找到或指定的文件不能访问时函数返回-1。如果任何参数的值为NULL,SetProfileString()函数返回NULL。 -------------------------------------------------------------------------------- ShowHelp() 功能显示应用程序帮助,该帮助使用Microsoft Windows帮助系统进行操作。 语法ShowHelp ( helpfile, helpcommand {, typeid } ) 参数helpfile:string类型,指定帮助文件的名称helpcommand:HelpCommand枚举类型,指定显示帮助的格式。有效取值为:Index! - 显示目录主题,使用该值时不要指定typeid参数;Keyword! - 转移到由指定关键字确定的主题;Topic! - 显示指定主题的帮助typeid:可选项,指定帮助主题返回值Integer。函数执行成功时返回1,发生错误时返回-1。如果任何参数的值为NULL,ShowHelp()函数返回NULL。 -------------------------------------------------------------------------------- SignalError() 功能触发应用对象的SystemError事件,通常用于代码调试。 语法SignalError ( { number }, { text } ) 参数number:integer类型,可选项,其值将保存到Error对象的number属性text:string类型,可选项,其值将保存到Error对象的text属性返回值Integer。函数执行成功时返回1,发生错误时返回-1。 -------------------------------------------------------------------------------- Yield() 功能将控制权转移给其它图形对象,包括非PowerBuilder对象。该函数检测消息队列,如果有消息,就把消息取出。利用该函数可以在执行耗时较长的操作时把控制权转让给其它应用。 语法Yield() 返回值Boolean。如果在消息队列提取到了消息,那么函数返回TRUE,否则返回FALSE。用法正常情况下,PowerBuilder应用程序在执行一段代码(比如函数或事件处理程序)的过程不响应用户的操作。对耗时短暂的代码段来说,这种处理方式没有什么不妥的地方,但是,如果某个代码段的执行耗时较长,应用程序又希望为用户提供更多的控制权,那么需要在这段代码插入Yield()函数,让用户能够进行其它操作,特别在循环执行的代码更应该如此。应用程序执行Fill() 功能建立一个由指定字符串填充的指定长度的字符串。 语法Fill ( chars, n ) 参数chars:string类型,指定用于重复填充的字符串n:long类型,指定由该函数返回的字符串的长度返回值String。函数执行成功时返回n个字符的字符串,该字符串以参数chars的字符串重复填充而成。如果参数chars的字符个数多于n个,那么使用chars字符串的前n个字符填充函数返回的字符串;如果参数chars的字符个数少于n个,那么使用chars字符串反复填充,直到返回的字符串长度达到n为止。如果任何参数的值为NULL,Fill()函数返回NULL。 -------------------------------------------------------------------------------- Left() 功能得到字符串左部指定个数的字符。 语法Left ( string, n ) 参数string:string类型,指定要提取子串的字符串n:long类型,指定子串长度返回值String。函数执行成功时返回string字符串左边n个字符,发生错误时返回空字符串("")。如果任何参数的值为NULL,Left()函数返回NULL。如果n的值大于string字符串的长度,那么Left()函数返回整个string字符串,但并不增加其它字符。 -------------------------------------------------------------------------------- LeftTrim() 功能返回指定字符串删除了左部空格后的字符串。 语法LeftTrim ( string ) 参数string:string类型,指定要删除左部空格的字符串返回值String。函数执行成功时返回删除了string字符串左部空格的字符串,发生错误时返回空字符串("")。如果任何参数的值为NULL,LeftTrim()函数返回NULL。 -------------------------------------------------------------------------------- Len() 功能得到字符串的长度。 语法Len (string) 参数string:string类型变量返回值Long。函数执行成功时返回字符串的长度,发生错误时返回-1。如果任何参数的值为NULL,则Len()函数返回NULL。 -------------------------------------------------------------------------------- Lower() 功能将字符串的大写字母转换为小写字母。 语法Lower ( string ) 参数string:要将其的大写字母转换为小写字母的字符串返回值String。函数执行成功时返回将大写字母转换为小写字母后的字符串,发生错误时返回空字符串("")。如果string参数的值为NULL,Lower()函数返回NULL。 -------------------------------------------------------------------------------- Match() 功能确定字符串是否包含指定模式的字符。 语法Match ( string, textpattern ) 参数string:string类型,指定要检查是否匹配指定模式的字符串textpattern:string类型,指定文本匹配模式返回值Boolean:如果字符串string与模式textpattern相匹配,则函数返回TRUE,否则返回FALSE。如果指定的匹配模式无效或上述两个参数的任何一个未曾赋值,那么Match()函数返回FALSE。如果任何参数的值为NULL,Match()函数返回NULL。 用法textpattern参数的写法与正则表达式十分相似,它由元字符和普通字符组成。每个元字符都有不同的匹配含义,普通字符则与其自身相匹配。下面是匹配模式使用的元字符及其意义: ^指示字符串的开始,例如,^asd表示以asd开头的字符串,字符串asdfgh与模式^asd匹配,而字符串basdfg与模式^asd不匹配。 $指示字符串的结束,例如,red$表示所有以red结束的字符串均与该模式匹配,而redo与模式red$不匹配。 .匹配任意单个字符,例如,^&&$匹配任何六个字符组成的字符串。 []匹配括号列出的字符,例如,^[ABC]$匹配由一个字符组成的字符串,其值只能是A或B或C。 -与方括号一起,指定匹配字符的范围,例如,^[A-Z]$只匹配那些由一个大写字母组成的字符串。方括号里还可以使用^字符,表示匹配不在指定范围内的任何字符,例如,[^0-9]匹配除数字外的任何字符。 *,+,?这些符号跟在一个字符后面表示该字符可以出现的次数。星号(*)表示可以出现0次或任意次;加号(+)表示可以出现多次,但至少出现一次;问号(?)表示出现0次或一次。例如,A*匹配0个或多个A(没有A、A、AA、AAA、AAAA、**);A+匹配1个或多个A(A、AA、AAA、AAAA、**);A?匹配空串或1个A。 \斜杠(\)是转义字符,它去掉特殊字符的特殊含义,比如,模式\$匹配字符$,模式\\匹配字符\。 -------------------------------------------------------------------------------- Mid() 功能取字符串的子串。 语法Mid ( string, start {, length } ) 参数string:string类型,指定要从提取子串的字符串start:long类型,指定子串第一个字符在string字符串的位置,第一个位置为1length:long类型,可选项,指定子串的长度返回值String。函数执行成功时返回string字符串从start位置开始、长度为length的子串。如果start参数的值大于string字符个数,那么Mid()函数返回空字符串。如果省略了length参数或length参数的值大于从start开始、string字符串余下字符的长度,那
由于限制,分开了 2 个文件,请大家一起下载在解压,请谅解 《完全掌握加密解密实战超级手册》紧紧围绕软件的加密与解密来进行讲解,在详细讲述加密/解密技术的同时,还介绍了相应的实现原理,并配合案例分析,使读者能够系统、深入地了解加密/解密技术,能够更深层次地理解他人的编程思路,从而更好地提高自己的编程水平。全书共分为14章,包括:加密解密技术基础、常用代码分析工具、不同的加密解密算法、静态分析解密工具、动态调试解密工具、辅助工具、壳的不同应用技术、为程序打上补丁、网络验证技术、常用加密工具、不同的注册保护方式、编辑安装包程序、不同软件的保护措施、常用软件加密解密技术等。 《完全掌握加密解密实战超级手册》讲解通俗,深入浅出,注重实践,适用于广大计算机软件加密解密技术新手、爱好者,适用于软件开发从业人员和编程爱好者,也非常适合大专院校相关专业学生,以及有志于从事安全或加解密行业的准专业人员快速掌握实用技术 前言 第1章 初识加密解密技术 1 1.1 加密解密技术基础 2 1.1.1 密码学简述 2 1.1.2 常用汇编语言命令 2 1.1.3 破解密码的常用方式 4 1.1.4 壳的作用和分类 5 1.2 文件读写与动态链接库文件 6 1.2.1 INI文件与自定义文件的读写 6 1.2.2 在Delphi建立和使用DLL文件 10 1.2.3 DLL文件的调用方法 12 1.3 设计与发布包组件 14 1.3.1 包组件概述 14 1.3.2 设计与发布包组件 15 1.3.3 安装与卸载包组件 17 1.4 解密与注册保护 19 1.4.1 解密方式 19 1.4.2 注册保护方式 19 1.5 试用期限制功能 21 1.5.1 试用次数限制功能 21 1.5.2 试用天数限制功能 25 1.5.3 试用日期限制功能 31 1.5.4 执行时间限制功能 36 1.5.5 NAG窗口提示限制 37 1.6 专家点拨:常见问题解答 42 第2章 常用代码分析工具 43 2.1 初识PE格式文件 44 2.1.1 PE格式文件概述 44 2.1.2 检验PE格式文件 46 2.1.3 PE文件格式的头结构 46 2.1.4 设置Optional Header可执行信息 49 2.1.5 Section Table结构数组 51 2.1.6 Import Table输入表 52 2.1.7 Export Table输出表 53 2.1.8 重定位表 54 2.2 简述代码分析实战 55 2.2.1 虚拟地址与偏移地址 55 2.2.2 搜索程序入口点OEP 58 2.2.3 转储程序与修复输入表 58 2.2.4 用增加重定位项调用引入表函数 62 2.3 常见静态分析工具 63 2.3.1 常见程序类型分析工具 63 2.3.2 常见资源编辑器工具 64 2.3.3 常见反汇编分析工具 66 2.4 常见动态分析工具 67 2.5 常见注册表分析工具 68 2.5.1 注册表编辑器Regedit 68 2.5.2 注册表监控工具Regsnap 71 2.5.3 注册表数据库监视软件Regmon 73 2.5.4 注册表静态比较工具RegShot 74 2.6 专家点拨:常见问题解答 75 第3章 不同的加密解密算法 76 3.1 数据加密的缘由 77 3.1.1 数据加密技术概述 77 3.1.2 为什么要进行数据加密 77 3.1.3 数据加密的原理 77 3.1.4 加密技术与密码分析 79 3.2 Hash算法基础 81 3.2.1 CRC32算法 81 3.2.2 MD5算法 82 3.2.3 SHA算法 85 3.3 对称密码算法基础 87 3.3.1 对称密码算法概述 88 3.3.2 BlowFish算法概述 88 3.3.3 DES算法概述 90 3.3.4 IDEA算法概述 94 3.4 非对称密码算法基础 95 3.4.1 非对称密钥密码概述 95 3.4.2 RSA非对称密钥密码概述 95 3.4.3 DSA数据签名技术 96 3.4.4 Diffie-Hellman密钥交换系统概述 97 3.5 专家点拨:常见问题解答 97 第4章 静态分析解密工具 98 4.1 程序源代码概述 99 4.1.1 基本程序信息 99 4.1.2 反汇编源代码部分 101 4.2 常用反汇编工具 103 4.2.1 反汇编和调试工具W32Dasm 103 4.2.2 国产静态反编译工具C32asm 114 4.2.3 反汇编工具IDA Pro 116 4.3 实战静态分析解密 127 4.3.1 如何实现静态分析解密 127 4.3.2 汇编指令及其机器码值 128 4.3.3 判断真假注册码的方法 128 4.3.4 实例分析:静态破解Crackme3软件 129 4.4 注册机编写器keymake 131 4.4.1 为破解文件打个补丁 132 4.4.2 制作内存补丁 132 4.5 专家点拨:常见问题解答 133 第5章 动态调试解密工具 135 5.1 动态调试工具Ollydbg 136 5.1.1 初识Ollydbg 136 5.1.2 不同的配置选项 138 5.1.3 快速掌握常用功能 138 5.1.4 熟悉必要的插件 141 5.1.5 实现动态调试解密 141 5.1.6 实例1:解密加过UPX壳的Crackme程序 142 5.1.7 实例2:找出真的注册码 143 5.2 内核模式调试器SoftICE 144 5.2.1 配置SoftICE工具 144 5.2.2 实现SoftICE调用 148 5.2.3 激活SoftICE主窗口 148 5.2.4 快捷键与常用命令 150 5.2.5 快速找到程序入口处 157 5.2.6 多次跟踪的设置 158 5.2.7 用PE修改代码属性 158 5.3 动态反汇编调试器TRW2000 159 5.3.1 安装与配置TRW2000 160 5.3.2 呼出TRW2000调试窗口 162 5.3.3 常用命令和功能键 164 5.4 专家点拨:常见问题解答 169 第6章 各显其能的辅助工具 171 6.1 不同的编辑修改工具 172 6.1.1 十六进制编辑工具WinHex 172 6.1.2 十六进制查看器Hiew 175 6.1.3 十六进制编辑器HexWorkshop 179 6.1.4 文本编辑器UltraEdit 182 6.2 不同功效的监视工具 187 6.2.1 文件系统监视工具Filemon 187 6.2.2 API函数监视工具 188 6.2.3 MFC(微软库类)监视工具Mfcspy 190 6.3 编辑程序内部资源工具 191 6.3.1 用FreeRes工具修复资源 191 6.3.2 用工具eXeScope编辑程序内资源 192 6.3.3 用工具Festools管理系统资源 194 6.4 制作破解补丁工具 196 6.4.1 补丁制作工具dUP 196 6.4.2 绿色工具XCell 199 6.5 专家点拨:常见问题解答 200 第7章 揭秘壳的不同应用技术 201 7.1 不同的加壳压缩软件 202 7.1.1 DOS窗口下的文件压缩壳软件UPX 202 7.1.2 压缩各种可执行程序的ASPack 203 7.1.3 软件保护压缩工具Armadillo 204 7.1.4 国产外壳保护工具EncryptPE 207 7.2 查壳工具大放送 208 7.2.1 用Language2000查看加壳情况 208 7.2.2 功能强大的PEiDentifier 209 7.3 各具神通的脱壳工具 210 7.3.1 常用ASPack脱壳软件简介 210 7.3.2 通用脱壳工具UnPECompact 211 7.3.3 通用脱壳工具ProcDump 212 7.3.4 脱壳工具大集合UN-PACK 214 7.4 轻松实现手动脱壳 215 7.4.1 用ImportREC实现手动脱壳 216 7.4.2 重建可编辑资源 220 7.5 专家点拨:常见问题解答 220 第8章 别出心裁:为程序打上补丁 222 8.1 常用补丁制作工具 223 8.1.1 专业补丁制作工具CodeFusion 223 8.1.2 内存动态补丁工具Process Patcher 226 8.2 实例:网络客户端程序补丁 228 8.2.1 程序拦截的验证代码 228 8.2.2 增加自动修改机器号功能 229 8.2.3 用补丁修改程序 232 8.2.4 为程序附带一个动态链接库 234 8.2.5 用补丁加密可执行文件 235 8.3 代码自修改SMC技术 238 8.3.1 SMC函数定义 238 8.3.2 实例:SMC补丁技术应用 239 8.4 用CrackCode2000制作注册机 241 8.4.1 快速找到注册码 241 8.4.2 实现内存直接寻址 242 8.4.3 实现寄存器间接寻址 243 8.4.4 为Decompile Winhelp制作注册机 243 8.4.5 实例:CrackCode的加强模式 245 8.5 专家点拨:常见问题解答 247 第9章 网络验证技术大放送 248 9.1 实现Web服务器网络验证 249 9.1.1 加密客户端 249 9.1.2 控制本地计算机 252 9.2 实现本地服务器验证 256 9.2.1 加密客户端 257 9.2.2 加密服务器端 259 9.3 在线升级验证加密技术 261 9.3.1 在线升级验证实现 261 9.3.2 实例分析:在线升级验证 262 9.4 专家点拨:常见问题解答 268 第10章 各种常用加密软件工具的使用 269 10.1 多媒体文件加密工具 270 10.1.1 多媒体加密工具Private Pix 270 10.1.2 图片软件加密工具CryptaPix 272 10.1.3 图片文件专业加密工具WinXFiles 273 10.2 多功能文件加密工具 276 10.2.1 数据加密和安全通讯工具“文件密使” 276 10.2.2 可加密各种格式文件的BlackBox 281 10.2.3 对称加密算法工具ABI-CODER 286 10.2.4 国产加密工具“加密精灵” 288 10.3 专家点拨:常见问题解答 291 第11章 分析软件的不同注册方式 292 11.1 简单的注册码保护方式 293 11.1.1 追踪简单算法 293 11.1.2 简单注册码的破解 294 11.1.3 API函数常用断点及实例 298 11.2 按钮功能限制 308 11.2.1 按钮功能限制概述 308 11.2.2 突破按钮限制 309 11.2.3 按钮限制解密实例 311 11.3 NAG窗口 312 11.3.1 NAG窗口实例1 313 11.3.2 NAG窗口实例2 317 11.4 加密狗解密 319 11.4.1 判断加密狗类型 319 11.4.2 加密狗解密实例 320 11.5 专家点拨:常见问题解答 325 第12章 编辑安装包程序 326 12.1 InstallShield 327 12.1.1 InstallShield使用介绍 327 12.1.2 编辑CAB压缩包 341 12.2 Wise安装包软件 343 12.3 Setup Factory安装包制作工具 343 12.4 Inno Setup安装制作软件 352 12.4.1 Inno Setup的使用介绍 352 12.4.2 Inno Setup的脚本语法介绍 357 12.4.3 压缩包的编辑 360 12.5 微软MSI安装包 360 12.6 专家点拨:常见问题解答 362 第13章 不同软件的保护措施 363 13.1 对抗不同的破解手段 364 13.1.1 对抗DeDe和动态调试 364 13.1.2 对抗SoftICE 365 13.1.3 对抗静态调试 367 13.1.4 实现磁盘文件自校验 368 13.2 不同软件的保护实现 369 13.2.1 把ASP编写成DLL 370 13.2.2 COM组件的Delphi实现 372 13.2.3 实现软件注册保护的VCL组件 377 13.2.4 利用伪装壳制造虚假信息 379 13.2.5 利用加密锁保护程序 380 13.3 邮件加密软件PGP 384 13.3.1 PGP概述 384 13.3.2 PGP的安全问题 385 13.4 专家点拨:常见问题解答 390 第14章 常用软件加密解密技术 391 14.1 加密解密Word文件 392 14.1.1 Word自身功能加密 392 14.1.2 利用AOPR解密Word文档 393 14.1.3 风语文件加密工具 395 14.1.4 Word Password Recovery破解工具 395 14.1.5 Word密码查看器 396 14.2 Excel文件加密解密 397 14.2.1 实现Excel自加密 397 14.2.2 办公文件密码恢复程序 398 14.2.3 Excel加密文档解密工具Excel Key 399 14.3 PDF文件的加密解密 400 14.3.1 加密PDF文件 400 14.3.2 使用PDF文件加密器 402 14.3.3 Advanced PDF Password Recovery 404 14.3.4 用PDF Password Remover解除PDF文件口令 406 14.4 宏加密解密技术 408 14.4.1 实现宏技术加密 408 14.4.2 宏解密工具VBA Key 411 14.5 对压缩文件实施加密解密 411 14.5.1 实现WinZip自加密 412 14.5.2 解除ZIP文件口令 413 14.5.3 实现WinRAR自加密 413 14.5.4 解除RAR文件密码 414 14.6 加密解密EXE文件 415 14.6.1 用ASPack加密EXE文件 415 14.6.2 用tElock加密EXE文件 417 14.6.3 为EXE文件加口令 419 14.7 解密MS SQL Server保护 420 14.7.1 实现本地用户的帐户登录 420 14.7.2 查询分析器的使用 420 14.7.3 多功能密码破解软件 421 14.8 加密解密网页与脚本文件 423 14.8.1 网页与脚本的加密 423 14.8.2 网页与脚本的解密 428 14.9 专家点拨:常见问题解答 430
第二个压缩包 加密解密 前言 第1章 初识加密解密技术 1 1.1 加密解密技术基础 2 1.1.1 密码学简述 2 1.1.2 常用汇编语言命令 2 1.1.3 破解密码的常用方式 4 1.1.4 壳的作用和分类 5 1.2 文件读写与动态链接库文件 6 1.2.1 INI文件与自定义文件的读写 6 1.2.2 在Delphi建立和使用DLL文件 10 1.2.3 DLL文件的调用方法 12 1.3 设计与发布包组件 14 1.3.1 包组件概述 14 1.3.2 设计与发布包组件 15 1.3.3 安装与卸载包组件 17 1.4 解密与注册保护 19 1.4.1 解密方式 19 1.4.2 注册保护方式 19 1.5 试用期限制功能 21 1.5.1 试用次数限制功能 21 1.5.2 试用天数限制功能 25 1.5.3 试用日期限制功能 31 1.5.4 执行时间限制功能 36 1.5.5 NAG窗口提示限制 37 1.6 专家点拨:常见问题解答 42 第2章 常用代码分析工具 43 2.1 初识PE格式文件 44 2.1.1 PE格式文件概述 44 2.1.2 检验PE格式文件 46 2.1.3 PE文件格式的头结构 46 2.1.4 设置Optional Header可执行信息 49 2.1.5 Section Table结构数组 51 2.1.6 Import Table输入表 52 2.1.7 Export Table输出表 53 2.1.8 重定位表 54 2.2 简述代码分析实战 55 2.2.1 虚拟地址与偏移地址 55 2.2.2 搜索程序入口点OEP 58 2.2.3 转储程序与修复输入表 58 2.2.4 用增加重定位项调用引入表函数 62 2.3 常见静态分析工具 63 2.3.1 常见程序类型分析工具 63 2.3.2 常见资源编辑器工具 64 2.3.3 常见反汇编分析工具 66 2.4 常见动态分析工具 67 2.5 常见注册表分析工具 68 2.5.1 注册表编辑器Regedit 68 2.5.2 注册表监控工具Regsnap 71 2.5.3 注册表数据库监视软件Regmon 73 2.5.4 注册表静态比较工具RegShot 74 2.6 专家点拨:常见问题解答 75 第3章 不同的加密解密算法 76 3.1 数据加密的缘由 77 3.1.1 数据加密技术概述 77 3.1.2 为什么要进行数据加密 77 3.1.3 数据加密的原理 77 3.1.4 加密技术与密码分析 79 3.2 Hash算法基础 81 3.2.1 CRC32算法 81 3.2.2 MD5算法 82 3.2.3 SHA算法 85 3.3 对称密码算法基础 87 3.3.1 对称密码算法概述 88 3.3.2 BlowFish算法概述 88 3.3.3 DES算法概述 90 3.3.4 IDEA算法概述 94 3.4 非对称密码算法基础 95 3.4.1 非对称密钥密码概述 95 3.4.2 RSA非对称密钥密码概述 95 3.4.3 DSA数据签名技术 96 3.4.4 Diffie-Hellman密钥交换系统概述 97 3.5 专家点拨:常见问题解答 97 第4章 静态分析解密工具 98 4.1 程序源代码概述 99 4.1.1 基本程序信息 99 4.1.2 反汇编源代码部分 101 4.2 常用反汇编工具 103 4.2.1 反汇编和调试工具W32Dasm 103 4.2.2 国产静态反编译工具C32asm 114 4.2.3 反汇编工具IDA Pro 116 4.3 实战静态分析解密 127 4.3.1 如何实现静态分析解密 127 4.3.2 汇编指令及其机器码值 128 4.3.3 判断真假注册码的方法 128 4.3.4 实例分析:静态破解Crackme3软件 129 4.4 注册机编写器keymake 131 4.4.1 为破解文件打个补丁 132 4.4.2 制作内存补丁 132 4.5 专家点拨:常见问题解答 133 第5章 动态调试解密工具 135 5.1 动态调试工具Ollydbg 136 5.1.1 初识Ollydbg 136 5.1.2 不同的配置选项 138 5.1.3 快速掌握常用功能 138 5.1.4 熟悉必要的插件 141 5.1.5 实现动态调试解密 141 5.1.6 实例1:解密加过UPX壳的Crackme程序 142 5.1.7 实例2:找出真的注册码 143 5.2 内核模式调试器SoftICE 144 5.2.1 配置SoftICE工具 144 5.2.2 实现SoftICE调用 148 5.2.3 激活SoftICE主窗口 148 5.2.4 快捷键与常用命令 150 5.2.5 快速找到程序入口处 157 5.2.6 多次跟踪的设置 158 5.2.7 用PE修改代码属性 158 5.3 动态反汇编调试器TRW2000 159 5.3.1 安装与配置TRW2000 160 5.3.2 呼出TRW2000调试窗口 162 5.3.3 常用命令和功能键 164 5.4 专家点拨:常见问题解答 169 第6章 各显其能的辅助工具 171 6.1 不同的编辑修改工具 172 6.1.1 十六进制编辑工具WinHex 172 6.1.2 十六进制查看器Hiew 175 6.1.3 十六进制编辑器HexWorkshop 179 6.1.4 文本编辑器UltraEdit 182 6.2 不同功效的监视工具 187 6.2.1 文件系统监视工具Filemon 187 6.2.2 API函数监视工具 188 6.2.3 MFC(微软库类)监视工具Mfcspy 190 6.3 编辑程序内部资源工具 191 6.3.1 用FreeRes工具修复资源 191 6.3.2 用工具eXeScope编辑程序内资源 192 6.3.3 用工具Festools管理系统资源 194 6.4 制作破解补丁工具 196 6.4.1 补丁制作工具dUP 196 6.4.2 绿色工具XCell 199 6.5 专家点拨:常见问题解答 200 第7章 揭秘壳的不同应用技术 201 7.1 不同的加壳压缩软件 202 7.1.1 DOS窗口下的文件压缩壳软件UPX 202 7.1.2 压缩各种可执行程序的ASPack 203 7.1.3 软件保护压缩工具Armadillo 204 7.1.4 国产外壳保护工具EncryptPE 207 7.2 查壳工具大放送 208 7.2.1 用Language2000查看加壳情况 208 7.2.2 功能强大的PEiDentifier 209 7.3 各具神通的脱壳工具 210 7.3.1 常用ASPack脱壳软件简介 210 7.3.2 通用脱壳工具UnPECompact 211 7.3.3 通用脱壳工具ProcDump 212 7.3.4 脱壳工具大集合UN-PACK 214 7.4 轻松实现手动脱壳 215 7.4.1 用ImportREC实现手动脱壳 216 7.4.2 重建可编辑资源 220 7.5 专家点拨:常见问题解答 220 第8章 别出心裁:为程序打上补丁 222 8.1 常用补丁制作工具 223 8.1.1 专业补丁制作工具CodeFusion 223 8.1.2 内存动态补丁工具Process Patcher 226 8.2 实例:网络客户端程序补丁 228 8.2.1 程序拦截的验证代码 228 8.2.2 增加自动修改机器号功能 229 8.2.3 用补丁修改程序 232 8.2.4 为程序附带一个动态链接库 234 8.2.5 用补丁加密可执行文件 235 8.3 代码自修改SMC技术 238 8.3.1 SMC函数定义 238 8.3.2 实例:SMC补丁技术应用 239 8.4 用CrackCode2000制作注册机 241 8.4.1 快速找到注册码 241 8.4.2 实现内存直接寻址 242 8.4.3 实现寄存器间接寻址 243 8.4.4 为Decompile Winhelp制作注册机 243 8.4.5 实例:CrackCode的加强模式 245 8.5 专家点拨:常见问题解答 247 第9章 网络验证技术大放送 248 9.1 实现Web服务器网络验证 249 9.1.1 加密客户端 249 9.1.2 控制本地计算机 252 9.2 实现本地服务器验证 256 9.2.1 加密客户端 257 9.2.2 加密服务器端 259 9.3 在线升级验证加密技术 261 9.3.1 在线升级验证实现 261 9.3.2 实例分析:在线升级验证 262 9.4 专家点拨:常见问题解答 268 第10章 各种常用加密软件工具的使用 269 10.1 多媒体文件加密工具 270 10.1.1 多媒体加密工具Private Pix 270 10.1.2 图片软件加密工具CryptaPix 272 10.1.3 图片文件专业加密工具WinXFiles 273 10.2 多功能文件加密工具 276 10.2.1 数据加密和安全通讯工具“文件密使” 276 10.2.2 可加密各种格式文件的BlackBox 281 10.2.3 对称加密算法工具ABI-CODER 286 10.2.4 国产加密工具“加密精灵” 288 10.3 专家点拨:常见问题解答 291 第11章 分析软件的不同注册方式 292 11.1 简单的注册码保护方式 293 11.1.1 追踪简单算法 293 11.1.2 简单注册码的破解 294 11.1.3 API函数常用断点及实例 298 11.2 按钮功能限制 308 11.2.1 按钮功能限制概述 308 11.2.2 突破按钮限制 309 11.2.3 按钮限制解密实例 311 11.3 NAG窗口 312 11.3.1 NAG窗口实例1 313 11.3.2 NAG窗口实例2 317 11.4 加密狗解密 319 11.4.1 判断加密狗类型 319 11.4.2 加密狗解密实例 320 11.5 专家点拨:常见问题解答 325 第12章 编辑安装包程序 326 12.1 InstallShield 327 12.1.1 InstallShield使用介绍 327 12.1.2 编辑CAB压缩包 341 12.2 Wise安装包软件 343 12.3 Setup Factory安装包制作工具 343 12.4 Inno Setup安装制作软件 352 12.4.1 Inno Setup的使用介绍 352 12.4.2 Inno Setup的脚本语法介绍 357 12.4.3 压缩包的编辑 360 12.5 微软MSI安装包 360 12.6 专家点拨:常见问题解答 362 第13章 不同软件的保护措施 363 13.1 对抗不同的破解手段 364 13.1.1 对抗DeDe和动态调试 364 13.1.2 对抗SoftICE 365 13.1.3 对抗静态调试 367 13.1.4 实现磁盘文件自校验 368 13.2 不同软件的保护实现 369 13.2.1 把ASP编写成DLL 370 13.2.2 COM组件的Delphi实现 372 13.2.3 实现软件注册保护的VCL组件 377 13.2.4 利用伪装壳制造虚假信息 379 13.2.5 利用加密锁保护程序 380 13.3 邮件加密软件PGP 384 13.3.1 PGP概述 384 13.3.2 PGP的安全问题 385 13.4 专家点拨:常见问题解答 390 第14章 常用软件加密解密技术 391 14.1 加密解密Word文件 392 14.1.1 Word自身功能加密 392 14.1.2 利用AOPR解密Word文档 393 14.1.3 风语文件加密工具 395 14.1.4 Word Password Recovery破解工具 395 14.1.5 Word密码查看器 396 14.2 Excel文件加密解密 397 14.2.1 实现Excel自加密 397 14.2.2 办公文件密码恢复程序 398 14.2.3 Excel加密文档解密工具Excel Key 399 14.3 PDF文件的加密解密 400 14.3.1 加密PDF文件 400 14.3.2 使用PDF文件加密器 402 14.3.3 Advanced PDF Password Recovery 404 14.3.4 用PDF Password Remover解除PDF文件口令 406 14.4 宏加密解密技术 408 14.4.1 实现宏技术加密 408 14.4.2 宏解密工具VBA Key 411 14.5 对压缩文件实施加密解密 411 14.5.1 实现WinZip自加密 412 14.5.2 解除ZIP文件口令 413 14.5.3 实现WinRAR自加密 413 14.5.4 解除RAR文件密码 414 14.6 加密解密EXE文件 415 14.6.1 用ASPack加密EXE文件 415 14.6.2 用tElock加密EXE文件 417 14.6.3 为EXE文件加口令 419 14.7 解密MS SQL Server保护 420 14.7.1 实现本地用户的帐户登录 420 14.7.2 查询分析器的使用 420 14.7.3 多功能密码破解软件 421 14.8 加密解密网页与脚本文件 423 14.8.1 网页与脚本的加密 423 14.8.2 网页与脚本的解密 428 14.9 专家点拨:常见问题解答 430

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧