此处内容隐藏,回复后可见!立即回复 回复后请刷新页面!刷新
非常感谢
这个很实用,感谢分享!
认真学习了一下,发现存在一个问题:如果在已输入字串的中间某位置输入非法字符,光标的位置就不对了。
还有一个问题,如果需要监控的控件是 LIST,那该如何实现?
anson4 还有一个问题,如果需要监控的控件是 LIST,那该如何实现?
list监控不了。edit已修正。
感谢更新!
学习膜拜。
以下是chatgpt3.5的解读,牛B啊,它连这PECMD也知道,而且经过训练了的。
这段代码是一个使用PECmd(PE命令行工具)编写的脚本,用于在Windows PE环境中创建一个简单的用户界面,其中包含两个文本编辑框(edit1和edit2)。以下是代码段的逐行解释:
set^ EnviMode=1: 设置环境模式变量EnviMode为1。
set^ ForceLocal=1: 设置强制本地变量ForceLocal为1。
set en_change=0x0300: 设置en_change变量为0x0300。
set em_setsel=0x00B1: 设置em_setsel变量为0x00B1,用于设置编辑框中文本的选择范围。
set em_getsel=0x00B0: 设置em_getsel变量为0x00B0,用于获取编辑框中当前文本的选择范围。
set stop=0: 初始化stop变量为0,用于控制代码中的条件执行。
call @win1: 调用名为win1的子过程。
子过程 win1:
8. _sub win1,w354 h309,: 定义名为win1的子过程,指定窗口的位置和大小。
edit edit1,l10 t10 w275 h70,,: 在窗口中创建一个名为edit1的编辑框,位置为左上角坐标(10,10),宽度275,高度70。
edit edit2,l10 t82 w275 h70,,: 在窗口中创建一个名为edit2的编辑框,位置为左上角坐标(10,82),宽度275,高度70。
set @edit1.id=?;id1: 将edit1的ID赋值给变量id1。
set @this.msg=_command#%id1%#%en_change%::wp,lp, call win2: 监听edit1的输入变化消息,当输入发生变化时,调用win2子过程。
子过程 win2:
13. _sub win2: 定义名为win2的子过程。
ifex $%stop%=0,: 如果stop变量为0,则执行以下代码块。
{: 进入条件执行的代码块。
set stop=1: 将stop变量设置为1,阻止重复执行。
sed -ex -ni str=0,[^0-9a-z],,edit1: 使用正则表达式替换edit1中的非字母和数字字符为空,限制输入只能是字母和数字。
find *str<>edit1,: 查找是否有被替换为空的情况发生。
{: 进入条件执行的代码块,如果有被替换为空的情况发生。
call GetPos edit1 PosStart PosEnd: 调用GetPos子过程获取edit1中文本的光标位置。
ifex $%PosStart%>0, calc PosStart=%PosStart% - 1: 如果光标起始位置大于0,将起始位置减1(为了在设置光标位置时不会将光标放在字符的末尾)。
ifex $%PosEnd%>0, calc PosEnd=%PosEnd% - 1: 如果光标结束位置大于0,将结束位置减1。
set @edit1=%str%: 将edit1的内容设置为经过替换后的内容。
set @edit1.postmsg=%em_setsel%,%PosStart%,%PosEnd%: 设置edit1的光标位置为之前获取的位置。
find *edit2<>edit1, set @edit2=%edit1%: 如果edit2的内容与edit1不同,将edit2的内容设置为和edit1相同。
set stop=0: 将stop变量设置为0,允许下次输入变化时重新执行代码。
子过程 GetPos:
27. _sub GetPos: 定义名为GetPos的子过程,用于获取编辑框中文本的光标位置。
set$# I1=*8 0: 初始化变量I1为64位整数类型,并赋值为0。
set$# I2=*8 0: 初始化变量I2为64位整数类型,并赋值为0。
set @%1.sendmsg=%em_getsel%,@I1,@I2: 向指定编辑框发送获取光标位置的消息,结果保存在变量I1和I2中。
set?long I1=I3: 将变量I3的值赋给变量I1。
set?long I2=I4: 将变量I4的值赋给变量I2。
set-ret %2=%I3%: 将变量I3的值赋给子过程的第二个参数(光标起始位置)。
set-ret %3=%I4%: 将变量I4的值赋给子过程的第三个参数(光标结束位置)。
这段代码的主要功能是在Windows PE环境中创建一个界面,其中有两个文本编辑框。在编辑框1(edit1)中输入文本时,通过正则表达式限制只能输入字母和数字,同时会实时检测输入的变化,当输入发生变化时,会调用win2子过程。win2子过程负责处理输入文本的限制和光标位置设置。
pda8888 以下是chatgpt3.5的解读,牛B啊,它连这PECMD也知道,而且经过训练了的。 这段代码是一个使用PECmd(PE命令行工具)编写的脚本,用于在Windows PE环境中创建一个简单的用户 ...
这么强大!
但是我问它会不会写PECMD的代码,它无情的拒绝了。
看一看
顶,内容精彩
赞一个,谢谢分享
好!学学,还挺有用!!!感谢!!!
顶
Awesome thank you.
感谢分享