[原创]实时监控输入框的输入变化,并限制输入只能是数字+字母,获取并设置光标位置
2023-8-13 615

a.gif

此处内容隐藏,回复后可见!立即回复  回复后请刷新页面!刷新

最后于 2023-8-23 被527104427编辑 ,原因:
收藏
点赞
道具卡
分享
https://www.123pan.com/s/NflRVv-Cm5Sh
最新回复 (14)
  • avatar image
    keketoco00 2023-8-13

    非常感谢 

    Keketoco00
  • avatar image
    absman1972 2023-8-20

    謝謝分享

  • avatar image
    anson4 2023-8-23

    这个很实用,感谢分享!

    单机计算
  • avatar image
    anson4 2023-8-23

    认真学习了一下,发现存在一个问题:如果在已输入字串的中间某位置输入非法字符,光标的位置就不对了。

    单机计算
  • avatar image
    anson4 2023-8-23

    还有一个问题,如果需要监控的控件是 LIST,那该如何实现?

    最后于 2023-8-23 被anson4编辑 ,原因:
    单机计算
  • avatar image
    爱心会员VIP会员
    527104427 2023-8-23
    楼主   7
    anson4 还有一个问题,如果需要监控的控件是 LIST,那该如何实现?

    list监控不了。edit已修正。

    https://www.123pan.com/s/NflRVv-Cm5Sh
  • avatar image
    anson4 2023-8-24

    感谢更新!

    单机计算
  • avatar image
    pda8888 2023-8-24

    学习膜拜。

    学习至上
  • avatar image
    pda8888 2023-8-24

    以下是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子过程负责处理输入文本的限制和光标位置设置。

    学习至上
  • avatar image
    爱心会员VIP会员
    527104427 2023-8-25
    楼主   11
    pda8888 以下是chatgpt3.5的解读,牛B啊,它连这PECMD也知道,而且经过训练了的。 这段代码是一个使用PECmd(PE命令行工具)编写的脚本,用于在Windows PE环境中创建一个简单的用户 ...

    这么强大!

    https://www.123pan.com/s/NflRVv-Cm5Sh
  • avatar image
    pda8888 2023-8-25

    但是我问它会不会写PECMD的代码,它无情的拒绝了。

    学习至上
  • avatar image
    luobo 2023-8-25

    看一看

    QQ928274096 萝卜PE作者。
  • avatar image
    jonyzhr 2023-10-20

    顶,内容精彩

    WINST
  • avatar image
    blue003 20天前

    赞一个,谢谢分享

    pecmd不错的编程
返回