批处理之家's Archiver

netbenton 发表于 2021-11-22 23:52

CMD控制台最小的鼠标与键盘兼定时三方【持续回贴更新】

mk.exe,只有1,248字节
同时等待接受键盘和鼠标的输入,
win10和win XP 测试过可以使用。
支持全键盘按键,包括,控制键和状态键
支持鼠标左、右、中按键
支持定时、延时,程序节奏控制
增强版:3.5KB,最新请看[url=http://bbs.bathome.net/thread-60771-1-1.html#pid249294][color=Blue][u]11楼[/u][/color][/url]

使用方法,请从测试例子中找。


批处理使用测试例子[code]@echo off&setlocal enabledelayedexpansion

if not exist mk.exe (
(
for /f "tokens=*" %%a in ('type "%~dpf0"') do (
if "%%a" equ "-----BEGIN CERTIFICATE-----" set a=开始
if defined a echo;%%a
)
)>mk.exe
Certutil -Decode -f "mk.exe" "mk.exe" > nul
)

:loop
for /f "tokens=1-5" %%1 in ('mk.exe') do (
rem        echo;%%1        %%2        %%3        %%4        %%5

        IF "%%1" equ "2" (
                set str=鼠标
                if "%%5" equ "1" (set str=移动!str!)
                if "%%5" equ "0" (
                        if "%%4" equ "0" (set str=松开!str!)
                        if "%%4" equ "1" (set str=按下!str!左键)
                        if "%%4" equ "2" (set str=按下!str!右键)
                        if "%%4" equ "4" (set str=按下!str!中键)
                )
                if "%%5" equ "4" if %%4 gtr 0 (set str=向上滚动!str!) else (set str=向下滚动!str!)
                set str=!str!,坐标:%%3行,%%2列

        ) else (
                set str=键盘
                if "%%4" equ "1" (set str=按下!str!) else (set str=松开!str!)
                if "%%2" equ "0" (set str=!str!扫描码是:%%3,状态码是:%%5) else (set str=!str!ASCII码是:%%2,状态码是:%%5)
        )
)

echo;!str!
goto :loop


pause
goto :eof
-----BEGIN CERTIFICATE-----
TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAwAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5v
dCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAABfVwu/GzZl7Bs2ZewbNmXs
lSl27BY2ZeznFnfsGjZl7FJpY2gbNmXsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
UEUAAEwBAgA4dJxhAAAAAAAAAADgAA8BCwEFDLABAAAgAQAAAAAAABACAAAQAgAA
wAMAAAAAQAAQAAAAEAAAAAQAAAAAAAAABAAAAAAAAADgBAAAEAIAAAAAAAADAAAA
AAAQAAAQAAAAABAAABAAAAAAAAAQAAAAAAAAAAAAAADoAwAAPAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAMAACgAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAudGV4dAAAAKoBAAAQAgAAsAEAABACAAAAAAAAAAAAAAAAAAAgAABg
LnJkYXRhAAAcAQAAwAMAACABAADAAwAAAAAAAAAAAAAAAAAAQAAAQAAAAAAAAAAA
6BcAAABQ6G8BAAAlZCAlZCAlZCAlZCAlZA0KAFWL7IHESP///2Bq9uhZAQAAiYVg
////avXoTAEAAImFXP///42FZP///1D/tWD////oLgEAALif////I4Vk////g8gQ
UP+1YP///+gmAQAAjYVo////UGoBjYVs////UP+1YP///+gFAQAAM8Bmi4Vs////
UI+FWP///4P4AXU4ZouFev///1CPhVT///9mi4V2////UI+FUP////+1cP///4+F
TP////+1fP///4+FSP///+tJ6zuD+AJ1NmaLhXD///9Qj4VU////ZouFcv///1CP
hVD/////tXT///+PhUz/////tXz///+PhUj////rDGoC6IIAAADpUf////+1ZP//
//+1YP///+hmAAAA/7VI/////7VM/////7VQ/////7VU/////7VY////aBsCQACN
RYBQ6EwAAACDxBxQW2oAjYVo////UFONRYBQ/7Vc////6CgAAABhycPM/yXAA0AA
/yXEA0AA/yXIA0AA/yXMA0AA/yXQA0AA/yXUA0AA/yXYA0AA/yXgA0AAAAAAAAAA
TAQAAFoEAABsBAAAfAQAAJAEAACiBAAAqgQAAAAAAADEBAAAAAAAACQEAAAAAAAA
AAAAALYEAADAAwAARAQAAAAAAAAAAAAA0AQAAOADAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAEwEAABaBAAAbAQAAHwEAACQBAAAogQAAKoEAAAAAAAAxAQAAAAAAACbAEV4
aXRQcm9jZXNzAPIAR2V0Q29uc29sZU1vZGUAAGoBR2V0U3RkSGFuZGxlAAA0AlJl
YWRDb25zb2xlSW5wdXRBAG4CU2V0Q29uc29sZU1vZGUAALcCU2xlZXAA9wJXcml0
ZUZpbGUAa2VybmVsMzIuZGxsAAB9AndzcHJpbnRmQQB1c2VyMzIuZGxsAAAAAAAA
-----END CERTIFICATE-----

[/code]测试结果如下:[code]鼠标,坐标:16行,54列
鼠标,坐标:16行,54列
鼠标,坐标:16行,54列
移动鼠标,坐标:16行,54列
移动鼠标,坐标:16行,55列
移动鼠标,坐标:16行,55列
鼠标,坐标:16行,55列
移动鼠标,坐标:16行,55列
移动鼠标,坐标:16行,55列
鼠标,坐标:16行,55列
按下键盘扫描码是:17,状态码是:8
松开键盘扫描码是:17,状态码是:0
移动鼠标,坐标:16行,55列
按下键盘ASCII码是:97,状态码是:0
松开键盘扫描码是:16,状态码是:0
按下键盘ASCII码是:102,状态码是:0
松开键盘ASCII码是:102,状态码是:0
按下键盘ASCII码是:100,状态码是:0
松开键盘ASCII码是:100,状态码是:0
按下鼠标左键,坐标:16行,55列
松开鼠标,坐标:16行,55列
鼠标,坐标:16行,55列
松开鼠标,坐标:16行,55列
移动鼠标,坐标:16行,55列[/code]MASM32,源码[code]comment * ?
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Sample code for < Win32ASM Programming 2nd Edition>
; by netBenton,37659560
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 编译链接:
;ml /c /coff mk.asm
;Link /SUBSYSTEM:CONSOLE /ALIGN:16 mk.obj
; 功能:
; mk.asm ---> CMD控制台最小的鼠标与键盘三方。

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
               
   ?*

    .586                       ; create 32 bit code
    .model flat, stdcall       ; 32 bit memory model
    option casemap :none       ; case sensitive

;包含windows 关键字以及数据结构
    include \masm32\include\windows.inc

;包含API库
    include \masm32\include\kernel32.inc
    include \masm32\include\user32.inc
    include \masm32\include\masm32.inc
; 包含宏库
    include \masm32\macros\macro$.asm                ;注意并非使用源版,是函数增加版。所有子过程作为函数使用在过程名后加 “$”
;    include \masm32\macros\macros.asm               


    includelib \masm32\lib\kernel32.lib
    includelib \masm32\lib\user32.lib
    includelib \masm32\lib\masm32.lib

szText MACRO Name, Text:VARARG
    LOCAL lbl
        Name db Text,0dh,0ah,0
ENDM


STATE        STRUCT
        dw        ?
        dw        ?
STATE        ENDS

USBUFF        STRUCT
        dw        64 dup (?)
USBUFF        ENDS



    .code


;程序入口
start:
        call main
        invoke ExitProcess,eax
  
;这里定义数据,
        szText szTx,"%d %d %d %d %d"
;这里写代码
main                proc
                local        @rvstring:USBUFF                ;输入缓存
                local        @inRec:INPUT_RECORD                ;输入缓存结构定义
                local        @state:STATE                ;用来接收api调用返回值
                local        @oldmode:DWORD                ;原控制台模式,以备退出时恢复
                local        @hStdIn:DWORD
                local        @hStdOut:DWORD       
                local        @varar1:DWORD                ;数据一
                local        @varar2:DWORD                ;...
                local        @varar3:DWORD                ;...
                local        @varar4:DWORD                ;...
                local        @varar5:DWORD                ;数据五
                pusha
               
        mov        @hStdIn,fn$(GetStdHandle,STD_INPUT_HANDLE)                        ;获取输入句柄
        mov        @hStdOut,fn$(GetStdHandle,STD_OUTPUT_HANDLE)                ;获取输出句柄
        fn        GetConsoleMode,@hStdIn,addr @oldmode                        ;获取输入模式
        mov        eax,not (ENABLE_QUICK_EDIT_MODE or ENABLE_INSERT_MODE)        ;清除快速编辑、插入模式
        and        eax,@oldmode
        or        eax,ENABLE_MOUSE_INPUT                                        ;增加鼠标支持模式
        fn        SetConsoleMode,@hStdIn,eax                                        ;起用鼠标支持
       
@@:

        fn        ReadConsoleInputA,@hStdIn,addr @inRec,1,addr @state        ;读取输入缓存
        xor        eax,eax
        mov ax,@inRec.EventType                        ;处理字宽数据,清零高位。
        m2m        @varar1,eax
       
        .if (eax == KEY_EVENT )                ;键盘事件
        mov        ax,@inRec.KeyEvent.UnicodeChar                                ;转换后的 ASCII 字符
        m2m        @varar2,eax
       
        mov        ax,@inRec.KeyEvent.wVirtualKeyCode                        ;给定键的 虚拟键代码
        m2m @varar3,eax
        m2m @varar4,@inRec.KeyEvent.bKeyDown                        ;如果按下该键,则此成员为 TRUE。 否则,此成员为 FALSE
        m2m @varar5,@inRec.KeyEvent.dwControlKeyState        ;控制键的状态。
       
        jmp @F
       
        .elseif (eax == MOUSE_EVENT )        ;鼠标事件
        mov        ax,@inRec.MouseEvent.dwMousePosition.x                ;列
        m2m @varar2,eax
        mov        ax,@inRec.MouseEvent.dwMousePosition.y                ;行
        m2m @varar3,eax
        m2m @varar4,@inRec.MouseEvent.dwButtonState                ;按键
        m2m @varar5,@inRec.MouseEvent.dwEventFlags                ;键状态,双击等

        jmp @F
       
        .endif
        fn        Sleep,2                        ;延迟等待事件处理完成
        jmp        @B
@@:

        fn        SetConsoleMode,@hStdIn,@oldmode                                ;恢复原来输入模式
        invoke wsprintfA,addr @rvstring,offset szTx,@varar1,@varar2,@varar3,@varar4,@varar5        ;转换输出格式
       
        m2m ebx,eax                ;用EAX传送参数回出错
        fn        WriteFile,@hStdOut,addr @rvstring,ebx,addr @state,NULL        ;输出结果,写标准句柄,输出到屏幕
        popa
       
        ret

main        endp


end start


[/code]

peterboy666 发表于 2021-11-23 19:35

[i=s] 本帖最后由 peterboy666 于 2021-11-23 20:00 编辑 [/i]

1.
此批处理在 Windows XP X86 中有问题,
因为 Windows XP 没有 certutil.exe

2.
此批处理在 Windows 7 X64 中有问题,
当运行 mk.exe 时报错

---------------------------
mk.exe - 应用程序错误
---------------------------
应用程序无法正确启动 (0xc0000018)。请按一下 [确定] 关闭应用程序。
---------------------------
确定   
---------------------------

3.
将此批处理在 Windows 7 X64 中运行时建立的 mk.exe 复制到 Windows XP X86,
可正常运行.

4.
netbenton> include \masm32\macros\macro$.asm
netbenton> ;注意并非使用源版,是函数增加版。所有子过程作为函数使用在过程名后加 “$”

可有下载点 ?
我用原版 MASM32V10R 无法编译.

5.
F1 扫瞄码应该是 59(0x3B),
为何显示是 112 ?

6.
建议加个 Hex 显示,
例如 59(0x3B)

netbenton 发表于 2021-11-23 21:30

win7 我没有测试,win10 64位,以及winXP 32位测试没有问题。


macro$.asm,只是把全部有返回值的宏都加了“$”,以区分是作为函数使用,还是作为子程序使用。
百度贴吧下载:
[url]链接:[url]https://pan.baidu.com/s/1FKD6eqOxyUWzKC9VXP4knQ[/url]
提取码:Bat8[/url]

netbenton 发表于 2021-11-25 17:15

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=248408&ptid=60771]2#[/url] [i]peterboy666[/i] [/b]:handshake

我特意装了个win7 32位系统,测试了一下,发现可以正常运行!您可能因为 Certutil 反编码时会提示病毒,没有生成正确的mk.exe。

win XP 32位, win7 32位,win10 64位,三个系统都可以通过。

Certutil 反编码时会提示病毒,这个和mk.exe无关系,mk.exe是很纯正的

cmd1152 发表于 2021-11-25 21:58

**** 作者被禁止或删除 内容自动屏蔽 ****

peterboy666 发表于 2021-11-25 23:31

[quote]回复  peterboy666  

我特意装了个win7 32位系统,测试了一下,发现可以正常运行!您可能因为 ...
[size=2][color=#999999]netbenton 发表于 2021-11-25 17:15[/color] [url=http://www.bathome.net/redirect.php?goto=findpost&pid=248468&ptid=60771][img]http://www.bathome.net/images/common/back.gif[/img][/url][/size][/quote]

把手边的 OS 测了一遍

Windows XP X86: OK

Windiws 7 X86 : OK
[color=Red]Windiws 7 X64 : NG[/color]

Windiws 8.1 X86 : OK
[color=Red]Windiws 8.1 X64 : NG[/color]

Windiws 10 X86 : OK
Windiws 10 X64 : OK

Windiws 11 X64 : OK

peterboy666 发表于 2021-11-25 23:47

[quote]回复  peterboy666  

我特意装了个win7 32位系统,测试了一下,发现可以正常运行!您可能因为 ...
[size=2][color=#999999]netbenton 发表于 2021-11-25 17:15[/color] [url=http://www.bathome.net/redirect.php?goto=findpost&pid=248468&ptid=60771][img]http://www.bathome.net/images/common/back.gif[/img][/url][/size][/quote]

< ml /c /coff mk.asm
< Link /SUBSYSTEM:CONSOLE /ALIGN:16 mk.obj

我编译了你的 ASM 也是无法运行,
但[color=Red]取消[/color] /ALIGN:16 就可以运行.

netbenton 发表于 2021-11-26 16:49

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=248477&ptid=60771]7#[/url] [i]peterboy666[/i] [/b]
使用参数 /ALIGN:16,主要是为了去掉为0无效字节,达到最少字节。
使用参数 /MERGE(合并节),编译文件为1536字节。能运行,但是杀软会报毒。
不使用参数为2048字节。应该包括win10以下的32位64位系统都可以正常。

peterboy666 发表于 2021-11-26 19:03

[i=s] 本帖最后由 peterboy666 于 2021-11-26 19:17 编辑 [/i]

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=248503&ptid=60771]8#[/url] [i]netbenton[/i] [/b]


这个我知道.

为了兼容性,
我自编译了.

Windows 7/8.1 X64 无法运行,
我猜 Windows 8 X64 也是无法运行(手边没有,无法测试).

cmd1152 发表于 2021-11-27 12:33

**** 作者被禁止或删除 内容自动屏蔽 ****

netbenton 发表于 2021-12-15 00:15

[i=s] 本帖最后由 netbenton 于 2021-12-15 23:31 编辑 [/i]

mk.exe  增强了!!!!


;所有参数使用小写字母。
;参数错误,显示参数使用格式

;在等待指定的时间内,检查是否有按键,如果有则取出所有按键,并返回。如果没有则到时间后再返回。无按键返回0,有按键时返回码为事件的个数
;希望一直等待时,指定一个比较大的数值。
;mk /w [毫秒]

;等待指定的时间后返回,返回时检测是否有按键,有则取出所有按键返回。无按键返回0,有按键时返回码为事件的个数
;如果指定的时间太长,有点像假死,可以按Ctrl+C强制退出。
;mk /s [毫秒]

;等待到起动以来的时间超过指定时间后返回,返回时检测是否有按键,有则取出所有按键返回。无按键返回0,有按键时返回码为事件的个数
;指定的数值为零时,在%errorlevel%返回起动以来的时间,
;此功能可以很好的控制程序的运行节奏
;mk /G [毫秒]

;【/w,/s,/g】不能同时有效,同时使用时,以第一个为准。
;指定2个以上数字时,以第一个为准。

;起用控制台起用鼠标支持,%errorlevel%返回值为原来的状态,可设置为指定的值<num>
;不使用/m参数也一样有效,这个功能主要是如果有必要的话,用来恢复原来的模式。
;mk /m
;mk /m <num>

;按键过滤,使得鼠标移动不处理,键盘按下才有效,松开不处理。
;mk /c

;回显多行为多个输入事件,需要根据自己需求进行处理。
;mk.exe  只有3.5K
;Encode 再压缩后的,文本只有3K


具体用法,请在测试中找。可以尝试同时按2个,3个,4个键,看看效果如何!!![code]@echo off&setlocal enabledelayedexpansion

rem 解压并转码
if not exist mk.exe (
setlocal enabledelayedexpansion
for /l %%a in (1,1,100) do set /a n+=1&set t=!t!A&set A!n!=!t!
(
for /f "tokens=*" %%a in ('type "%~dpf0"') do (
if "%%a" equ "-----BEGIN CERTIFICATE-----" set a=开始
if defined a echo;%%a
)
)>mk.exe
Certutil -Decode -f "mk.exe" "mk.exe" > nul
endlocal

)

title   mk.exe 测试,按【ESC】退出!
:loop
set key=【无】
for /f "tokens=1-5" %%1 in ('mk.exe /s 50') do (
rem        echo;%%1        %%2        %%3        %%4        %%5
set str=无当前无按键
        IF "%%1" equ "2" (
                set str=鼠标
                if "%%5" equ "1" (set str=移动!str!)
                if "%%5" equ "2" (set str=双击!str!)
                if "%%5" equ "0" (
                        if "%%4" equ "0" (set str=松开!str!)
                        if "%%4" equ "1" (set str=按下!str!左键)
                        if "%%4" equ "2" (set str=按下!str!右键)
                        if "%%4" equ "4" (set str=按下!str!中键)
                )
                if "%%5" equ "4" if %%4 gtr 0 (set str=向上滚动!str!) else (set str=向下滚动!str!)
                set str=!str!,坐标:%%3行,%%2列


        ) else (
                set str=键盘
                if "%%4" equ "1" (set str=按下!str!) else (set str=松开!str!)
                if "%%2" equ "0" (set str=!str!扫描码是:%%3,状态码是:%%5) else (set str=!str!ASCII码是:%%2,状态码是:%%5&set key=%%2-%%5)
        )
       
echo;!str!
)

echo;按键是%key%
if "%key%" neq "27-0" goto :loop

echo;测试结束,按任意键或者等待【5秒】后自动退出。
mk /w 100 >nul

mk /w 5000 >nul

goto :eof
-----BEGIN CERTIFICATE-----
TVqQAAMAAAAEAAAA//8AALg!A9!Q!A31!
!A16!u!A5!4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5v
dCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJ!A10!Z2aFVXbjPBl24zwZduM8G
06fcBk+4zwahmN0GX7jPBlJpY2hduM8G!A21!FBFAABMAQMA
lf+5YQ!A10!4AAPAQsBBQwABgAAACQ!A7!DCEAAAAB!A5!g!A5!EAA
AB!A5!CAAAE!A10!Q!A10!G!A5!E!A9!w!A6!EAAAEAAA
AAAQAAAQ!A8!E!A15!PCAAADw!A25!
!A64!
!A23!gAAA8!A36!
LnRleHQAAAAcBQAAAB!A5!GAAAAB!A19!IAAAYC5yZGF0YQAA
kgEAAAAg!A5!gAAAAo!A18!EAAAEAuZGF0YQAAAOghAAAAMAAA
AAIAAAAM!A18!BAAAD!A33!
!A64!
!A64!
!A64!
!A64!
!A64!
!A64!
!A64!
!A64!
!A64!
!A21!FWL7IPE/GDHRfw!A5!6F8EAACL8PysCsB0IDwgdPdO
/0X8rArAdBM8IHTqPCJ186wKwHQGPCJ19+voYYtF/MnDVYvsg8T4YP9FCMdF/AAA
AACLfQzoGAQAAIvw/KwKwHRYPCB0907/RfzHRfg!A5!i0UIO0X8dQfHRfgBAAAA
rArAdDU8IHTUPCJ0EoN9EAF+CoN9+AF1BKr/TRDr4awKwHQWPCJ02IN9EAF+CoN9
+AF1BKr/TRDr5TLAqmHJwgwA6AYAAABQ6J8DAABVi+yDxPRXU1Zq9uihAwAAo2BR
QABq9eiVAwAAo2RRQACNRfhQ/zVgUUAA6HsDAAC4n////yNF+IPIEFD/NWBRQADo
ggMAAOjn/v//UI9F9P9N9IN99AB1E4M9VzBAAAB0BenyAAAA6d!A5!zwKNXMEAA
aIAAAABoYDBAAP919Ojv/v//aDgwQADouwIAAGg7MEAA6LECAABoPjBAAOinAgAA
aEEwQABoYDBAAOhBAwAAC8B0DlCPBUswQABQjwVXMEAAaEQwQABoYDBAAOggAwAA
C8B0LYM9TzBAAAB1Dv91+I8FWzBAAOlGAQAA/zVPMEAA/zVgUUAA6MoCAADpMAEA
AA+2HWAwQACA+zByHoD7OXcZaGAwQADoUwIAAFCPBU8wQABqAY8FVzBAAIM9VzBA
AAB0BekU////agCNRfxQaidoADBAAP81ZFFAAOiBAgAA6dsAAADoWQIAAFCPBVMw
QAD/NUcwQABYPTgwQAB1Nf81TzBAAFgBBVMwQADouwAAAAvAdAXpiQAAAGoC6DoC
AADoHQIAADsFUzBAAHMC69zrcetvPTswQAB1LP81TzBAAFgBBVMwQADrDGoC6AoC
AADo7QEAADsFUzBAAHLs6GkAAADrPus8PT4wQAB1NTPAOwVPMEAAdQ7oxgEAAFCP
BVswQADrOjsFTzBAAHYH6DkAAADrDmoC6L8BAADoogEAAOvjUFtqAI1F/FBoACAA
AGhgMUAA/zVkUUAA6KEBAAD/NVswQABYXltfycNVi+yDxNBTM8BQj0XQ/zVLMEAA
W41F6FBqAY1F7FD/NWBRQADoVAEAAIN96AB1B/910FhbycONRehQagGNRexQ/zVg
UUAA6DgBAAAzwGaLRexQj0Xkg/gBdS2D+wJ1CIN98AB1AuutZotF+lCPReBmi0X2
UI9F3P918I9F2P91/I9F1OtE6zaD+AJ1MYP7AnUO/3X8W4P7AXUF6XX///9mi0Xw
UI9F4GaLRfJQj0Xc/3X0j0XY/3X8j0XU6wxqAujLAAAA6Uv/////ddT/ddj/ddz/
deD/deRoJzBAAGhoUUAA6MAAAACDxBxoaFFAAGhgMUAA6KIAAABqAY9F0IMFWzBA
AAHpCv///1WL7P91CGhgMEAA6JkAAAALwHQQ/3UIjwVHMEAAUI8FVzBAAMnCBABV
i+xXU/91COhiAAAAUFkzwFBb/3UIX2oKW/fjih+A6zADw0fi8VtfycIEAMz/JQAg
QAD/JQQgQAD/JQggQAD/JQwgQAD/JRAgQAD/JRQgQAD/JRggQAD/JRwgQAD/JSAg
QAD/JSQgQAD/JSggQAD/JSwgQAD/JTQgQADMzMzMzMyLTCQEi1QkCFNWuP////++
AQAAAAPGD7YcCDocEHU2hdt0LQPGD7YcCDocEHUnhdt0HgPGD7YcCDocEHUYhdt0
DwPGD7YcCDocEHUJhdt1xF5bwggAM8BeW8II!A28!
!A64!
!A64!
!A64!
!A64!
!A21!LQgAADCIAAA1CAAAOYgAAD2IAAABiEAABohAAAuIQAA
QCEAAEghAABUIQAAYCE!A7!B6IQ!A7!Hgg!A13!GwhAAAAIAAA
rC!A14!hiEAADQg!A29!LQgAADCIAAA
1CAAAOYgAAD2IAAABiEAABohAAAuIQAAQCEAAEghAABUIQAAYCE!A7!B6IQAA
!A5!JsARXhpdFByb2Nlc3MA5gBHZXRDb21tYW5kTGluZUEA8gBHZXRDb25zb2xl
TW9kZQAAagFHZXRTdGRIYW5kbGUAAI0BR2V0VGlja0NvdW50AAAeAlBlZWtDb25z
b2xlSW5wdXRBADQCUmVhZENvbnNvbGVJbnB1dEEAbgJTZXRDb25zb2xlTW9kZQAA
twJTbGVlcAD3AldyaXRlRmlsZQAPA2xzdHJjYXRBAAAZA2xzdHJsZW5BAABrZXJu
ZWwzMi5kbGwAAH0Cd3NwcmludGZBAHVzZXIzMi5kbGw!A21!
!A64!
!A64!
v8nRobLOyv2julsvdyAvcyAvZ10gWy9jXSBbL21dIFtudW1dAAoAJWQgJWQgJWQg
JWQgJWQNCgAvdwAvcwAvZwAvYwAvbQ!A34!
!A64!
!A64!
!A64!
!A64!
!A64!
!A64!
!A64!
!A64!
!A43!=
-----END CERTIFICATE-----
[/code]

cmd1152 发表于 2021-12-16 20:03

**** 作者被禁止或删除 内容自动屏蔽 ****

cmd1152 发表于 2021-12-16 20:06

**** 作者被禁止或删除 内容自动屏蔽 ****

cmd1152 发表于 2021-12-16 20:13

**** 作者被禁止或删除 内容自动屏蔽 ****

netbenton 发表于 2021-12-16 23:30

[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=249332&ptid=60771]12#[/url] [i]cmd1152[/i] [/b]
谢谢关注。
最后一位是状态码,ESC,只要ASCII码是27就可以确定了。确实有误。

netbenton 发表于 2021-12-16 23:40

[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=249334&ptid=60771]13#[/url] [i]cmd1152[/i] [/b]
在延时的时间要不断检查按键,所以不是单纯的Sleep。
/W 毫秒
/s  毫秒
功能,可以不同需求使用。

/g time
可以很好的控制进程的节奏。
已经有了思路,准备重写俄罗斯方块:提速+只显示一个窗口。


命令行直接输入出现空行的BUG,有空找一下原因在哪。谢谢测试。:handshake

netbenton 发表于 2021-12-17 00:26

14楼发现的Bug已经处理好。[code]@echo off&setlocal enabledelayedexpansion

rem 解压并转码
if not exist mk.exe (
setlocal enabledelayedexpansion
for /l %%a in (1,1,100) do set /a n+=1&set t=!t!A&set A!n!=!t!
(
for /f "tokens=*" %%a in ('type "%~dpf0"') do (
if "%%a" equ "-----BEGIN CERTIFICATE-----" set a=开始
if defined a echo;%%a
)
)>mk.exe
Certutil -Decode -f "mk.exe" "mk.exe" > nul
endlocal

)

title   mk.exe 测试,按【ESC】退出!
:loop
set key=【无】
for /f "tokens=1-5" %%1 in ('mk.exe /s 50') do (
rem        echo;%%1        %%2        %%3        %%4        %%5
set str=无当前无按键
        IF "%%1" equ "2" (
                set str=鼠标
                if "%%5" equ "1" (set str=移动!str!)
                if "%%5" equ "2" (set str=双击!str!)
                if "%%5" equ "0" (
                        if "%%4" equ "0" (set str=松开!str!)
                        if "%%4" equ "1" (set str=按下!str!左键)
                        if "%%4" equ "2" (set str=按下!str!右键)
                        if "%%4" equ "4" (set str=按下!str!中键)
                )
                if "%%5" equ "4" if %%4 gtr 0 (set str=向上滚动!str!) else (set str=向下滚动!str!)
                set str=!str!,坐标:%%3行,%%2列


        ) else (
                set str=键盘
                if "%%4" equ "1" (set str=按下!str!) else (set str=松开!str!)
                if "%%2" equ "0" (set str=!str!扫描码是:%%3,状态码是:%%5) else (set str=!str!ASCII码是:%%2,状态码是:%%5&set key=%%2)
        )
       
echo;!str!
)

echo;按键是%key%
if "%key%" neq "27" goto :loop

echo;测试结束,按任意键或者等待【5秒】后自动退出。
mk /w 100 >nul

mk /w 5000 >nul

goto :eof
-----BEGIN CERTIFICATE-----
TVqQAAMAAAAEAAAA//8AALg!A9!Q!A31!
!A16!u!A5!4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5v
dCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJ!A10!Z2aFVXbjPBl24zwZduM8G
06fcBk+4zwahmN0GX7jPBlJpY2hduM8G!A21!FBFAABMAQMA
fmC7YQ!A10!4AAPAQsBBQwABgAAACQ!A7!DCEAAAAB!A5!g!A5!EAA
AB!A5!CAAAE!A10!Q!A10!G!A5!E!A9!w!A6!EAAAEAAA
AAAQAAAQ!A8!E!A15!PCAAADw!A25!
!A64!
!A23!gAAA8!A36!
LnRleHQAAAAcBQAAAB!A5!GAAAAB!A19!IAAAYC5yZGF0YQAA
kgEAAAAg!A5!gAAAAo!A18!EAAAEAuZGF0YQAAAOghAAAAMAAA
AAIAAAAM!A18!BAAAD!A33!
!A64!
!A64!
!A64!
!A64!
!A64!
!A64!
!A64!
!A64!
!A64!
!A21!FWL7IPE/GDHRfw!A5!6GUEAACL8PysCsB0IDwgdPdO
/0X8rArAdBM8IHTqPCJ186wKwHQGPCJ19+voYYtF/MnDVYvsg8T4YP9FCMdF/AAA
AACLfQzoHgQAAIvw/KwKwHRYPCB0907/RfzHRfg!A5!i0UIO0X8dQfHRfgBAAAA
rArAdDU8IHTUPCJ0EoN9EAF+CoN9+AF1BKr/TRDr4awKwHQWPCJ02IN9EAF+CoN9
+AF1BKr/TRDr5TLAqmHJwgwA6AYAAABQ6KUDAABVi+yDxPRXU1Zq9uinAwAAo2BR
QABq9eibAwAAo2RRQACNRfhQ/zVgUUAA6IEDAAC4n////yNF+IPIEFD/NWBRQADo
iAMAAOjn/v//UI9F9P9N9IN99AB1E4M9VzBAAAB0BenyAAAA6d!A5!zwKNXMEAA
aIAAAABoYDBAAP919Ojv/v//aDgwQADowQIAAGg7MEAA6LcCAABoPjBAAOitAgAA
aEEwQABoYDBAAOhBAwAAC8B0DlCPBUswQABQjwVXMEAAaEQwQABoYDBAAOggAwAA
C8B0LYM9TzBAAAB1Dv91+I8FWzBAAOlMAQAA/zVPMEAA/zVgUUAA6NACAADpNgEA
AA+2HWAwQACA+zByHoD7OXcZaGAwQADoWQIAAFCPBU8wQABqAY8FVzBAAIM9VzBA
AAB0BekU////agCNRfxQaidoADBAAP81ZFFAAOiHAgAA6eEAAADoXwIAAFCPBVMw
QAD/NUcwQABYPTgwQAB1Nf81TzBAAFgBBVMwQADowQAAAAvAdAXpiQAAAOgqAgAA
OwVTMEAAcwlqAegzAgAA69zrcetvPTswQAB1LP81TzBAAFgBBVMwQADo/AEAADsF
UzBAAHMJagHoBQIAAOvq6G8AAADrPus8PT4wQAB1NTPAOwVPMEAAdQ7ozAEAAFCP
BVswQADrQOi+AQAAOwVPMEAAdgfoOgAAAOsJagHowAEAAOvjaGAxQADoxgEAAFBb
agCNRfxQU2hgMUAA/zVkUUAA6KEBAAD/NVswQABYXltfycNVi+yDxNBTM8BQj0XQ
/zVLMEAAW41F6FBqAY1F7FD/NWBRQADoVAEAAIN96AB1B/910FhbycONRehQagGN
RexQ/zVgUUAA6DgBAAAzwGaLRexQj0Xkg/gBdS2D+wJ1CIN98AB1AuutZotF+lCP
ReBmi0X2UI9F3P918I9F2P91/I9F1OtE6zaD+AJ1MYP7AnUO/3X8W4P7AXUF6XX/
//9mi0XwUI9F4GaLRfJQj0Xc/3X0j0XY/3X8j0XU6wxqAujLAAAA6Uv/////ddT/
ddj/ddz/deD/deRoJzBAAGhoUUAA6MAAAACDxBxoaFFAAGhgMUAA6KIAAABqAY9F
0IMFWzBAAAHpCv///1WL7P91CGhgMEAA6JMAAAALwHQQ/3UIjwVHMEAAUI8FVzBA
AMnCBABVi+xXU/91COhiAAAAUFkzwFBb/3UIX2oKW/fjih+A6zADw0fi8VtfycIE
AMz/JQAgQAD/JQQgQAD/JQggQAD/JQwgQAD/JRAgQAD/JRQgQAD/JRggQAD/JRwg
QAD/JSAgQAD/JSQgQAD/JSggQAD/JSwgQAD/JTQgQACLTCQEi1QkCFNWuP////++
AQAAAAPGD7YcCDocEHU2hdt0LQPGD7YcCDocEHUnhdt0HgPGD7YcCDocEHUYhdt0
DwPGD7YcCDocEHUJhdt1xF5bwggAM8BeW8II!A28!
!A64!
!A64!
!A64!
!A64!
!A21!LQgAADCIAAA1CAAAOYgAAD2IAAABiEAABohAAAuIQAA
QCEAAEghAABUIQAAYCE!A7!B6IQ!A7!Hgg!A13!GwhAAAAIAAA
rC!A14!hiEAADQg!A29!LQgAADCIAAA
1CAAAOYgAAD2IAAABiEAABohAAAuIQAAQCEAAEghAABUIQAAYCE!A7!B6IQAA
!A5!JsARXhpdFByb2Nlc3MA5gBHZXRDb21tYW5kTGluZUEA8gBHZXRDb25zb2xl
TW9kZQAAagFHZXRTdGRIYW5kbGUAAI0BR2V0VGlja0NvdW50AAAeAlBlZWtDb25z
b2xlSW5wdXRBADQCUmVhZENvbnNvbGVJbnB1dEEAbgJTZXRDb25zb2xlTW9kZQAA
twJTbGVlcAD3AldyaXRlRmlsZQAPA2xzdHJjYXRBAAAZA2xzdHJsZW5BAABrZXJu
ZWwzMi5kbGwAAH0Cd3NwcmludGZBAHVzZXIzMi5kbGw!A21!
!A64!
!A64!
v8nRobLOyv2julsvdyAvcyAvZ10gWy9jXSBbL21dIFtudW1dAAoAJWQgJWQgJWQg
JWQgJWQNCgAvdwAvcwAvZwAvYwAvbQ!A34!
!A64!
!A64!
!A64!
!A64!
!A64!
!A64!
!A64!
!A64!
!A43!=
-----END CERTIFICATE-----
[/code]

netbenton 发表于 2021-12-17 00:45

mk /g %time%
发一个节奏控制,演示![code]@echo off&setlocal enabledelayedexpansion

title 俄罗斯方块按键测试,按【Esc】键可退出。
for %%a in (1037 1039 1040 13232 11313 12727) do set /a n+=1,k%%a=n
rem 按键   【左      右     下     空格    回车    Esc】

set t=%time%
set /a a=%t:~0,2%,b=1%t:~3,2%-100,c=1%t:~6,2%-100,odt=a*3600+b*60+c
rem 计算时间

mk.exe /g
set tt=%errorlevel%

:loop
set /a tt+=25
rem 1000 / 25 = 40 ,控制节奏为:40次/秒

mk.exe /g /c %tt% >tt.txt
for /f "tokens=1-5" %%1 in (tt.txt) do (
        echo;%%1 %%2 %%3 %%4 %%5
        set /a key=k%%1%%2%%3
)

set t=%time%
set /a a=%t:~0,2%,b=1%t:~3,2%-100,c=1%t:~6,2%-100,dt=a*3600+b*60+c-odt
set /a n+=1,zhen=n/dt
rem 计算时间,算出每秒循环次数。

echo;!key!                起动以来流逝时间:%tt%        %zhen%次循环/秒
rem for /l %%a in (1,1,100) do ver >nul
if !key! neq 6 goto :loop

echo;测试结束,5 秒后自动关闭。。。
mk.exe /s /c 5000
goto :eof
[/code]

netbenton 发表于 2021-12-30 23:13

;所有参数使用小写字母。
;参数错误,显示参数使用格式

;在等待指定的时间内,检查是否有按键,如果有则取出所有按键,并返回。如果没有则到时间后再返回。无按键返回0,有按键时返回码为事件的【数量】
;希望一直等待时,指定一个比较大的数值。
;mk /w [毫秒]

;等待指定的时间后返回,返回时检测是否有按键,有则取出所有按键返回。无按键返回0,有按键时返回码为返回事件的【数量】
;如果指定的时间太长,有点像假死,可以按Ctrl+C强制退出。
;mk /s [毫秒]

;等待到起动以来的时间超过指定时间后返回,返回时检测是否有按键,有则取出所有按键返回。无按键返回0,有按键时返回码为事件的【数量】
;指定的数值为零时,在%errorlevel%返回起动以来的时间,
;此功能可以很好的控制程序的运行节奏
;mk /G [毫秒]

;【/w,/s,/g】不能同时有效,同时使用时,以第一个为准。
;指定2个以上数字时,以第一个为准。

;起用控制台起用鼠标支持,%errorlevel%返回值为原来的状态,可设置为指定的值<num>
;不使用 /m 参数也一样有效,这个功能主要是如果有必要的话,用来恢复原来的模式。
;mk /m
;mk /m <num>

;按键过滤,使得鼠标移动不处理,键盘按下才有效,松开不处理。
;mk /c

;显示文本,支持ansi转义功能。(正在编写)
;mk /e "显示的文本"

;指定返回数据存放的文件名。如果不指定,默认为:“mk.ini” (因为要增加显示功能,将不在使用直接回显再管道接收的方式,正在编写)
;mk /f "文件名"

;回显多行为多个输入事件,需要根据自己需求进行处理。
;mk.exe  只有3.5K
;Encode 再压缩后的,文本只有3K[code]@echo off&setlocal enabledelayedexpansion

rem 解压并转码
if not exist mk.exe (
setlocal enabledelayedexpansion
for /l %%a in (1,1,100) do set /a n+=1&set t=!t!A&set A!n!=!t!
(
for /f "tokens=*" %%a in ('type "%~dpf0"') do (
if "%%a" equ "-----BEGIN CERTIFICATE-----" set a=开始
if defined a echo;%%a
)
)>mk.exe
Certutil -Decode -f "mk.exe" "mk.exe" > nul
endlocal

)

title   mk.exe 测试,按【ESC】退出!
:loop

for /f "tokens=1-5" %%1 in ('mk.exe /s 50') do (
rem        echo;%%1        %%2        %%3        %%4        %%5
set str=无当前无操作
set key=【无】
        IF "%%1" equ "2" (
                set str=鼠标
                if "%%5" equ "1" (set str=移动!str!)
                if "%%5" equ "2" (set str=双击!str!)
                if "%%5" equ "0" (
                        if "%%4" equ "0" (set str=松开!str!)
                        if "%%4" equ "1" (set str=按下!str!左键)
                        if "%%4" equ "2" (set str=按下!str!右键)
                        if "%%4" equ "4" (set str=按下!str!中键)
                )
                if "%%5" equ "4" if %%4 gtr 0 (set str=向上滚动!str!) else (set str=向下滚动!str!)
                set str=!str!,坐标:%%3行,%%2列


        ) else IF "%%1" equ "1" (
                set str=键盘
                if "%%4" equ "1" (set str=按下!str!) else (set str=松开!str!)
                if "%%2" equ "0" (set str=!str!扫描码是:%%3,状态码是:%%5) else (set str=!str!ASCII码是:%%2,状态码是:%%5&set key=%%2 - %%3)
        ) else IF "%%1" equ "4" (
                set str=改变了窗口大小为:行:%%3,列:%%2。
        )
       
echo;!str!,按键 !key!
)
set /a n+=1
title mk.exe 测试,循环 !n! 次, %time%,按Esc键退出。
if "%key%" neq "27" goto :loop

echo;测试结束,按任意键或者等待【5秒】后自动退出。
mk /w 100 >nul

mk /w 5000 >nul

goto :eof
-----BEGIN CERTIFICATE-----
TVqQAAMAAAAEAAAA//8AALg!A9!Q!A31!
!A16!u!A5!4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5v
dCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJ!A10!Z2aFVXbjPBl24zwZduM8G
06fcBk+4zwahmN0GX7jPBlJpY2hduM8G!A21!FBFAABMAQMA
EAvAYQ!A10!4AAPAQsBBQwABgAAACQ!A7!DCEAAAAB!A5!g!A5!EAA
AB!A5!CAAAE!A10!Q!A10!G!A5!E!A9!w!A6!EAAAEAAA
AAAQAAAQ!A8!E!A15!PCAAADw!A25!
!A64!
!A23!gAAA8!A36!
LnRleHQAAABMBQAAAB!A5!GAAAAB!A19!IAAAYC5yZGF0YQAA
kgEAAAAg!A5!gAAAAo!A18!EAAAEAuZGF0YQAAAOghAAAAMAAA
AAIAAAAM!A18!BAAAD!A33!
!A64!
!A64!
!A64!
!A64!
!A64!
!A64!
!A64!
!A64!
!A64!
!A21!FWL7IPE/GDHRfw!A5!6I8EAACL8PysCsB0IDwgdPdO
/0X8rArAdBM8IHTqPCJ186wKwHQGPCJ19+voYYtF/MnDVYvsg8T4YP9FCMdF/AAA
AACLfQzoSAQAAIvw/KwKwHRYPCB0907/RfzHRfg!A5!i0UIO0X8dQfHRfgBAAAA
rArAdDU8IHTUPCJ0EoN9EAF+CoN9+AF1BKr/TRDr4awKwHQWPCJ02IN9EAF+CoN9
+AF1BKr/TRDr5TLAqmHJwgwA6AYAAABQ6M8DAABVi+yDxPRXU1Zq9ujRAwAAo2BR
QABq9ejFAwAAo2RRQACNRfhQ/zVgUUAA6KsDAAC4n////yNF+IPIEFD/NWBRQADo
sgMAAOjn/v//UI9F9P9N9IN99AB1E4M9VzBAAAB0BenyAAAA6d!A5!zwKNXMEAA
aIAAAABoYDBAAP919Ojv/v//aDgwQADo7AIAAGg7MEAA6OICAABoPjBAAOjYAgAA
aEEwQABoYDBAAOhxAwAAC8B0DlCPBUswQABQjwVXMEAAaEQwQABoYDBAAOhQAwAA
C8B0LYM9TzBAAAB1Dv91+I8FWzBAAOlMAQAA/zVPMEAA/zVgUUAA6PoCAADpNgEA
AA+2HWAwQACA+zByHoD7OXcZaGAwQADohAIAAFCPBU8wQABqAY8FVzBAAIM9VzBA
AAB0BekU////agCNRfxQaidoADBAAP81ZFFAAOixAgAA6eEAAADoiQIAAFCPBVMw
QAD/NUcwQABYPTgwQAB1Nf81TzBAAFgBBVMwQADowQAAAAvAdAXpiQAAAOhUAgAA
OwVTMEAAcwlqAehdAgAA69zrcetvPTswQAB1LP81TzBAAFgBBVMwQADoJgIAADsF
UzBAAHMJagHoLwIAAOvq6G8AAADrPus8PT4wQAB1NTPAOwVPMEAAdQ7o9gEAAFCP
BVswQADrQOjoAQAAOwVPMEAAdgfoOgAAAOsJagHo6gEAAOvjaGAxQADo8AEAAFBb
agCNRfxQU2hgMUAA/zVkUUAA6MsBAAD/NVswQABYXltfycNVi+yDxNBTM8BQj0XQ
/zVLMEAAW41F6FBqAY1F7FD/NWBRQADofgEAAIN96AB1B/910FhbycMzwGaLRexQ
j0Xkg/gBdS2D+wJ1CIN98AB1AutzZotF+lCPReBmi0X2UI9F3P918I9F2P91/I9F
1Otv60yD+AJ1MIP7AnUL/3X8W4P7AXUC6z5mi0XwUI9F4GaLRfJQj0Xc/3X0j0XY
/3X8j0XU6zrrF4P4BHUSZotF8FCPReBmi0XyUI9F3OshagXo9AAAAI1F6FBqAY1F
7FD/NWBRQADo0wAAAOk1////jUXoUGoBjUXsUP81YFFAAOi5AAAA/3XU/3XY/3Xc
/3Xg/3XkaCcwQABoaFFAAOi/AAAAg8QcaGhRQABoYDFAAOihAAAAagGPRdCDBVsw
QAAB6d/+//9Vi+z/dQhoYDBAAOiYAAAAC8B0EP91CI8FRzBAAFCPBVcwQADJwgQA
VYvsV1P/dQjoYQAAAFBZM8BQW/91CF9qClv344ofgOswA8NH4vFbX8nCBAD/JQAg
QAD/JQQgQAD/JQggQAD/JQwgQAD/JRAgQAD/JRQgQAD/JRggQAD/JRwgQAD/JSAg
QAD/JSQgQAD/JSggQAD/JSwgQAD/JTQgQADMzMzMzMyLTCQEi1QkCFNWuP////++
AQAAAAPGD7YcCDocEHU2hdt0LQPGD7YcCDocEHUnhdt0HgPGD7YcCDocEHUYhdt0
DwPGD7YcCDocEHUJhdt1xF5bwggAM8BeW8II!A28!
!A64!
!A64!
!A64!
!A21!LQgAADCIAAA1CAAAOYgAAD2IAAABiEAABohAAAuIQAA
QCEAAEghAABUIQAAYCE!A7!B6IQ!A7!Hgg!A13!GwhAAAAIAAA
rC!A14!hiEAADQg!A29!LQgAADCIAAA
1CAAAOYgAAD2IAAABiEAABohAAAuIQAAQCEAAEghAABUIQAAYCE!A7!B6IQAA
!A5!JsARXhpdFByb2Nlc3MA5gBHZXRDb21tYW5kTGluZUEA8gBHZXRDb25zb2xl
TW9kZQAAagFHZXRTdGRIYW5kbGUAAI0BR2V0VGlja0NvdW50AAAeAlBlZWtDb25z
b2xlSW5wdXRBADQCUmVhZENvbnNvbGVJbnB1dEEAbgJTZXRDb25zb2xlTW9kZQAA
twJTbGVlcAD3AldyaXRlRmlsZQAPA2xzdHJjYXRBAAAZA2xzdHJsZW5BAABrZXJu
ZWwzMi5kbGwAAH0Cd3NwcmludGZBAHVzZXIzMi5kbGw!A21!
!A64!
!A64!
v8nRobLOyv2julsvdyAvcyAvZ10gWy9jXSBbL21dIFtudW1dAAoAJWQgJWQgJWQg
JWQgJWQNCgAvdwAvcwAvZwAvYwAvbQ!A34!
!A64!
!A64!
!A64!
!A64!
!A64!
!A64!
!A64!
!A64!
!A43!=
-----END CERTIFICATE-----
[/code]

ivanbj 发表于 2022-11-11 14:18

怎么找不到下载的地方呢?

hnfeng 发表于 2023-11-17 08:39

强大,只是我不知道怎么用在菜单选择上

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.