现在的位置: 首页 > 综合 > 正文

由脚本控制界面的流程

2014年02月27日 ⁄ 综合 ⁄ 共 2436字 ⁄ 字号 评论关闭

设想了一套由脚本控制界面的流程,基本上实现了,并且可以调用脚本引擎

 

这程序十分的简单,就是定义了几种控件,带一些私有功能的,比如名字等等,也不用动态分配,直接定义一个数组就行了。

 

一个具有四个提示字符串,4个文本框,两个可执行按钮的代码如下

 

    // TODO: Add extra initialization here

    mine.FreeAll();

    mine.SetMainWnd( ( CWnd * )this );

    mine.Init( 3 );

    mine.SetFont( &g____font12 );

 

    mine.RunScript( _T( "static static_key = /"Key/"" ) );

    mine.RunScript( _T( "edit key = /"/"" ) );

 

    mine.RunScript( _T( "static static_icv = /"ICV/"" ) );

    mine.RunScript( _T( "edit icv = /"/"" ) );

 

    mine.RunScript( _T( "static static_input = /"Input/"" ) );

    mine.RunScript( _T( "edit input = /"/"" ) );

 

 

    mine.RunScript( _T( "static static_output = /"Output/"" ) );

    mine.RunScript( _T( "edit output = /"/"" ) );

 

    mine.RunScript( _T( "button 0 des_encode_ecb = /"des_encode_ecb/"" ) );

    mine.SetEvent( _T( "des_encode_ecb output = des_encode_ecb( $input, $key )" ) );

 

    mine.RunScript( _T( "button 1 des_decode_ecb = /"des_decode_ecb/"" ) );

    mine.SetEvent( _T( "des_decode_ecb output = des_decode_ecb( $input, $key )" ) );

 

 

当点击按钮的时候,在pretranslatemessage中是否点击了按钮,然后执行

 

mine.DoClick( &lite, pwnd );

 

pwnd是点击按钮的指针,lite是一个脚本引擎。

 

执行加解密结果如下

 

//--single des encrypt

//--key = 11 22 00 00 00 00 00 00

//--plain = 33 44 00 00 00 00 00 00   cipher = 8D 26 B5 48 46 8D 69 E7

//

//--single des decrypt

//--key = 11 22 00 00 00 00 00 00

//--cipher = 8D 26 B5 48 46 8D 69 E7   plain = 33 44 00 00 00 00 00 00

//

 

 

新版的脚本引擎中,函数可以任意嵌套,函数执行顺序与常见流程不同,从左至右,有条件被执行的函数都被执行,未能执行的函数下次扫描执行。

 

以下图为例

 

 

 

密钥是
des_decode_ecb( des_encode_ecb( 11223344, 90909090 ), 90909090 )

输入是
des_decode_ecb( 5566778899aabbccddeeffaaaaaabbccdd, 11223344 )

执行的按钮是
des_encode_ecb按钮

实际上执行的脚本是

 

des_encode_ecb( 输入, 密钥 )

也就是

des_encode_ecb( des_decode_ecb( 5566778899aabbccddeeffaaaaaabbccdd, 11223344 ), des_decode_ecb( des_encode_ecb( 11223344, 90909090 ), 90909090 ) )

 

执行流程如下

从前往后,先执行

des_decode_ecb( 5566778899aabbccddeeffaaaaaabbccdd, 11223344 )

 

再执行

des_encode_ecb( 11223344, 90909090 )

 

然后执行第二次扫描,执行 des_decode_ecb( xxxxx, 90909090 )

再后执行第三遍扫描,执行 des_encode_ecb( mmmm, nnnn )

最后的执行结果就是最原始的数据5566..........

 

//----single des decrypt

//----key = 11 22 33 44 00 00 00 00

//----cipher = 55 66 77 88 99 AA BB CC   plain = 42 D7 DA 5D 35 2E 5E A7

//----cipher = DD EE FF AA AA AA AA BB   plain = EA 2C 56 3B B0 9D 0A 48

//----cipher = CC DD 00 00 00 00 00 00   plain = 29 D9 6E E2 5C 81 B3 58

//

//------single des encrypt

//------key = 90 90 90 90 00 00 00 00

//------plain = 11 22 33 44 00 00 00 00   cipher = 44 E0 70 AA FD A9 26 DD

//

//----single des decrypt

//----key = 90 90 90 90 00 00 00 00

//----cipher = 44 E0 70 AA FD A9 26 DD   plain = 11 22 33 44 00 00 00 00

//

//--single des encrypt

//--key = 11 22 33 44 00 00 00 00

//--plain = 42 D7 DA 5D 35 2E 5E A7   cipher = 55 66 77 88 99 AA BB CC

//--plain = EA 2C 56 3B B0 9D 0A 48   cipher = DD EE FF AA AA AA AA BB

//--plain = 29 D9 6E E2 5C 81 B3 58   cipher = CC DD 00 00 00 00 00 00

//

抱歉!评论已关闭.