飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 10828|回复: 15

PYG_CrackMe2005认证试题[VB-PCODE]算法简单分析

[复制链接]
  • TA的每日心情
    擦汗
    2019-3-20 20:06
  • 签到天数: 258 天

    [LV.8]以坛为家I

    发表于 2006-1-29 19:10:14 | 显示全部楼层 |阅读模式
    没有加壳,是VB-PCODE。试题已经做废,飘云允许公开讨论。
    下载:[url]https://www.chinapyg.com/viewthread.php?tid=262&extra=page%3D1[/url]

    我最初的调试环境是win2000+sp4,让WKTVBDE调试器能正常工作浪费我大量的时间,真郁闷。
    如果你也遇到类似问题可以试试下面的方法:
    1、被调试的程序要把只读属性去掉。
    2、MSVBVM60.DLL的版本太低,建议从microsoft的Service Pack 6 for Visual Studio6.0中的Msvbvm60.cab中提取,
       或用其它版本高些的,复制到\windir\system32目录。好象用2001年以后的版本就不会有问题。
    3、安装目录的bdasmdll.dll,WKTVBDE.dll复制到\windir\system32目录。
    4、安装程序建立的快捷方式有问题,到安装目录直接运行。

    下面的代码从[ VBExplorer1.0.1 ]中复制得来的。
    用WKTVBDE打开程序,Action->Run。Ctrl+E打开Current Bpx对话框下断点40B04C,F5运行程序。
    输入用户名和注册码单击确定就会中断在断点处。

    [Label1.Click]
    ******Possible String Ref To->"5201314896788888888888888888888888"
                                   |
    :0040B04C  3A9CFE0400          LitVarStr            ;PushVarString ptr_00408C5C
    上面一行F8过后,Stack显示0013F790: 0013F8DC ,Ctrl+M打开内存编辑输入13F8DC可以看到值是 08
    这表示字符串类型,第8个字节之后是字符串的地址,13F8E4: 00408C5C,所以输入408C5C之后就会看到加载
    到内存的字符串了,vb-pcode类型在调试的时候多注意观察栈,又比如 02 表示整型,第8个字节之后放
    的是该整型数值的地址。以下类似内容略。
    :0040B051  FD006CFF            FStVarCopy           ;[LOCAL_0094]=vbaVarCopy(Pop)
    ******Possible String Ref To->"chinapygabcdefghijklmopqrstuvwxyza"
                                   |
    :0040B055  3A9CFE0500          LitVarStr            ;PushVarString ptr_00408CA8
    :0040B05A  FD005CFF            FStVarCopy           ;[LOCAL_00A4]=vbaVarCopy(Pop)
    ******Possible String Ref To->"piaoyunge"
                                   |
    :0040B05E  3A9CFE0600          LitVarStr            ;PushVarString ptr_00408CF4
    :0040B063  FD00DCFE            FStVarCopy           ;[LOCAL_0124]=vbaVarCopy(Pop)
    :0040B067  0494FE              FLdRfVar             ;Push LOCAL_016C
    :0040B06A  21                  FLdPrThis            ;[SR]=[stack2]
    :0040B06B  0F0003              VCallAd              ;Return the control index 02
    :0040B06E  1998FE              FStAdFunc            ;
    :0040B071  0898FE              FLdPr                ;[SR]=[LOCAL_0168]
    ***********Reference To:[propget]TextBox.Text取机器码
                                  |
    :0040B074  0DA0000000          VCallHresult         ;Call ptr_00408BC0
    :0040B079  3E94FE              FLdZeroAd            ;Push DWORD [LOCAL_016C]; [LOCAL_016C]=0
    :0040B07C  4684FE              CVarStr              ;
    :0040B07F  FCF6BCFE            FStVar               ;
    :0040B083  1A98FE              FFree1Ad             ;Push [LOCAL_0168]; Call [[[LOCAL_0168]]+8]; [[LOCAL_0168]]=0
    :0040B086  0494FE              FLdRfVar             ;Push LOCAL_016C
    :0040B089  21                  FLdPrThis            ;[SR]=[stack2]
    :0040B08A  0F0C03              VCallAd              ;Return the control index 05
    :0040B08D  1998FE              FStAdFunc            ;
    :0040B090  0898FE              FLdPr                ;[SR]=[LOCAL_0168]
    ***********Reference To:[propget]TextBox.Text取用户名
                                  |
    :0040B093  0DA0000000          VCallHresult         ;Call ptr_00408BC0
    :0040B098  3E94FE              FLdZeroAd            ;Push DWORD [LOCAL_016C]; [LOCAL_016C]=0
    :0040B09B  4684FE              CVarStr              ;
    :0040B09E  04DCFE              FLdRfVar             ;Push LOCAL_0124**********"piaoyunge"
    :0040B0A1  FBEF74FE            ConcatVar            ;*************************"piaoyunge"加到用户名后面
    :0040B0A5  0464FE              FLdRfVar             ;Push LOCAL_019C
    **********Reference To->msvbvm60.rtcUpperCaseVar**********S1*********************************将用户名加上piaoyunge之后变成大写宽字串S1
                                   |
    :0040B0A8  0A07000800          ImpAdCallFPR4        ;Call ptr_0040105C; check stack 0008; Push EAX
    :0040B0AD  0464FE              FLdRfVar             ;Push LOCAL_019C
    :0040B0B0  FCF6CCFE            FStVar               ;
    :0040B0B4  1A98FE              FFree1Ad             ;Push [LOCAL_0168]; Call [[[LOCAL_0168]]+8]; [[LOCAL_0168]]=0
    :0040B0B7  36040084FE74FE      FFreeVar             ;Free 0004/2 variants
    :0040B0BE  0494FE              FLdRfVar             ;Push LOCAL_016C
    :0040B0C1  21                  FLdPrThis            ;[SR]=[stack2]
    :0040B0C2  0F0803              VCallAd              ;Return the control index 04
    :0040B0C5  1998FE              FStAdFunc            ;
    :0040B0C8  0898FE              FLdPr                ;[SR]=[LOCAL_0168]
    ***********Reference To:[propget]TextBox.Text取输入的注册码
                                  |
    :0040B0CB  0DA0000000          VCallHresult         ;Call ptr_00408BC0
    :0040B0D0  3E94FE              FLdZeroAd            ;Push DWORD [LOCAL_016C]; [LOCAL_016C]=0
    :0040B0D3  4684FE              CVarStr              ;
    :0040B0D6  FCF654FE            FStVar               ;
    :0040B0DA  1A98FE              FFree1Ad             ;Push [LOCAL_0168]; Call [[[LOCAL_0168]]+8]; [[LOCAL_0168]]=0
    :0040B0DD  04CCFE              FLdRfVar             ;Push LOCAL_0134************S1入栈
    :0040B0E0  FBEB84FE            FnLenVar             ;vbaLenVar********************求S1长度
    ******Possible String Ref To->""
                                   |
    :0040B0E4  3A9CFE0800          LitVarStr            ;PushVarString ptr_00408D0C
    :0040B0E9  5D                  HardType             ;
    :0040B0EA  FB3C74FE            NeVar                ;
    :0040B0EE  0454FE              FLdRfVar             ;Push LOCAL_01AC***********输入的注册码入栈
    :0040B0F1  FBEB64FE            FnLenVar             ;vbaLenVar*****************输入的注册码长度
    此时stack显示 13f78c:13f8a4 13f8a4值是03表示长整型,13f8ac内就是长度。
    ******Possible String Ref To->""
                                   |
    :0040B0F5  3A44FE0800          LitVarStr            ;PushVarString ptr_00408D0C
    :0040B0FA  5D                  HardType             ;
    :0040B0FB  FB3C34FE            NeVar                ;
    :0040B0FF  FB2724FE            AndVar               ;
    :0040B103  FF1B                CBoolVarNull         ;vbaBoolVarNull
    :0040B105  1C2403              BranchF              ;If Pop=0 then ESI=0040B370没有输入注册码跳走
    :0040B108  2844FE0100          LitVarI2             ;PushVarInteger 0001

    :0040B10D  0414FE              FLdRfVar             ;Push LOCAL_01EC 13f854

    第一步,这一部分,用机器码每一位数字做为索引值取5201314896788888888888888888888888中数字得到一个字符串s2
    {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{
    :0040B110  04BCFE              FLdRfVar             ;Push LOCAL_0144***********取机器码
    :0040B113  FBEB84FE            FnLenVar             ;vbaLenVar*****************机器码长度
    :0040B117  FE68F4FD2E01        ForVar               ;
    :0040B11D  2884FE0100          LitVarI2             ;PushVarInteger 0001
    :0040B122  0414FE              FLdRfVar             ;Push LOCAL_01EC***********计数
    :0040B125  FC22                CI4Var               ;vbaI4Var
    :0040B127  04BCFE              FLdRfVar             ;Push LOCAL_0144***********机器码地址入栈
    :0040B12A  0474FE              FLdRfVar             ;Push LOCAL_018C
    **********Reference To->msvbvm60.rtcMidCharVar
                                   |
    :0040B12D  0A09001000          ImpAdCallFPR4        ;Call ptr_00401062; check stack 0010; Push EAX
    :0040B132  0474FE              FLdRfVar             ;Push LOCAL_018C***********取一个机器码
    :0040B135  FCF64CFF            FStVar               ;
    :0040B139  3584FE              FFree1Var            ;Free LOCAL_017C
    :0040B13C  040CFF              FLdRfVar             ;Push LOCAL_00F4
    :0040B13F  2874FE0100          LitVarI2             ;PushVarInteger 0001
    :0040B144  044CFF              FLdRfVar             ;Push LOCAL_00B4
    :0040B147  289CFE0100          LitVarI2             ;PushVarInteger 0001
    :0040B14C  FB9484FE            AddVar               ;
    :0040B150  FC22                CI4Var               ;vbaI4Var
    :0040B152  046CFF              FLdRfVar             ;Push LOCAL_0094****"5201314896788888888888888888888888"
    :0040B155  0464FE              FLdRfVar             ;Push LOCAL_019C
    **********Reference To->msvbvm60.rtcMidCharVar
                                   |
    :0040B158  0A09001000          ImpAdCallFPR4        ;Call ptr_00401062; check stack 0010; Push EAX用机器码作为索引从上面的字串取一个字符
    :0040B15D  0464FE              FLdRfVar             ;Push LOCAL_019C
    :0040B160  FBEF34FE            ConcatVar            ;把字符连接成字符串
    :0040B164  FCF60CFF            FStVar               ;
    :0040B168  36060084FE74FE64    FFreeVar             ;Free 0006/2 variants
    :0040B171  0414FE              FLdRfVar             ;Push LOCAL_01EC
    :0040B174  FE7EF4FDD100        NextStepVar          ;*****************循环0040B110
    }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
    :0040B17A  2844FE0100          LitVarI2             ;PushVarInteger 0001
    :0040B17F  04E4FD              FLdRfVar             ;Push LOCAL_021C
    :0040B182  04CCFE              FLdRfVar             ;Push LOCAL_0134
    :0040B185  FBEB84FE            FnLenVar             ;vbaLenVar***********取S1长度
    :0040B189  FE68C4FD9001        ForVar               ;

    这里又是一个循环用字符串S1继续下面,
    将首个字母的ASCII十六进制值跟0x3异或之后的结果,加上下一个字母的ASCII十六进制值
    再跟0x3异或,循环完后得到一个十六进制值,变成十进制与第一步得到的字符串变成十进
    制数字相加,结果保存为一个字符串。
    {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{
    :0040B18F  04ECFE              FLdRfVar             ;Push LOCAL_0114
    :0040B192  2884FE0100          LitVarI2             ;PushVarInteger 0001
    :0040B197  04E4FD              FLdRfVar             ;Push LOCAL_021C*******用户名位置序数。
    :0040B19A  FC22                CI4Var               ;vbaI4Var
    :0040B19C  04CCFE              FLdRfVar             ;Push LOCAL_0134*******S1
    :0040B19F  0474FE              FLdRfVar             ;Push LOCAL_018C
    **********Reference To->msvbvm60.rtcMidCharVar
                                   |
    :0040B1A2  0A09001000          ImpAdCallFPR4        ;Call ptr_00401062; check stack 0010; Push EAX
    :0040B1A7  0474FE              FLdRfVar             ;Push LOCAL_018C
    :0040B1AA  FDFE94FE            CStrVarVal           ;
    **********Reference To->msvbvm60.rtcAnsiValueBstr取 S1 中的每个字符的ASCII值
                                   |
    :0040B1AE  0B0A000400          ImpAdCallI2          ;Call ptr_00401068; check stack 0004; Push EAX
    :0040B1B3  4444FE              CVarI2               ;
    :0040B1B6  FB9464FE            AddVar               ;与上次结果相加
    :0040B1BA  28B4FD0300          LitVarI2             ;PushVarInteger 0003
    :0040B1BF  FB1734FE            XorVar               ;用户名字符ansi值与0x3 xor,,,,,,,相加之后异或
    :0040B1C3  FCF6ECFE            FStVar               ;
    :0040B1C7  2F94FE              FFree1Str            ;SysFreeString [LOCAL_016C]; [LOCAL_016C]=0
    :0040B1CA  36060084FE74FE64    FFreeVar             ;Free 0006/2 variants
    :0040B1D3  04E4FD              FLdRfVar             ;Push LOCAL_021C
    :0040B1D6  FE7EC4FD4301        NextStepVar          ;
    }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
    :0040B1DC  040CFF              FLdRfVar             ;Push LOCAL_00F4***************s2
    :0040B1DF  04ECFE              FLdRfVar             ;Push LOCAL_0114***************循环完后的结果
    :0040B1E2  FB9484FE            AddVar               ;相加
    :0040B1E6  FCF6FCFE            FStVar               ;
    :0040B1EA  2844FE0100          LitVarI2             ;PushVarInteger 0001

    机器码的每一位数字加1后从"chinapygabcdefghijklmopqrstuvwxyza"取相应位置的字母连
    接成字符串.要注意变成大写的哦!
    把这个字符串加到第二步等到的字符串的后面,将生成的字符串长度被24减,得数是几就在
    末尾加几个上"0",最后第五位后面加上"-",得到的这个字符串就是中间结果,
    {{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{
    :0040B1EF  04A4FD              FLdRfVar             ;Push LOCAL_025C
    :0040B1F2  04FCFE              FLdRfVar             ;Push LOCAL_0104
    :0040B1F5  FBEB84FE            FnLenVar             ;vbaLenVar
    :0040B1F9  FE6884FD1D02        ForVar               ;
    :0040B1FF  2884FE0100          LitVarI2             ;PushVarInteger 0001
    :0040B204  04A4FD              FLdRfVar             ;Push LOCAL_025C
    :0040B207  FC22                CI4Var               ;vbaI4Var
    :0040B209  04BCFE              FLdRfVar             ;Push LOCAL_0144
    :0040B20C  0474FE              FLdRfVar             ;Push LOCAL_018C
    **********Reference To->msvbvm60.rtcMidCharVar
                                   |
    :0040B20F  0A09001000          ImpAdCallFPR4        ;Call ptr_00401062; check stack 0010; Push EAX
    :0040B214  0474FE              FLdRfVar             ;Push LOCAL_018C
    :0040B217  FCF63CFF            FStVar               ;
    :0040B21B  3584FE              FFree1Var            ;Free LOCAL_017C
    :0040B21E  04FCFE              FLdRfVar             ;Push LOCAL_0104
    :0040B221  2874FE0100          LitVarI2             ;PushVarInteger 0001
    :0040B226  043CFF              FLdRfVar             ;Push LOCAL_00C4
    :0040B229  289CFE0100          LitVarI2             ;PushVarInteger 0001
    :0040B22E  FB9484FE            AddVar               ;
    :0040B232  FC22                CI4Var               ;vbaI4Var
    :0040B234  045CFF              FLdRfVar             ;Push LOCAL_00A4"chinapygabcdefghijklmopqrstuvwxyza"
    :0040B237  0464FE              FLdRfVar             ;Push LOCAL_019C
    **********Reference To->msvbvm60.rtcMidCharVar
                                   |
    :0040B23A  0A09001000          ImpAdCallFPR4        ;Call ptr_00401062; check stack 0010; Push EAX
    :0040B23F  0464FE              FLdRfVar             ;Push LOCAL_019C
    :0040B242  0434FE              FLdRfVar             ;Push LOCAL_01CC
    **********Reference To->msvbvm60.rtcUpperCaseVar
                                   |
    :0040B245  0A07000800          ImpAdCallFPR4        ;Call ptr_0040105C; check stack 0008; Push EAX
    :0040B24A  0434FE              FLdRfVar             ;Push LOCAL_01CC
    :0040B24D  FBEF24FE            ConcatVar            ;
    :0040B251  FCF6FCFE            FStVar               ;
    :0040B255  36080084FE74FE64    FFreeVar             ;Free 0008/2 variants
    :0040B260  04A4FD              FLdRfVar             ;Push LOCAL_025C
    :0040B263  FE7E84FDB301        NextStepVar          ;
    }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
    :0040B269  04FCFE              FLdRfVar             ;Push LOCAL_0104
    :0040B26C  FBEB84FE            FnLenVar             ;vbaLenVar
    :0040B270  289CFE1900          LitVarI2             ;PushVarInteger 0019
    :0040B275  5D                  HardType             ;
    :0040B276  FB67                LtVarBool            ;Push (Pop1 < Pop2)
    :0040B278  1CB702              BranchF              ;If Pop=0 then ESI=0040B303
    :0040B27B  04FCFE              FLdRfVar             ;Push LOCAL_0104
    ******Possible String Ref To->"0"将生成的字符串长度被24减,得数是几就在末尾加几个上"0"
                                   |
    :0040B27E  3A44FE0B00          LitVarStr            ;PushVarString ptr_00408D14
    :0040B283  4E64FE              FStVarCopyObj        ;[LOCAL_019C]=vbaVarDup(Pop)
    :0040B286  0464FE              FLdRfVar             ;Push LOCAL_019C
    :0040B289  289CFE1800          LitVarI2             ;PushVarInteger 0018 *****24减去上面连接成字符串的长度得L
    :0040B28E  04FCFE              FLdRfVar             ;Push LOCAL_0104
    :0040B291  FBEB84FE            FnLenVar             ;vbaLenVar
    :0040B295  FB9C74FE            SubVar               ;
    :0040B299  FC22                CI4Var               ;vbaI4Var
    **********Reference To->msvbvm60.rtcStringBstr
                                   |
    :0040B29B  0B0C000800          ImpAdCallI2          ;Call ptr_0040106E; check stack 0008; Push EAX
    :0040B2A0  4634FE              CVarStr              ;
    :0040B2A3  FB9424FE            AddVar               ;**************************加L个0
    :0040B2A7  FCF6FCFE            FStVar               ;
    :0040B2AB  36040064FE34FE      FFreeVar             ;Free 0004/2 variants
    :0040B2B2  2884FE0500          LitVarI2             ;PushVarInteger 0005
    :0040B2B7  F501000000          LitI4                ;Push 00000001
    :0040B2BC  04FCFE              FLdRfVar             ;Push LOCAL_0104
    :0040B2BF  0474FE              FLdRfVar             ;Push LOCAL_018C
    **********Reference To->msvbvm60.rtcMidCharVar
                                   |
    :0040B2C2  0A09001000          ImpAdCallFPR4        ;Call ptr_00401062; check stack 0010; Push EAX
    :0040B2C7  0474FE              FLdRfVar             ;Push LOCAL_018C
    ******Possible String Ref To->"-"最后第五位后面加上"-",得到的这个字符串就是中间结果,
                                   |
    :0040B2CA  3A44FE0D00          LitVarStr            ;PushVarString ptr_00408D1C
    :0040B2CF  FB9464FE            AddVar               ;第五位后面加个-
    :0040B2D3  2834FE1400          LitVarI2             ;PushVarInteger 0014
    :0040B2D8  F506000000          LitI4                ;Push 00000006
    :0040B2DD  04FCFE              FLdRfVar             ;Push LOCAL_0104
    :0040B2E0  0424FE              FLdRfVar             ;Push LOCAL_01DC
    **********Reference To->msvbvm60.rtcMidCharVar
                                   |
    :0040B2E3  0A09001000          ImpAdCallFPR4        ;Call ptr_00401062; check stack 0010; Push EAX
    :0040B2E8  0424FE              FLdRfVar             ;Push LOCAL_01DC
    :0040B2EB  FB9474FD            AddVar               ;和原来的接起来,相当于原来的串5位后加个-
    :0040B2EF  FCF6ACFE            FStVar               ;
    :0040B2F3  360A0084FE74FE34    FFreeVar             ;Free 000A/2 variants
    :0040B300  1E2403              Branch               ;ESI=0040B370
    :0040B303  2884FE1800          LitVarI2             ;PushVarInteger 0018<--要够24位
    :0040B308  F501000000          LitI4                ;Push 00000001
    :0040B30D  04FCFE              FLdRfVar             ;Push LOCAL_0104
    :0040B310  0474FE              FLdRfVar             ;Push LOCAL_018C
    **********Reference To->msvbvm60.rtcMidCharVar
                                   |
    :0040B313  0A09001000          ImpAdCallFPR4        ;Call ptr_00401062; check stack 0010; Push EAX
    :0040B318  0474FE              FLdRfVar             ;Push LOCAL_018C
    :0040B31B  FCF6FCFE            FStVar               ;
    :0040B31F  3584FE              FFree1Var            ;Free LOCAL_017C
    :0040B322  2884FE0500          LitVarI2             ;PushVarInteger 0005<--第五位后加'-'
    :0040B327  F501000000          LitI4                ;Push 00000001
    :0040B32C  04FCFE              FLdRfVar             ;Push LOCAL_0104
    :0040B32F  0474FE              FLdRfVar             ;Push LOCAL_018C
    **********Reference To->msvbvm60.rtcMidCharVar
                                   |
    :0040B332  0A09001000          ImpAdCallFPR4        ;Call ptr_00401062; check stack 0010; Push EAX
    :0040B337  0474FE              FLdRfVar             ;Push LOCAL_018C
    ******Possible String Ref To->"-"
                                   |
    :0040B33A  3A44FE0D00          LitVarStr            ;PushVarString ptr_00408D1C
    :0040B33F  FB9464FE            AddVar               ;
    :0040B343  2834FE1400          LitVarI2             ;PushVarInteger 0014
    :0040B348  F506000000          LitI4                ;Push 00000006
    :0040B34D  04FCFE              FLdRfVar             ;Push LOCAL_0104
    :0040B350  0424FE              FLdRfVar             ;Push LOCAL_01DC
    **********Reference To->msvbvm60.rtcMidCharVar
                                   |
    :0040B353  0A09001000          ImpAdCallFPR4        ;Call ptr_00401062; check stack 0010; Push EAX
    :0040B358  0424FE              FLdRfVar             ;Push LOCAL_01DC
    :0040B35B  FB9474FD            AddVar               ;
    :0040B35F  FCF6ACFE            FStVar               ;
    :0040B363  360A0084FE74FE34    FFreeVar             ;Free 000A/2 variants
    :0040B370  289CFE0100          LitVarI2             ;PushVarInteger 0001
    :0040B375  FCF62CFF            FStVar               ;
    :0040B379  0454FE              FLdRfVar             ;Push LOCAL_01AC
    :0040B37C  FBEB84FE            FnLenVar             ;vbaLenVar
    :0040B380  289CFE0000          LitVarI2             ;PushVarInteger 0000
    :0040B385  5D                  HardType             ;
    :0040B386  FB3C74FE            NeVar                ;
    :0040B38A  04CCFE              FLdRfVar             ;Push LOCAL_0134
    :0040B38D  FBEB64FE            FnLenVar             ;vbaLenVar
    :0040B391  2844FE0000          LitVarI2             ;PushVarInteger 0000
    :0040B396  5D                  HardType             ;
    :0040B397  FB3C34FE            NeVar                ;
    :0040B39B  FB2724FE            AndVar               ;
    :0040B39F  FF1B                CBoolVarNull         ;vbaBoolVarNull
    :0040B3A1  1C4404              BranchF              ;If Pop=0 then ESI=0040B490
    :0040B3A4  2884FE0100          LitVarI2             ;PushVarInteger 0001
    :0040B3A9  042CFF              FLdRfVar             ;Push LOCAL_00D4
    :0040B3AC  FC22                CI4Var               ;vbaI4Var
    :0040B3AE  0454FE              FLdRfVar             ;Push LOCAL_01AC输入的注册号地址入栈
    :0040B3B1  0474FE              FLdRfVar             ;Push LOCAL_018C
    **********Reference To->msvbvm60.rtcMidCharVar
                                   |
    :0040B3B4  0A09001000          ImpAdCallFPR4        ;Call ptr_00401062; check stack 0010; Push EAX
    :0040B3B9  0474FE              FLdRfVar             ;Push LOCAL_018C取一个注册号值为16进制
    :0040B3BC  FCF61CFF            FStVar               ;
    :0040B3C0  3584FE              FFree1Var            ;Free LOCAL_017C
    :0040B3C3  041CFF              FLdRfVar             ;Push LOCAL_00E4
    :0040B3C6  FDFE94FE            CStrVarVal           ;
    **********Reference To->msvbvm60.rtcAnsiValueBstr
                                   |
    :0040B3CA  0B0A000400          ImpAdCallI2          ;Call ptr_00401068; check stack 0004; Push EAX
    :0040B3CF  F404                LitI2_Byte           ;Push 04
    :0040B3D1  A9                  AddI2                ;取一个注册号加4
    :0040B3D2  449CFE              CVarI2               ;
    :0040B3D5  042CFF              FLdRfVar             ;Push LOCAL_00D4
    :0040B3D8  FB9484FE            AddVar               ;加上位置的序号
    :0040B3DC  FCF61CFF            FStVar               ;
    :0040B3E0  2F94FE              FFree1Str            ;SysFreeString [LOCAL_016C]; [LOCAL_016C]=0
    :0040B3E3  041CFF              FLdRfVar             ;Push LOCAL_00E4
    :0040B3E6  F501000000          LitI4                ;Push 00000001
    :0040B3EB  0484FE              FLdRfVar             ;Push LOCAL_017C
    **********Reference To->msvbvm60.rtcStringVar
                                   |
    :0040B3EE  0A0E000C00          ImpAdCallFPR4        ;Call ptr_00401074; check stack 000C; Push EAX
    :0040B3F3  0484FE              FLdRfVar             ;Push LOCAL_017C
    :0040B3F6  FCF61CFF            FStVar               ;
    :0040B3FA  0464FD              FLdRfVar             ;Push LOCAL_029C
    :0040B3FD  041CFF              FLdRfVar             ;Push LOCAL_00E4
    :0040B400  FBEF84FE            ConcatVar            ;
    :0040B404  FCF664FD            FStVar               ;
    :0040B408  042CFF              FLdRfVar             ;Push LOCAL_00D4
    :0040B40B  289CFE0100          LitVarI2             ;PushVarInteger 0001
    :0040B410  FB9484FE            AddVar               ;
    :0040B414  FCF62CFF            FStVar               ;
    :0040B418  042CFF              FLdRfVar             ;Push LOCAL_00D4
    :0040B41B  0454FE              FLdRfVar             ;Push LOCAL_01AC注册号地址
    :0040B41E  FBEB84FE            FnLenVar             ;vbaLenVar
    :0040B422  FB4D                LeVarBool            ;
    :0040B424  1D5803              BranchT              ;If Pop<>0 then ESI=0040B3A4
    这里是关键的比较处,
    ***********************************************************************************************
    :0040B427  0464FD              FLdRfVar             ;Push LOCAL_029C
    :0040B42A  04ACFE              FLdRfVar             ;Push LOCAL_0154
    :0040B42D  FB33                EqVarBool            ;
    :0040B42F  1C1A04              BranchF              ;If Pop=0 then ESI=0040B466把1c改为1d就爆了~_~
    ************************************************************************************************
    :0040B432  2734FE              LitVar               ;PushVar LOCAL_01CC
    :0040B435  2764FE              LitVar               ;PushVar LOCAL_019C
    ******Possible String Ref To->"??"
                                   |
    :0040B438  3A44FE0F00          LitVarStr            ;PushVarString ptr_00408D3C
    :0040B43D  4E74FE              FStVarCopyObj        ;[LOCAL_018C]=vbaVarDup(Pop)
    :0040B440  0474FE              FLdRfVar             ;Push LOCAL_018C
    :0040B443  F540000000          LitI4                ;Push 00000040
    ******Possible String Ref To->"??紎?
    PYG?"
                                   |
    :0040B448  3A9CFE1000          LitVarStr            ;PushVarString ptr_00408D24
    :0040B44D  4E84FE              FStVarCopyObj        ;[LOCAL_017C]=vbaVarDup(Pop)
    :0040B450  0484FE              FLdRfVar             ;Push LOCAL_017C
    **********Reference To->msvbvm60.rtcMsgBox
                                   |
    :0040B453  0A11001400          ImpAdCallFPR4        ;Call ptr_0040107A; check stack 0014; Push EAX
    :0040B458  36080084FE74FE64    FFreeVar             ;Free 0008/2 variants
    :0040B463  1E4404              Branch               ;ESI=0040B490
    ******Possible String Ref To->""
                                   |
    :0040B466  1B0800              LitStr               ;Push ptr_00408D0C
    :0040B469  21                  FLdPrThis            ;[SR]=[stack2]
    :0040B46A  0F0C03              VCallAd              ;Return the control index 05
    :0040B46D  1998FE              FStAdFunc            ;
    :0040B470  0898FE              FLdPr                ;[SR]=[LOCAL_0168]
    ***********Reference To:[propput]TextBox.Text
                                  |
    :0040B473  0DA4000000          VCallHresult         ;Call ptr_00408BC0
    :0040B478  1A98FE              FFree1Ad             ;Push [LOCAL_0168]; Call [[[LOCAL_0168]]+8]; [[LOCAL_0168]]=0
    ******Possible String Ref To->""
                                   |
    :0040B47B  1B0800              LitStr               ;Push ptr_00408D0C
    :0040B47E  21                  FLdPrThis            ;[SR]=[stack2]
    :0040B47F  0F0803              VCallAd              ;Return the control index 04
    :0040B482  1998FE              FStAdFunc            ;
    :0040B485  0898FE              FLdPr                ;[SR]=[LOCAL_0168]
    ***********Reference To:[propput]TextBox.Text
                                  |
    :0040B488  0DA4000000          VCallHresult         ;Call ptr_00408BC0
    :0040B48D  1A98FE              FFree1Ad             ;Push [LOCAL_0168]; Call [[[LOCAL_0168]]+8]; [[LOCAL_0168]]=0
    :0040B490  13                  ExitProcHresult      ;
    :0040B491  0000                LargeBos             ;IDE beginning of line with 00 byte codes

    ==============================================================================
    PYG_CrackMe2005认证试题算法总结:

    第一步:
    机器码为索引值从"5201314896788888888888888888888888"取相应位置的数字连
    接成字符串。该数组下标按C语言标准是从0开始的。

    第二步:
    用户名加上字符串"piaoyunge"之后全部变成大写字母,得到一个字符串继续下面,
    将首个字母的ASCII十六进制值跟0x3异或之后的结果,
    加上下一个字母的ASCII十六进制值再跟0x3异或,
    循环完后得到一个十六进制值,
    变成十进制与第一步得到的字符串变成十进制数字相加,结果保存为一个字符串。

    第三步:
    机器码为索引值从"chinapygabcdefghijklmopqrstuvwxyza"取相应位置的字母连
    接成字符串,变成大写。如果上一步得到的串长度比机器码长度少,那么少几位
    就把这个串最后几位变为'0'。
    把这个字符串加到第二步等到的字符串的后面,末尾加几个'0'补足24位。
    第五位后面加上'-',得到的这个字符串就是中间结果。

    第四步:
    注册码每一位ASCII十六进制值加上4,加上所在位置的序号,得到的这个字符串就是中间结
    果,与第三步得到的中间结果相等就OK。
    -------------------------------------------------------------------
    说明:做注册机到第三步中间结果时,对第四步进行逆变换,每一位减4,再减所在位置序号就是注册码.

    void key(char * machinecode,char * username,char * key)
    {

      char s0[]="piaoyunge";
      char s1[]="5201314896788888888888888888888888";
      char s2[]="chinapygabcdefghijklmopqrstuvwxyza";
      char s3[]="-                                 ";

      
      int i,j,k;
      unsigned long int m;
      char k1[34]={0};
      char k2[34]={0};

      /*通过机器码查表得到一个数字k1串一个字母串k2*/
      j = lstrlen(machinecode);
      for (i=0; i<j; i++)
        {
        k1[i]=s1[machinecode[i]-'0'];
        k2[i]=s2[machinecode[i]-'0'];
        }

      lstrcat(username,s0);//用户名加piaoyunge
      CharUpper(username);//变成大写串
      for (i=0,k=0; i<lstrlen(username); i++)
        {
        k = (k+username[i])^3;
        }
      m = atol(k1) + k;
      wsprintf(key,"%lu",m);
    /*---------------------------------------------------*/
      j=strlen(machinecode)-strlen(key);
        if (j)
        {
        for(i=(strlen(k2)-1);j>0;j--)
          k2[i]='0';
        }
    /*---------------------------------------------------*/
      strcat(key,k2);

        j = 24 - lstrlen(key);

      for(i=0;i<j;i++)
        {
        lstrcat(key,"0");//加'0'补足24位
        }

      lstrcpy(s3+1,key+5);//第五位后加'-'
      lstrcpy(key+5,s3);
      CharUpper(key);//变成大写串
    //------------------------------
      //逆变换出注册码
      j=lstrlen(key);
      for(i=0;i<j;i++)
        {
        key[i] = key[i]-i-5;
        }
    }

    surge[PYG]
    [email][email protected][/email]
    写于河北衡水

    在看雪上看到的!~~~surge 不在PYG首发,不厚道!~;P
    PYG19周年生日快乐!
  • TA的每日心情
    擦汗
    2017-9-28 11:05
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2006-1-29 20:50:29 | 显示全部楼层
    强~
    我看到VB的就晕晕~~
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-1-30 08:15:48 | 显示全部楼层
    THX,我win2ksp4,就WKTVBDBG141E安装没成功过,原来如此解决。

    VB的东西=Very Boring

    我正在试做"二期学员毕业试题.rar",碰到要跟算法就泄了,VB的东西实在太冗长,又不直观,苦闷!

    另: 谁有msVBVM60函数的详细说明,我手头有一份VB资料_API_1.0,但感觉不是很全.
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-1-30 09:06:46 | 显示全部楼层
    在看雪上看到的!~~~surge 不在PYG首发,不厚道!~;P

    抱赚,本意是想让更多的朋友有空多来PYG看看,
    而且这篇文章的注释并不是很详细,最早调试的时候没有做好详细的笔记,
    前几天整理了一下,就发到看雪上了。
    我想抽时间再跟一遍,把这篇文章写的再详细些,然后再发到这里,
    所以没有在PYG首发,。。

    接受批评,下次不管怎样,一定在PYG首发。

    [ 本帖最后由 surge 于 2006-1-30 04:08 编辑 ]
    PYG19周年生日快乐!
  • TA的每日心情
    擦汗
    2019-3-20 20:06
  • 签到天数: 258 天

    [LV.8]以坛为家I

     楼主| 发表于 2006-1-30 18:34:12 | 显示全部楼层
    下面给出的全是WINDOWS自带的API函数,可以用于VB和VC中。给出的是函数名和函数功能。想知道细节可以用GOOGLE搜一下。这可以做为个索引来用。

    1. 1. API之网络函数

    2. WNetAddConnection 创建同一个网络资源的永久性连接
    3. WNetAddConnection2 创建同一个网络资源的连接
    4. WNetAddConnection3 创建同一个网络资源的连接
    5. WNetCancelConnection 结束一个网络连接
    6. WNetCancelConnection2 结束一个网络连接
    7. WNetCloseEnum 结束一次枚举操作
    8. WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接
    9. WNetDisconnectDialog 启动一个标准对话框,以便断开同网络资源的连接
    10. WNetEnumResource 枚举网络资源
    11. WNetGetConnection 获取本地或已连接的一个资源的网络名称
    12. WNetGetLastError 获取网络错误的扩展错误信息
    13. WNetGetUniversalName 获取网络中一个文件的远程名称以及/或者UNC(统一命名规范)名称
    14. WNetGetUser 获取一个网络资源用以连接的名字
    15. WNetOpenEnum 启动对网络资源进行枚举的过程


    16. 2. API之消息函数

    17. BroadcastSystemMessage 将一条系统消息广播给系统中所有的顶级窗口
    18. GetMessagePos 取得消息队列中上一条消息处理完毕时的鼠标指针屏幕位置
    19. GetMessageTime 取得消息队列中上一条消息处理完毕时的时间
    20. PostMessage 将一条消息投递到指定窗口的消息队列
    21. PostThreadMessage 将一条消息投递给应用程序
    22. RegisterWindowMessage 获取分配给一个字串标识符的消息编号
    23. ReplyMessage 答复一个消息
    24. SendMessage 调用一个窗口的窗口函数,将一条消息发给那个窗口
    25. SendMessageCallback 将一条消息发给窗口
    26. SendMessageTimeout 向窗口发送一条消息
    27. SendNotifyMessage 向窗口发送一条消息

    28. 3. API之文件处理函数

    29. CloseHandle 关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等
    30. CompareFileTime 对比两个文件的时间
    31. CopyFile 复制文件
    32. createDirectory 创建一个新目录
    33. createFile 打开和创建文件、管道、邮槽、通信服务、设备以及控制台
    34. createFileMapping 创建一个新的文件映射对象
    35. deleteFile 删除指定文件
    36. DeviceIoControl 对设备执行指定的操作
    37. DosDateTimeToFileTime 将DOS日期和时间值转换成一个 win32 FILETIME 值
    38. FileTimeToDosDateTime 将一个 win32 FILETIME 值转换成DOS日期和时间值
    39. FileTimeToLocalFileTime 将一个FILETIME结构转换成本地时间
    40. FileTimeToSystemTime 根据一个FILETIME结构的内容,装载一个SYSTEMTIME结构
    41. FindClose 关闭由FindFirstFile函数创建的一个搜索句柄
    42. FindFirstFile 根据文件名查找文件
    43. FindNextFile 根据调用FindFirstFile函数时指定的一个文件名查找下一个文件
    44. FlushFileBuffers 针对指定的文件句柄,刷新内部文件缓冲区
    45. FlushViewOfFile 将写入文件映射缓冲区的所有数据都刷新到磁盘
    46. GetBinaryType 判断文件是否可以执行
    47. GetCompressedFileSize 判断一个压缩文件在磁盘上实际占据的字节数
    48. GetCurrentDirectory 在一个缓冲区中装载当前目录
    49. GetDiskFreeSpace 获取与一个磁盘的组织有关的信息,以及了解剩余空间的容量
    50. GetDiskFreeSpaceEx 获取与一个磁盘的组织以及剩余空间容量有关的信息
    51. GetDriveType 判断一个磁盘驱动器的类型
    52. GetExpandedName 取得一个压缩文件的全名
    53. GetFileAttributes 判断指定文件的属性
    54. GetFileInformationByHandle 这个函数提供了获取文件信息的一种机制
    55. GetFileSize 判断文件长度
    56. GetFileTime 取得指定文件的时间信息
    57. GetFileType 在给出文件句柄的前提下,判断文件类型
    58. GetFileVersionInfo 从支持版本标记的一个模块里获取文件版本信息
    59. GetFileVersionInfoSize 针对包含了版本资源的一个文件,判断容纳文件版本信息需要一个多大的缓冲区
    60. GetFullPathName 获取指定文件的完整路径名
    61. GetLogicalDrives 判断系统中存在哪些逻辑驱动器字母
    62. GetLogicalDriveStrings 获取一个字串,其中包含了当前所有逻辑驱动器的根驱动器路径
    63. GetOverlappedResult 判断一个重叠操作当前的状态
    64. GetPrivateProfileInt 为初始化文件(.ini文件)中指定的条目获取一个整数值
    65. GetPrivateProfileSection 获取指定小节(在.ini文件中)所有项名和值的一个列表
    66. GetPrivateProfileString 为初始化文件中指定的条目取得字串
    67. GetProfileInt 取得win.ini初始化文件中指定条目的一个整数值
    68. GetProfileSection 获取指定小节(在win.ini文件中)所有项名和值的一个列表
    69. GetProfileString 为win.ini初始化文件中指定的条目取得字串
    70. GetShortPathName 获取指定文件的短路径名
    71. GetSystemDirectory 取得Windows系统目录(即System目录)的完整路径名
    72. GetTempFileName 这个函数包含了一个临时文件的名字,它可由应用程序使用
    73. GetTempPath 获取为临时文件指定的路径
    74. GetVolumeInformation 获取与一个磁盘卷有关的信息
    75. GetWindowsDirectory 获取Windows目录的完整路径名
    76. hread 参考lread
    77. hwrite 参考lwrite函数
    78. lclose 关闭指定的文件
    79. lcreat 创建一个文件
    80. llseek 设置文件中进行读写的当前位置
    81. LockFile 锁定文件的某一部分,使其不与其他应用程序共享
    82. LockFileEx 与LockFile相似,只是它提供了更多的功能
    83. lopen 以二进制模式打开指定的文件
    84. lread 将文件中的数据读入内存缓冲区
    85. lwrite 将数据从内存缓冲区写入一个文件
    86. LZClose 关闭由LZOpenFile 或 LZInit函数打开的一个文件
    87. LZCopy 复制一个文件
    88. LZInit 这个函数用于初始化内部缓冲区
    89. LZOpenFile 该函数能执行大量不同的文件处理,而且兼容于压缩文件
    90. LZRead 将数据从文件读入内存缓冲区
    91. LZSeek 设置一个文件中进行读写的当前位置
    92. MapViewOfFile 将一个文件映射对象映射到当前应用程序的地址空间
    93. MoveFile 移动文件
    94. OpenFile 这个函数能执行大量不同的文件操作
    95. OpenFileMapping 打开一个现成的文件映射对象
    96. QueryDosDevice 在Windows NT中,DOS设备名会映射成NT系统设备名。该函数可判断当前的设备映射情况
    97. ReadFile 从文件中读出数据
    98. ReadFileEx 与ReadFile相似,只是它只能用于异步读操作,并包含了一个完整的回调
    99. RegCloseKey 关闭系统注册表中的一个项(或键)
    100. RegConnectRegistry 访问远程系统的部分注册表
    101. RegcreateKey 在指定的项下创建或打开一个项
    102. RegcreateKeyEx 在指定项下创建新项的更复杂的方式。在Win32环境中建议使用这个函数
    103. RegdeleteKey 删除现有项下方一个指定的子项
    104. RegdeleteValue 删除指定项下方的一个值
    105. RegEnumKey 枚举指定项的子项。在Win32环境中应使用RegEnumKeyEx
    106. RegEnumKeyEx 枚举指定项下方的子项
    107. RegEnumValue 枚举指定项的值
    108. RegFlushKey 将对项和它的子项作出的改动实际写入磁盘
    109. RegGetKeySecurity 获取与一个注册表项有关的安全信息
    110. RegLoadKey 从以前用RegSaveKey函数创建的一个文件里装载注册表信息
    111. RegNotifyChangeKeyValue 注册表项或它的任何一个子项发生变化时,用这个函数提供一种通知机制
    112. RegOpenKey 打开一个现有的注册表项
    113. RegOpenKeyEx 打开一个现有的项。在win32下推荐使用这个函数
    114. RegQueryInfoKey 获取与一个项有关的信息
    115. RegQueryValue 取得指定项或子项的默认(未命名)值
    116. RegQueryValueEx 获取一个项的设置值
    117. RegReplaceKey 用一个磁盘文件保存的信息替换注册表信息;并创建一个备份,在其中包含当前注册表信息
    118. RegRestoreKey 从一个磁盘文件恢复注册表信息
    119. RegSaveKey 将一个项以及它的所有子项都保存到一个磁盘文件
    120. RegSetKeySecurity 设置指定项的安全特性
    121. RegSetValue 设置指定项或子项的默认值
    122. RegSetValueEx 设置指定项的值
    123. RegUnLoadKey 卸载指定的项以及它的所有子项
    124. RemoveDirectory 删除指定目录
    125. SearchPath 查找指定文件
    126. SetCurrentDirectory 设置当前目录
    127. SetEndOfFile 针对一个打开的文件,将当前文件位置设为文件末尾
    128. SetFileAttributes 设置文件属性
    129. SetFilePointer 在一个文件中设置当前的读写位置
    130. SetFileTime 设置文件的创建、访问及上次修改时间
    131. SetHandleCount 这个函数不必在win32下使用;即使使用,也不会有任何效果
    132. SetVolumeLabel 设置一个磁盘的卷标(Label)
    133. SystemTimeToFileTime 根据一个FILETIME结构的内容,载入一个SYSTEMTIME结构
    134. UnlockFile 解除对一个文件的锁定
    135. UnlockFileEx 解除对一个文件的锁定
    136. UnmapViewOfFile 在当前应用程序的内存地址空间解除对一个文件映射对象的映射
    137. VerFindFile 用这个函数决定一个文件应安装到哪里
    138. VerInstallFile 用这个函数安装一个文件
    139. VerLanguageName 这个函数能根据16位语言代码获取一种语言的名称
    140. VerQueryValue 这个函数用于从版本资源中获取信息
    141. WriteFile 将数据写入一个文件
    142. WriteFileEx 与WriteFile类似,只是它只能用于异步写操作,并包括了一个完整的回调
    143. WritePrivateProfileSection 为一个初始化文件(.ini)中指定的小节设置所有项名和值
    144. WritePrivateProfileString 在初始化文件指定小节内设置一个字串
    145. WriteProfileSection 为Win.ini初始化文件中一个指定的小节设置所有项名和值
    146. WriteProfileString 在Win.ini初始化文件指定小节内设置一个字串

    147. 4. API之打印函数
    148. AbortDoc 取消一份文档的打印
    149. AbortPrinter 删除与一台打印机关联在一起的缓冲文件
    150. AddForm 为打印机的表单列表添加一个新表单
    151. AddJob 用于获取一个有效的路径名,以便用它为作业创建一个后台打印文件。它也会为作业分配一个作业编号
    152. AddMonitor 为系统添加一个打印机监视器
    153. AddPort 启动"添加端口"对话框,允许用户在系统可用端口列表中加入一个新端口
    154. AddPrinter 在系统中添加一台新打印机
    155. AddPrinterConnection 连接指定的打印机
    156. AddPrinterDriver 为指定的系统添加一个打印驱动程序
    157. AddPrintProcessor 为指定的系统添加一个打印处理器
    158. AddPrintProvidor 为系统添加一个打印供应商
    159. AdvancedDocumentProperties 启动打印机文档设置对话框
    160. ClosePrinter 关闭一个打开的打印机对象
    161. ConfigurePort 针对指定的端口,启动一个端口配置对话框
    162. ConnectToPrinterDlg 启动连接打印机对话框,用它同访问网络的打印机连接
    163. deleteForm 从打印机可用表单列表中删除一个表单
    164. deleteMonitor 删除指定的打印监视器
    165. deletePort 启动"删除端口"对话框,允许用户从当前系统删除一个端口
    166. deletePrinter 将指定的打印机标志为从系统中删除
    167. deletePrinterConnection 删除与指定打印机的连接
    168. deletePrinterDriver 从系统删除一个打印机驱动程序
    169. deletePrintProcessor 从指定系统删除一个打印处理器
    170. deletePrintProvidor 从系统中删除一个打印供应商
    171. DeviceCapabilities 利用这个函数可获得与一个设备的能力有关的信息
    172. DocumentProperties 打印机配置控制函数
    173. EndDocAPI 结束一个成功的打印作业
    174. EndDocPrinter 在后台打印程序的级别指定一个文档的结束
    175. EndPage 用这个函数完成一个页面的打印,并准备设备场景,以便打印下一个页
    176. EndPagePrinter 指定一个页在打印作业中的结尾
    177. EnumForms 枚举一台打印机可用的表单
    178. EnumJobs 枚举打印队列中的作业
    179. EnumMonitors 枚举可用的打印监视器
    180. EnumPorts 枚举一个系统可用的端口
    181. EnumPrinterDrivers 枚举指定系统中已安装的打印机驱动程序
    182. EnumPrinters 枚举系统中安装的打印机
    183. EnumPrintProcessorDatatypes 枚举由一个打印处理器支持的数据类型
    184. EnumPrintProcessors 枚举系统中可用的打印处理器
    185. Escape 设备控制函数
    186. FindClosePrinterChangeNotification 关闭用FindFirstPrinterChangeNotification函数获取的一个打印机通告对象
    187. FindFirstPrinterChangeNotification 创建一个新的改变通告对象,以便我们注意打印机状态的各种变化
    188. FindNextPrinterChangeNotification 用这个函数判断触发一次打印机改变通告信号的原因
    189. FreePrinterNotifyInfo 释放由FindNextPrinterChangeNotification函数分配的一个缓冲区
    190. GetForm 取得与指定表单有关的信息
    191. GetJob 获取与指定作业有关的信息
    192. GetPrinter 取得与指定打印机有关的信息
    193. GetPrinterData 为打印机设置注册表配置信息
    194. GetPrinterDriver 针对指定的打印机,获取与打印机驱动程序有关的信息
    195. GetPrinterDriverDirectory 判断指定系统中包含了打印机驱动程序的目录是什么
    196. GetPrintProcessorDirectory 判断指定系统中包含了打印机处理器驱动程序及文件的目录
    197. OpenPrinter 打开指定的打印机,并获取打印机的句柄
    198. PrinterMessageBox 在拥有指定打印作业的系统上显示一个打印机出错消息框
    199. PrinterProperties 启动打印机属性对话框,以便对打印机进行配置
    200. ReadPrinter 从打印机读入数据
    201. ResetDC 重设一个设备场景
    202. ResetPrinter 改变指定打印机的默认数据类型及文档设置
    203. ScheduleJob 提交一个要打印的作业
    204. SetAbortProc 为Windows指定取消函数的地址
    205. SetForm 为指定的表单设置信息
    206. SetJob 对一个打印作业的状态进行控制
    207. SetPrinter 对一台打印机的状态进行控制
    208. SetPrinterData 设置打印机的注册表配置信息
    209. StartDoc 开始一个打印作业
    210. StartDocPrinter 在后台打印的级别启动一个新文档
    211. StartPage 打印一个新页前要先调用这个函数
    212. StartPagePrinter 在打印作业中指定一个新页的开始
    213. WritePrinter 将发送目录中的数据写入打印机

    214. 5. API之文本和字体函数

    215. AddFontResource 在Windows系统中添加一种字体资源
    216. createFont 用指定的属性创建一种逻辑字体
    217. createFontIndirect 用指定的属性创建一种逻辑字体
    218. createScalableFontResource 为一种TureType字体创建一个资源文件,以便能用API函数AddFontResource将其加入Windows系统
    219. DrawText 将文本描绘到指定的矩形中
    220. DrawTextEx 与DrawText相似,只是加入了更多的功能
    221. EnumFontFamilies 列举指定设备可用的字体
    222. EnumFontFamiliesEx 列举指定设备可用的字体
    223. EnumFonts 列举指定设备可用的字体
    224. ExtTextOut 经过扩展的文本描绘函数。也请参考SetTextAlign函数
    225. GetAspectRatioFilterEx 用SetMapperFlags要求Windows只选择与设备当前纵横比相符的光栅字体时,本函数可判断纵横比大小
    226. GetCharABCWidths 判断TureType字体中一个或多个字符的A-B-C大小
    227. GetCharABCWidthsFloat 查询一种字体中一个或多个字符的A-B-C尺寸
    228. GetCharacterPlacement 该函数用于了解如何用一个给定的字符显示一个字串
    229. GetCharWidth 调查字体中一个或多个字符的宽度
    230. GetFontData 接收一种可缩放字体文件的数据
    231. GetFontLanguageInfo 返回目前选入指定设备场景中的字体的信息
    232. GetGlyphOutline 取得TureType字体中构成一个字符的曲线信息
    233. GetKerningPairs 取得指定字体的字距信息
    234. GetOutlineTextMetrics 接收与TureType字体内部特征有关的详细信息
    235. GetRasterizerCaps 了解系统是否有能力支持可缩放的字体
    236. GetTabbedTextExtent 判断一个字串占据的范围,同时考虑制表站扩充的因素
    237. GetTextAlign 接收一个设备场景当前的文本对齐标志
    238. GetTextCharacterExtra 判断额外字符间距的当前值
    239. GetTextCharset 接收当前选入指定设备场景的字体的字符集标识符
    240. GetTextCharsetInfo 获取与当前选定字体的字符集有关的详细信息
    241. GetTextColor 判断当前字体颜色。通常也称为"前景色"
    242. GetTextExtentExPoint 判断要填入指定区域的字符数量。也用一个数组装载每个字符的范围信息
    243. GetTextExtentPoint 判断一个字串的大小(范围)
    244. GetTextFace 获取一种字体的字样名
    245. GetTextMetrics 获取与选入一种设备场景的物理字体有关的信息
    246. GrayString 描绘一个以灰色显示的字串。通常由Windows用于标识禁止状态
    247. PolyTextOut 描绘一系列字串
    248. RemoveFontResource 从Windows系统中删除一种字体资源
    249. SetMapperFlags Windows对字体进行映射时,可用该函数选择与目标设备的纵横比相符的光栅字体
    250. SetTextAlign 设置文本对齐方式,并指定在文本输出过程中使用设备场景的当前位置
    251. SetTextCharacterExtra 描绘文本的时候,指定要在字符间插入的额外间距
    252. SetTextColor 设置当前文本颜色。这种颜色也称为"前景色"
    253. SetTextJustification 通过指定一个文本行应占据的额外空间,可用这个函数对文本进行两端对齐处理
    254. TabbedTextOut 支持制表站的一个文本描绘函数
    255. TextOut 文本绘图函数

    256. 6. API之菜单函数

    257. AppendMenu 在指定的菜单里添加一个菜单项
    258. CheckMenuItem 复选或撤消复选指定的菜单条目
    259. CheckMenuRadioItem 指定一个菜单条目被复选成"单选"项目
    260. createMenu 创建新菜单
    261. createPopupMenu 创建一个空的弹出式菜单
    262. deleteMenu 删除指定的菜单条目
    263. DestroyMenu 删除指定的菜单
    264. DrawMenuBar 为指定的窗口重画菜单
    265. EnableMenuItem 允许或禁止指定的菜单条目
    266. GetMenu 取得窗口中一个菜单的句柄
    267. GetMenuCheckMarkDimensions 返回一个菜单复选符的大小
    268. GetMenuContextHelpId 取得一个菜单的帮助场景ID
    269. GetMenuDefaultItem 判断菜单中的哪个条目是默认条目
    270. GetMenuItemCount 返回菜单中条目(菜单项)的数量
    271. GetMenuItemID 返回位于菜单中指定位置处的条目的菜单ID
    272. GetMenuItemInfo 取得(接收)与一个菜单条目有关的特定信息
    273. GetMenuItemRect 在一个矩形中装载指定菜单条目的屏幕坐标信息
    274. GetMenuState 取得与指定菜单条目状态有关的信息
    275. GetMenuString 取得指定菜单条目的字串
    276. GetSubMenu 取得一个弹出式菜单的句柄,它位于菜单中指定的位置
    277. GetSystemMenu 取得指定窗口的系统菜单的句柄
    278. HiliteMenuItem 控制顶级菜单条目的加亮显示状态
    279. insertMenu 在菜单的指定位置处插入一个菜单条目,并根据需要将其他条目向下移动
    280. insertMenuItem 插入一个新菜单条目
    281. IsMenu 判断指定的句柄是否为一个菜单的句柄
    282. LoadMenu 从指定的模块或应用程序实例中载入一个菜单
    283. LoadMenuIndirect 载入一个菜单
    284. MenuItemFromPoint 判断哪个菜单条目包含了屏幕上一个指定的点
    285. modifyMenu 改变菜单条目
    286. RemoveMenu 删除指定的菜单条目
    287. SetMenu 设置窗口菜单
    288. SetMenuContextHelpId 设置一个菜单的帮助场景ID
    289. SetMenuDefaultItem 将一个菜单条目设为默认条目
    290. SetMenuItemBitmaps 设置一幅特定位图,令其在指定的菜单条目中使用,代替标准的复选符号(√)
    291. SetMenuItemInfo 为一个菜单条目设置指定的信息
    292. TrackPopupMenu 在屏幕的任意地方显示一个弹出式菜单
    293. TrackPopupMenuEx 与TrackPopupMenu相似,只是它提供了额外的功能

    294. 7. API之位图、图标和光栅运算函数
    295. BitBlt 将一幅位图从一个设备场景复制到另一个
    296. CopyIcon 制作指定图标或鼠标指针的一个副本。这个副本从属于发出调用的应用程序
    297. CopyImage 复制位图、图标或指针,同时在复制过程中进行一些转换工作
    298. createBitmap 按照规定的格式创建一幅与设备有关位图
    299. createBitmapIndirect 创建一幅与设备有关位图
    300. createCompatibleBitmap 创建一幅与设备有关位图,它与指定的设备场景典容
    301. createCursor 创建一个鼠标指针
    302. createDIBitmap 根据一幅与设备无关的位图创建一幅与设备有关的位图
    303. createDIBSection 创建一个DIBSection
    304. createIcon 创建一个图标
    305. createIconIndirect 创建一个图标
    306. DestroyCursor 清除指定的鼠标指针,并释放它占用的所有系统资源
    307. DestroyIcon 清除图标
    308. DrawIcon 在指定的位置画一个图标
    309. DrawIconEx 描绘一个图标或鼠标指针。与DrawIcon相比,这个函数提供了更多的功能
    310. ExtractAssociatedIcon 判断一个可执行程序或DLL中是否存在图标,或是否有图标与系统注册表中指定的文件存在关联并提取之
    311. ExtractIcon 判断一个可执行文件或DLL中是否有图标存在,并将其提取出来
    312. GetBitmapBits 将来自位图的二进制位复制到一个缓冲区
    313. GetBitmapDimensionEx 取得一幅位图的宽度和高度
    314. GetDIBColorTable 从选入设备场景的DIBSection中取得颜色表信息
    315. GetDIBits 将来自一幅位图的二进制位复制到一幅与设备无关的位图里
    316. GetIconInfo 取得与图标有关的信息
    317. GetStretchBltMode 判断StretchBlt 和 StretchDIBits函数采用的伸缩模式
    318. LoadBitmap 从指定的模块或应用程序实例中载入一幅位图
    319. LoadCursor 从指定的模块或应用程序实例中载入一个鼠标指针
    320. LoadCursorFromFile 在一个指针文件或一个动画指针文件的基础上创建一个指针
    321. LoadIcon 从指定的模块或应用程序实例中载入一个图标
    322. LoadImage 载入一个位图、图标或指针
    323. MaskBlt 执行复杂的图象传输,同时进行掩模(MASK)处理
    324. PatBlt 在当前选定的刷子的基础上,用一个图案填充指定的设备场景
    325. PlgBlt 复制一幅位图,同时将其转换成一个平行四边形。利用它可对位图进行旋转处理
    326. SetBitmapBits 将来自缓冲区的二进制位复制到一幅位图
    327. SetBitmapDimensionEx 设置一幅位图的宽度。以一毫米的十分之一为单位
    328. SetDIBColorTable 设置选入设备场景的一个DIBSection的颜色表信息
    329. SetDIBits 将来自与设备无关位图的二进制位复制到一幅与设备有关的位图里
    330. SetDIBitsToDevice 将一幅与设备无关位图的全部或部分数据直接复制到一个设备
    331. SetStretchBltMode 指定StretchBlt 和 StretchDIBits函数的伸缩模式
    332. StretchBlt 将一幅位图从一个设备场景复制到另一个
    333. StretchDIBits 将一幅与设备无关位图的全部或部分数据直接复制到指定的设备场景

    334. 8. API之绘图函数

    335. AbortPath 抛弃选入指定设备场景中的所有路径。也取消目前正在进行的任何路径的创建工作
    336. AngleArc 用一个连接弧画一条线
    337. Arc 画一个圆弧
    338. BeginPath 启动一个路径分支
    339. CancelDC 取消另一个线程里的长时间绘图操作
    340. Chord 画一个弦
    341. CloseEnhMetaFile 关闭指定的增强型图元文件设备场景,并将新建的图元文件返回一个句柄
    342. CloseFigure 描绘到一个路径时,关闭当前打开的图形
    343. CloseMetaFile 关闭指定的图元文件设备场景,并向新建的图元文件返回一个句柄
    344. CopyEnhMetaFile 制作指定增强型图元文件的一个副本(拷贝)
    345. CopyMetaFile 制作指定(标准)图元文件的一个副本
    346. createBrushIndirect 在一个LOGBRUSH数据结构的基础上创建一个刷子
    347. createDIBPatternBrush 用一幅与设备无关的位图创建一个刷子,以便指定刷子样式(图案)
    348. createEnhMetaFile 创建一个增强型的图元文件设备场景
    349. createHatchBrush 创建带有阴影图案的一个刷子
    350. createMetaFile 创建一个图元文件设备场景
    351. createPatternBrush 用指定了刷子图案的一幅位图创建一个刷子
    352. createPen 用指定的样式、宽度和颜色创建一个画笔
    353. createPenIndirect 根据指定的LOGPEN结构创建一个画笔
    354. createSolidBrush 用纯色创建一个刷子
    355. deleteEnhMetaFile 删除指定的增强型图元文件
    356. deleteMetaFile 删除指定的图元文件
    357. deleteObject 删除GDI对象,对象使用的所有系统资源都会被释放
    358. DrawEdge 用指定的样式描绘一个矩形的边框
    359. DrawEscape 换码(Escape)函数将数据直接发至显示设备驱动程序
    360. DrawFocusRect 画一个焦点矩形
    361. DrawFrameControl 描绘一个标准控件
    362. DrawState 为一幅图象或绘图操作应用各式各样的效果
    363. Ellipse 描绘一个椭圆,由指定的矩形围绕
    364. EndPath 停止定义一个路径
    365. EnumEnhMetaFile 针对一个增强型图元文件,列举其中单独的图元文件记录
    366. EnumMetaFile 为一个标准的windows图元文件枚举单独的图元文件记录
    367. EnumObjects 枚举可随同指定设备场景使用的画笔和刷子
    368. ExtcreatePen 创建一个扩展画笔(装饰或几何)
    369. ExtFloodFill 在指定的设备场景里,用当前选择的刷子填充一个区域
    370. FillPath 关闭路径中任何打开的图形,并用当前刷子填充
    371. FillRect 用指定的刷子填充一个矩形
    372. FlattenPath 将一个路径中的所有曲线都转换成线段
    373. FloodFill 用当前选定的刷子在指定的设备场景中填充一个区域
    374. FrameRect 用指定的刷子围绕一个矩形画一个边框
    375. GdiComment 为指定的增强型图元文件设备场景添加一条注释信息
    376. GdiFlush 执行任何未决的绘图操作
    377. GdiGetBatchLimit 判断有多少个GDI绘图命令位于队列中
    378. GdiSetBatchLimit 指定有多少个GDI绘图命令能够进入队列
    379. GetArcDirection 画圆弧的时候,判断当前采用的绘图方向
    380. GetBkColor 取得指定设备场景当前的背景颜色
    381. GetBkMode 针对指定的设备场景,取得当前的背景填充模式
    382. GetBrushOrgEx 判断指定设备场景中当前选定刷子起点
    383. GetCurrentObject 获得指定类型的当前选定对象
    384. GetCurrentPositionEx 在指定的设备场景中取得当前的画笔位置
    385. GetEnhMetaFile 取得磁盘文件中包含的一个增强型图元文件的图元文件句柄
    386. GetEnhMetaFileBits 将指定的增强型图元文件复制到一个内存缓冲区里
    387. GetEnhMetaFileDescription 返回对一个增强型图元文件的说明
    388. GetEnhMetaFileHeader 取得增强型图元文件的图元文件头
    389. GetEnhMetaFilePaletteEntries 取得增强型图元文件的全部或部分调色板
    390. GetMetaFile 取得包含在一个磁盘文件中的图元文件的图元文件句柄
    391. GetMetaFileBitsEx 将指定的图元文件复制到一个内存缓冲区
    392. GetMiterLimit 取得设备场景的斜率限制(Miter)设置
    393. GetNearestColor 根据设备的显示能力,取得与指定颜色最接近的一种纯色
    394. GetObjectAPI 取得对指定对象进行说明的一个结构
    395. GetObjectType 判断由指定句柄引用的GDI对象的类型
    396. GetPath 取得对当前路径进行定义的一系列数据
    397. GetPixel 在指定的设备场景中取得一个像素的RGB值
    398. GetPolyFillMode 针对指定的设备场景,获得多边形填充模式
    399. GetROP2 针对指定的设备场景,取得当前的绘图模式
    400. GetStockObject 取得一个固有对象(Stock)
    401. GetSysColorBrush 为任何一种标准系统颜色取得一个刷子
    402. GetWinMetaFileBits 通过在一个缓冲区中填充用于标准图元文件的数据,将一个增强型图元文件转换成标准windows图元文件
    403. InvertRect 通过反转每个像素的值,从而反转一个设备场景中指定的矩形
    404. LineDDA 枚举指定线段中的所有点
    405. LineTo 用当前画笔画一条线,从当前位置连到一个指定的点
    406. MoveToEx 为指定的设备场景指定一个新的当前画笔位置
    407. PaintDesk 在指定的设备场景中描绘桌面墙纸图案
    408. PathToRegion 将当前选定的路径转换到一个区域里
    409. Pie 画一个饼图
    410. PlayEnhMetaFile 在指定的设备场景中画一个增强型图元文件
    411. PlayEnhMetaFileRecord 回放单独一条增强型图元文件记录
    412. PlayMetaFile 在指定的设备场景中回放一个图元文件
    413. PlayMetaFileRecord 回放来自图元文件的单条记录
    414. PolyBezier 描绘一条或多条贝塞尔(Bezier)曲线
    415. PolyDraw 描绘一条复杂的曲线,由线段及贝塞尔曲线组成
    416. Polygon 描绘一个多边形
    417. Polyline 用当前画笔描绘一系列线段
    418. PolyPolygon 用当前选定画笔描绘两个或多个多边形
    419. PolyPolyline 用当前选定画笔描绘两个或多个多边形
    420. Rectangle 用当前选定的画笔描绘矩形,并用当前选定的刷子填充
    421. RoundRect 用当前选定的画笔画一个圆角矩形,并用当前选定的刷子在其中填充
    422. selectClipPath 将设备场景当前的路径合并到剪切区域里
    423. selectObject 为当前设备场景选择图形对象
    424. SetArcDirection 设置圆弧的描绘方向
    425. SetBkColor 为指定的设备场景设置背景颜色
    426. SetBkMode 指定阴影刷子、虚线画笔以及字符中的空隙的填充方式
    427. SetBrushOrgEx 为指定的设备场景设置当前选定刷子的起点
    428. SetEnhMetaFileBits 用指定内存缓冲区内包含的数据创建一个增强型图元文件
    429. SetMetaFileBitsEx 用包含在指定内存缓冲区内的数据结构创建一个图元文件
    430. SetMiterLimit 设置设备场景当前的斜率限制
    431. SetPixel 在指定的设备场景中设置一个像素的RGB值
    432. SetPixelV 在指定的设备场景中设置一个像素的RGB值
    433. SetPolyFillMode 设置多边形的填充模式
    434. SetROP2 设置指定设备场景的绘图模式。与vb的DrawMode属性完全一致
    435. SetWinMetaFileBits 将一个标准Windows图元文件转换成增强型图元文件
    436. StrokeAndFillPath 针对指定的设备场景,关闭路径上打开的所有区域
    437. StrokePath 用当前画笔描绘一个路径的轮廓。打开的图形不会被这个函数关闭
    438. UnrealizeObject 将一个刷子对象选入设备场景之前,如刷子的起点准备用SetBrushOrgEx修改,则必须先调用本函数
    439. WidenPath 根据选定画笔的宽度,重新定义当前选定的路径

    440. 9. API之设备场景函数

    441. CombineRgn 将两个区域组合为一个新区域
    442. CombineTransform 驱动世界转换。它相当于依顺序进行两次转换
    443. createCompatibleDC 创建一个与特定设备场景一致的内存设备场景
    444. createDC 为专门设备创建设备场景
    445. createEllipticRgn 创建一个椭圆
    446. createEllipticRgnIndirect 创建一个内切于特定矩形的椭圆区域
    447. createIC 为专用设备创建一个信息场景
    448. createPolygonRgn 创建一个由一系列点围成的区域
    449. createPolyPolygonRgn 创建由多个多边形构成的区域。每个多边形都应是封闭的
    450. createRectRgn 创建一个矩形区域
    451. createRectRgnIndirect 创建一个矩形区域
    452. createRoundRectRgn 创建一个圆角矩形
    453. deleteDC 删除专用设备场景或信息场景,释放所有相关窗口资源
    454. DPtoLP 将点阵从设备坐标转换到专用设备场景逻辑坐标
    455. EqualRgn 确定两个区域是否相等
    456. ExcludeClipRect 从专用设备场景的剪裁区中去掉一个矩形区。矩形内不能进行绘图
    457. ExcludeupdateRgn 从专用设备场景剪裁区去掉指定窗口的刷新区域
    458. ExtcreateRegion 根据世界转换修改区域
    459. ExtselectClipRgn 将指定区域组合到设备场景的当前剪裁区
    460. FillRgn 用指定刷子填充指定区域
    461. FrameRgn 用指定刷子围绕指定区域画一个外框
    462. GetBoundsRect 获取指定设备场景的边界矩形
    463. GetClipBox 获取完全包含指定设备场景剪裁区的最小矩形
    464. GetClipRgn 获取设备场景当前剪裁区
    465. GetDC 获取指定窗口的设备场景
    466. GetDCEx 为指定窗口获取设备场景。相比GetDC,本函数提供了更多的选项
    467. GetDCOrgEx 获取指定设备场景起点位置(以屏幕坐标表示)
    468. GetDeviceCaps 根据指定设备场景代表的设备的功能返回信息
    469. GetGraphicsMode 确定是否允许增强图形模式(世界转换)
    470. GetMapMode 为特定设备场景调入映象模式
    471. GetRegionData 装入描述一个区域信息的RgnData结构或缓冲区
    472. GetRgnBox 获取完全包含指定区域的最小矩形
    473. GetupdateRgn 确定指定窗口的刷新区域。该区域当前无效,需要刷新
    474. GetViewportExtEx 获取设备场景视口(viewport)范围
    475. GetViewportOrgEx 获取设备场景视口起点
    476. GetWindowDC 获取整个窗口(包括边框、滚动条、标题栏、菜单等)的设备场景
    477. GetWindowExtEx 获取指定设备场景的窗口范围
    478. GetWindowOrgEx 获取指定设备场景的逻辑窗口的起点
    479. GetWindowRgn 获取窗口区域
    480. GetWorldTransform 如果有世界转换,为设备场景获取当前世界转换
    481. IntersectClipRect 为指定设备定义一个新的剪裁区
    482. InvalidateRgn 使窗口指定区域不活动,并将它加入窗口刷新区,使之可随后被重画
    483. InvertRgn 通过颠倒每个像素值反转设备场景指定区域
    484. LPtoDP 将点阵从指定设备场景逻辑坐标转换为设备坐标
    485. modifyWorldTransform 根据指定的模式修改世界转换
    486. OffsetClipRgn 按指定量平移设备场景剪裁区
    487. OffsetRgn 按指定偏移量平移指定区域
    488. OffsetViewportOrgEx 平移设备场景视口区域
    489. OffsetWindowOrgEx 平移指定设备场景窗口起点
    490. PaintRgn 用当前刷子背景色填充指定区域
    491. PtInRegion 确定点是否在指定区域内
    492. PtVisible 确定指定点是否可见(即,点是否在设备场景剪裁区内)
    493. RectInRegion 确定矩形是否有部分在指定区域内
    494. RectVisible 确定指定矩形是否有部分可见(是否在设备场景剪裁区内)
    495. ReleaseDC 释放由调用GetDC或GetWindowDC函数获取的指定设备场景
    496. RestoreDC 从设备场景堆栈恢复一个原先保存的设备场景
    497. SaveDC 将指定设备场景状态保存到Windows设备场景堆栈
    498. ScaleViewportExtEx 缩放设备场景视口的范围
    499. ScaleWindowExtEx 缩放指定设备场景窗口范围
    500. ScrollDC 在窗口(由设备场景代表)中水平和(或)垂直滚动矩形
    501. selectClipRgn 为指定设备场景选择新的剪裁区
    502. SetBoundsRect 设置指定设备场景的边界矩形
    503. SetGraphicsMode 允许或禁止增强图形模式,以提供某些支持(包括世界转换)
    504. SetMapMode 设置指定设备场景的映射模式
    505. SetRectRgn 设置区域为指定的矩形
    506. SetViewportExtEx 设置设备场景视口范围
    507. SetViewportOrgEx 设置设备场景视口起点
    508. SetWindowExtEx 设置指定设备场景窗口范围
    509. SetWindowOrgEx 设置指定设备场景窗口起点
    510. SetWindowRgn 设置窗口区域
    511. SetWorldTransform 设置世界转换
    512. ValidateRgn 激活窗口中指定区域,把它从刷新区移走
    513. WindowFromDC 取回与某一设备场景相关的窗口的句柄

    514. 10. API之硬件与系统函数
    515. ActivateKeyboardLayout 激活一个新的键盘布局。键盘布局定义了按键在一种物理性键盘上的位置与含义
    516. Beep 用于生成简单的声音
    517. CharToOem 将一个字串从ANSI字符集转换到OEM字符集
    518. ClipCursor 将指针限制到指定区域
    519. ConvertDefaultLocale 将一个特殊的地方标识符转换成真实的地方ID
    520. createCaret 根据指定的信息创建一个插入符(光标),并将它选定为指定窗口的默认插入符
    521. DestroyCaret 清除(破坏)一个插入符
    522. EnumCalendarInfo 枚举在指定"地方"环境中可用的日历信息
    523. EnumDateFormats 列举指定的"当地"设置中可用的长、短日期格式
    524. EnumSystemCodePages 枚举系统中已安装或支持的代码页
    525. EnumSystemLocales 枚举系统已经安装或提供支持的"地方"设置
    526. EnumTimeFormats 枚举一个指定的地方适用的时间格式
    527. ExitWindowsEx 退出windows,并用特定的选项重新启动
    528. ExpandEnvironmentStrings 扩充环境字串
    529. FreeEnvironmentStrings 翻译指定的环境字串块
    530. GetACP 判断目前正在生效的ANSI代码页
    531. GetAsyncKeyState 判断函数调用时指定虚拟键的状态
    532. GetCaretBlinkTime 判断插入符光标的闪烁频率
    533. GetCaretPos 判断插入符的当前位置
    534. GetClipCursor 取得一个矩形,用于描述目前为鼠标指针规定的剪切区域
    535. GetCommandLine 获得指向当前命令行缓冲区的一个指针
    536. GetComputerName 取得这台计算机的名称
    537. GetCPInfo 取得与指定代码页有关的信息
    538. GetCurrencyFormat 针对指定的"地方"设置,根据货币格式格式化一个数字
    539. GetCursor 获取目前选择的鼠标指针的句柄
    540. GetCursorPos 获取鼠标指针的当前位置
    541. GetDateFormat 针对指定的"当地"格式,对一个系统日期进行格式化
    542. GetDoubleClickTime 判断连续两次鼠标单击之间会被处理成双击事件的间隔时间
    543. GetEnvironmentStrings 为包含了当前环境字串设置的一个内存块分配和返回一个句柄
    544. GetEnvironmentVariable 取得一个环境变量的值
    545. GetInputState 判断是否存在任何待决(等待处理)的鼠标或键盘事件
    546. GetKBCodePage 由GetOEMCP取代,两者功能完全相同
    547. GetKeyboardLayout 取得一个句柄,描述指定应用程序的键盘布局
    548. GetKeyboardLayoutList 获得系统适用的所有键盘布局的一个列表
    549. GetKeyboardLayoutName 取得当前活动键盘布局的名称
    550. GetKeyboardState 取得键盘上每个虚拟键当前的状态
    551. GetKeyboardType 了解与正在使用的键盘有关的信息
    552. GetKeyNameText 在给出扫描码的前提下,判断键名
    553. GetKeyState 针对已处理过的按键,在最近一次输入信息时,判断指定虚拟键的状态
    554. GetLastError 针对之前调用的api函数,用这个函数取得扩展错误信息
    555. GetLocaleInfo 取得与指定"地方"有关的信息
    556. GetLocalTime 取得本地日期和时间
    557. GetNumberFormat 针对指定的"地方",按特定的格式格式化一个数字
    558. GetOEMCP 判断在OEM和ANSI字符集间转换的windows代码页
    559. GetQueueStatus 判断应用程序消息队列中待决(等待处理)的消息类型
    560. GetSysColor 判断指定windows显示对象的颜色
    561. GetSystemDefaultLangID 取得系统的默认语言ID
    562. GetSystemDefaultLCID 取得当前的默认系统"地方"
    563. GetSystemInfo 取得与底层硬件平台有关的信息
    564. GetSystemMetrics 返回与windows环境有关的信息
    565. GetSystemPowerStatus 获得与当前系统电源状态有关的信息
    566. GetSystemTime 取得当前系统时间,这个时间采用的是"协同世界时间"(即UTC,也叫做GMT)格式
    567. GetSystemTimeAdjustment 使内部系统时钟与一个外部的时钟信号源同步
    568. GetThreadLocale 取得当前线程的地方ID
    569. GetTickCount 用于获取自windows启动以来经历的时间长度(毫秒)
    570. GetTimeFormat 针对当前指定的"地方",按特定的格式格式化一个系统时间
    571. GetTimeZoneInformation 取得与系统时区设置有关的信息
    572. GetUserDefaultLangID 为当前用户取得默认语言ID
    573. GetUserDefaultLCID 取得当前用户的默认"地方"设置
    574. GetUserName 取得当前用户的名字
    575. GetVersion 判断当前运行的Windows和DOS版本
    576. GetVersionEx 取得与平台和操作系统有关的版本信息
    577. HideCaret 在指定的窗口隐藏插入符(光标)
    578. IsValidCodePage 判断一个代码页是否有效
    579. IsValidLocale 判断地方标识符是否有效
    580. keybd_event 这个函数模拟了键盘行动
    581. LoadKeyboardLayout 载入一个键盘布局
    582. MapVirtualKey 根据指定的映射类型,执行不同的扫描码和字符转换
    583. MapVirtualKeyEx 根据指定的映射类型,执行不同的扫描码和字符转换
    584. MessageBeep 播放一个系统声音。系统声音的分配方案是在控制面板里决定的
    585. mouse_event 模拟一次鼠标事件
    586. OemKeyScan 判断OEM字符集中的一个ASCII字符的扫描码和Shift键状态
    587. OemToChar 将OEM字符集的一个字串转换到ANSI字符集
    588. SetCaretBlinkTime 指定插入符(光标)的闪烁频率
    589. SetCaretPos 指定插入符的位置
    590. SetComputerName 设置新的计算机名
    591. SetCursor 将指定的鼠标指针设为当前指针
    592. SetCursorPos 设置指针的位置
    593. SetDoubleClickTime 设置连续两次鼠标单击之间能使系统认为是双击事件的间隔时间
    594. SetEnvironmentVariable 将一个环境变量设为指定的值
    595. SetKeyboardState 设置每个虚拟键当前在键盘上的状态
    596. SetLocaleInfo 改变用户"地方"设置信息
    597. SetLocalTime 设置当前地方时间
    598. SetSysColors 设置指定窗口显示对象的颜色
    599. SetSystemCursor 改变任何一个标准系统指针
    600. SetSystemTime 设置当前系统时间
    601. SetSystemTimeAdjustment 定时添加一个校准值使内部系统时钟与一个外部的时钟信号源同步
    602. SetThreadLocale 为当前线程设置地方
    603. SetTimeZoneInformation 设置系统时区信息
    604. ShowCaret 在指定的窗口里显示插入符(光标)
    605. ShowCursor 控制鼠标指针的可视性
    606. SwapMouseButton 决定是否互换鼠标左右键的功能
    607. SystemParametersInfo 获取和设置数量众多的windows系统参数
    608. SystemTimeToTzSpecificLocalTime 将系统时间转换成地方时间
    609. ToAscii 根据当前的扫描码和键盘信息,将一个虚拟键转换成ASCII字符
    610. ToUnicode 根据当前的扫描码和键盘信息,将一个虚拟键转换成Unicode字符
    611. UnloadKeyboardLayout 卸载指定的键盘布局
    612. VkKeyScan 针对Windows字符集中一个ASCII字符,判断虚拟键码和Shift键的状态

    613. 11. API之进程和线程函数

    614. CancelWaitableTimer 这个函数用于取消一个可以等待下去的计时器操作
    615. CallNamedPipe 这个函数由一个希望通过管道通信的一个客户进程调用
    616. ConnectNamedPipe 指示一台服务器等待下去,直至客户机同一个命名管道连接
    617. createEvent 创建一个事件对象
    618. createMailslot 创建一个邮路。返回的句柄由邮路服务器使用(收件人)
    619. createMutex 创建一个互斥体(MUTEX)
    620. createNamedPipe 创建一个命名管道。返回的句柄由管道的服务器端使用
    621. createPipe 创建一个匿名管道
    622. createProcess 创建一个新进程(比如执行一个程序)
    623. createSemaphore 创建一个新的信号机
    624. createWaitableTimer 创建一个可等待的计时器对象
    625. DisconnectNamedPipe 断开一个客户与一个命名管道的连接
    626. DuplicateHandle 在指出一个现有系统对象当前句柄的情况下,为那个对象创建一个新句柄
    627. ExitProcess 中止一个进程
    628. FindCloseChangeNotification 关闭一个改动通知对象
    629. FindExecutable 查找与一个指定文件关联在一起的程序的文件名
    630. FindFirstChangeNotification 创建一个文件通知对象。该对象用于监视文件系统发生的变化
    631. FindNextChangeNotification 重设一个文件改变通知对象,令其继续监视下一次变化
    632. FreeLibrary 释放指定的动态链接库
    633. GetCurrentProcess 获取当前进程的一个伪句柄
    634. GetCurrentProcessId 获取当前进程一个唯一的标识符
    635. GetCurrentThread 获取当前线程的一个伪句柄
    636. GetCurrentThreadId 获取当前线程一个唯一的线程标识符
    637. GetExitCodeProces 获取一个已中断进程的退出代码
    638. GetExitCodeThread 获取一个已中止线程的退出代码
    639. GetHandleInformation 获取与一个系统对象句柄有关的信息
    640. GetMailslotInfo 获取与一个邮路有关的信息
    641. GetModuleFileName 获取一个已装载模板的完整路径名称
    642. GetModuleHandle 获取一个应用程序或动态链接库的模块句柄
    643. GetPriorityClass 获取特定进程的优先级别
    644. GetProcessShutdownParameters 调查系统关闭时一个指定的进程相对于其它进程的关闭早迟情况
    645. GetProcessTimes 获取与一个进程的经过时间有关的信息
    646. GetProcessWorkingSetSize 了解一个应用程序在运行过程中实际向它交付了多大容量的内存
    647. GetSartupInfo 获取一个进程的启动信息
    648. GetThreadPriority 获取特定线程的优先级别
    649. GetTheardTimes 获取与一个线程的经过时间有关的信息
    650. GetWindowThreadProcessId 获取与指定窗口关联在一起的一个进程和线程标识符
    651. LoadLibrary 载入指定的动态链接库,并将它映射到当前进程使用的地址空间
    652. LoadLibraryEx 装载指定的动态链接库,并为当前进程把它映射到地址空间
    653. LoadModule 载入一个Windows应用程序,并在指定的环境中运行
    654. MsgWaitForMultipleObjects 等侯单个对象或一系列对象发出信号。如返回条件已经满足,则立即返回
    655. SetPriorityClass 设置一个进程的优先级别
    656. SetProcessShutdownParameters 在系统关闭期间,为指定进程设置他相对于其它程序的关闭顺序
    657. SetProcessWorkingSetSize 设置操作系统实际划分给进程使用的内存容量
    658. SetThreadPriority 设定线程的优先级别
    659. ShellExecute 查找与指定文件关联在一起的程序的文件名
    660. TerminateProcess 结束一个进程
    661. WinExec 运行指定的程序

    662. 12. API之控件与消息函数

    663. AdjustWindowRect 给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小
    664. AnyPopup 判断屏幕上是否存在任何弹出式窗口
    665. ArrangeIconicWindows 排列一个父窗口的最小化子窗口
    666. AttachThreadInput 连接线程输入函数
    667. BeginDeferWindowPos 启动构建一系列新窗口位置的过程
    668. BringWindowToTop 将指定的窗口带至窗口列表顶部
    669. CascadeWindows 以层叠方式排列窗口
    670. ChildWindowFromPoint 返回父窗口中包含了指定点的第一个子窗口的句柄
    671. ClientToScreen 判断窗口内以客户区坐标表示的一个点的屏幕坐标
    672. CloseWindow 最小化指定的窗口
    673. CopyRect 矩形内容复制
    674. DeferWindowPos 该函数为特定的窗口指定一个新窗口位置
    675. DestroyWindow 清除指定的窗口以及它的所有子窗口
    676. DrawAnimatedRects 描绘一系列动态矩形
    677. EnableWindow 指定的窗口里允许或禁止所有鼠标及键盘输入
    678. EndDeferWindowPos 同时更新DeferWindowPos调用时指定的所有窗口的位置及状态
    679. EnumChildWindows 为指定的父窗口枚举子窗口
    680. EnumThreadWindows 枚举与指定任务相关的窗口
    681. EnumWindows 枚举窗口列表中的所有父窗口
    682. EqualRect 判断两个矩形结构是否相同
    683. FindWindow 寻找窗口列表中第一个符合指定条件的顶级窗口
    684. FindWindowEx 在窗口列表中寻找与指定条件相符的第一个子窗口
    685. FlashWindow 闪烁显示指定窗口
    686. GetActiveWindow 获得活动窗口的句柄
    687. GetCapture 获得一个窗口的句柄,这个窗口位于当前输入线程,且拥有鼠标捕获(鼠标活动由它接收)
    688. GetClassInfo 取得WNDCLASS结构(或WNDCLASSEX结构)的一个副本,结构中包含了与指定类有关的信息
    689. GetClassLong 取得窗口类的一个Long变量条目
    690. GetClassName 为指定的窗口取得类名
    691. GetClassWord 为窗口类取得一个整数变量
    692. GetClientRect 返回指定窗口客户区矩形的大小
    693. GetDesktopWindow 获得代表整个屏幕的一个窗口(桌面窗口)句柄
    694. GetFocus 获得拥有输入焦点的窗口的句柄
    695. GetForegroundWindow 获得前台窗口的句柄
    696. GetLastActivePopup 获得在一个给定父窗口中最近激活过的弹出式窗口的句柄
    697. GetParent 判断指定窗口的父窗口
    698. GetTopWindow 搜索内部窗口列表,寻找隶属于指定窗口的头一个窗口的句柄
    699. GetupdateRect 获得一个矩形,它描叙了指定窗口中需要更新的那一部分
    700. GetWindow 获得一个窗口的句柄,该窗口与某源窗口有特定的关系
    701. GetWindowContextHelpId 取得与窗口关联在一起的帮助场景ID
    702. GetWindowLong 从指定窗口的结构中取得信息
    703. GetWindowPlacement 获得指定窗口的状态及位置信息
    704. GetWindowRect 获得整个窗口的范围矩形,窗口的边框、标题栏、滚动条及菜单等都在这个矩形内
    705. GetWindowText 取得一个窗体的标题(caption)文字,或者一个控件的内容
    706. GetWindowTextLength 调查窗口标题文字或控件内容的长短
    707. GetWindowWord 获得指定窗口结构的信息
    708. InflateRect 增大或减小一个矩形的大小
    709. IntersectRect 这个函数在lpDestRect里载入一个矩形,它是lpSrc1Rect与lpSrc2Rect两个矩形的交集
    710. InvalidateRect 屏蔽一个窗口客户区的全部或部分区域
    711. IsChild 判断一个窗口是否为另一窗口的子或隶属窗口
    712. IsIconic 判断窗口是否已最小化
    713. IsRectEmpty 判断一个矩形是否为空
    714. IsWindow 判断一个窗口句柄是否有效
    715. IsWindowEnabled 判断窗口是否处于活动状态
    716. IsWindowUnicode 判断一个窗口是否为Unicode窗口。这意味着窗口为所有基于文本的消息都接收Unicode文字
    717. IsWindowVisible 判断窗口是否可见
    718. IsZoomed 判断窗口是否最大化
    719. LockWindowupdate 锁定指定窗口,禁止它更新
    720. MapWindowPoints 将一个窗口客户区坐标的点转换到另一窗口的客户区坐标系统
    721. MoveWindow 改变指定窗口的位置和大小
    722. OffsetRect 通过应用一个指定的偏移,从而让矩形移动起来
    723. OpenIcon 恢复一个最小化的程序,并将其激活
    724. PtInRect 判断指定的点是否位于矩形内部
    725. RedrawWindow 重画全部或部分窗口
    726. ReleaseCapture 为当前的应用程序释放鼠标捕获
    727. ScreenToClient 判断屏幕上一个指定点的客户区坐标
    728. ScrollWindow 滚动窗口客户区的全部或一部分
    729. ScrollWindowEx 根据附加的选项,滚动窗口客户区的全部或部分
    730. SetActiveWindow 激活指定的窗口
    731. SetCapture 将鼠标捕获设置到指定的窗口
    732. SetClassLong 为窗口类设置一个Long变量条目
    733. SetClassWord 为窗口类设置一个条目
    734. SetFocusAPI 将输入焦点设到指定的窗口。如有必要,会激活窗口
    735. SetForegroundWindow 将窗口设为系统的前台窗口
    736. SetParent 指定一个窗口的新父
    737. SetRect 设置指定矩形的内容
    738. SetRectEmpty 将矩形设为一个空矩形
    739. SetWindowContextHelpId 为指定的窗口设置帮助场景(上下文)ID
    740. SetWindowLong 在窗口结构中为指定的窗口设置信息
    741. SetWindowPlacement 设置窗口状态和位置信息
    742. SetWindowPos 为窗口指定一个新位置和状态
    743. SetWindowText 设置窗口的标题文字或控件的内容
    744. SetWindowWord 在窗口结构中为指定的窗口设置信息
    745. ShowOwnedPopups 显示或隐藏由指定窗口所有的全部弹出式窗口
    746. ShowWindow 控制窗口的可见性
    747. ShowWindowAsync 与ShowWindow相似
    748. SubtractRect 装载矩形lprcDst,它是在矩形lprcSrc1中减去lprcSrc2得到的结果
    749. TileWindows 以平铺顺序排列窗口
    750. unionRect 装载一个lpDestRect目标矩形,它是lpSrc1Rect和lpSrc2Rect联合起来的结果
    751. updateWindow 强制立即更新窗口
    752. ValidateRect 校验窗口的全部或部分客户区
    753. WindowFromPoint 返回包含了指定点的窗口的句柄。忽略屏蔽、隐藏以及透明窗口


    复制代码

    附件是我收集的API资料!~

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?加入我们

    x
    PYG19周年生日快乐!
  • TA的每日心情
    擦汗
    2019-3-20 20:06
  • 签到天数: 258 天

    [LV.8]以坛为家I

     楼主| 发表于 2006-1-30 20:07:48 | 显示全部楼层
    原帖由 surge 于 2006-1-30 01:06 发表

    接受,下次不管怎样,一定在PYG首发


    呵呵!~~新年好!~~

    不是批评,我是建议,在我们PYG首发,如需要可以开积分贴!~~

    更希望可以看到你更精彩的文章!~
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-1-31 01:06:51 | 显示全部楼层
    强啊,真得是受益菲浅,谢谢了,还有VB函数!
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-2-2 06:57:39 | 显示全部楼层
    VB的,实在是晕
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-5-10 07:01:33 | 显示全部楼层
    强啊,真得是受益菲浅,谢谢了
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2006-5-21 22:38:15 | 显示全部楼层
    好东西。楼主辛苦了啊!
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表